《Neural Response Generation with Dynamic Vocabularies》閱讀筆記

標題:《Neural Response Generation with Dynamic Vocabularies》

論文來源:AAAI 2018

原文鏈接:原文鏈接

聲明:轉載請註明出處:學習ML的皮皮蝦-知乎專欄

Introduction

近年來,開放領域的chatbot獲得了一些成果,首先是將對話問題與機器翻譯問題進行了類似,緊接著就有了一系列為提高對話回復質量而進行的研究,另外還將情感因素納入了對話問題。儘管如此,但其實無論用戶的輸入是怎樣的,都是用同一個很大規模的詞表進行回復的生成。但這只是對實際情境的一個簡化,實際上,對一個特定的輸入進行回復時,只會涉及到一小組特定的辭彙。因此,這種大規模詞表的假設可能會導致一系列的問題:

1.語義上遠離當前對話的辭彙可能也會加入到解碼過程,這會增大通用回復出現的可能性。

2.解碼過程變得不必要的慢。

文章目標生成更高質量的回復的同時在decode的過程中花費更少的時間。主要思想是在解碼階段為每個輸入動態的分配一個詞表,表中只包含對於形成相關回復有用的辭彙,過濾掉最不相關的辭彙。在機器翻譯領域已經存在一些使用動態詞表的方式,但這些方式都是將詞表構建和翻譯看做兩項工作。但由於在對話中沒有這種清晰的』1對1』關係,這些方式並不能推廣到對話領域。為了同時獲得回復質量和decode的效率,文章提出聯合詞表構建和回復生成的學習方式,以此讓兩個目標進行相互監督。文章創新點在於:

1.在回復生成中,提出改變靜態詞表為動態詞表。

2.提出了一個動態詞表的S2S模型(DVS2S),並推導出一個學習方法,可以聯合優化詞表中辭彙的選擇和最終回復的生成。

3.方法有效性的經驗證實和使用大規模會話數據模型的實驗證實。

Model

overview:

假設有數據集  mathit{D}={(X_i,Y_i)}_{i=1}^N ,其中 Y_i 是輸入 X_i 的回復。這裡X_i 可以是一條信息,或者帶有前幾輪作為上下文的信息。對於所有的 iX_i 與由多元伯努利分布 (beta_{i,1},…,beta_{i,|V|}) 生成的目標辭彙表 T_i=(t_{i,1},…,t_{i,|V|}) 相關聯,其中 |V| 是整個詞表 V 的大小, t_{i,j}in{0,1}forall1leq{j}leq{|V|}t_{i,j}=1 意思是 V 中的第 j 個詞 w_j 被選進要生成對 X_i 回復的詞典,否則表示這個詞在回復生成過程中沒有作用。 beta_{i,j}=p(t_{i,j}=1) 是由函數 f(X_i) 決定的選擇第 i 個詞的概率。生成 Y_i 的概率為 p(Y_i|X_i)=p(Y_i|T_i,X_i)p(T_i|X_i)

目標是通過最大似然學習出辭彙選擇模型 f(X) 和回復生成模型 g(X,T) 。這樣,當給出新的信息{X},可以用 f({X}) 估計出目標的詞表 {T} ,並用 g({X},{T}) 生成回復 {Y}

接下來首先假設 T 已知介紹DVS2S模型,然後介紹如何通過 f(X) 獲得T 。最後,展示如何從 mathit{D} 聯合學習f(X)g(X,T)

Dynamic Vocabulary Sequence-to-Sequence Model

DVS2S建立在encoder-decoder模型和attention機制之上。對於每一個輸入,都給解碼器配備了一個特定的詞表。給出一條信息 X=(x_1,x_2,…,x_t) ,正向GRU通過下面的方式將句子轉換為隱層狀態:

z_i=sigma(W_zx_i+U_zvec{h}_{i-1}),

r_i=sigma(W_rx_i+U_rvec{h}_{i-1}),

tilde{h}_i=tanh(W_hx_i+U_h(r_iodotvec{h}_{i-1})),

vec{h}_i=z_iodottilde{h}_i+(1-z_i)odotvec{h}_{i-1},

解碼器用隱狀態作為輸入,用attention機制的語言模型 y_{i-1} 生成回復。當生成第 i 個詞 y_i 時,解碼器結果為:

hat{y}_i=l(y_{i-1},c_i,{h}_i,T),

其中 c_i 是attention機制生成的內容向量, {h}_i 是decoder的第i個隱狀態, y_{i-1} 是生成的第 個詞。具體來說,解碼器還利用GRU將 y_{i-1} 編碼成 {h}_i ,其初始狀態是編碼器的最後一個隱藏向量。 c_i 為:

