EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks 数据增强技术

数据增强也叫数据扩增,意思是在不实质性的增加数据的情况下,让有限的数据产生等价于更多数据的价值。

图像领域,通过对图像的翻转、旋转、镜像、高斯白噪声等技巧实现数据增强

在NLP领域,情况有所不同:改变某个词汇可能会改变整个句子的含义,那么在NLP领域,如何使用数据增强技术呢?

ICLR 2019 workshop 《EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks》

介绍了几种NLP数据增强技术,并推出了[EDA github代码](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随机删除。

 

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

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

 

nlpcda数据扩充 nlp数据增强的方法有哪些_github

 

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

 

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

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

 

nlpcda数据扩充 nlp数据增强的方法有哪些_数据集_02

 

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

 

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

实验结果如下:

nlpcda数据扩充 nlp数据增强的方法有哪些_数据集_03

 

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

 

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

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

 

nlpcda数据扩充 nlp数据增强的方法有哪些_数据集_04

 

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