一、转自

数据增强在贝壳找房文本分类中的应用

二、传统文本数据增强方法

传统的NLP数据增强大致有两种思路,一个是加噪,另一个是回译。加噪即为在原数据的基础上通过替换、删除等方式创造和原数据相似的新数据。回译则是将原有的数据翻译为其他语言再翻译回原语言,翻译的中间链路可以随着引入更多的语言延长,由于语言逻辑顺序等的不同,回译的方法也往往能够得到和原数据相差较大的新数据。下面主要介绍两种方法。

2.1 加噪法

2.1.1 同义词替换(SR: Synonyms Replace)

从句子中随机选择n个非停用词,每个词随机选择一个同义词来替换。

输入: 推荐个海淀区的两居室

输出: 介绍个海淀区的两卧

2.1.2 随机插入(RI: Randomly Insert)

不考虑停用词,随机抽取一个词,然后在该词的同义词集合中随机选择一个,插入原句子中的随机位置,该过程可以重复n次。

输入: 推荐个海淀区的两居室

输出: 推荐个介绍海淀区的两居室

2.1.3 随机交换(RS: Randomly Swap)

句子中,随机选择两个词,交换位置,该过程可以重复n次

输入: 推荐个海淀区的两居室

输出: 两居室个海淀区的推荐

2.1.4 随机删除(RD: Randomly Delete)

句子中的每个词,以概率p随机删除

输入: 推荐个海淀区的两居室

输出: 推荐个的两居室

2.2 回译法

回译的方法往往能够增加文本数据的多样性,相比替换词来说,有时可以改变句法结构等,并保留语义信息。但是,回译的方法产生的数据依赖于翻译的质量,大多数出现的翻译结果可能并不那么准确。而实现回译的方案有两种:

  • 开放的翻译接口,如谷歌翻译、百度翻译、搜狗翻译等
  • 自己收集平行语料,训练seq2seq、transformer等翻译模型

实际应用时,法2往往没有使用翻译工具效果好,而且投入成本比较高。

利用翻译工具,进行汉-英回译,效果如下所示:

Input Output Evaluation
这里上的是哪个公立幼儿园? 这是哪个公立幼儿园? good
能上什么幼儿园? 我可以去哪个幼儿园? good
你好在链家买房子手续费多少? 一个家庭买房要多少钱? bad
加上中介费要十多万? 加上代理费超过10万? good
中介费百分之多少 代理费的百分比 good

可以看到大部分回译结果是可用的,并且丰富了表达,增加了文本多样性。

三、深度学习数据增强技术

人类的学习方法是半监督学习,能够从大量的未标注数据和极少量的标记数据学习。在NLP任务中,有大量未经使用的未标注数据,相比于上文介绍的利用已标注数据来做增强,有广大的前景。受人类学习方法的启发,研究者在半监督学习方向做了一些探索。

3.1 半监督MixMatch

此方法来源谷歌论文,作者集百家之长,设计了一种通用的训练框架。主要体现了4个思想。

  • 自洽原则:即对未标注数据进行数据增强,产生的新数据输入分类器,预测结果应该保持自洽。
  • 最小化熵:熵值越高,不确定性也就越高;反之,熵值最小化,可以使得信息更为确定,具体到分类任务,更能明显地判断预测出的类别。在半监督任务中,最小化未标注数据的概率熵有助于分类边界的确定。
  • 传统正则:无需多言,是对训练参数加正则限定防止过拟合。
  • Mixup: 一种数据增强方式,是数据的线性组合。

作者提出将有标签数据和无标签数据同时进行增强,其中有标签数据做一次增强,未标签数据做k次,通过标注数据训练的模型可以得到未标注数据增强后的概率分布,做最小化熵操作,最后分别将增强后的有标签数据和无标签数据与(k+1)个batch的混合数据做Mixup,由于Mixup过程是针对图像数据而言的,因此我们没有进行实践。只学习其主要思想。

3.2 无监督数据增强UDA

UDA虽然叫无监督数据增强,本质上也是半监督学习,利用了有标签数据引导无标签增广数据,只是其并未对有标签数据做增强。作者把目光聚焦到增强方式部分,提出更好的变换方式能有更好的表现,根据不同任务设置相适应的变换方法尤为重要。仅对未标注数据增强,并通过结合已标注数据的交叉熵损失做一致性训练,使得UDA能够将标签信息由标注数据引入到无标注数据。

