测试时遇到没见过的样本?达摩院最新顶会告诉你答案

今天船长给大家分享一篇很棒的,有业务价值的论文。这篇论文来自达摩院Conversation AI团队,主要是解决了业务中常见的问题:在做意图检测的时候,如果意图不在训练集里面出现过,该怎么办?

Estimating Soft Labels for Out-of-Domain Intent Detection | 达摩院 | EMNLP

概念&知识:

910eabe16f8514a21af53e3da9d58cf3.png

图: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意图之间的语义连接。进一步引入了一个联合训练框架,以根据平滑度假设产生最终的软标签,也即,接近的样本可能具有相似的标签。

0c52b30c4efe37205d02b3327ab3d84b.png

图:通过在原IID样本中插入OOD样本来训练,之前的方式(左图)是硬性方式,会把OOD 类标记成为1,其他的IND 类标记成为0。论文(右图)提出的方式,是输出soft的形式,也即红色的OOD 类只有概率0.28

概念介绍完了,接下来介绍一下达摩院的解决方案,话不多说先上图:

5e7dcb756f23ad04e4865108324877e4.png

图:整体训练框架

先看左边的地方,主要使用了一个embedding space的东西,然后尝试去拉远各个意图的embedding空间,embedding graph也是用来去衡量当前意图和其他所有意图的距离。之后会输出Graph-Smoothed Label,再加上来自g1的普通输出,形成为Regined Label,之后会进入到一个co-train(联合训练)的过程当中。好了,流水账的介绍基本结束了,下面开始正儿八经的分模块介绍。

整体训练过程

  1. 构造OOD的sample Dp。

  2. 估计soft label,根据每一个Dp的数据(从第一步来的伪标签)。

  3. 获得k+1个分类器,并且学习到各个意图之间的decision boundry(边界线),k为当前的IND意图类目数,1为OOD意图类目数。

Embedding Space

首先在Embedding Space方面,如何学习到一个好的embedding是一个核心问题,而这种任务用预训练来训练实在是太费劲了,没有使用到对应的类目信息,研究者的解决方案是沿用了之前论文的损失函数来利用CTR loss优化embedding,详见公式:

5ac6623ed77d7c4576a5479d759bc192.png

图:CTR Loss

不得不说这个公式是晦涩难懂的,下面船长为大家讲解一下,首先CTR的核心就是正确与否,那么这个loss也是这个意思,目的是区分开各个类目,下面开始讲解各个符号的含义:

  • S(i): 一个batch里面相同的类目的集合,指的是与xi相同类目的集合。

  • D(I): 所有的IND数据集。

  • 8c346a7c480738115f7f0403a4a16eef.png:xi的embedding。

首先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进行平滑操作:

afd2a81941cc7d8b435fce907da3f746.png

图:由embedding构成的无向图,其中每个节点均来自各个embedding

那么研究者为什么要使用这个图来“平滑”embedding表示呢?正是利用了图的性质,他会根据周围的节点输出一个全新的embedding,利用节点之间的距离作为常数控制其相似程度。下面我们看看公式:

12da9a1880878a3e19782605b2c1a405.png

图:计算公式,用来计算smoothed label

  • 47b51ad819c965f64a45abe86e79503c.png的含义是DI 和 DP的整个集合,也即IND和OOD的整个集合。

  • daed2e2d32a0f4ee06a9c5e20eb8c4cd.png代表了x的embedding向量z。

  • bcde6d267470bda44a58df71dd69e6d8.png指的是对应的label,对于IND来说,代表了k个取值的one hot 向量,对于OOD来说,代表了第k+1个取值的one hot向量。

  • a71bb1fff60c140bc0644d739f45ed7d.png代表了根据周围邻接点聚合而成的新的embedding向量表示。

  • d[] 代表了求距离的函数。

这个公式是什么意思呢?实际上是想求得一个最小值,当我们学习ecc348064ef43e2d0fee641ae6a7de8d.png的时候,左边半个部分d5f1a86082b637553a14106095a7a52a.png是尝试让两个距离拉进,也即是伪标签和正常的标签距离拉进,有半部分是为了鼓励ddee8bd7fd90a1ccc52fee8b193320aa.png和周围的节点有着相似的表达。接下来的公式比较有意思,公式3来自于公式2,也是在做最小化,只不过把9a4b4bebe93d03746703c63066640380.png当做了常数约去,之后只剩下下面的公式。需要注意的是本公式不是来源于本论文,而是来源于之前的文章,方法是普遍用来 做graph-smoothing的。

8c83feab5ddc548185b0d9e6f738a297.png

图:经过公式2 化简之后的结果

Co-Training Framework

这一步来到了联合学习的过程当中,也是自监督学习核心的地方,首先来说,本文用了两个分类器来做这个任务,至于具体为什么是两个,我们在下文进行讲解:

