28

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

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MjM5ODkzMzMwMQ%3D%3D&%3Bmid=2650417943&%3Bidx=2&%3Bsn=683fb2c8120d16860ff969270299bac4
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

深度学习已经在计算机视觉、语音识别、自然语言处理等领域取得了突出的进展,其中有监督学习起到了至关重要的作用。然而,有监督的深度学习极大地依赖大规模的标注数据,在实际项目中,我们通常会面临少样本、样本分布不均衡等场景。因此,如何运用数据增强技术来改善上述问题是近年来的热点问题之一。

一、背景

作为“住”这一领域的领先互联网企业,贝壳找房以真实大数据、VR技术、AI产品等重塑了人、房、客、数据的交互,有效提升了行业效率,这背后离不开大量自然语言处理任务的支持。在NLP的很多任务中,如情感分析、意图识别等,都会遇到数据不均衡问题,一定程度上限制了模型的表现。此外,房产领域技术的革新往往会推动新项目的立项,快速地迭代使得我们对数据的需求越来越大,而短时间内往往难以获得实验所需量级的数据。这些问题促使着我们对数据增强技术进行探索与实践。由于我们的场景主要在文本上,所以本篇文章主要记录基于文本的数据增强实践。

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

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

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

六、参考文献

[1] Wei J, Zou K. Eda: Easy data augmentation techniques for boosting performance on text classification tasks[J]. arXiv preprint arXiv:1901.11196, 2019.

[2] Berthelot D, Carlini N, Goodfellow I, et al. Mixmatch: A holistic approach to semi-supervised learning[C]//Advances in Neural Information Processing Systems. 2019: 5049-5059.

[3] Xie Q, Dai Z, Hovy E, et al. Unsupervised data augmentation for consistency training[J]. arXiv preprint arXiv:1904.12848, 2019.

[4] https://zhuanlan.zhihu.com/p/66281890

[5] https://zhuanlan.zhihu.com/p/66564694

作者介绍

杨蕴凯,2019年6月毕业于武汉大学计算机学院,毕业后加入贝壳找房语言智能部,主要从事自然语言理解相关工作。

戳下面 :point_down:

语言智能部等你加入,工程&算法超多岗位!

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。 星标具体步骤为:

(1)点击页面 最上方"AINLP" ,进入公众号主页。

(2)点击 右上角的小点点 ,在弹出页面点击“ 设为星标 ”,就可以啦。

感谢支持,比心

欢迎加入文本分类交流群

进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注 文本分类 yi6vEbV.jpg!mobile

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。

yamaeu.jpg!mobile

阅读至此了,分享、点赞、在看三选一吧:pray:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK