今天船长给大家分享一篇很棒的,有业务价值的论文。这篇论文来自达摩院Conversation AI团队,主要是解决了业务中常见的问题:在做意图检测的时候,如果意图不在训练集里面出现过,该怎么办?
Estimating Soft Labels for Out-of-Domain Intent Detection | 达摩院 | EMNLP
概念&知识:
图:OOD问题概览
OOD:Out Of Domain问题,代表了领域外的问题,也是指测试集中有训练集中没有见过的领域,例如训练集是关于卖货电商类的对话数据,但是测试集是在测金融领域的对话数据。
IND:In The Domain问题,代表了领域内的问题,是指训练集和测试集的领域都是相同的,如果训练数据集是关于电商的,那么测试集也是关于电商的。
首先来回顾一下,什么是OOD (Out of domain) 问题,它是指有一部分测试集,并没有在训练集中出现过的情况,例如上面的图片,词组 “jump twice” 和 “jump”并没有在训练集中出现,我们把他标记成为蓝色,而在训练集中出现过的,我们标记成为绿色。而面对没有在训练集中出现过的数据,我们到底该如何学习呢?
论文的动机是什么?
之前的方式,是在训练样本中引入OOD样本,然后把这批样本标记成为1,如下图的左图,这些热点标签会在训练过程中引入噪声,因为一些“硬”伪OOD样本可能与InDomain(IND)意图一致,举个例子来说,电商领域的对话数据会有意图:询问价钱,那么在金融领域的对话数据集也会有相似的意图:询问基金价钱,本身两个intent很相似,我们并不能够直接判断他两就是不一样的。
达摩院研究者提出了一种自适应软伪标记(ASoul)方法,该方法可以在训练OOD检测器时估计伪OOD样本的软标记。使用嵌入图捕获伪OOD样本和IND意图之间的语义连接。进一步引入了一个联合训练框架,以根据平滑度假设产生最终的软标签,也即,接近的样本可能具有相似的标签。
图:通过在原IID样本中插入OOD样本来训练,之前的方式(左图)是硬性方式,会把OOD 类标记成为1,其他的IND 类标记成为0。论文(右图)提出的方式,是输出soft的形式,也即红色的OOD 类只有概率0.28
概念介绍完了,接下来介绍一下达摩院的解决方案,话不多说先上图:
图:整体训练框架
先看左边的地方,主要使用了一个embedding space的东西,然后尝试去拉远各个意图的embedding空间,embedding graph也是用来去衡量当前意图和其他所有意图的距离。之后会输出Graph-Smoothed Label,再加上来自g1的普通输出,形成为Regined Label,之后会进入到一个co-train(联合训练)的过程当中。好了,流水账的介绍基本结束了,下面开始正儿八经的分模块介绍。
整体训练过程
构造OOD的sample Dp。
估计soft label,根据每一个Dp的数据(从第一步来的伪标签)。
获得k+1个分类器,并且学习到各个意图之间的decision boundry(边界线),k为当前的IND意图类目数,1为OOD意图类目数。
Embedding Space
首先在Embedding Space方面,如何学习到一个好的embedding是一个核心问题,而这种任务用预训练来训练实在是太费劲了,没有使用到对应的类目信息,研究者的解决方案是沿用了之前论文的损失函数来利用CTR loss优化embedding,详见公式:
图:CTR Loss
不得不说这个公式是晦涩难懂的,下面船长为大家讲解一下,首先CTR的核心就是正确与否,那么这个loss也是这个意思,目的是区分开各个类目,下面开始讲解各个符号的含义:
首先log里面是一个sotmax函数,分子上是在计算xi xj 两个embedding的相似度,而分母是将xi 和 其他所有的xk计算出相似度,并且求和,那这个log函数主要是为了算出xi xj 相似度占总共的多少。
其中t可以忽略,主要是一个参数,类似于softmax里面的temperature温度,会控制softmax的程度。再往外面是一个sum求和函数,xj 是在S(i)中的,也就意味着,xj 和 xi是共享有一个类目的。后面的一个sum可以忽略,是另外一个关于数据集D的for循环。总的来说,这个公式的含义,就是为了将相似的类目embedding拉进,而将不同的类目embedding拉远。
Graph-Smoothed Label
在前期获得了好的embedding之后,达摩院小哥创新新的提出了使用无向全连接图的方式来对label进行平滑操作:
图:由embedding构成的无向图,其中每个节点均来自各个embedding
那么研究者为什么要使用这个图来“平滑”embedding表示呢?正是利用了图的性质,他会根据周围的节点输出一个全新的embedding,利用节点之间的距离作为常数控制其相似程度。下面我们看看公式:
图:计算公式,用来计算smoothed label
这个公式是什么意思呢?实际上是想求得一个最小值,当我们学习的时候,左边半个部分是尝试让两个距离拉进,也即是伪标签和正常的标签距离拉进,有半部分是为了鼓励和周围的节点有着相似的表达。接下来的公式比较有意思,公式3来自于公式2,也是在做最小化,只不过把当做了常数约去,之后只剩下下面的公式。需要注意的是本公式不是来源于本论文,而是来源于之前的文章,方法是普遍用来 做graph-smoothing的。
图:经过公式2 化简之后的结果
Co-Training Framework
这一步来到了联合学习的过程当中,也是自监督学习核心的地方,首先来说,本文用了两个分类器来做这个任务,至于具体为什么是两个,我们在下文进行讲解:
CE代表了Cross Entropy,是一种非常普遍的分类损失函数。
gi代表了分类器gi。
f代表了encoder。
图:公式4位于整体框架图的红色部分
公式4中的CE是想要计算出两个分布之间的差距,并且缩小这个差距。除去公式4之外,还需要引入关于OOD的loss,那这部分loss就由公式5来计算。
下面说一下各个符号的含义:
符号的定义讲解完毕了,那么如何理解公式5呢?这个公式看起来和公式4很相似,也有些不同的地方。我们可以看看下图,船长用红色的线标记出了哪些地方是相关的OOD loss,实际上是想要拉进两个分布之间的距离,第一个分布,是由graph产生的smoothed label,以及g1产生的prediction label相加而得到,第二个是直接来自于g2的产生的prediction label。
当然了,根据本公式,上述的计算方式会进行g1和g2的符号交换,第二种方式第一个分布是由Graph-Smoothed Label + Prediction of g2,第二个分布是由 Prediction of g1 产生得到的。最终第一个方式和第二个方式会进行取平均的过程。
图:公式5位于框架中的红色部分
以上就是所有的公式啦,不懂得话可以自己多看几遍论文,yysy,里面的公式符号有点多,船长自己读的时候也会经常忘记。总的来说就由公式6来代表下述的所有Loss,来进行整体的优化。
模型预测
模型是如何预测的呢?本文的解决方案是利用了两个分类器共同的输出结果得到,详见公式7:
而在做做预测的时候,作者沿用了之前的一个研究工作,利用了Soft Decision Boundary来做最终的预测,这个和本文关系不大,读者可以自行阅读看看。
实验部分
作者使用了三个数据集来做最终的测试,CLINC150的数据很多,intent也有150个之多,虽然说和工业界的intent不能相提并论,但是也是一个不错的数据集。
图:数据集详细概览
结果部分
图:最终实验结果
作者画了一张大图来展示他的结果,看提升来说,提升了大概在1~3个点左右,确实是一份实验充足的文章。其中作者的对比实验主要是和之前的伪样本。其中包括:
PD:Phrase Distortion, follows Shu et al. (2021),通过扭曲IND样本生成OOD样本。
FM:Feature Mixup,follows Zhan et al. (2021),使用IND特征的凸组合产生OOD特征。
LG: Latent Generation,follows Zheng et al. (2020a), 从潜在空间解码伪OOD样本。
OS: Open-domain Sampling, follows Zhan et al. (2021) ,使用其他语料库中的句子作为OOD样本。
最后的实验结果是,上述的四种方法在叠加了Asoul之后,效果都很突出,提升了不少,可以见得,作者主要的贡献在于提出了一种framework,而这种方式,能够结合之前所说的伪样本来进行学习。
接下来我们回到之前的问题,为什么是两个分类器,而不是三个,不是4个呢?实际上船长认为,作者在实验的过程中,能够使用两个分类器的实验结果要比一个的要好,为什么这么讲?两个的话,会多出一些类似于Vote(投票)的步骤,让最终的输出结果能够根据两个分类器的输出,综合判断结果。
如果只有一个分类器的时候,没法进行Loss的计算,那样的话会让整个实验变得很平庸。那为什么不是3个或者4个呢?船长认为是可以的,只不过这个需要做实验调参数才能够知道最终的结果,随着分类器变多,生成的intent向量也会变多,优化器比较难做优化,效果没有保证。
可视化展现
图:可视化展现,图左是普通的onehot,图右是Asoul的方式,其中红色代表了OOD,其他颜色分别是其他领域。
这张图片船长思考了很久,首先作者使用Tsne的方式做可视化的,里面总共包含了六种领域,红色的代表了OOD。在之前的Onehot结果中,可以看出OOD并没有严格的和其他领域区分开,而且OOD的涉及范围很广,并不像右图,OOD都集中在中间的区域。
关于本图,我们思考以下的几个问题:
为什么Tsne的形状这么奇怪?类似一个五角星之类的东西。
这个答案是个玄学问题,本身Tsne属于对维度的压缩,是我们在二维视角对于高纬度视角的一种窥探,所以说形状并不能代表什么,反而是五角星的角都分离开能够说明一些问题,说明各个领域区分的都比较好。船长之前做跨语言学习的时候,也产生了这种“很好看”的可视化图片。
OOD应该是和其他的严格区分开吗?
理想情况下是的,OOD作为外来的伪造样本,我们需要学习到这个空间的不同,在IND的原有空间中标记出来。而Asoul虽然和Onehot的方式比起来,效果好了很多,但是有一部分的红点还是和其他领域掺杂在一起,还有优化的空间。
写在最后
这篇论文在之前的对比是One Hot,论文方向属于一个不错的研究方向,目前baseline还不多,利用soft的方式能更好地解决OOD识别的问题。只不过用在业务当中比较困难,因为涉及到的Loss过多,而且还有两个比较复杂的分类器,比较难调参。如果能够设计出一种更加“方便”的模型,可能业务价值更大。
你好,我是一个毕业于南加州大学的算法工程师,就职于大厂,个人喜好极其广泛,擅长深度思考,喜欢思维锻炼。公众号(船长尼莫)旨在和读者共同进步,会有很多原创的算法知识分享、工作求职分享、学者访谈、关于互联网的深度思考、读书分享等等。评论区可以和我积极地互动,也可以写下你想看的内容~,点赞关注下吧!