前言
今天要介绍的这篇是将对比学习应用到对话系统的一篇最新paper
GALAXY: https://arxiv.org/pdf/2111.14592.pdf
废话不多说,直接开始~
也欢迎文末关注笔者的微信公众号等等,会有更多好内容分享给大家~
贡献
先给出其贡献点。
(1)第一个使用半监督让模型显示学习对话策略的研究。
(2)实验结果显示了方法的有效性,其学习到了对话策略。
(3)同时利用了有标签数据和无标签数据,给这一领域带来一些启发。
对话预训练模型
一个任务型对话系统,可以概括成三个基础能力:
(1)Dialog understanding:从用户话语中提取结构化语义。
(2)Policy planning:判断对话意图。
(3)Dialog generation:产生合适的语句,返回结果。
近年来端到端的预训练模型被广泛的应用到任务型对话系统,将其转化为了一个生产式任务,效果取得了显著性提高。本篇paper也是采用的预训练模型进行的。
问题
当前对话型预训练模型在大规模数据集上预训练时面临如下问题:
(1)各种对话语料标记注释的不一致
(2)大部分语料是没有标签的
(3)大部分语料由于没有标签只能进行自监督训练,所以只能学到一些通用的知识,一些对话策略没有被很好的利用
数据集
这里利用了两个数据集,一个是带有标签的数据集,另一个是不带有标签的数据集分别为UniDA和UnDial。
UniDA
这里作者整理了已有的8个benchmarks数据集,并采用ISO的方式,整体进行了标准,使得其成为了一个新的具有统一标签的数据集即UniDA,具体的一共是20种标签(下面描述都简称DA),如下:
大的方面分为Social Convention、Directive、Information Seeking、Information Providing、Information Checking五个方面,比如Social Convention是最基本的一些社会用语,包含hello,thanks等等,更详细的可以看paper的附录A.1。
最后的形成的UniDA数据集如下:
UnDial
作者这里从网络上爬取了大量的对话数据,包括论坛聊天等等,然后进行预处理最后得到一个大的无标签数据集,具体的预处理逻辑包括比如(1)去除带有url的(2)除去有连续重复三次以上单词的等等,更多详细的可以看附录A.2。
详细的统计信息如下:
最后生成的UnDial数据集统计信息如下:
方法
整体框架
这里采用的整体框架是UniLM,它包含了一个双向的encoder用以表征语义和一个单向的decoder用以生成。具体的输入端形式如下:包含tokens, roles, turns, and positions四个embedding。详细的见附录B.1
Pre-training Objectives
这部分是预训练任务,是全文最重要的idea,包含response selection, response generation, DA prediction and consistency regularization四个部分
整体如上,左边是上述提到的输入,左边是预训练任务,蓝色线代表双向attention,橙色线代表单向attention。
下面一个一个来看
response selection
说白了这个任务就是看一对pair(context,reponse)是否匹配,是一个二分类任务,其能够学到一些对话上下文语义,具体的这一任务是在双向encoder层最后加一个二分类head进行,如上图最左边的的RS。
正样本对就是真实的pair,负样本对就是从语料中随机抽reponse。
response generation
就是一个基本的根据context生成reponse的生成任务,采用的是loglikelihood loss。
DA prediction
这里利用的是有标签数据UniDA, 任务是预测标签,由于一些responses有多个DA,所以这里视作为一个多标签分类任务。所以最后接的head是一个sigmoid。
Consistency Regularization
这里利用的是无标签数据UnDial,具体思路采用的就是最近大火的对比学习,感兴趣的小伙伴可以看笔者之前的一篇博客:
这里数据增强也是借鉴了Simsce等paper,采用的是dropout。
具体为:
两次dropout得到两个不同的表征,然后经过softmax,即如下
然后基于 和 做kl散度。
c代表context,a代表DA标签。
Semi-supervised Pre-training Paradigm
这里主要讲怎么联合训练这些上述任务。
对于有标签UniDA数据集,直接相加上述四个loss即:
对于无标签UnDial数据集,由于没有标签,所以无法进行DA prediction 任务所以是其余三个任务loss相加:
这里需要说明的是,由于UnDial数据集包含了大量开放领域对话数据,有很多noisy,所以这里设计了一个门机制(公式中的g)用来只选择那些好样本参与训练。具体的思路就是
其中
可以看到,说白了就是选择熵小的,熵小就代表判断DA类别越问题,举个例子:假设一共4个类别那么
(0.7,0.1,0.1,0.1)的熵要小于(0.25,0.25,0.25,0.25)。说白了前者这个样本比较确定结果,后者这个样本模型都不知道其属于哪个DA,那么我们就不要了。
总的来说最后预训练总loss就是上述两个loss的加和:
训练过程中,将UniDA和UnDial数据集shuffle,随机batch,进行训练。
Fine-tuning and Inference
在fine-tuning 阶段,对于有DA标签的任务,这里将DA标签和response组合成新的reponse,供模型生成,如果没有,那任务就只生成response,同时为了避免fintune任务和pretrain任务差异过大,所以在fintune阶段还说保留了DA prediction任务。如下:
需要注意,对于有DA标签的下游任务,这里的 ,相反
实验结果
(1)首先来看整体收益
在MultiWOZ2.0和MultiWOZ2.1上采用了Inform、Success和BLEU三个指标,为了得到一个整体的性能,这里使用的是Comb = (Inform + Success)×0.5+BLEU 。
同理在In-Car上采用了Match、 SuccF1和BLEU三个指标,为了得到一个整体的性能,这里使用的是Comb = (Match + SuccF1)×0.5+BLEU。
可以看到结果都是最好
(2)再来看dialog policy预训练任务的有效性
为了消除模型带来的偏差,这里用了UniLM和PLATO两种模型作为baseline,其中TOD-UniLM 和TOD-PLATO代表在UniDA和UnDial数据集上预训练原始数据的original objectives任务,同样Fine-tuning阶段也保持一致。
(3)半监督方式的有效性
这里对比了本文提出半监督方式的有效性,具体对比的baseline是Pseudo-Labeling、 Variation Autoencoder (VAE)和multi-task learning。
其中前两种方式可以具有看附录C。
第三种方式就是图片中的 ,即不加Consistency Regularization这一预训练任务。其实就是对Consistency Regularization这一loss的一个消融实验。
(4)低资源场景下的性能
这里同时验证了一下模型在低资源(小样本)场景下的性能
分析讨论
这里作者对所提方法为什么会有效,进行了一些讨论和实验,进一步加以说明
(1)学习曲线
为了模拟真实场景(有少量有标签的数据和大量无标签的数据),作者使用10%的UniDA数据+所有UnDial 数据作为train,剩下的90%UniDA数据作为test进行实验,结果如上。
可以看到在一开始KL loss降到了0,说明模型坍塌了,所有特征输出趋向于常数,但是由于DA prediction 任务的存在,这一问题在后面的迭代中得到了缓和,同时由于Consistency Regularization的存在,避免了DA prediction的过拟合,即随着training F1的持续增加,test F1没有出现下降。
(2)消融实验
这里是对预训练任务的一个消融实验。
(3)具体case
这里具体给了一个case,对比的baseline是UBAR,可以看到GALAXY在两轮的对话中都取得正确答案。
总结
总的来说,还是通过对比学习,将大规模的无标签数据进行了利用。对比学习利用无标签数据这一trick其实已经被用到了方方面面,比如多模态中的大一统模型等等,所以说是一个热点。
另外最近较火的还有Prompt,甚至已经有论文将Prompt+对比学习结合了起来PromptBert。将最近这些火的idea,结合结合,如果很好的能应用到一个领域,那下一个靓仔就是你,赶快头脑风暴,卷起来吧~~
关注
微信公众号
知乎:
github: