对话生成模型中的条件变分自编码器(CVAE)

废话不多说直接上模型:

这是一个非常经典的对话生成模型,叫做HRED(Hierarchical RNN Enconder-Decoder)。思路很简单,就是用一个RNN来建模前 j − 1 j-1 j1句话,再用一个RNN来建模第 j j j句话的 k − 1 k-1 k1个词,然后再用一个RNN来解码第 j j j句话的第 k k k个词。

HRED模型的训练:给定一个词的上文,最大化这个词出现的对数似然(极大似然估计)

即: a r g m a x ( l o g p θ ( w j , k ∣ w 1 , w 2 , . . . , w j − 1 , w j , 1 , w j , 2 , . . . , w j , k ) ) argmax(logp_\theta(w_{j,k}|w_{1}, w_{2}, ..., w_{j-1}, w_{j, 1}, w_{j, 2}, ..., w_{j,k})) argmax(logpθ(wj,kw1,w2,...,wj1,wj,1,wj,2,...,wj,k))

为了方便下文的推导,let w w w = w j , k w_{j,k} wj,k, c c c = w 1 , w 2 , . . . , w j − 1 , w j , 1 , w j , 2 , . . . , w j , k w_{1}, w_{2}, ..., w_{j-1}, w_{j, 1}, w_{j, 2}, ..., w_{j,k} w1,w2,...,wj1,wj,1,wj,2,...,wj,k

训练目标简写为: a r g m a x ( l o g p θ ( w ∣ c ) ) argmax(logp_\theta(w|c)) argmax(logpθ(wc))

p θ p_\theta pθ其实就是我们定义的RNN,RNN的公式网上一查就查到了,因此计算梯度,反向传播,参数更新,都是理所当然的事情,最后我们就得到了一个对话生成模型。

但是极大似然估计有一个问题,那就是模型容易置信度过高。而在真实的对话流程中,一句输入,其实可能有无数种回答的方式,每一种回答都是合理的(因为是闲聊嘛)。将模型的所有变量都建模为可见的参数 θ \theta θ,会导致倾向于生成单调的通用性回复,比如“我不知道”,“嗯嗯”,等。这种回复本质上是没错的,但是很无聊。

于是我们提出了下面这个模型:

这个模型叫做VHRED(Variational Hierarchical RNN Encoder-Decoder),引入一个不可观测的隐变量,用于生成对话回复。隐变量每次都采样于一个分布,这样,回复的多样性极大的增加了。

VHRED模型的训练:在生成每一个词的时候,引入了一个隐变量 z z z,这个隐变量无法观测到,所以无法用参数 θ \theta θ建模。因此,训练目标重新写为:

a r g m a x ( l o g p θ ( w ∣ c ) ) = a r g m a x ( l o g ∫ p θ ( w ∣ c , z ) p θ ( z ∣ c ) d z ) argmax(logp_\theta(w|c)) = argmax(log\int p_\theta(w|c,z)p_\theta(z|c) d_{z}) argmax(logpθ(wc))=argmax(logpθ(wc,z)pθ(zc)dz)

问题出现了: z z z是一个高维变量,遍历所有 z z z是不可行的!也就是说,等式右边的式子你是写不出来的,自然也无法计算梯度,进行梯度反向传播,参数更新。

万幸,提出VAE(Variational Autoencoder,VHRED的V就是从这里来的)的论文提供了一个复杂且精妙的解决方案,那就是引入变分推断,用一个认知网络 q ϕ ( z ∣ c , w ) q_\phi(z|c,w) qϕ(zc,w)拟合真实的后验分布 p θ ( z ∣ c , w ) p_\theta(z|c,w) pθ(zc,w)

(一大波推导来袭)
l o g p θ ( w ∣ c ) = E z ∼ q ϕ ( z ∣ c , w ) l o g p θ ( w ∣ z ) # 样 本 分 布 与 认 知 网 络 无 关 = E z l o g ( p θ ( w ∣ c , z ) × p θ ( z ∣ c ) p θ ( z ∣ c , w ) ) = E z l o g ( p θ ( w ∣ c , z ) × p θ ( z ∣ c ) p θ ( z ∣ c , w ) × q ϕ ( z ∣ c , w ) q ϕ ( z ∣ c , w ) ) = E z l o g ( p θ ( w ∣ c , z ) × p θ ( z ∣ c ) q ϕ ( z ∣ c , w ) × q ϕ ( z ∣ c , w ) p θ ( z ∣ c , w ) ) = E z l o g ( p θ ( w ∣ c , z ) − E z l o g ( q ϕ ( z ∣ c , w ) p θ ( z ∣ c ) ) + E z

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值