数据增强在贝壳找房文本分类中的应用
深度学习已经在计算机视觉、语音识别、自然语言处理等领域取得了突出的进展,其中有监督学习起到了至关重要的作用。然而,有监督的深度学习极大地依赖大规模的标注数据,在实际项目中,我们通常会面临少样本、样本分布不均衡等场景。因此,如何运用数据增强技术来改善上述问题是近年来的热点问题之一。
一、背景
作为“住”这一领域的领先互联网企业,贝壳找房以真实大数据、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往往没有使用翻译工具效果好,而且投入成本比较高。
利用翻译工具,进行汉-英回译,效果如下所示:
InputOutputEvaluation这里上的是哪个公立幼儿园?这是哪个公立幼儿园?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 实验一
首先,我们尝试在技能层对数量少的类别做数据增强。实验发现,在多个技能下,召回提升明显,准确率稍有下降。以数据量比较少,预测结果比较差的“房源对比”技能为例,结果如下所示:
methodprecisionrecallsupportbaseline0.230.2935EDA0.180.4635回译0.180.3435回译+EDA0.180.4935
注: eda选择1:4扩充,回译1:1
可以看到准确率稍有下降,召
- 原文作者:知识铺
- 原文链接:https://geek.zshipu.com/post/%E4%BA%92%E8%81%94%E7%BD%91/%E6%95%B0%E6%8D%AE%E5%A2%9E%E5%BC%BA%E5%9C%A8%E8%B4%9D%E5%A3%B3%E6%89%BE%E6%88%BF%E6%96%87%E6%9C%AC%E5%88%86%E7%B1%BB%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com