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

目录
相关文章
|
2月前
|
自然语言处理 PyTorch 算法框架/工具
自然语言生成任务中的5种采样方法介绍和Pytorch代码实现
在自然语言生成任务(NLG)中,采样方法是指从生成模型中获取文本输出的一种技术。本文将介绍常用的5中方法并用Pytorch进行实现。
120 0
|
7月前
|
存储 自然语言处理 数据可视化
自然语言入门:NLP数据读取与数据分析
本章主要内容为数据读取和数据分析,具体使用`Pandas`库完成数据读取操作,并对赛题数据进行分析构成。
324 0
|
8天前
|
存储 机器学习/深度学习 自然语言处理
R语言自然语言处理(NLP):情感分析新闻文本数据
R语言自然语言处理(NLP):情感分析新闻文本数据
23 0
|
4月前
|
机器学习/深度学习 自然语言处理 算法
19ContraBERT:顶会ICSE23 数据增强+对比学习+代码预训练模型,提升NLP模型性能与鲁棒性:处理程序变异(变量重命名)【网安AIGC专题11.15】
19ContraBERT:顶会ICSE23 数据增强+对比学习+代码预训练模型,提升NLP模型性能与鲁棒性:处理程序变异(变量重命名)【网安AIGC专题11.15】
81 1
|
4月前
|
机器学习/深度学习 存储 数据采集
【Python自然语言处理】使用SVM、随机森林法、梯度法等多种方法对病人罹患癌症预测实战(超详细 附源码)
【Python自然语言处理】使用SVM、随机森林法、梯度法等多种方法对病人罹患癌症预测实战(超详细 附源码)
44 0
|
8月前
|
数据采集 人工智能 自然语言处理
“超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、助您实现更智能的应用!”
“超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、助您实现更智能的应用!”
“超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、助您实现更智能的应用!”
|
8月前
|
数据采集 自然语言处理 PyTorch
全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!
全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!
全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!
|
9月前
|
数据采集 人工智能 自然语言处理
用于提取数据的三个开源NLP工具
用于提取数据的三个开源NLP工具
164 0
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等
深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等
|
11月前
|
自然语言处理 数据处理
NLP数据增广不故障!清华大学提出FlipDA,轻松解决小样本任务|ACL 2022
NLP数据增广不故障!清华大学提出FlipDA,轻松解决小样本任务|ACL 2022
118 0