提纲
1 简介 2 数据来源 3 应用技巧 4 应用场景 5 总结 参考文献
1 简介
在前面的章节已经介绍了多种数据增强的方法,方法虽然是好方法,但也需要用在合适的位置上。例如在一个简单任务场景下,标注数据已经很充裕了,就没必要再去人工合成新数据了,或者在大规模模型预训练阶段,与其花费大量时间跟精力去合成新数据,还不如去多搜集些网上的数据。
为了更清楚地了解数据增强的价值 ,接下来就介绍数据增强方法应用的相关内容。
2 数据来源
数据增强不是一个无中生有的过程,无法凭空生成新数据,它是一个从一到多的过程,星星之火,可以燎原。
a) 通过对原始标注数据进行一定的操作来获得新数据,例如随机增加,删除或者交换等操作,或者按照同义词等规则来获得新数据等等,
b) 通过半监督方法来为无标注数据打上新标签,
c) 借助于语言模型在给定特定特征条件去生成新数据,看似无中生有,但是特定场景下的语言模型的训练也需要一定的数据支撑。
3 应用技巧
当通过数据增强方式完成数据扩充后,就需要将扩充的数据加入到模型训练中,
a) 最简单的方式就是 **将通过数据增强方式获得的扩充数据跟原始标签数据混合到一起,一视同仁,去训练新的模型。** 但是简单的混合这种方式并不适用于所有场景,例如扩充数据如果量级远超原始标注数据时,就需要在构建训练数据时通过一定的采样原则来平衡扩充数据跟原始数据之间的比例,避免原始标注数据的重要性被淡化。
b) 也可以采用 **分阶段的训练方式,第一阶段利用大量的扩充数据来训练模型,第二阶段再通过少量的原始标注数据来进一步优化模型。** 这跟大规模语言模型的
pretrain 跟 finetune 训练方式不是如出一辙嘛。
另外,还需要关注合成数据的质量,根据合成数据的质量可以考虑对应的策略。
a) 扩充数据质量较高时,当然可以直接用于模型训练
b)
扩充数据质量较低时,如果直接用于模型训练,会给模型引入过多的噪声,从而影响模型的性能 ,这种时候需要进行对扩充数据进行一定过滤,保留高质量的数据用于模型训练,或者再后续阶段利用高质量数据再进一步微调模型。
最后,可以看到目前存在种类繁多的数据增强方法,它们之间各有利弊,但
不同数据类型方法之间并不冲突,彼此之间的联合可以提升数据的多样性以及模型的鲁棒性。
4 应用场景
Low resource language
**低资源语种是数据增强一个重要且具有挑战性的任务** ,目前世界上存在着几千种语言,绝大多数语言的使用人数都很少,相关的数据更是难以搜集。对于这些小语种相关的任务,如果能通过数据增强的方式扩充相应的数据集,那可以使用到更佳强大的模型,获得更显著的性能提升。例如通过建立起同质的高资源语种之间的联系,充分利用到高资源语种的资源等方式。
Mitigating bias
**数据集的偏差会让模型学习到不合理的地方,而通过数据增强可以在一定程度上消除这种偏差,让模型步入正轨。** 例如某数据集中性别会跟某些中性词频繁出现,例如he经常跟math一起出现,而she经常跟art一起出现,那么模型就容易建立起he跟math的联系,she跟art的联系,但是math跟art其实都是中性词,跟性别没有太大联系,这是由于数据集的偏差导致的,换一个数据可能就不是这种情况。而这种偏差,我们并不希望模型学到。这种时候就可以通过数据增强的方式,例如调换he跟she的位置,来消除这种偏差。
Fixing class imbalance
**类别不均衡有可能会影响模型的性能,导致模型更多的倚重大类的预测情况,忽视了小类的信息。** 例如对于一个二分类任务,如果数据集中A类跟B类的样本比例是1:10,那么模型把所有样本都预测成B类别也会有超过90%的准确率,模型就容易走上极端。通过数据增强的方式,可以对小类扩充对应的数据,例如通过Mixup等方式组合出更多小类的样本,达到上采样的效果,同时通过下采样的方式对大类样本进行一定的筛选,让所有类别的比例保持在一个合理的范围。
Few shot learning
通过数据增强的方式添加更多样例从而缓解few-shot带来的难题,跟前面提及的样本不均衡的小类情况相似。
Adversarial examples
大家应都应该记得CV中一个经典的样例,将熊猫的图片加上一点白噪声,虽然看起来还是熊猫的照片,但是模型却会将其预测为其他动物。在NLP里,通过数据增强的方式在原数据上做适当的变换,保持语义的一致,但是模型却会预测出另外的结果,这些样本就是对抗样本。 **通过数据增强生成对抗样本,让模型学到更多信息,增强模型的鲁棒性。**
5 总结
利用数据增强扩充数据时,有诸多超参数需要考虑,例如同义词替换里每个位置最多完成多少种替换?随机删除里每个位置又应该以多大的概率保留或者删除?回译里又应该选择多少种中间语言?Mixup中又应该选择多少样本组合数量?多种数据增强的方式该如何选择以及组合,等等,再完成数据扩充后,又该怎么利用这批合成数据?关于这些问题,目前并没有太多理论上的分析,更多的是一些经验之谈。
参考文献
1.(2021,) A Survey of Data Augmentation Approaches for NLP
https://arxiv.org/abs/2105.03075v4