0%

A Hierarchical Latent Variable Encoder-Decoder Model for Generating Dialogues

Introduction

  • VHRED 是為了解決 RNNLM 和 HRED 很難產生有意義的、高質量、多樣性的回覆而提出的。

  • 批評傳統 Seq2Seq

    • 有變化的地方只有 sample output
    • encoder 和 decoder 過程要求確定性、fit database 的回覆,缺少對 response 語義訊息的理解,因此傾向於產生短的安全回答(safe response)
    • 因 gradient vanishing 影響,hidden state 傾向短期記憶而不是全局

做法類似 VAE,在 HRED 基礎上引入了 VAE 的思想,出來的樣本具有更高的全局性。

不同 VAE 的是在 reconstruction 時生成的是下一個 utterance 而不是原來的 input。

前情提要

要了解公式,先要了解 VAE 的一些相關知識(參考台灣大學 李弘毅教授 [1])

首先要提到 Guessian mixture model

Guessian mixture model 用途是產生複雜的 distribution

圖 2 中黑色的 distribution 為 Guessian mixture model 組合而成

而 VAE 就是用來處理 Geessian distribution 如何分布

Guessian mixture model

圖 2、Guessian mixture model

首先我們要從 normal distribution (或其他 distribution) sample 一個向量 z ,每一個 dimension 代表某種特質。

根據 z 可以得到 Geessian 的 $\mu$ 和 $\Sigma$,由於 z 有無窮多個可能,因此 $\mu$ 和 $\Sigma$ 也有無窮多個

要如何找到 $\mu$ 和 $\Sigma$ ? 我們可以利用一個 function 來得到,例如 neural network

neural network

圖 3、neural network 找 μ 和 Σ

z space 上 sample 幾個點,每個點都會對應一個 guessian distribution,而某一個點對應到哪一個 guessian 是經由 function 所決定的,如圖 4

Z 對應 Guessian mixture model

圖 4、Z 對應 Guessian mixture model

$P(x)$ 公式如下:

我們目標就是找到一組 $\mu$ 和 $\Sigma$ 能夠 Maximize likelihood
x 為手上的 data

z 由 NN 所產出,因此藉由調整 NN 參數來達到 Maximize likelihood

q(z|x)

圖 4、neural network 找 q(z|x) μ 和 Σ

除了 $p(x|z)$ 之外,還需要一個 distribution $q(z|x)$,一樣也是由 NN 產生

在 VAE 裡 $p(x|z)$ 為 decoder, $q(z|x)$ 為 encoder

回到 Maximize likelihood, $\log P(x)$ 可以寫成以下公式

$q(z | x)$ 為任意的 distribution

$\log P(x)$ 又可以換成以下公式

又 $\log(xy) = \log x + \log y$,可以換成

補充

紅線部分為 KL divergence (相對熵),意思是兩個 distribution 之間的距離,KL divergence 公式如下

由於是距離,因此紅線部分一定 >= 0

前面那一項可以換算成

因此我們可以得到 lower bound $L_b$ 為

總結以上公式:

在上述公式裡, $P(z|x)$ 和 $q(x|z)$ 是未知的

本來只要找 $P(z|x)$ Max $\log P(x)$,現在為找 $P(z|x)$ 和 $q(x|z)$ Max $L_{b}$

又 $\log(xy) = \log x + \log y$ ,$L_{b}$ 可以換算成

紅色部分也是一個 KL diversion

呼應 Max $L_{b}$ ,我們改成

  • 調整參數, min $K L(q(z | x) | P(z))$

  • 調整參數, max $\int_{z} q(z | x) \log P(x | z) d z$

    • 由於 weighted sum 可以視為期望值 $E_{q(z | x)}[\log P(x | z)]$

Model

句子定義

$w_{1},…,w_{N}$ 為 $N$ 句 sub-sequences
$w_{n} = (w_{n,1},…,w_{n,M_{n}})$ 代表每一句有 M 個 token

目標函式

VHRED 使用 stochastic latent variable $\mathbf{z}_{n} \in \mathbb{R}^{d_{z}}$, 對於句子 $n = 1,…,N$,由第 $n$ 之前的句子生成,公式如下:

$\mathcal{N}(\boldsymbol{\mu}, \Sigma)$ 是 multivariate normal distribution , mean 為 $\mathbf{\mu}_{n} \in \mathbb{R}^{d_{z}}$,covariance matrix (共變異數矩陣) $\Sigma \in \mathbb{R}^{d_{z} \times d_{z}}$,covariance matrix 再轉成 diagonal matrix (對角矩陣)

