Press "Enter" to skip to content

CMU & MILA &谷歌 | 三家巨头发布史上最干文本增强总结

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

文 | Sherry

 

一直以来,数据都是推动深度神经网络这个人工智能引擎不可或缺的燃料;然而人工收集足量而优质的数据从来不是一件“便宜”的事,数据增强便是一座富有价值的矿山。

 

在CV中,翻转,裁剪,加噪声等方法被广泛应用且获得了显着的效果。但在NLP领域,由于语言的离散性,如何获得保持文本原意的新数据就显得不那幺简单了。大型预训练模型的成功为我们带来了曙光,推动了许多低资源领域或是新任务的研究,然而微调大型模型需要大量数据,如何自动获得高质量数据在最近的研究中显得尤为重要。

 

Google,CMU,Mila等研究者合作,对当前NLP领域的数据增强进行了总结。被收录到ACL 21 Findings。

 

本文将帮你总结:NLP数据增强的难点和理解;常见方法;应用场景;和不同下游任务中的常见方法。

 

论文题目:

 

A Survey of Data Augmentation Approaches for NLP

 

论文链接:

 

https://arxiv.org/pdf/2105.03075

 

GitHub:

 

https://github.com/styfeng/DataAug4NLP

 

也可以在 【 夕小瑶的卖萌屋 】订阅号后台回复关键词 【 0602 】 下载论文PDF~

 

NLP数据增强的难点和理解角度

 

数据增强的目标和难点

 

数据增强的目标当然是为了获得更多的数据,但需要满足两个条件:容易执行,且可以提高模型表现。如果说一个增强的方法他本身就需要大量资源(比如训练一个复杂的生成模型),我们完全可以用人工标注的方法来获得最优质的数据,增强就会显得没有意义;如果增强获得的数据质量不够高(比如由简单规则生成),反而会破坏模型的表现,那这种增强也违反了我们的初衷。为了获得高质量的增强数据,我们通常要求增强的数据分布和原数据集不要相差太大(可能破坏模型表现),也不要相差太小(可能导致过拟合)。

 

怎幺看待数据增强

 

通常来说,数据增强被认为可以增加模型正则性,减少过拟合,但其实很少有人解释它到底为什幺可以帮助模型训练。现有的工作中,从以下角度给出了解释:

 

 

从正则化角度出发,研究者提出含有噪声的样本有助于帮助正则化;若是把数据增强看作核变换,则它有助于平均不同的特征,并正则化方差;同样,我们也可以把数据增强看作平均不同数据的分布轨迹,从而也能得到减少方差的效果。

 

另外,也有研究者证明了指数量级的数据增强可以提高分类器的正边界,但显示应用中我们通常不会增强这幺大量的数据。

 

 

常见方法

 

NLP的增强虽然有很多难点,但近年来也发展出了许多比较成熟的分支。常见的数据增强方法可以分为以下几类:

 

基于规则

 

特征空间的增强

由于自然语言的离散性,直接生成更多数据显得很艰难,一个直接的方法就不生成语言数据,而是在特征空间直接进行增强。比如说,在少样本学习中,我们先学习训练领域的不变量,然后在目标类别上特征空间的不变量转换得到更多特征样本。或者是在同一类的空间流形上不断进行仿射变换来获得更多特征样本。

 

EDA–简单的规则

 

EDA是一种简单有效,也被广泛应用的文本增强:随机插入,删除,替换token从而在文本数据中加入噪声。EDA的改进版UDA则利用简单的增强,包括回译,或者根据TF-IDF替换词等方法获得增强数据,再最小化增强后未标注样本和原样本的一致性损失函数来帮助半监督学习。

 

图上的变换 通过句法解析等技术,我们也可以讲自然语言转化成图/树的结构。因此,我们也可以通过人为设计树上的变换来获得增强数据:比如把交换子树的顺序或者删除子树等。

 

样本插值

 

MixUp在图像领域被广泛应用,具体而言,它对两个及以上的训练样本进行插值。把两张一样大的图每个像素点按叠加,同时目标标签也按同样权重叠加,就得到了一个新的合理训练数据。除了按照像素点叠加,也可以把图A的局部用图B代替,然后按图片面积占比插值得到新类别(CutMix)。

 

将这种思路引入文本增强的难点在于:文本是离散的,无法找到合适的插值单位。但仍然有一些常见的方法可以应用:

 

 

拼接句子,混合嵌入词向量或者高维表示向量。

 

Seq2MixUp提出两种混合样本的方法:一个是对句子的每个位置随机决定复制两个样本中的一个字;或者是根据概率分布混合词向量。

 

 

基于模型的增强

这类方法利用已经训练好的模型作为增强数据的方法。

 

回译 — 翻译模型

 

利用已经训练好的翻译模型来增强数据就是一种常见而有效的方法。通常我们把训练数据翻译成一种或多种其他语言,再翻译回来,筛选之后可以得到质量比较高的数据。

 

填空 — 语言模型

 

大型预训练网络获得成功之后,另外一个常见而有效的方法就是用这类模型替换原样本中的词或片段。例如随机mask上句子中的词,然后用BERT这类模型填入和原来不一样的候选词。

 

语意近邻 — 生成模型

 

除了回译和填空,我们也可以直接利用生成模型。之前的样本混合或扰动的方法水直接利用隐空间表示来获得新样本,但我们同样也可以讲这些混合或扰动之后的表示向量作为生成模型的条件输入,从而得到新的样本。

 

直接用生成模型

 

除了给定向量表示来生成,我们也可以直接在目标数据集上微调GPT等生成模型,然后直接生成新的训练数据;再用自监督的方法获得标注。

 

