Unsupervised Discrete Sentence Representation Learning for Interpretable Neural Dialog Generation笔记

来源:ACL2018

链接:[1804.08069] Unsupervised Discrete Sentence Representation Learning for Interpretable Neural Dialog Generation 4

源码:snakeztc/NeuralDialog-LAED 1

转自:https://bigquant.com/community/t/topic/121085

原文连接:https://zhuanlan.zhihu.com/p/37630801

题目太长,翻成中文。

Introduction

基于编码器-解码器的对话模型已经很普遍了,结合神经网络基本上是端到端的思路。但是中间的控制过程,模型无法给出可解释的生成动作,这里的动作指离散的变量,如对话主题,意图等。虽然在任务型对话系统中,对话管理器也会有可解释的对话动作和slot-value对,但是推广性差,容易局限在垂直领域,且依赖人工标注。从生成式对话模型的可解释表示学习出发,作者提出了两种无监督的VAE模型:DI-VAEDI-VST,可以和现有的encoder-decoder框架结合,去做可解释的对话生成。

涉及三个变量:

{\rm c} : context

{\rm x} : response

{\rm z} : latent action

作者首先定义了 {\rm z} 具备可解释性的两个性质:

  1. {\rm z} 必须能明显的表示回复 {\rm x} 的句子级特征;
  2. {\rm z} 的含义必须和语境 {\rm c} 无关;

第一条显然的,关于第二条,作者的解释是:假如 {\rm z} 中每个类的含义随着语境变化而变化,就很难从所有的回复中获取一致的解释性。

然后,作者定义了四个模块:

\mathcal{R} : 识别网络,从输入的回复映射到 {\rm z}q_{\mathcal{R}}({\rm z}|{\rm x}) ;

\mathcal{G} : 生成器,从 {\rm z} 重建句子 {\rm x} ,提供训练 {\rm z} 的损失信号;

\mathcal{F} : 编码器-解码器网络,负责重建回复 {\rm x} , p_{\mathcal{F}}({\rm x}|{\rm z, c}) ;

\pi : 策略网络,从语境生成动作 {\rm z} , p_{\pi}({\rm z}|{\rm c}) ;

前两个模块负责可解释 {\rm z} 的学习(如图1),后两个模块将 {\rm z} 嵌入到编-解码器中,生成对话的回复。

![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)

图1 识别网络-隐动作表示-生成网络 框架

Model

从自动编码中学习句子表示: DI-VAE

涉及识别网络 \mathcal{R} 和生成器 \mathcal{G} 。定义了 {\rm z} 有M个,{\rm z} = {​{\rm z}_1 ...{\rm z}_m...{\rm z}_M} ;每个 {\rm z}_m 是一个K类别的离散变量。

如图1,回复 {\rm x} 经过编码获得句子表示 h^R_{|x|} ,再通过投影,Softmax映射为离散变量 {\rm z_m} 的后验分布 : q_{​{\mathcal{R}}}({\rm z}m|{\rm x}) = {\rm Softmax}(W_qh^{\mathcal{R}}{|{\rm x}|}+b_q)

然后用Gumbel-Softmax从分布中采样 {\rm z}_m 的概率。

为了获得解码器RNN的初始状态,作者定义了从离散的隐变量 {\rm z}_me_m 的映射。比如 {\rm z}_m 表示情感,有高兴,悲伤等K个种类,那么 e_m 就相当于各个情感向量构成的矩阵 e_m \in \mathbb{R}^{K \times D} 。用前面采样到的 {\rm z}_m 的各个类别概率,对矩阵 e_m 加权求和,就会获得关于情感向量的表示 e_m({\rm z}_m) 。然后,将所有的动作向量求和,就得到解码器的初始状态:

h^{\mathcal{G}}0 = \sum^M{m=1} e_m({\rm z}_m)

然后解码器重建回复,最大化置信下界目标函数**(ELBO),**到这里仍然是按照VAE的训练思路。

但是在ELBO的训练中, 经常存在“后验崩塌”的问题,也就是KL损失被忽略,训练降为0。对VAE的目标函数推对所有的数据 {\rm x} 取期望:

![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)

然后,对 KL 损失项关于所有数据 {\rm x} 取期望,推导(具体参见论文),会得到

![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)

(2) 带入(1), 得到

![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)

q({\rm z})=\mathbb{E}{\rm x}[q{\mathcal{R}}({\rm z}|{\rm x})] 是识别网络后验分布的期望,而 I(Z, X) 是关于 ZX 的互信息。这就说明了一个问题:在最大化(3)的ELBO时,会导致互信息 I(Z,X) 减小,也就是迫使 Z 包含 X 的信息越来越少,这就说明为什么VAE的训练中,隐变量容易忽略,特别是解码器特别强大的时候,重建损失会占据主导。

