本文來自李紀爲博士的論文 A Diversity-Promoting Objective Function for Neural Conversation Models安全
1,概述函數
對於seq2seq模型類的對話系統,不管輸入是什麼,都傾向於生成安全,通用的回覆(例如 i don't know 這一類的回覆),由於這種響應更符合語法規則,在訓練集中出現頻率也較高,最終生成的機率也最大,而有意義的響應生成機率每每比他們小。以下表所示:測試
上面的表中是seq2seq對話系統產生的結果,分數最高的回覆一般是最多見的句子,固然更有意義的回覆也會出如今N-best列表(beam search的結果)中,但通常分數相對更低一點。主要是通常seq2seq模型中的目標函數一般是最大似然函數,最大似然函數更傾向於訓練集中頻率更高的回覆。spa
本論文提出使用MMI(最大互信息)來替換最大似然函數做爲新的目標函數,目的是使用互信息減少「I don’t Know」這類無聊響應的生成機率。3d
2 MMI 模型 code
在原始的seq2seq模型中,使用的目標函數是最大似然函數,就是在給定輸入S的狀況下生成T的機率,其表達式以下:blog
從這個表達式能夠看到,實際上就是給定了源句子的狀況下,選擇機率最大的句子最爲目標句子,這種狀況下就會傾向於訓練集中出現頻率大的句子。排序
所以引入互信息做爲新的目標函數,互信息的定義:度量兩個時間集合之間的相關性。其表達式以下:get
將上面的表達式能夠改寫成:it
咱們在上面的式子的基礎上對第二項加上一個$\lambda$參數,表達式改寫成:
這就是本論文中提出的第一個目標函數MMI-antiLM,在其基礎上添加了目標序列自己的機率$logp(T)$,$p(T)$就是一句話存在的機率,也就是一個模型,前面的$\lambda$是懲罰因子,越大說明對語言模型懲罰力度越大。因爲這裏用的是減號,因此至關於在本來的目標上減去語言模型的機率,也就下降了「I don’t know」這類高頻句子的出現機率。
而後還提出了第二個目標函數MMI-bidi,在原始目標函數基礎上添加$logp(S|T)$,也就是$T$的基礎上產生$S$的機率,其具體表達式以下:
並且能夠經過改變$\lambda$的大小衡量兩者的重要性,其表達式變爲:
$logp(S|T)$能夠表示在響應輸入模型時產生輸入的機率,天然像「I don’t know」這種答案的機率會比較低,而這裏使用的是相加,因此會下降這種相應的機率。
接下來咱們來詳細的看看這兩個目標函數
1)MMI-antiLM
如上所說,MMI-antiLM模型使用第一個目標函數,引入了$logp(T)$,但該方法同時也存在一個問題:模型傾向於生成生成不符合語言模型的相應。按理說$\lambda$取值小於1的時候,不該該出現這樣的問題,因此在實際使用過程當中須要對其進行修正。因爲解碼過程當中每每第一個單詞或者前面幾個單詞是根據encode向量選擇的,後面的單詞更傾向於根據前面decode的單詞和語言模型選擇,而encode的信息影響較小。也就是說咱們只須要對前面幾個單詞進行懲罰,後面的單詞直接根據語言模型選擇便可,這樣就不會使整個句子不符合語言模型了。使用下式中的$U(T)$代替$p(T)$,式中$g(k)$表示要懲罰的句子長度,其中$p(T)$以下
$U(T)$的表達式以下:
引入一個$\gamma$參數來對序列進行截斷,是的$g(k)$的表達式以下:
而最終的目標函數以下:
此外,此外實際使用中還加入了響應句子的長度這個因素,也做爲模型相應的依據,因此將上面的目標函數修正爲下式:
2)MMI-bidi
MMI-bidi模型也面臨一個問題就是$(1-{\lambda})logp(T|S) + {\lambda}logp(S|T)$是一個很難求解的問題。要求得$p(S|T)$項,這就須要先計算出完整的$T$序列再將其傳入一個提早訓練好的反向seq2seq模型中計算該項的值。可是考慮到$S$序列會產生無數個可能的$T$序列,咱們不可能將每個$T$都進行計算,因此這裏引入beam-search只計算前200個序列$T$來代替。而後使用式子的第二項對N-best列表從新排序,由於由標準seq2seq模型生成的N-best列表中的候選語句一般是語法正確的,因此從這N個解中最終選擇的回覆一般也是語法正確的。
然而,重排序有一個明顯的缺陷就是,因爲優先強調標準seq2seq的目標函數會致使非全局最優回覆的產生,並且,很大程度上依賴系統成功生成足夠多樣的N個最優回覆,也就是要求N足夠大。然而標準seq2seq模型測試(解碼)過程當中的beam search存在一個問題致使重排序並不可用:搜索結果中缺少多樣性。由於在搜索結果裏的備選回覆之間一般只是標點符號或句子形態上較小的改變,大多數詞語是重疊的。因此因爲N-best列表中缺少多樣性的緣由,會使得重排序也沒什麼效果。因此爲了解決這類問題,須要爲重排序提供一個更加多樣化的N-best列表。
所以做者提出了一種新的beam search的方法,咱們經過一張圖來看這兩種beam search:
具體的作法就如上圖所示,在beam search中是無論父節點的,而是將全部的子節點混在一塊兒進行排序選擇,而在改版的beam search中,先對同一父節點下的子節點排序,而後對排序後的子節點進行進行不一樣的懲罰,如圖中對排前面的減1,排後面的減2,作完懲罰處理後,再將全部的子節點混合在一塊兒進行排序選擇。這樣的beam search會增長N-best列表的多樣性。
另外在MMI-bidi也作了和MMI-antiLM中一樣的處理,增長了回覆長度的影響。