c_i=sum_{j=1}^{t} alpha_{i,j}h_j,

alpha_{i,j}=frac{exp(e_{i,j})}{sum_{k=1}^texp(e_{i,k})}

e_{i,j}=v^mathrm{T}tanh(W_alpha[h_j;{h}_i])

l(y_{i-1},c_i,{h}_i,T) 是|T|維的概率分布, |T|=sum_{k=1}^{|V|}t_k 。對於T中的元素,若 t_k=1l 中對應的元素為:

p(y_i=w_k)=frac{exp(s(w_k))}{sum_{t_jin T,t_j=1}exp(s(w_j))}

其中 s(w_k) 為:

s(w_j)=W_{w_{k}}[y_{i-1};{h}_{i-1};c_i]+b_{w_k},forall t_kin T.

W_{w_{k}}b_{w_{k}} 是兩個參數,以上兩式被稱為projection operation。

此時解碼的時間複雜度是 mathcal{O}({len}_r cdot mcdot p+{len}_rcdot {len}_m cdot m^2+{len}_rcdot (m+p)cdot|T|+mcdot |T|) (GRU+attention+projection+vocabulary construction),同時現有的方法的時間複雜度至少是 mathcal{O}({len}_r cdot mcdot p+{len}_rcdot {len}_m cdot m^2+{len}_rcdot (m+p)cdot|V|) (GRU+attention+projection), {len}_r 是生成回復的長度, {len}_m 是信息長度, m 是隱狀態大小, p 是目標詞的embedding大小。實際上, |V| 比其餘的參數大的多,所以現有decode方法的時間開銷被 {len}_rcdot (m+p)cdot|V| 所主導。DVS2S模型將之減小為 {len}_rcdot (m+p)cdot|T| 。因為 {len}_r 通常比1大的多,所以 {len}_rcdot (m+p)cdot|T|+mcdot |V|{len}_rcdot (m+p)cdot|V| 小很多。因此,DVS2S可以比現有方式的解碼過程快。

Dynamic Vocabulary Construction

定義 overline{T}={w_kin V|t_kin T,t_k=1} ,I(w)為 V 中辭彙 w 的索引。 overline{T}T 相同。 是一個多元伯努利分布的抽樣,這個伯努利分布是 |V| 獨立伯努利分布的聯合分布。每一個伯努利分布以 beta_{I_{w}} 為參數,描述了一個詞 w 被從 V 中選入 overline{T} 中的概率。

overline{T}=overline{T}_c cup overline{T}_f ,其中 overline{T}_c 是內容詞, overline{T}_f 是功能詞,功能詞保證了語法的正確性和回復的流暢性。因此,對於不同的輸入 overline{T}_f 的區別可能並不大。於是收集訓練數據中出現超過10次的詞(不包括名詞,動詞,形容詞和副詞),將其作為功能詞的集合 overline{V}_f 。對於 overline{V}_f 中的所有詞,定義 beta_{I_{w}}=1 。因此,無論輸入是什麼樣的,都令 overline{T}_f=overline{V}_f

另一方面,內容詞在回復中代表語義元素,因此應該與輸入高度關聯。讓 overline{V}_c=overline{V}backslash overline{V}_f 作為全部的內容詞集合,然後對所有的 cin overline{V}_c ,令參數 beta_{I_{w}} 為:

beta_{I_{c}}=sigma ({W}^T_ch_t+b_c)

h_t 是encoder最後一個隱層狀態。在 overline{T} 的構造中, overline{T}_c 是基於 {beta_{I_{(c)}}|cin overline{V}_c} 來從 overline{V}_c 中採樣得到。

怎樣給 X 分配恰當的 overline{T} 是DVS2S成功的關鍵。 overline{T} 應該覆蓋要生成對應 X 有相關性、有信息量、且流暢的回復時所需要的所有詞,但為了控制解碼成本,也不能太大。為了確保我們能夠以很高的概率對這樣的 overline{T} 進行抽樣,我們考慮聯合學習詞表構造和回復的生成。

Model Training

有了潛變數 T ,學習的目標可以寫為:

sum_{i=1}^{N}log(p(Y_i|X_i))=sum_{i=1}^Nlog(sum_{T_i}p(Y_i|T_i,X_i)p(T_i|X_i)).

由於對數不在求和之內,所以上式是很難優化的。因此,文中選擇優化 sum_{i=1}^{N}log(p(Y_i|X_i)) 的變分下界:

L=sum_{i=1}^Nsum_{T_i}p(T_i|X_i)logp(Y_i|T_i,X_i)