此外,可以看到半监督学习方法中都要设法降低标注数据的影响,MixMatch是对未标注数据增强做k次增强(标注数据增强1次),而UDA新颖的设计了TSA(Training Signal Annealing),即通过函数控制阈值,使其从低到高变化,每次训练只用到模型预测置信度低于阈值的数据,以此策略来逐步引入标注数据,常用的函数有线性函数,log函数和指数函数。

3.3 数据清洗

谈到数据增强,少有提到数据清洗的。实际上,这是十分必要的一步,也蕴含在半监督学习方法之中。半监督学习方法利用L2损失或者KL散度来度量增强前后的差异,其实是控制模型选择增强前后差异小、分布变化不大的数据。

而对于传统的增强方法,加噪法本身就增加了噪声,回译法受限于翻译工具的质量也会生成一些脏数据,对增强后的数据进行清洗能够提升模型的表现,我们在实验中尝试了kmeans清洗法,此外,还可以考虑置信度学习的方法进行清洗。

四、实验

上文简单地介绍了数据增强方向主流的方法,大部分都在我们的任务中做了实践。

4.1 样本不均衡场景

意图识别是小贝助手实现的关键一环,直接影响着下游的决策。由于意图划分粒度较细,不同类别的数量差距明显,显然这是个样本不均衡场景。

每个意图有对应的技能,比如:房源价格、房源楼层等是不同的意图,但都属于“房屋信息”这一技能。通过归因分析,发现很多意图的预测错误源自技能层的错误划分,而技能层的数量分布同样很不均衡,尤其是other类,占比极高。

4.1.1 实验一

首先,我们尝试在技能层对数量少的类别做数据增强。实验发现,在多个技能下,召回提升明显,准确率稍有下降。以数据量比较少,预测结果比较差的“房源对比”技能为例,结果如下所示:

method precision recall support
baseline 0.23 0.29 35
EDA 0.18 0.46 35
回译 0.18 0.34 35
回译+EDA 0.18 0.49 35

: eda选择1:4扩充,回译1:1

可以看到准确率稍有下降,召回提升明显,其中回译和EDA混合使用效果最佳,在其他技能上类似的结果。

4.1.2 实验二

在业务中,我们往往更关注预测的准确率,既然发现数据增强对召回提升明显,我们想到在other类上再次尝试,other类恰恰是我们不关注准确更关注召回的类别。

method precision recall support
baseline 0.720 0.710 3566
EDA 0.690 0.730 3566
EDA+kmeans 0.710 0.710 3566
回译 0.695 0.730 3566
回译+kmeans 0.690 0.745 3566
回译+EDA 0.685 0.765 3566
回译+EDA+kmeans 0.690 0.770 3566

本次实验引入了kmeans进行数据清洗,具体做法是对聚完类的类簇随机删除某一簇或某几簇,实验结果同样表明,回译和EDA混合使用效果会有提升,同时,用kmeans清洗后效果达到最佳。

4.2 样本量稀疏场景

在快节奏的今天,越来越多的客户选择vr看房,vr带看场景意图识别是一个急需的需求。项目成立初期,数据量较少,我们考虑了数据增强来提升模型表现。考虑到这批数据量差别相对不是那么大,我们尝试了UDA。整体意图识别结果如下所示。

method precision recall support
baseline 0.716 0.568 634
transformer+增强 0.744 0.584 634
uda-50 0.663 0.512 634
transformer-50 0.696 0.550 634

实验结果表明增强后准召都有明显提升,由于uda每个标签用50条数据,对比了一下transformer同样训练集下的效果,uda的实验效果差一些,一方面由于使用数据受限,必须要求每个标签使用同样数目数据;另一方面,可能由于未标注数据的选择对模型造成了干扰,目前uda在多项任务中效果都不如直接使用transformer或albert好。

五、总结

在贝壳NLP的真实任务中,我们对数据增强做了验证,结果发现在不均衡场景中,可以有效提升召回,而在少量样本场景下,能同时对准召有明显提升,证明了我们研究方向的正确,结果符合预期。

然而,需要注意的是虽然数据增强方法能够得到很好的多样性和有效性。但是,由于多样性是通过改变原始数据得到的,所以,它存在改变数据类别的风险,好的结果往往是多样性与有效性的折中,理想的效果往往离不开数据清洗。如何进一步达到这一折中更充分地利用数据将会是我们今后的研究方向。

Reference

1、 https://mp.weixin.qq.com/s/oSOYIKO_75A2wzGg9EY8-A

打赏

微信 微信 支付宝 支付宝
万分感谢