EDA:最简单的自然语言处理数据增广方法
These are the Easiest Data Augmentation Techniques in Natural Language Processing you can think of — and they work.
作者 | Jason Wei
翻译 | AI小山
校对 | 酱番梨 审核 | 约翰逊·李加薪 整理 | 立鱼王
原文链接:
https://towardsdatascience.com/these-are-the-easiest-data-augmentation-techniques-in-natural-language-processing-you-can-think-of-88e393fd610
数据增广常用于计算机视觉。在视觉领域,你几乎肯定可以翻折、旋转或镜像一幅图片,而不用担心它的标记发生变化。然后,在自然语言处理(NLP)领域,情况完全不同。改变一个词有可能改变整个句子的意思。所以,没有简单的方法能做到数据增广。真的是这样么?
我向你介绍EDA:简单数据增广技术,可以大大提升文本分类任务的性能(在EDA Github repository有简单的实现代码)。EDA包含四个简单操作,能极好地防止过拟合,并训练出更强健的模型,分别是:
同义词替换:在句子中随机选取n个非停用词。对每个选取的词,用它的随机选取的同义词替换。
随机插入:在句子中任意找一个非停用词,随机选一个它的同义词,插入句子中的任意位置。重复n次。
随机交换:任意选取句子中的两个词,交换位置。重复n次。
随机删除:对于句子中概率为p的每一个词,随机删除。
这些技术真有效吗?出乎意料,答案是肯定的。尽管生成的某些句子有点怪异,但是在数据集中的引入一些噪声,对于训练出一个健壮的模型来说,是极有好处的,特别是数据集比较小的时候。这篇论文指出,在5个文本分类任务的对比测试中,基于几乎所有大小的数据集,使用EDA都击败了常规训练方法,在训练数据集较小的时候,表现尤其突出。平均来说,用EDA训练一个循环神经网络(RNN),只需50%的训练数据,即可达到常规方法同等的精度。
EDA会保留增广句子的真实标记吗?
我知道你在考试这个问题。真的能在做增广操作的同时,保留其真实标记吗?我们用画图形的方法来验证一下。
假设你训练一个关于产品的正面、负面评价的RNN,使用常规和增广的句子都跑一遍,抽取神经网络的最后一层,用sTNE画一个潜在空间图:
可以看到增广句子的潜在空间图紧紧围绕着原生句子!这表明所生成的增广句子极大可能的保留了原始句子的标记。
这些操作都有效吗?
现在,我们来看看数据增广技术中每个单独操作的效果是什么样的。同义词替换好理解,但是另外三个操作真的起作用吗?我们可以做一个实验,单独做其中一种操作,并代入不同的α值,参数α大致可理解为“句子中被改变的单词的百分比”:
你能看到,在小数据集时,性能增益非常大,达到大约2-3%,数据集大的时候,增益变小(~1%)。但是,各项操作综合起来,如果设置的增广参数合理(句子中改变的单词不超过四分之一),能使训练出的模型更健壮。
做多少增广?
最后,对于一个真实句子,我们应该增广出多少句子呢?答案取决于你的数据集的大小。如果你的数据集很小,很可能会出现过拟合,此时你应该生成多一些的增广句子。如果数据集比较大,增加太多的增广句子,意义不大,因为原有的数据已经能训练出一个好的模型了。这个图表显示了相对于每个原生句子生成的增广句子的数量的性能增益:
不同大小的数据集下全部五种文本分类任务的EDA平均性能增益。n_aug表示每原生句子生成的增广句子的数量。
下一步?
我们已经演示了在文本分类中,简单数据增广能显著提升性能。如果你正用小数据集训练一个文本分类器,并想取得更好的效果,请在模型中编程实现这些操作,或者从Github中下载EDA代码。更多详情请查看原文。
想要继续查看该篇文章相关链接和参考文献?
点击【EDA:最简单的自然语言处理数据增广方法】即可访问:
https://ai.yanxishe.com/page/TextTranslation/1644
AI入门、大数据、机器学习免费教程
35本世界顶级原本教程限时开放,这类书单由知名数据科学网站 KDnuggets 的副主编,同时也是资深的数据科学家、深度学习技术爱好者的Matthew Mayo推荐,他在机器学习和数据科学领域具有丰富的科研和从业经验。
posted on 2021-04-09 15:56 ExplorerMan 阅读(269) 评论(0) 编辑 收藏 举报