給定 $z_{n}$ 與 $w_{1},…,w_{n-1}$,生成 $w_{n}$,公式如下:

意思是 : 給定之前的句子以及當句已生成的 token,來生成下一個 token

VHRED 架構

VHRED

圖 5、VHRED 架構

VHRED 架構有三個部分與 HRED 相同:

  1. encoder RNN: encode 一個 sub-sentence 成 context vector
  2. context RNN: encode 先前全部的 context vector 成另一個 fixed-size vector
  3. decoder

Latent variable

在前情提要中我們有提到 p(x|z) 和 q(z|x),在論文中

  • prior : p(x|z)
  • posterior : q(z|x)

Prior 部分

如前情提要,使用 NN 來計算 $\mu$ 和 $\Sigma$

將 context RNN 的 fixed-size vector 輸入至 2-layer feed forward neural network,並使用 tanh 當作 activate function,公式如下:

$h_{t, \operatorname{con}} \in \mathbb{R}^{d_{h, c o n}}$ 為 context RNN 的 hidden state, $H$ 為 feed forward network 參數

mean 與 covariance matrix 如下:

參數 size (很重要尤其在 implement 的時候)

  • $H_{l_{1}, p r i o r} \in \mathbb{R}^{d_{z} \times d_{h, c o n}}$
  • $H_{\Sigma, \text {prior}}, H_{\mu, \text {prior}}, H_{l_{2}, \text {prior}} \in \mathbb{R}^{d_{z} \times d_{z}}$
  • $b_{l_{1}, \text { prior }}, b_{l_{2}, \text { prior }}, b_{\mu, \text { prior }}, b_{\Sigma, \text { prior }} \in \mathbb{R}^{d_{z}}$

解釋:

  • $\mu_{t, \text { prior }}$ : 將 $h_{t, \operatorname{con}}$ input 到 feed forward network
  • $\Sigma_{t, \text { prior }}$ : 將 $h_{t, \operatorname{con}}$ input 到 feed forward network,在經過 softplus function,轉成 diagonal matrix

補充:

  • softplus : $f(x)=\ln (1+\exp x)$ > softplus
    圖 6、softplus 與 ReLu 比較
  • diag() : 將非對角 element 設成 0

Max varient lower bound

回過頭來,如前情提要,目標式子為

我們目標是算出 lower bound, Max $L_{b}$
也就是 max

論文依照這個目標,對照公式如下

Posterior 部分

$Q_{\psi}\left(\mathbf{z}_{n} | \mathbf{w}_{1}, \ldots, \mathbf{w}_{n}\right)$ 的部分為 posterior,公式如下

  • $\boldsymbol{\mu}_{\text {posterior }}$ : approximate posterior mean

  • $\Sigma_{\text {posterior }}$ : approximate posterior covariance matrix (diagnol)

$\boldsymbol{\mu}_{\text {posterior }}$ 和 $\Sigma_{\text {posterior }}$ 計算方法與 prior 一樣

不一樣是 posterior 需要 $h_{t,con}$ 和 encoderRNN 的 hidden states 做 concatenate,符號為 $h_{t,p}$

參數 size

  • $H_{l_{1}, p o s t e r i o r} \in \mathbb{R}^{d_{z} \times\left(d_{h, c o n}+d_{h, e n c}\right)}$
  • $H_{\Sigma, \text {posterior}}, H_{\mu, \text {posterior}}, H_{l_{2}, \text {posterior}} \in \mathbb{R}^{d_{z} \times d_{z}}$
  • $b_{l_{1}, \text { posterior }}, b_{l_{2}, \text { posterior }}, b_{\mu, \text { posterior }}, b_{\Sigma, \text { posterior }} \in \mathbb{R}^{d_{z}}$

Experimental Evaluation

Twitter Corpus (open domain)

  • train : 749060
  • valid : 93633
  • test : 10000

每一句平均 6.27 utterances, 94.16 tokens

Ubuntu Corpus (closed domain)

500000 dialogue

Training detail

  • optimizer : Adam
  • early stop
  • embedding size :
    • ubuntu : 300
    • twitter : 400
  • learning rate : 0.0001 or 0.0002
  • batch size : 40 or 80
  • initailize :

    • feed forward nn :
      • wieght : normal distributions mean 0, variance 0.01
      • bias: 0
  • diagnoal covariance matrices * 0.1 : 為了降低 variance,讓 training 穩定

  • beam search : 5 beams

Result

Result of Human Evaluation

和 HERD 比較

Reference

[1] 台灣大學 李弘毅教授 link

[2] Github Code link