查看原文
其他

ACL 2022 | DialogVED:用于对话回复生成的预训练隐变量编码-解码模型

Hanscal PaperWeekly 2022-07-04


©作者 | Hanscal

研究方向 | 知识图谱、对话系统



论文标题:

DialogVED: A Pre-trained Latent Variable Encoder-Decoder Model for Dialog Response Generation

论文链接:

https://openreview.net/forum?id=WuVA5LBX5zf

这是复旦大学数据智能与社会计算实验室 (Fudan DISC) 在 ACL 2022 上提出的一篇对话预训练的工作。针对开放域中怎么产生相关性和多样化的回复这个重要的研究课题,论文中提出了一种新的对话预训练框架 DialogVED,它将连续隐变量引入增强的编码器-解码器框架中,以提高生成回复的相关性和多样性。 

对话回复生成中有一个众所周知的一对多问题,即单个对话上下文可以跟随多个合理的回复。现有的工作引入了潜变量来模拟这个问题。最近,PLATO 在预训练对话模型中引入了离散隐变量,并在多个下游响应生成任务中展示了显著的性能提升。除了离散潜变量外,连续潜变量也通常用于建模对话系统中的一对多映射,但将连续隐变量与大规模语言预训练结合的潜力却很少有人探索。


优化内容
在本文中,作者就提出了一种将连续隐变量引入到编码器-解码器框架的模型 DialogVED,并同时优化以下 4 个训练目标来进行预训练:1)掩码语言模型损失,以增强编码器对上下文的理解,2)具有 n-gram 损失的响应生成损失,以提高解码器的规划能力, 3)Kullback-Leibler 散度损失,以最小化隐变量的后验分布和先验分布之间的差异,以及 4)词袋损失以减少后验分布崩溃。此外,还探讨了绝对和相对位置编码对模型性能的影响。



模型结构

DialogVED 由编码器、解码器和隐变量组成,其中编码器决定隐空间的分布,隐变量则从隐空间中抽样得到,编码器和隐变量共同引导解码器,整体框架如下图所示,黄色框中四个 task 就是所需要优化的内容:

▲ DialogVED的预训练和微调框架



编码器

使用多层 Transformer 编码器来编码对话上下文,为了提高编码器的理解能力和对噪声的鲁棒性,使用 span masking 的方式随机遮盖了部分上下文。过程中采用一种简单的方法来遮盖 span:1)在上下文中随机选择 n 个 token,表示为 S ;2)对于每个 token ,将其扩展到一个固定长度为 m 的文本 span;3)在排序、去重和检查边界之后遮盖所有选中的标记 token。和 BERT 类似,控制上下文中被掩码的 token 总数约占 15%,并使用被遮盖的 token 经过编码后的隐状态表示去预测自身。仅在预训练阶段,进行 span-making 屏蔽上下文操作,损失函数为:

▲ 屏蔽词预测的交叉熵损失函数


LSM 是 log softmax 函数。



隐变量


直观上,引入隐变量可以提供了分层的生成方式,即利用隐变量确定高级语义,然后进行解码以生成句子级别的句法和词汇细节。与变分自编码器类似,主要最小化以下两个损失项:重建损失(或负对数似然)和 K-L 正则化项:


▲ 重建损失函数


▲ KL正则化项


由于在训练过程中,KL 损失会迅速下降到 0(KL 消失或后验坍塌),隐变量空间失去表达能力,于是本文中引入了两种方法来改善 KL 散度消失这种情况,一种是 Free Bits,在 KL 损失中引入 Hinge loss 范式,即在损失函数中加入一个常量 λ,另一种是 Bag-of-words predicting,阻碍模型以自回归的范式来进行预测词而引入的损失函数。


Free Bits 中,为了能让更多的信息被编码到隐变量里,让 KL 项的每一维都 “保留一点空间”。具体来说,如果这一维的 KL 值太小,就不去优化它,等到它增大超过一个阈值再优化。 


Bag-of-words Predicting 中,让隐变量以非自回归方式预测响应中的单词,即鼓励隐变量中可以尽可能包含回复的词汇信息。这个方法可以看做是增大了重建损失的权重,让模型更多去关注优化重建损失项。


▲ 第一种是Free Bits Loss,第二种是Bag-of-words Loss


作者在上下文的开头添加了一个特殊的分类标记 [CLS],其对应的隐状态表示用于表示全局的对话上下文。假设隐向量的后验分布为正态分布,并使用 MLP 层将 [CLS] 对应的应状态映射为隐空间的均值和对数方差,通过对该正态分布进行抽样,即可得到对应的隐变量,之后将这个隐变量输入到解码器中。 


到此可以看到,损失函数由 4 项构成:1)编码器端的遮盖语言损失;2)基于未来预测的 n-ngram 响应生成损失;3)隐变量先验分布和后验分布的 K-L 散度损失;4)词袋预测损失。



解码器


在解码器中使用了未来预测策略,和每个时间步只预测下一个 token 不同,未来预测同时预测 n 个未来 token。具体来说,原始的 Seq2Seq 模型旨在优化条件似然函数 ,而未来预测策略将预测的优化目标为 ,其中 表示下一个连续的 n 个未来 token。未来的 n-gram 预测损失可以明确地鼓励模型规划未来的 token 预测,并防止对强局部相关性的过度拟合。
同时,在解码器中采用了 ProphetNet 中提出的 n-stream 自注意力机制。n-stream 自注意力机制在 main stream(主流)之外加入了n个额外的自注意力 predicting stream(预测流),这些预测流分别用于预测 n 个连续的未来 token。Main stream 和 predicting stream 的工作原理建议读者阅读 ProphetNet [2]。 
最后,为了连接隐变量和解码器,采取了类似 OPTIMUS [3] 中提出的 Memory Scheme,即将隐变量映射为一个额外的 memory vector ,这是一个额外的键值对。memory vector 相当于在解码时加入一个虚拟 token 参与 main stream 自注意力的计算,而 predicting stream 通过与 main stream 交互受到 memory vector 隐式的影响。这样隐变量就可以通过 memory vector 引导解码器每一步的生成。


总结

本文总结如下:1)提出了一个预训练对话模型,它将连续的隐变量纳入增强的编码器-解码器预训练框架;2)探索了隐变量大小、不同解码策略、轮次和角色的位置编码对模型性能的影响;3)实验表明,模型在多个下游任务中实现了较好的性能,在响应生成方面具有更好的相关性和多样性。

参考文献

[1] DialogVED: A Pre-trained Latent Variable Encoder-Decoder Model for Dialog Response Generation 

[2] Prophetnet: Predicting future n-gram for sequence-to-sequence pre-training 

[3] Optimus: Organizing sentences via pre-trained modeling of a latent space



送福利啦!


独家定制炼丹中/Fine-Tuning

超超超超超大鼠标垫

限量 200 份 

扫码回复「鼠标垫」 

立即免费参与领取 

👇👇👇



🔍


现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧



·

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存