来源:ACL2018
源码:snakeztc/NeuralDialog-LAED 1
转自:https://bigquant.com/community/t/topic/121085
原文连接:https://zhuanlan.zhihu.com/p/37630801
题目太长,翻成中文。
Introduction
基于编码器-解码器的对话模型已经很普遍了,结合神经网络基本上是端到端的思路。但是中间的控制过程,模型无法给出可解释的生成动作,这里的动作指离散的变量,如对话主题,意图等。虽然在任务型对话系统中,对话管理器也会有可解释的对话动作和slot-value对,但是推广性差,容易局限在垂直领域,且依赖人工标注。从生成式对话模型的可解释表示学习出发,作者提出了两种无监督的VAE模型:DI-VAE和DI-VST,可以和现有的encoder-decoder框架结合,去做可解释的对话生成。
涉及三个变量:
: context
: response
: latent action
作者首先定义了 具备可解释性的两个性质:
必须能明显的表示回复
的句子级特征;
的含义必须和语境
无关;
第一条显然的,关于第二条,作者的解释是:假如 中每个类的含义随着语境变化而变化,就很难从所有的回复中获取一致的解释性。
然后,作者定义了四个模块:
: 识别网络,从输入的回复映射到
,
;
: 生成器,从
重建句子
,提供训练
的损失信号;
: 编码器-解码器网络,负责重建回复
,
;
: 策略网络,从语境生成动作
,
;
前两个模块负责可解释 的学习(如图1),后两个模块将
嵌入到编-解码器中,生成对话的回复。
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
图1 识别网络-隐动作表示-生成网络 框架
Model
从自动编码中学习句子表示: DI-VAE
涉及识别网络 和生成器
。定义了
有M个,
;每个
是一个K类别的离散变量。
如图1,回复 经过编码获得句子表示
,再通过投影,Softmax映射为离散变量
的后验分布 :
然后用Gumbel-Softmax从分布中采样 的概率。
为了获得解码器RNN的初始状态,作者定义了从离散的隐变量 到
的映射。比如
表示情感,有高兴,悲伤等K个种类,那么
就相当于各个情感向量构成的矩阵
。用前面采样到的
的各个类别概率,对矩阵
加权求和,就会获得关于情感向量的表示
。然后,将所有的动作向量求和,就得到解码器的初始状态:
然后解码器重建回复,最大化置信下界目标函数**(ELBO),**到这里仍然是按照VAE的训练思路。
但是在ELBO的训练中, 经常存在“后验崩塌”的问题,也就是KL损失被忽略,训练降为0。对VAE的目标函数推对所有的数据 取期望:
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
然后,对 KL 损失项关于所有数据 取期望,推导(具体参见论文),会得到
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
(2) 带入(1), 得到
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
是识别网络后验分布的期望,而
是关于
和
的互信息。这就说明了一个问题:在最大化(3)的ELBO时,会导致互信息
减小,也就是迫使
包含
的信息越来越少,这就说明为什么VAE的训练中,隐变量容易忽略,特别是解码器特别强大的时候,重建损失会占据主导。
那么很自然的,为了让隐变量 编码入更多和
相关的信息,只要将互信息项移到目标函数的左边:
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
VAE with Information Maximization
这样联合优化ELBO和互信息项就可以避免隐变量的信息丢失,同时仍然保持利用后验分布逼近复杂的先验分布的优化思想。
(4)的具体实现上,就简单多了:
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
作者把(6)式称为Batch Prior Regularization (BPR). 在训练的时候,(5)式是利用一个batch 去近似计算
。
到这里,(4)式就是 discrete infoVAE with BPR, DI-VAE.
从语境中学习句子表示: DI-VST
DI-VAE是通过对句子的重建来学习隐变量的,论文中还借鉴了Skip thought(ST) 模型,拓展了另一种模型:通过一个句子的表示,去预测前一个句子和后一个句子。因为在对话中,一个回复是和上下文高度相关的,所以这个思想具有一定可行性的。因此,将DI-VAE的重建句子项替换为预测前一句 和后一句
,就得到:
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
和编-解码器的结合:LAED
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
图2:DI-VAE和LAED的结合框架图(按个人理解所画)
前面两个模型都在学习可解释的离散隐变量 , 接下来是将
和我们最熟悉的encoder-decoder框架以及策略网络结合。编码器从dialog context
获得分布式表示
;解码器通过
和识别网络采样的
生成回复
。编-解码器和策略网络的联合训练目标则是
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
训练策略网络的目的是让预测的 接近识别网络的
,然后在测试生成的时候就可以用策略网络的
去合成回复了。另外,单纯依靠
输入到解码器无法保证生成的回复体现
的属性,需要引入一个鉴别器,当生成回复没表现
时进行惩罚。这也是借鉴去年的一篇可控文本生成论文[1]的套路。
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
注意因为解码器 每步输出的是的离散的单词,(9)式没法完成梯度回传,因此同样采用了论文[1]中的deterministic continuous relation 做法,具体就是把
的离散单词输入替换为概率加权后的word embedding:
,
是词向量矩阵,
就是解码器在每一步输出的归一化概率。这样,结合属性鉴别损失,得到最终的目标函数:
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
和传统VAE的区别
其实从(8)式来看,LAED的目标函数和CVAE是很像的:
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
但不同点在于CVAE希望 和
能和context
有更多的互信息
,也就是CVAE里面的
是和依赖于
的,而LAED学到的
是独立于context
的,这种独立性保证了
的可解释性和推广性。
Experiments and Results
论文在四个数据集上进行了实验:Penn Treebank(PTB), Stanford Multi-Domain Dialog(SMD), Daily Dialog(DD)和 Switchboard(SW),后面3个包括了任务型对话和开放领域闲聊对话。
- 模型对句子的离散表示能力
指标主要是困惑度(Perplexity, PPL), KL散度, 互信息I(x, z). DAE和DST分别是DI-VAE和DI-VST去掉KL(q|p)项,“退化版”的离散自动编码器。对应的,DVAE和DVST分别是离散版本的VAE和VST,基于ELBO训练。
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
可以看到,所有的模型都比RNNLM好,DI-VAE能取得最好的性能。在训练的时候会发现:
- DAE很快学会重建输入,在缺乏其他约束的情况下容易过拟合。
- DVAE如果按照标准的训练方法,学到的互信息I(x,z)为0,只有在加了KL-annealing和词袋损失之后,才能学到很少的互信息;
- 从DD数据集来看,DI-VST模型能利用BPR正则,学到更有意义的隐变量表示,进一步提升DST的PPL指标。
- 隐变量的个数和维数对表示能力的影响
再介绍一个比较有意思的实验,通过固定隐变量的表示能力,即隐变量的个数K和维数M,比如 ,比较不同K, M设置下模型的性能:
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
可以看到,多个低维隐变量的表征能力强于少量高维隐变量。说明在一定程度上,特征的个数(隐变量个数)比特征的种类数(维度)更重要,能带来更强的表征能力。
- 隐动作的可解释性
接下来是衡量隐含动作的可解释性,重点介绍一下人工评估实验。先让专家给一些生成的回复指定隐动作的描述字眼;然后worker去评判控制生成的隐动作是否符合专家的描述,算匹配率。
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
最后是一些控制生成的样例:
![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)
当然,论文还有一些体现对话属性控制的实验,详情可看原文。
Conclusion
论文主要探索了一种无监督的学习框架,以离散形式的隐变量去更好地控制对话生成和增强可解释性。对我来说,比较突出的点在于对传统VAE中ELBO目标函数中的KL散度项,分离出互信息项,从而解决了之前VAE在文本生成上常见的”后验崩塌“问题。当然,获得了中间离散的隐变量后,怎么结合在解码器端,用的也都是比较常见的技巧:离散变量映射到embedding,加属性鉴别器,解码器端用输出的概率加权词向量解决无法梯度回传的问题。
不管怎样,创新不易,从论文想解决的目标,设计的模型,以及充分的实验来看,个人觉得很赞!
参考论文
[1] Zhiting Hu, Zichao Yang, Xiaodan Liang, Ruslan Salakhutdinov, and Eric P Xing. 2017. Toward controlled generation of text. In International Conference on Machine Learning. pages 1587–1596.