345fb793ec3f6185fb84c94fca4d2dc8.png

  • CE代表了Cross Entropy,是一种非常普遍的分类损失函数。

  • gi代表了分类器gi。

  • f代表了encoder。

e100f3f0467eba0bdd417d2f021b6cfd.png

图:公式4位于整体框架图的红色部分

公式4中的CE是想要计算出两个分布之间的差距,并且缩小这个差距。除去公式4之外,还需要引入关于OOD的loss,那这部分loss就由公式5来计算。

a34cb149801477398bf898d57a813d7d.png

下面说一下各个符号的含义:

  • 00b6d5bc1f870539ee0fc150e8c36148.png是一个普通的常数。

  • 在g1 和 g2 中使用了不同的dropout参数,来促进g1和g2产生结果的多样性。

符号的定义讲解完毕了,那么如何理解公式5呢?这个公式看起来和公式4很相似,也有些不同的地方。我们可以看看下图,船长用红色的线标记出了哪些地方是相关的OOD loss,实际上是想要拉进两个分布之间的距离,第一个分布,是由graph产生的smoothed label,以及g1产生的prediction label相加而得到,第二个是直接来自于g2的产生的prediction label。

当然了,根据本公式,上述的计算方式会进行g1和g2的符号交换,第二种方式第一个分布是由Graph-Smoothed Label + Prediction of g2,第二个分布是由 Prediction of g1 产生得到的。最终第一个方式和第二个方式会进行取平均的过程。

5a0da869c3ac3e221501dd277b330c73.png

图:公式5位于框架中的红色部分

以上就是所有的公式啦,不懂得话可以自己多看几遍论文,yysy,里面的公式符号有点多,船长自己读的时候也会经常忘记。总的来说就由公式6来代表下述的所有Loss,来进行整体的优化。

bbdf7dd5e4aef4bd0c69e207468609b1.png

模型预测

模型是如何预测的呢?本文的解决方案是利用了两个分类器共同的输出结果得到,详见公式7:

0c0b2b195b21cd85bdff291ba4f08543.png

而在做做预测的时候,作者沿用了之前的一个研究工作,利用了Soft Decision Boundary来做最终的预测,这个和本文关系不大,读者可以自行阅读看看。

7504b5379c02be5b808b5212daa76d63.png

实验部分

作者使用了三个数据集来做最终的测试,CLINC150的数据很多,intent也有150个之多,虽然说和工业界的intent不能相提并论,但是也是一个不错的数据集。

046ab58d42805e4dc112f1703ad92e70.png

图:数据集详细概览

结果部分

abd71b828216321f7548d9118ea6b7f5.png

图:最终实验结果

作者画了一张大图来展示他的结果,看提升来说,提升了大概在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向量也会变多,优化器比较难做优化,效果没有保证。

可视化展现

6f27f96e62da8d4d7c40694363e5083f.png

图:可视化展现,图左是普通的onehot,图右是Asoul的方式,其中红色代表了OOD,其他颜色分别是其他领域。

这张图片船长思考了很久,首先作者使用Tsne的方式做可视化的,里面总共包含了六种领域,红色的代表了OOD。在之前的Onehot结果中,可以看出OOD并没有严格的和其他领域区分开,而且OOD的涉及范围很广,并不像右图,OOD都集中在中间的区域。

关于本图,我们思考以下的几个问题:

  • 为什么Tsne的形状这么奇怪?类似一个五角星之类的东西。

    • 这个答案是个玄学问题,本身Tsne属于对维度的压缩,是我们在二维视角对于高纬度视角的一种窥探,所以说形状并不能代表什么,反而是五角星的角都分离开能够说明一些问题,说明各个领域区分的都比较好。船长之前做跨语言学习的时候,也产生了这种“很好看”的可视化图片。

  • OOD应该是和其他的严格区分开吗?

    • 理想情况下是的,OOD作为外来的伪造样本,我们需要学习到这个空间的不同,在IND的原有空间中标记出来。而Asoul虽然和Onehot的方式比起来,效果好了很多,但是有一部分的红点还是和其他领域掺杂在一起,还有优化的空间。

写在最后

这篇论文在之前的对比是One Hot,论文方向属于一个不错的研究方向,目前baseline还不多,利用soft的方式能更好地解决OOD识别的问题。只不过用在业务当中比较困难,因为涉及到的Loss过多,而且还有两个比较复杂的分类器,比较难调参。如果能够设计出一种更加“方便”的模型,可能业务价值更大。


你好,我是一个毕业于南加州大学的算法工程师,就职于大厂,个人喜好极其广泛,擅长深度思考,喜欢思维锻炼。公众号(船长尼莫)旨在和读者共同进步,会有很多原创的算法知识分享、工作求职分享、学者访谈、关于互联网的深度思考、读书分享等等。评论区可以和我积极地互动,也可以写下你想看的内容~😏,点赞关注下吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值