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随机删除。
上述四种数据增强技术效果如何呢?(这里以文本分类实验为例)
在英文的数据上出奇的好!经过上述四种操作,数据增强后的句子可能不易理解,但作者们发现模型变得更加鲁棒了,尤其是在一些小数据集上。实验结果如下:
我们可以发现,仅仅使用50%的训练数据,使用EDA就能够达到原始模型使用100%训练数据的效果。
可能有人会问:使用EDA技术后,改变后的数据和原数据的特征空间分布与其标签是否一致?
作者同样做了一个实验,在产品评论数据集上,使用RNN结合EDA数据增强进行训练,将最后一层的输出作为文本特征,使用tSNE进行可视化,得到如下结果:
可以发现,数据增强后的数据分布与原始数据的分布非常吻合。这也意味着EDA对于句子的修改,并没有改变数据分布以及标签的分布。
上述四种数据增强技术,每一个都很有用吗?
实验结果如下:
对于四种技术,数据集很小时,每一种技术都能够有2-3%的提升,当数据集很大时,每一种技术也能够有1%的提升。根据作者的经验来看,不要改变超过1/4的词汇的前提下,模型的鲁棒性都能得到很大的提升。
既然EDA很有用,大家可能有一个问题:我们要产生多少个句子来进行数据增强呢?
答案是取决于训练数据的大小。当训练数据很小时,模型更容易过拟合,这时建议多生成一些数据增强的样本。当训练数据很大时,大量增加数据增强样本可能没有帮助,因为模型本身可能已经能够泛化。实验结果如下:
其中,横轴是一个句子平均产生的增强样本数目,纵轴是模型增益。我们可以看到,当一个句子平均产生4-8个新句子时,模型提升就能达到很好的效果。训练数据越少,提升效果效果越明显。过多的数据增强数据实际上对模型的提升有限。