那么很自然的,为了让隐变量 Z 编码入更多和 X 相关的信息,只要将互信息项移到目标函数的左边:

![](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 N 去近似计算 q'({\rm z})

到这里,(4)式就是 discrete infoVAE with BPR, DI-VAE.

从语境中学习句子表示: DI-VST

DI-VAE是通过对句子的重建来学习隐变量的,论文中还借鉴了Skip thought(ST) 模型,拓展了另一种模型:通过一个句子的表示,去预测前一个句子和后一个句子。因为在对话中,一个回复是和上下文高度相关的,所以这个思想具有一定可行性的。因此,将DI-VAE的重建句子项替换为预测前一句 p^p_{\mathcal{G}} 和后一句 p^n_{\mathcal{G}} ,就得到:

![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)

和编-解码器的结合:LAED

![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)

图2:DI-VAE和LAED的结合框架图(按个人理解所画)

前面两个模型都在学习可解释的离散隐变量 {\rm z} , 接下来是将 {\rm z} 和我们最熟悉的encoder-decoder框架以及策略网络结合。编码器从dialog context {\rm c} 获得分布式表示 h^e = \mathcal{F}^e({\rm c}) ;解码器通过 h^e 和识别网络采样的 {\rm z} 生成回复 \tilde{x} = \mathcal{F}^d(h^e,{\rm z}) 。编-解码器和策略网络的联合训练目标则是

![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)

训练策略网络的目的是让预测的 {\rm z}_1 接近识别网络的 {\rm z} ,然后在测试生成的时候就可以用策略网络的 {\rm z}_1 去合成回复了。另外,单纯依靠 {\rm z} 输入到解码器无法保证生成的回复体现 {\rm z} 的属性,需要引入一个鉴别器,当生成回复没表现 {\rm z} 时进行惩罚。这也是借鉴去年的一篇可控文本生成论文[1]的套路。

![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)

注意因为解码器 \mathcal{F}^d 每步输出的是的离散的单词,(9)式没法完成梯度回传,因此同样采用了论文[1]中的deterministic continuous relation 做法,具体就是把 q_{\mathcal{R}} 的离散单词输入替换为概率加权后的word embedding: h^{\rm R}t = {\rm RNN}(h^{\rm R}{t-1}, {\rm E}{\rm o}_t) , {\rm E} 是词向量矩阵, {\rm o}_t 就是解码器在每一步输出的归一化概率。这样,结合属性鉴别损失,得到最终的目标函数:

![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)

和传统VAE的区别

其实从(8)式来看,LAED的目标函数和CVAE是很像的:

![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)

但不同点在于CVAE希望{\rm z}{\rm x} 能和context {\rm c} 有更多的互信息 I({\rm x}, {\rm z}|{\rm c}) ,也就是CVAE里面的 {\rm z} 是和依赖于 {\rm c} 的,而LAED学到的 {\rm z} 是独立于context {\rm c} 的,这种独立性保证了 {\rm z} 的可解释性和推广性。

Experiments and Results

论文在四个数据集上进行了实验:Penn Treebank(PTB), Stanford Multi-Domain Dialog(SMD), Daily Dialog(DD)和 Switchboard(SW),后面3个包括了任务型对话和开放领域闲聊对话。

  • 模型对句子的离散表示能力

指标主要是困惑度(Perplexity, PPL), KL散度, 互信息I(x, z). DAEDST分别是DI-VAE和DI-VST去掉KL(q|p)项,“退化版”的离散自动编码器。对应的,DVAE和DVST分别是离散版本的VAE和VST,基于ELBO训练。

![](data:image/svg+xml;utf8,<svg%20xmlns=‘’>)

可以看到,所有的模型都比RNNLM好,DI-VAE能取得最好的性能。在训练的时候会发现:

  1. DAE很快学会重建输入,在缺乏其他约束的情况下容易过拟合。
  2. DVAE如果按照标准的训练方法,学到的互信息I(x,z)为0,只有在加了KL-annealing和词袋损失之后,才能学到很少的互信息;
  3. 从DD数据集来看,DI-VST模型能利用BPR正则,学到更有意义的隐变量表示,进一步提升DST的PPL指标。
  • 隐变量的个数和维数对表示能力的影响

再介绍一个比较有意思的实验,通过固定隐变量的表示能力,即隐变量的个数K和维数M,比如 K^M \approx1000 ,比较不同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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值