=sum_{i=1}^Nsum_{T_i}[ prod_{j=1}^{|V|}p(t_{i,j}|X_i)sum_{l=1}^mlogp(y_{i,l}|y_{i,<l},T_i,X_i)]

leqsum_{i=1}^Nlog(sum_{T_i}p(Y_i|T_i,X_i)p(T_i|X_i))

=sum_{i=1}^Nlog[p(Y_i|X_i)]

Theta 代表 L 的參數, frac{partial L_i(Theta)}{partial Theta}LX_i 的梯度,那麼 frac{partial L_i(Theta)}{partial Theta} 可以寫為:

sum_{T_i}p(T_i|X_i)[frac{partial logp(Y_i|T_i,X_i)}{partialTheta}+log(Y_i|T_i,X_i)frac{partial logp(T_i|X_i)}{partialTheta}]

枚舉 overline{T}_i 中全部的 2^{|V|} 個樣本是很難的,因此選用蒙特卡洛採樣技術來近似 frac{partial L_i(Theta)}{partial Theta} 。假設有 S 個樣本,那麼近似的梯度為:

frac{1}{S}sum_{s=1}^S[frac{partial logp(Y_i|widetilde{T}_{i,s},X_i)}{partialTheta}+log(Y_i|widetilde{T}_{i,s},X_i)frac{partial logp(widetilde{T}_{i,s}|X_i)}{partialTheta}],

其中 widetilde{T}_{i,s} 遵循多元伯努利分布 ({beta_i}^{|V|}) 。為了減少方差,我們使用回復的長度對梯度進行歸一化,並引入滾動平均 b_k

frac{partial L_i(Theta)}{partial Theta}approx frac{1}{S}sum_{s=1}^S[frac{partial logp(Y_i|widetilde{T}_{i,s},X_i)}{partialTheta}

+(frac{1}{m}sum_{j=1}^mlogp(y_{i,j}|y_{i,<j},widetilde{T}_{i,s},X_i)-b_k)frac{partial logp(widetilde{T}_{i,s}|X_i)}{partialTheta}],

b_k 是第 k 詞mini-batch之後的值, 用下面的公式進行更新:

b_{k+1}=0.9times b_k+frac{0.1}{mS}sum_{Y_iin batch k}sum_{s=1}^Ssum_{j=1}^mlog[p(y_{i,j}|y_{i,<j},widetilde{T}_{i,s},X_i)].

訓練過程即為演算法1,其中我們使用預訓練S2S model和一個詞表預測模型來初始化參數,另外用mini-batch的訓練策略來進行更新。將初始的學習率設為1.0,當驗證的perplexity開始增大的時候,減為0.5。在兩個epoch中perplexity都增大時,停止訓練。聯合學習的一個優點是,訓練中預測回復的錯誤可以反向傳播給詞表構建過程,生成的回復可以幫助校準辭彙選擇。因此,這個學習方法可以緩和訓練和實際推理之間的差異。

Experiment

評價指標:

1.Word overlap based metrics:BLEU-1,BLEU-2,BLEU-3。

2.Embedding based metrics:Average,Extreme,Greedy。評價指標基於word embedding,所以可以評測問答之間的相關性。

3.Distinct-1和Distinct-2:衡量回復的多樣性和信息量。

4.3-scale:+2(relevant,informative),+1(not be informative enough),0(no sence)。

比較方法:

S2SA:具有attention的典型S2S模型。github.com/mila-udem/ blocks.

S2SA-MMI:github.com/jiweil/ Neural-Dialogue-Generation.

TA-S2S:有確定主題的S2S model。https:// github.com/LynetteXing1.

CVAE:github.com/ snakeztc/NeuralDialog-CVAE

S-DVS2S:分開學習生成模型和構建詞表的辭彙預測模型,區別在於預測回復的結果無法反向傳播到詞表構建中。

評估結果:

討論:

Dynamic vocabulary coverage:真實回答中有多少辭彙會被詞表所覆蓋。

Recall=frac{1}{N_t}sum_{i=1}^{N_t}frac{|{w|win overline{T}_i wedge win Y_i}|}{|{w|win Y_i}|}

Performance across different dynamic vocabulary size:

Case study:

SUMMERIZE:

文章考慮將對話的解碼過程中所使用的大規模靜態詞錶轉化為一個根據輸入生成的動態小規模詞表,並推導出了可以通過蒙特卡羅抽樣方法聯合優化辭彙結構和響應生成的學習方法。實驗證明這種方式在對話質量提高的基礎上,還獲得了解碼效率的提升。下一步可能考慮將其推廣到多輪對話領域。

推薦閱讀:

TAG:自然语言处理 |