NLP中一些简单的数据增强技术

ICLR 2019 workshop 论文《EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks》介绍了几种NLP数据增强技术,并推出了[EDA github代码](http://github.com/jasonwei20/eda_nlp)。EDA github repo提出了四种简单的操作来进行数据增强,以防止过拟合,并提高模型的泛化能力。下面进行简单的介绍:

 

1. 同义词替换(SR: Synonyms Replace):不考虑stopwords,在句子中随机抽取n个词,然后从同义词词典中随机抽取同义词,并进行替换。

2. 随机插入(RI: Randomly Insert):不考虑stopwords,随机抽取一个词,然后在该词的同义词集合中随机选择一个,插入原句子中的随机位置。该过程可以重复n次。

3. 随机交换(RS: Randomly Swap):句子中,随机选择两个词,位置交换。该过程可以重复n次。

4. 随机删除(RD: Randomly Delete):句子中的每个词,以概率p随机删除。

 

上述四种数据增强技术效果如何呢?(这里以文本分类实验为例)

在英文的数据上出奇的好!经过上述四种操作,数据增强后的句子可能不易理解,但作者们发现模型变得更加鲁棒了,尤其是在一些小数据集上。实验结果如下:

 

我们可以发现,仅仅使用50%的训练数据,使用EDA就能够达到原始模型使用100%训练数据的效果。

 

可能有人会问:使用EDA技术后,改变后的数据和原数据的特征空间分布与其标签是否一致?

作者同样做了一个实验,在产品评论数据集上,使用RNN结合EDA数据增强进行训练,将最后一层的输出作为文本特征,使用tSNE进行可视化,得到如下结果:

 

 

可以发现,数据增强后的数据分布与原始数据的分布非常吻合。这也意味着EDA对于句子的修改,并没有改变数据分布以及标签的分布。

上述四种数据增强技术,每一个都很有用吗?

实验结果如下:

 

对于四种技术,数据集很小时,每一种技术都能够有2-3%的提升,当数据集很大时,每一种技术也能够有1%的提升。根据作者的经验来看,不要改变超过1/4的词汇的前提下,模型的鲁棒性都能得到很大的提升。

 

既然EDA很有用,大家可能有一个问题:我们要产生多少个句子来进行数据增强呢?

答案是取决于训练数据的大小。当训练数据很小时,模型更容易过拟合,这时建议多生成一些数据增强的样本。当训练数据很大时,大量增加数据增强样本可能没有帮助,因为模型本身可能已经能够泛化。实验结果如下:

 

 

其中,横轴是一个句子平均产生的增强样本数目,纵轴是模型增益。我们可以看到,当一个句子平均产生4-8个新句子时,模型提升就能达到很好的效果。训练数据越少,提升效果效果越明显。过多的数据增强数据实际上对模型的提升有限。

EDA中的四种简单的NLP数据增强技术能够有效提升文本分类的模型表现。

 

最后,作者给出一些参数的指导:

推荐= 0.1,最好的适用语料集为1000条以下,主要是500条左右。

相关参数解释:

The   parameter roughly means “percent of words in sentence changed by each augmentation.”

 is the number of generated augmented sentences per original sentence.

我自己改写了一个中文的:https://github.com/tedljw/data_augment

 

参考:https://zhuanlan.zhihu.com/p/63182132

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值