NLP 文本场景的数据优化
@(NLP)[数据增强, 噪声]
序言
数据增强(Data Augmentation,简称DA),是指根据现有数据,合成新数据的一类方法。毕竟数据才是真正的效果天花板,有了更多数据后可以提升效果、增强模型泛化能力、提高鲁棒性等。数据增强主要在CV应用中比较常见,然而由于NLP任务天生的难度,类似CV的裁剪方法可能会改变语义,既要保证数据质量又要保证多样性,所以大家在做数据增强时要十分谨慎。
数据增强的目的
- 在很多机器学习场景下,没有足够的数据(数据稀缺场景)来训练高质量的模型。
- 提高训练数据的多样性,从而得到在真实场景下(很多没有见过的数据)更好的泛化效果。
- 样本不均衡
- 为了模型安全,应对模型的对抗攻击。
NLP数据增强研究基本现状1
- 在CV上很成功,逐渐在NLP任务上发现有效
- 在文本分类2领域数据增强方法也比较多,其他任务例如NER,多标签分类等就相对少一些;
- 语言输入是离散,而且一定的文本改变容易引起文本分布的巨大改变,无法做到像图片那样不可见的抖动;
- 一般算法都可以从输入文本空间和文本编码空间进行数据增强。
- 对抗攻击: 相比较CV的对抗,文本的对抗存在很大差异。文本输入为离散的
问题:
- 数据增广在当前迁移学习大背景下的大规模预训练模型上有用吗?
Data Augmentation in NLP
Paraphrasing:对句子中的词、短语、句子结构做一些更改,保留原始的语义 Noising:在保证label不变的同时,增加一些离散或连续的噪声,对语义的影响不大 Sampling:旨在根据目前的数据分布选取新的样本,会生成更多样的数据
Data Augmentation Approaches in Natural LanguageProcessing: A Survey3
Paraphrasing
小结: 在尽可能保留句子整体语义的情况下,增加文本丰富度,包括让每个词拥有更加丰富的上下文context,让相似的语义表达有更多样的语法构成,词汇构成等等
Noiseing
- Swapping:除了交换词之外,在分类任务中也可以交换instance或者sentence
- Deletion:可以根据tf-idf等词的重要程度进行删除
- Insertion:可以把同义词随机插入句子中
- Substitution:把一些词随机替换成其他词(非同义),模拟misspelling的场景。为了避免改变label,可以使用label-independent的词,或者利用训练数据中的其他句子
- Mixup:这个方法最近两年比较火,把句子表示和标签分别以一定权重融合,引入连续噪声,可以生成不同label之间的数据,但可解释性较差 总的来说,引入噪声的DA方法使用简单,但会对句子结构和语义造成影响,多样性有限,主要还是提升鲁棒性。 ConSERT时用到的方法:
- 对抗样本
- Dropout:也是SimCSE用到的,还有R-drop,都是通过dropout来加入连续噪声
- Feature Cut-off:比如BERT的向量都是768维,可以随机把一些维度置为0,这个效果也不错
小结: 增加模型稳健性,在不过多影响training error的前提下,降低模型的复杂度从而降低generalization error, 类比dropout,l2,random noise injection
Sampling
Sampling是指从数据分布中采样出新的样本,不同于较通用的paraphrasing,采样更依赖任务,需要在保证数据可靠性的同时增加更多多样性,比前两个数据增强方法更难。作者整理了4种方法:
- Rules:用规则定义新的样本和label,比如把句子中的主谓进行变换
- Seq2Seq Models:根据输入和label生成新的句子,比如在NLI任务中,有研究者先为每个label(entailment,contradiction,neutral)训一个生成模型,再给定新的句子,生成对应label的。对比之下,paraphrasing主要是根据当前训练样本进行复述
- Language Models:给定label,利用语言模型生成样本,有点像前阵子看的谷歌UDG。有些研究会加个判别模型过滤
- Self-training:先有监督训练一个模型,再给无监督数据打一些标签,有点蒸馏的感觉
增强方法选择依据
Method Stacking 实际应用时可以应用多种方法、或者一种方法的不同粒度。
作者推荐了两款工具eda4和uda