应用场景

 

数据增强有许多具有研究价值的应用场景。

 

低资源语言

 

低资源语言的数据获取一直以来都是研究的重要分支。常见的增强方法包括1)利用高资源语言中可以被推广的性质帮助低资源语言,2)利用回译+自监督来生成增强训练数据。

 

处理性别偏差

 

在指代消解(coreference)任务中,我们可以通过交换he/she来平衡数据集中的性别分布。更进一步,我们可以用替换词汇为更中性的词汇来平衡可能引起性别偏差的数据。

 

解决不平衡类别

 

常见的解决不平衡类别的方法有upsample/downsample。利用数据增强,我们可以通过插值生成minority class 样本,或者用EDA等方法直接增加少数类别的样本。

 

下游任务中的变种

 

接下来我们按照不同任务总结了增强的方法,作者在GitHub中也给出了详细的总结,可以参考:

 

https://github.com/styfeng/DataAug4NLP。

 

摘要 Summarization

 

 

类似UDA,先从回译获得增强数据,然后利用一致性损失函数提升效果。

 

混合从Common Crawl获得的合成数据以及原数据集来提升模型效果。

 

 

问答 QA

 

 

Domain-agonistic QA: 回译

 

开放领域问答:远程监督,利用原数据集以及抽取器获得数据

 

Zero-shot cross-lingual: 问题生成

 

Cross-lingual QA/NLI: 将一部分文本从源语言替换为其他语言

 

为了提高QA 准确率和一致性, 利用逻辑和语言学知识获得训练数据

 

 

序列标注 Sequence Tagging

 

 

首先,学习根据特定方案线性化的标签和单词序列的语言模型。其次,从该语言模型中采样序列,并对其进行去线性化处理,以生成新的示例。

 

POS tagging: 依存树变换

 

NER: 对每个实体进行token或同义词替换

 

 

解析 Parsing

 

 

利用数据重组来添加对特定任务有效的先验知识。

 

表格解析Grappa: 利用预训练模型来生成问题-SQL对,进行增强。

 

语义解析: 利用组成性,替换重复的片段。

 

低资源依存关系解析:替换词语为拥有相同POS,形态标签和依存关系标签的其他词。

 

 

语法纠正 Grammatical Error Correction

 

 

德语纠正:利用维基百科的编辑历史作为额外数据。

 

多任务迁移学习:利用其他任务的标注作为额外数据。

 

合成新的错误来训练纠正模型:token级别的扰动,训练生成错误的模型+过滤。

 

利用拼写检查器产生的混淆集以进行干扰。

 

从标注数据中学习错误的模式,并用来生成特定的噪声。

 

用生成模型的beam search来增加数据噪声。

 

 

NMT

 

 

SwitchOut: 随机替换平行语料中源语言和目标语言的对应词。

 

Soft Contextual: 随机选定一个词,用词表中其他多个相关词的上下文表示来替换它。

 

Data Diversification: 将原数据和多个训练好模型的预测混合。

 

 

Data-to-Text NLG

 

 

球赛总结任务:随机修改不影响比赛结果的得分来增强。

 

从三元组生成描述:利用维基百科和开放关系抽取工具获得更多三元组及描述句子的数据。

 

意思表示(meaning representation):修改意思表示的序列顺序来增强。

 

 

Open-Ended & Conditional Generation

 

 

GenAug:在低资源领域微调GPT-2,从而提高生成文本的连续性。

 

 

挑战与未来

 

作者针对过去的文本增强方法提出了许多值得注意的方面:

 

 

缺少一致有效的方法

不像CV,文本增强没有一致有效的增强方法。可能需要发展一个统一的任务和数据集来比较不同增强方法的优劣。

 

预训练模型对领域内数据效果甚微

以前有效的增强方法对大型预训练模型失去了效果:他们已经可以达到很好的效果了。

 

缺少理论解释

很少有人解释为什幺数据增强有效,大多数工作都只是通过实验结果来展示增强有效,并且给出一些猜想,挑战在于在不借助全面实验的情况下测量优度。CV中有人研究了affinity和diversity可以预测增强的效果,但是在NLP中没有对应的理解。

 

多模态挑战

对多模态任务,有人对单个模态进行增强或者对不同模态设置不同的增强,但是是否存在一个统一的增强方法呢?

 

基于span的任务

随机替换token可能扰乱上下文信息。

 

特殊领域

增强对OOD无效, 因为增强的数据可能跟原数据分布非常不同

 

低资源语言

跟特殊领域的难点一样,对高资源有效的增强方法不一定对低资源有效。

 

视觉启发

CV的增强都是受现实世界不变量启发,很多在NLP中有对应:比如改变灰度可能对应着词形简化(lemmatization ) ;调整色调对应着替换副词程度,例如把awesome改成good;旋转对应着依存树变换;角度调整对应着同义句替换。

 

 

总结

 

这篇论文对过去的文本增强工作进行了系统性总结,可以说是比较全面的。对小领域上的增强方法的总结可以让大家快速上手了解常见增强方法,同时借鉴其他任务上的增强也可能启发其他新的思路。另外,文章中对文本增强的目标,理解,难点以及未来发展方向都给出了新颖的观点,具有启发意义。

 

萌屋作者:Sherry 。

 

本科毕业于复旦数院,转行NLP目前在加拿大滑铁卢大学读CS PhD。经历了从NOIer到学数学再重回CS的转变,却坚信AI的未来需要更多来数学和自认知科学的理论指导。主要关注问答,信息抽取,以及有关深度模型泛化及鲁棒性相关内容。

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注