@(NLP)[数据增强, 噪声]
数据增强(Data Augmentation,简称DA),是指根据现有数据,合成新数据的一类方法。毕竟数据才是真正的效果天花板,有了更多数据后可以提升效果、增强模型泛化能力、提高鲁棒性等。数据增强主要在CV应用中比较常见,然而由于NLP任务天生的难度,类似CV的裁剪方法可能会改变语义,既要保证数据质量又要保证多样性,所以大家在做数据增强时要十分谨慎。
问题:
Paraphrasing:对句子中的词、短语、句子结构做一些更改,保留原始的语义 Noising:在保证label不变的同时,增加一些离散或连续的噪声,对语义的影响不大 Sampling:旨在根据目前的数据分布选取新的样本,会生成更多样的数据
Data Augmentation Approaches in Natural LanguageProcessing: A Survey3
小结: 在尽可能保留句子整体语义的情况下,增加文本丰富度,包括让每个词拥有更加丰富的上下文context,让相似的语义表达有更多样的语法构成,词汇构成等等
小结: 增加模型稳健性,在不过多影响training error的前提下,降低模型的复杂度从而降低generalization error, 类比dropout,l2,random noise injection
Sampling是指从数据分布中采样出新的样本,不同于较通用的paraphrasing,采样更依赖任务,需要在保证数据可靠性的同时增加更多多样性,比前两个数据增强方法更难。作者整理了4种方法:
Method Stacking 实际应用时可以应用多种方法、或者一种方法的不同粒度。
作者推荐了两款工具eda4和uda5, eda_chinese6, nlpaug7
第一,在使用增强的数据时,如果数据质量不高,可以先让模型在增强后的数据上pre-train,之后再用有标注数据训练。如果要一起训练,在增强数据量过大的情况下,可以对原始训练数据过采样
第二,在进行数据增强时注意这些超参数的调整: 第三,其实增强很多简单数据的提升有限,可以注重困难样本的生成。比如有研究加入对抗训练、强化学习、在loss上下文章等。如果用生成方法做数据增强,也可以在生成模型上做功夫,提升数据多样性。
第四,如果生成错数据可能引入更多噪声,可以增加其他模型对准确性进行过滤。
1、Mixup: Mixup-Transformer: Dynamic Data Augmentation for NLP Tasks
在数据不足的情况下,只用40%的数据就可以比不应用增强方案的全量数据好。应用Mixup增强方法可以提升2.46%
2、On Data Augmentation for Extreme Multi-label Classification
这些在线blog或者paper128中提到了很多增强方法,主要有如下特点
EDA主要采用表一中的同义词替换,随机插入,随机交换,随机删除,从可视化结果中来看,增强样本与原始样本分布基本是一致的。 作者给出了在实际使用EDA方法的建议,表格的左边是数据的规模$N_{train}$, 右边$\alpha$是概率、比率 比如同义词替换中,替换的单词数$n=\alpha * l$ , $l$是句子长度。随机插入、随机替换类似. $p=\alpha * n_{aug}$ 代表使用EDA方法从每一个句子拓展出的句子数量。
sentence = "My favorite fruit is pear ."
lambd = 0.1 # interpolation hyperparameter
mlm.train() # enable dropout, dynamically mask
tensor_input = tokenizer(sentence, return_tensors="pt")
onehot_repr = convert_to_onehot(**tensor_input)
smoothed_repr = softmax(mlm(**tensor_input).logits[0])
interpolated_repr = lambd * onehot_repr + (1 - lambd) * smoothed_repr
-code: https://github.com/1024er/cbert_aug
少数据的场景,可能使用PLM不是最优的方案 我们期望构造的数据$\mathcal{T}_{LM}$与已有的数据集$\mathcal{T}$不同,能够从中学习到一些新的信息。 冻结PLMs参数可能有助于在训练过程中进行泛化。然而,寻找合适的离散任务引入并不容易以端到端方式进行优化,而且需要额外的人力。
传统自监督对比学习损失函数定义如下左侧公式,但是没有利用标注信息。将标注信息考虑进去,
到目前为止发展起来的监督对比学习似乎是对分类问题的无监督对比学习的一种简单朴素的适配。
DA-ERM(data augmentation empirical risk minimization): DAC可以使用未标记的样本,因为可以在不知道真实标签的情况下增加训练样本并执行一致的预测。这绕过了传统算法只能增加标记样本并将其添加到训练集的限制
少量数据+data augmentation 少量数据+unlabel data
我们可以看到对标注样本$\phi(x_i)$和增强产生的样本$\phi(x_{i,j})$之间的差异作为惩罚项。
我们从经验和理论上论证了DAC与DA-ERM(用增强样本扩展训练集)相比的优点。理论上,线性回归和逻辑回归的泛化误差更小,两层神经网络的泛化上界更紧。另一个好处是,DAC可以更好地处理由强扩充数据引起的模型错误规范。在经验上,我们提供了关于增广ERM和一致性正则化的比较。这些共同证明了一致性规则化优于DA-ERM的有效性
这个是基于文法分析树的方式进行数据增强的
该任务中需要生成句子和token级别的标签。且序列标注为细粒度的文本任务。 现有的生成模型智能生成没有标签的序列; 启发式的数据增强方法不可行,直接对标签替换或者上下文替换,被注入错误的可能性比较大,相比较分类任务更容易破坏序列上下文关系。
由上图可以看出:
DAGA的思想简单来讲就是标签线性化:即将原始的**「序列标注标签」与「句子token」进行混合,也就是变成「Tag-Word」**的形式,如下图:将「B-PER」放置在「Jose」之前,将「E-PER」放置在「Valentin」之前;对于标签「O」则不与句子混合。标签线性化后就可以生成一个句子了,文章基于此句子就可以进行「语言模型生成」了。
An example of hard and smoothed boundaries. The example sentence has ten tokens and two entities of spans (1, 2) and (3, 7), colored in red and blue, respectively. The first subfigure presents the entity recognition targets of hard boundaries. The second subfigure presents the corresponding targets of smoothed boundaries, where the span (1, 2) is smoothed by a size of 1, and the span (3, 7) is smoothed by a size of 2. 其中周边区域有$\epsilon$的概率会被赋值,此时原标注位置值为$1 - \epsilon$,周边区域$D$赋值$\epsilon / D$,
对NER标签位置的平滑处理,提升模型的泛化性。边界平滑可以防止模型对预测实体过于自信,从而获得更好的定标效果。D一般不用太大,1或者2即可, $\epsilon$一般取[0.1, 0.2, 0.3]
Steven Y. Feng, Varun Gangal, Jason Wei, Sarath Chandar, Soroush Vosoughi, Teruko Mitamura, & Eduard Hovy (2021). A Survey of Data Augmentation Approaches for NLP Meeting of the Association for Computational Linguistics. ↩ ↩2
Markus Bayer, Marc-André Kaufhold, & Christian Reuter (2021). A Survey on Data Augmentation for Text Classification.. arXiv: Computation and Language. ↩ ↩2
Li, B. , Hou, Y. , & Che, W. . (2021). Data augmentation approaches in natural language processing: a survey. ↩
https://github.com/jasonwei20/eda_nlp ↩
https://github.com/google-research/uda ↩
https://github.com/zhanlaoban/eda_nlp_for_Chinese ↩
https://github.com/makcedward/nlpaug ↩
Amit Chaudhary(2020). A Visual Survey of Data Augmentation in NLP. https://amitness.com/2020/05/data-augmentation-for-nlp ↩