NLP数据增强方法

常用的NLP数据增强方法:
1、回译
2、 同义词替换(SR: Synonyms Replace):不考虑stopwords,在句⼦中随机抽取n个词,然后从同义词词典中随机抽取同义词,并进⾏替换。
3、 随机插⼊(RI: Randomly Insert):不考虑stopwords,随机抽取⼀个词,然后在该词的同义词集合中随机选择⼀个,插⼊原句⼦中的随机位置。
4、 随机交换(RS: Randomly Swap):句⼦中,随机选择两个词,位置交换。
5、 随机删除(RD: Randomly Delete):句⼦中的每个词,以概率p随机删除。

基于改写(paraphrasing)的方法基于对句子的适当和有限制的更改,生成与原始数据具有有限语义差异的增强数据。增强数据传达与原始形式非常相似的信息。
基于噪声(noising)的方法在保证有效性的前提下加入离散或连续的噪声。这些方法的重点是提高模型的鲁棒性。
基于抽样(sampling)的方法掌握数据分布并对其中的新数据进行抽样。这些方法输出更多样化的数据,满足基于人工启发式和训练模型的下游任务的更多需求。

在这里插入图片描述

基于改写(paraphrasing)的方法

这类方法根据替换的成分不同,又可以分为词、短语、句子级别。作者共总结了6种方法:

Thesaurus:利用词典、知识图谱等外部数据,随机将非停用词替换成同义词或上位词,如果增加多样性的话还可以替换成相同词性的其他词

Semantic Embeddings:利用语义向量,将词或短语替换成相近的(不一定是同义词)。由于每个词都有语义表示,可替换的范围更大。而上一种方法只能替换图谱里的

MLMs:利用BERT等模型,随机mask掉一些成分后生成新的

Rules:利用一些规则,例如缩写、动词变位、否定等,对句子一些成分进行改写,比如把 is not 变成 isn’t

Machine Translation:分为两种,Back-translation指把句子翻译成其他语言再翻译回来,Unidirectional Translation指在跨语言任务中,把句子翻译成其他语言

Model Generation:利用Seq2Seq模型生成语义一致的句子

作者还贴心地整理了上述方法的优缺点。其中「歧义」主要是指有些多义词在不同场景下意思不一样,比如「我每天吃一个苹果」,替换成「我每天吃一个iphone」就不合适了。
在这里插入图片描述

基于噪声(noising)的方法

人在读文本时对噪声是免疫的,比如单词乱序、错别字等。基于这个思想,可以给数据增加些噪声来提升模型鲁棒性。

Swapping:除了交换词之外,在分类任务中也可以交换instance或者sentence

Deletion:可以根据tf-idf等词的重要程度进行删除

Insertion:可以把同义词随机插入句子中

Substitution:把一些词随机替换成其他词(非同义),模拟misspelling的场景。为了避免改变label,可以使用label-independent的词,或者利用训练数据中的其他句子

Mixup:这个方法最近两年比较火,把句子表示和标签分别以一定权重融合,引入连续噪声,可以生成不同label之间的数据,但可解释性较差

对抗样本

Dropout:也是SimCSE用到的,还有R-drop,都是通过dropout来加入连续噪声

Feature Cut-off:比如BERT的向量都是768维,可以随机把一些维度置为0,这个效果也不错

总的来说,引入噪声的DA方法使用简单,但会对句子结构和语义造成影响,多样性有限,主要还是提升鲁棒性。

基于抽样(sampling)的方法

Sampling是指从数据分布中采样出新的样本,不同于较通用的paraphrasing,采样更依赖任务,需要在保证数据可靠性的同时增加更多多样性,比前两个数据增强方法更难。作者整理了4种方法:

Rules:用规则定义新的样本和label,比如把句子中的主谓进行变换

Seq2Seq Models:根据输入和label生成新的句子,比如在NLI任务中,有研究者先为每个label(entailment,contradiction,neutral)训一个生成模型,再给定新的句子,生成对应label的。对比之下,paraphrasing主要是根据当前训练样本进行复述

Language Models:给定label,利用语言模型生成样本,有点像前阵子看的谷歌UDG。有些研究会加个判别模型过滤

Self-training:先有监督训练一个模型,再给无监督数据打一些标签,有点蒸馏的感觉

作者依旧贴心地给出了4中方法的优点和局限:
在这里插入图片描述

汇总对比

作者给出了这些方法在6个维度的对比,大家可以更好地体会他们的区别和适用场景。
其中Level表示DA方法会增强的部分:t=text, e=embedding, l=label,
Granularity表示增强的粒度:w=word, p=phrase, s=sentence。
在这里插入图片描述

工具

Easy DA: https://github.com/jasonwei20/eda_nlp
Unsupervised DA:https://github.com/google-research/uda
英文:https://github.com/makcedward/nlpaug
中文:https://github.com/zhanlaoban/eda_nlp_for_Chinese

优化

第一,在使用增强的数据时,如果数据质量不高,可以先让模型在增强后的数据上pre-train,之后再用有标注数据训练。如果要一起训练,在增强数据量过大的情况下,可以对原始训练数据过采样

第二,在进行数据增强时注意这些超参数的调整:
在这里插入图片描述

第三,其实增强很多简单数据的提升有限,可以注重困难样本的生成。比如有研究加入对抗训练、强化学习、在loss上下文章等。如果用生成方法做数据增强,也可以在生成模型上做功夫,提升数据多样性。

第四,如果生成错数据可能引入更多噪声,可以增加其他模型对准确性进行过滤。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值