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

一、背景

作为“住”这一领域的领先互联网企业,贝壳找房以真实大数据、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

可以看到准确率稍有下降,召