EDA:最简单的自然语言处理数据增广方法-阿里云开发者社区

开发者社区> 雷锋网> 正文

EDA:最简单的自然语言处理数据增广方法

简介: 数据增广常用于计算机视觉。
+关注继续查看
TB1MQLGSCzqK1RjSZFHXXb3CpXa.jpg

本文为 AI 研习社编译的技术博客,原标题 :

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

TB1uBt7l_Zmx1VjSZFGXXax2XXa.jpg

数据增广常用于计算机视觉。在视觉领域,你几乎肯定可以翻折、旋转或镜像一幅图片,而不用担心它的标记发生变化。然后,在自然语言处理(NLP)领域,情况完全不同。改变一个词有可能改变整个句子的意思。所以,没有简单的方法能做到数据增广。真的是这样么?

我向你介绍EDA:简单数据增广技术,可以大大提升文本分类任务的性能(在EDA Github repository有简单的实现代码)。EDA包含四个简单操作,能极好地防止过拟合,并训练出更强健的模型,分别是:

同义词替换:在句子中随机选取n个非停用词。对每个选取的词,用它的随机选取的同义词替换。

随机插入:在句子中任意找一个非停用词,随机选一个它的同义词,插入句子中的任意位置。重复n次。

随机交换:任意选取句子中的两个词,交换位置。重复n次。

随机删除:对于句子中概率为p的每一个词,随机删除。

这些技术真有效吗?出乎意料,答案是肯定的。尽管生成的某些句子有点怪异,但是在数据集中的引入一些噪声,对于训练出一个健壮的模型来说,是极有好处的,特别是数据集比较小的时候。这篇论文指出,在5个文本分类任务的对比测试中,基于几乎所有大小的数据集,使用EDA都击败了常规训练方法,在训练数据集较小的时候,表现尤其突出。平均来说,用EDA训练一个循环神经网络(RNN),只需50%的训练数据,即可达到常规方法同等的精度。

TB1WYWqTmzqK1RjSZPxXXc4tVXa.png

文本分类任务的性能表现,相对于训练集的使用百分比。使用EDA(简单数据增广),在小数据集时,远胜常规方法。

  EDA会保留增广句子的真实标记吗?

我知道你在考试这个问题。真的能在做增广操作的同时,保留其真实标记吗?我们用画图形的方法来验证一下。

假设你训练一个关于产品的正面、负面评价的RNN,使用常规和增广的句子都跑一遍,抽取神经网络的最后一层,用sTNE画一个潜在空间图:

TB1fFDvge3tHKVjSZSgXXX4QFXa.png

ProCon数据集原生及增广句子的潜在空间图

可以看到增广句子的潜在空间图紧紧围绕着原生句子!这表明所生成的增广句子极大可能的保留了原始句子的标记。雷锋网雷锋网雷锋网(公众号:雷锋网)

  这些操作都有效吗?

现在,我们来看看数据增广技术中每个单独操作的效果是什么样的。同义词替换好理解,但是另外三个操作真的起作用吗?我们可以做一个实验,单独做其中一种操作,并代入不同的α值,参数α大致可理解为“句子中被改变的单词的百分比”:

TB1CB1FTkvoK1RjSZFwXXciCFXa.jpg

在不同大小的数据集下,对比其它五种文本分类方法,EDA操作的平均性能增益。参数α大致可理解为“句子中被每种增广操作改变的单词的百分比”。SR:同义词替换。RI:随机插入。RS:随机交换。RD:随机删除。

你能看到,在小数据集时,性能增益非常大,达到大约2-3%,数据集大的时候,增益变小(~1%)。但是,各项操作综合起来,如果设置的增广参数合理(句子中改变的单词不超过四分之一),能使训练出的模型更健壮。

  做多少增广?

最后,对于一个真实句子,我们应该增广出多少句子呢?答案取决于你的数据集的大小。如果你的数据集很小,很可能会出现过拟合,此时你应该生成多一些的增广句子。如果数据集比较大,增加太多的增广句子,意义不大,因为原有的数据已经能训练出一个好的模型了。这个图表显示了相对于每个原生句子生成的增广句子的数量的性能增益:

TB1X.CvTmzqK1RjSZFHXXb3CpXa.png

不同大小的数据集下全部五种文本分类任务的EDA平均性能增益。n_aug表示每原生句子生成的增广句子的数量。

  下一步?

我们已经演示了在文本分类中,简单数据增广能显著提升性能。如果你正用小数据集训练一个文本分类器,并想取得更好的效果,请在模型中编程实现这些操作,或者从Github中下载EDA代码。更多详情请查看原文。

想要继续查看该篇文章相关链接和参考文献?

点击【EDA:最简单的自然语言处理数据增广方法】即可访问:

https://ai.yanxishe.com/page/TextTranslation/1644

AI研习社今日推荐:2019 最新斯坦福 CS224nNLP 课程

自然语言处理(NLP)是信息时代最重要的技术之一,也是人工智能的关键部分。NLP的应用无处不在,因为人们几乎用语言进行交流:网络搜索,广告,电子邮件,客户服务,语言翻译,医学报告等。近年来,深度学习方法在许多不同的NLP任务中获得了非常高的性能,使用单个端到端神经模型,不需要传统的,任务特定的特征工程。在本课程中,学生将深入了解NLP深度学习的前沿研究。

课程链接:https://ai.yanxishe.com/page/groupDetail/59

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
处理历史数据的一种方法,建库考虑~~
利用Oracle的分区技术,很好的处理历史数据。。代码如下: create table sale_data (sale_id number(5), salesman_name varchar2(30), sales_amount number(10), sales_date date) partition by range(sales_date) ( partition s
935 0
asp.net 前台获得url参数的最简单方法
var para = '';  获得url中参数为id的值。
555 0
iOS中CoreData数据管理系列三——添加与查询数据
iOS中CoreData数据管理系列三——添加与查询数据
26 0
EDA:最简单的自然语言处理数据增广方法
数据增广常用于计算机视觉。
185 0
+关注
516
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载