摘要:本文主要解决在样本数量较少、样本不均衡或者需要提高模型的鲁棒性的场景下通过样本增强技术提升模型的泛化能力的问题。主要讲了近几年常用的样本增强技术,其中包括回译技术、词汇替换技术、随机噪声引入技术和生成式的方法等等。通过这些技术我们可以轻松的实现增加训练样本的目的。希望对样本增强技术感兴趣的小伙伴有所帮助。
本文按照如下思维导图进行讲解:
01为什么要使用样本增强技术
1.1 样本增强技术介绍
深度学习模型效果的好坏和数据的数量和质量强相关。但实际情况是我们大部分时间并没有那么多那么好的数据,这也是深度学习天生的短板:数据不够多、不够好。在这种情况下,样本增强技术能在一定程度帮助我们缓解这个问题。
样本增强技术主要是在不实质性增加样本的情况下让有限的样本产生更大的价值。说句通俗易懂的话就是虽然我只有500条数据,但是能达到别人1000条数据的价值。这就是样本增强技术的作用。
1.2 图像领域VS自然语言处理领域中的样本增强技术
先看一张图像领域中样本增强技术的效果图。假如我们现在只有一张小可爱的图片,通过样本增强技术,我们可以“旋转、摇摆、跳跃”,经过种种骚操作咱们可以得到下面64张小可爱的图片,这样咱们的样本量就扩展了64倍。这就是样本增强技术在图像领域中的杰出表现。同时附上一个github地址(https://github.com/aleju/imgaug),大家有兴趣可以去里面折腾。
图1 图像领域中样本增强技术效果图
样本增强技术在图像领域中有不错的效果,很多人自然想到将其应用到自然语言处理NLP中。通过下面一张图咱们看看图像领域和自然语言处理领域中样本增强技术的不同之处:
图2 图像领域和自然语言处理领域样本增强技术对比
图中上部分是将一只猫咪的图片经过镜面对称操作得到的还是一只猫咪。但是应用到自然语言处理领域中,咱们将一段话打乱之后发现语义信息变了,就相当于把一只猫变成了一只狗,那肯定不行。所以通过这张图片可以看出NLP领域中的样本增强技术好像要比图像领域困难的多。
1.3 样本增强技术常见的应用场景
上面介绍了样本增强技术,现在简单列举下我们可以在哪些自然语言处理任务应用场景下使用样本增强技术:
1.3.1 样本数量较少
样本增强技术最重要的一个目的就是解决样本数量较少的问题。在机器学习领域尤其是深度学习样本数量较少很容易导致模型欠拟合,也就是“巧妇难为无米之炊”的尴尬境地。管你模型再牛逼,没有数据那你模型的天花板就已经在那里了。这种场景下就可以使用样本增强技术快速增加训练样本。
1.3.2 样本不均衡
大部分机器学习场景中都会出现样本不均衡的问题,比如推荐场景下用户点击和非点击样本量差距非常大,医疗疾病识别场景下正负样本的数量也差别非常大,毕竟得病的肯定比不得病的要少得多。在这种情况下,模型一般对于小样本类别是处于欠拟合的状态,线上预测时也不会给太高的概率。要解决这个问题,可以通过样本增强技术来增加正样本数量,降低正负样本不平衡的比例,最终提升模型的泛化能力。
1.3.3 提高模型的鲁棒性
样本增强技术在自然语言处理任务中可以分成两类:第一类是通过回译或者文本复述的方法变换文本的表达,这类方法可以保持文本的语义信息不发生变化。拿回译技术来说,将一段中文通过谷歌翻译先译成英文,然后再翻译回中文,你会发现借助牛逼的谷歌翻译系统我们翻译回的中文和原句语义是一致的,仅仅在文本表达上有些许差异,就这样一个简单的操作实现了样本翻倍;另一类就是通过局部调整文本实现样本增强,比如同义词替换等等操作。这两类方法的实质都是使模型更加关注文本的语义信息,降低局部噪声的影响,最终提升模型的鲁棒性。
从上述三种场景来看,不管是小样本还是大样本,样本增强技术都能够提升模型的泛化能力,所以是NLPer必备的知识点。
1.4 应用到我们的业务场景
我在团队中主要负责使用NLP技术来理解item数据源(比如用户搜索query或者浏览资讯news等文本数据源),其实就是做文本分类。我们有四级广告类目体系,总共有上百个标签,也就是说可能需要识别上百个类别。但是尴尬的是只有一个标注人员,因为还要标注其他数据源,所以真正用于标注query和news的可能也就半个人力。总结下来就是需要识别的类目很多,但是可以使用的标注人力很少,所以可以用于训练的样本数量就比较少。这样就和咱们应用样本增强技术的场景完美契合。我们希望通过样本增强技术可以使用少量的标注样本也能获得识别能力不错的文本分类模型。
02 常用的样本增强技术
2.1 回译技术
回译技术就是使用先进的翻译系统(比如谷歌翻译)将语言A的文本先翻译成语言B,然后再翻译回语言A从而实现样本增强的目的。通过下面一个简单的例子了解回译技术:
图3 回译技术举例
上图中咱们使用谷歌翻译系统先把中文语言的原始文本翻译成英文,然后再翻译回中文,这样就得到了一条新的文本数据增强样本1。如果把英文的文本再翻译成日文,再将日文翻译回中文就得到了增强文本2。对比原始文本和增强文本1、2,语义信息完全一致。通过这个例子可以看出回译技术实用性很强。但是我们也必须清醒的认识到回译技术效果如此好得益于谷歌翻译模型的强大。使用回译技术还有一个好处是通过中间多种语言的转换,我们可以实现样本数据N倍的增加。
从应用层面来看,回译技术应该是方便有效的样本增强技术,借“谷歌强大的翻译模型”之手轻松实现样本增强的目的。回归到机器学习技术本源来看,回译技术有效的根本原因是迁移学习,我们通过回译技术把翻译模型学到的语义、语法、句法等知识转移到了新生成的样本上,为当前自然语言处理任务引入了新的信息和知识来源。
回译技术的效果也是经过考验的。2018年CMU和Google brain团队将回译技术应用于问答模型,最终实验证明回译技术能有效提升模型的效果:
图4 回译技术有效提升问答模型效果实验图
同时工业实操上很有借鉴价值的是不同增强倍数和采样比例下回译技术对于模型提升的大小如下图所示:
图5 不同增强倍数和采样比例对模型的提升效果图
从图中两个红框部分可以看出回译技术带来的性能提升和加入self-attention组件带来的提升相当。回译技术从数据层面提升模型的性能,而火爆NLP领域的自注意力机制组件则通过算法层面提升模型的性能。将两种方法结合同时优化数据和算法,模型的性能会有进一步提升。通过这个实验从侧面证明挖掘数据多维度信息和优化模型架构都非常重要。
2.2 词汇替换技术
这一类技术主要是将文本进行局部替换。
2.2.1 基于同义词典的替换
基于同义词典的方式主要是从文本中随机将某个词替换成同义词。这种方法的重点是构建一个同义词库,比如英语中WordNet数据库就是一个人工维护的同义词数据库。下图是通过WordNet实现英语同义词转换:
图6 基于同义词典的样本增强示例
2.2.2 基于Word Embedding的替换
基于Word Embedding的替换技术其实和同义词典的方法是一致的,只不过后者维护的是词典,而前者将文本通过embedding的方式映射到向量空间,通过向量的距离来识别相似度,从而决定是否是“同义词”。在当前万物皆可embedding的时代这种基于Word Embedding的替换技术显然要比同义词典好用的多。通过下图说明使用Word2Vec、FastText等embedding技术进行样本增强:
图7 Word2Vec方法的样本增强示例
上图中左边部分是通过Word2Vec技术将word映射到二维向量空间中,距离相近的点语义也相似。通过相似的点替换当前词从而实现基于WordEmbedding替换的样本增强。
2.2.3 基于Masked LM的替换
基于Masked LM的替换技术相当于是上面基于Word Embedding技术的升级版本。因为Word2Vec技术无法解决词歧义性的问题,所以通过Masked LM来根据上下文预测掩码的词,Masked LM模型最典型的代表就是NLP领域中具有里程碑意义的BERT模型。BERT模型的一个创新点就是通过Masked LM来根据上下文预测被Masked的词。通过下图说明Masked LM如何增强样本:
图8 Masked LM方法的样本增强示例
上图中左边是通过BERT模型对文本中被Mask的词进行预测。右边就是使用模型去预测生成新的样本。这种方法因为考虑了上下文信息,所以生成的文本更符合语法规范。
2.2.4 基于TF-IDF的替换
基于TF-IDF的替换主要是将文本中不影响语义信息的词进行替换,一般是非常常见但是又没啥作用的词(比如停用词)。下图展示了将TF-IDF值小的词进行替换:
图9 TF-IDF方法的样本增强示例
2.3 正则表达式的替换技术
基于正则表达式的替换技术主要是使用正则表达式来进行简单的匹配转换。下图展示了一个将动词从缩写转换为非缩写的例子来实现样本增强的例子:
图10 动词缩写转换方法的样本增强示例
上图中将she is转换成缩写she’s实现样本增强。但是有时候反向转换可能存在问题,比如she is和she has的缩写都是she‘s,但是转换后可能影响语义信息,所以这种反向转换是被禁止的。
2.4 随机噪声引入技术
这类方法主要是向文本中加入噪声从而生成新的样本,最终提升模型的鲁棒性。
2.4.1 引入随机拼写错误
将文本中的某些词随机进行错误拼写,如下图所示:
图11 随机拼写错误引入噪声的样本增强示例
2.4.2 随机打乱语句顺序
将文本中的语句顺序打乱从而生成新的样本:
图12 随机打乱语句顺序引入噪声的样本增强示例
2.4.3 随机插入非停用词的同义词
这种方法是随机从句子中选择非停用词,然后将该词的同义词添加到语句中,具体如下图所示:
图13 随机插入非停用词的同义词引入噪声的样本增强示例
2.5 交叉增强技术
2019年TASS论文中提出了一种源自遗传学中染色体交叉操作的交叉增强技术。听起来特别高大上,通过下图看看具体怎么进行交叉增强的:
图14 交叉增强技术的样本增强示例
上图中有两条积极情感的推特数据,将每条数据分成两段。用数据1中的上半段和数据2中的下半段组成一条新的数据。这种做法假设即使语法和语义不再健全,但是仍然会保留原有的情绪类别。实验证明这种方法虽然对准确性没啥影响,但是F1-score有提升。只想说这都是什么神仙做法,语义和语法信息都变了,感觉这种方法可能适合个别场景。
2.6 操纵语法树技术
操纵语法树技术的思想是通过解析并生成原始语句的依赖树,然后使用规则对原来的语句进行复述从而生成新数据。下面就是一个典型的主动语态和被动语态转换的例子:
图15 主动语态转换成被动语态的样本增强示例
上图中我们把I love NLP转化成NLPis loved by me。这种方法虽然看起来傻傻的,但是细想还是非常不错的一个idea。
2.7 生成式的方法
生成式的方法主要目标是生成额外训练数据的同时保留原始类别的标签。
这类方法的大致流程如下所示:
首先,在训练数据中加入类别标签信息,如下图所示:
图16 数据中加入类别标签信息
这种方法非常类似香侬科技提出的基于类别描述的文本分类模型,感觉思路就是从这里来的。
然后,使用这个修改之后的数据去微调训练一个预训练语言模型,这里可以是BERT/GPT2等。现在好像出来了GPT3,后面会出一篇从GPT、GPT2到GPT3的文章,欢迎小伙伴们关注。如果是GPT2的话,那么目标就是去做生成式任务;如果是BERT模型的话,那么目标就是去预测被Mask的词。
图17 使用GPT2去做生成式任务
最后,得到经过微调的预训练模型后就可以使用类目标签和几个初始的词来帮助模型生成新的数据。下图中就是使用标签信息和前三个词来生成新的数据实现样本增强。
图18 通过生成式的方法生成新的数据
03 实战样本增强技术
3.1 常用的样本增强工具
上面讲了那么多的样本增强技术,具体有哪些好用的第三方库来帮助我们使用这些技术呢?这里可以使用nlpaug和textattack等。说了那么多样本增强技术,整体来看我更倾向于用回译技术和生成式的方法。先借谷歌翻译系统的东风快速增加一批样本用于提升模型的识别能力,然后可以尝试用现在比较火的生成式的方法进一步实现样本增强。
3.2 关于样本增强技术的一些思考
结合我们实际业务来说,通过样本增强技术可以增加一些样本数据,从而帮助我们在当前的语料空间中学习的更好,但是并不能解决语料空间扩展的问题。举个简单的例子,我们现在需要识别理财标签的文本数据。理财标签可能包括基金、股票、保险等等。理财语料空间如下图所示:
图19 理财语料空间图
如果现有的标注数据只有股票和基金相关的语料,通过样本增强技术我们可以丰富这两块的语料空间,从而帮助模型在这两块的语料空间获得更好的文本分类效果。但是如果碰到了保险或者其他之前没有标注过的语料,那么模型的识别效果会变弱。这种情况下我们的解决方案是构造一个线上真实分布query的测试集。当模型训练完成后,我们会使用预先从训练语料中切分出来的测试集来验证模型的效果。这里得到的测试集效果是用于评估模型在已知语料空间中的识别能力。实际项目中我们还会去线上真实分布query测试集验证模型。这块得到的模型效果一般会比较差,因为线上真实分布query测试集可以大致理解成理财的全部语料空间。我们模型的最终目的是在线上真实分布query测试集上表现良好,而不仅仅是在预先划分出来的测试集上表现良好。这里我们可以通过分析线上分布query测试集上预测错误的数据帮助我们扩展语料空间。这是我在实际项目中的一些思考,如果有理解不对的地方也请小伙伴们指出。
总结
本文先介绍了下为什么要使用样本增强技术。在样本数量较少、样本不均衡或者需要提高模型的鲁棒性的场景下,我们可以使用样本增强技术很好的提升模型的泛化能力;然后讲了近几年常用的样本增强技术,其中包括回译技术、词汇替换技术、随机噪声引入技术和生成式的方法等等。通过这些技术我们可以轻松的实现增加训练样本的目的;最后讲了一些常用的样本增强的工具包,比如nlpaug和textattack等。同时分享了下实际项目中对样本增强技术的一些思考。样本增强技术可以增加当前语料空间下的训练样本,但是无法解决语料空间扩展的问题。这里可以通过线上真实分布query数据来扩展语料空间。希望对样本增强技术感兴趣的小伙伴有所帮助。