本文來自李紀為博士的論文 A Diversity-Promoting Objective Function for Neural Conversation Models
1,概述
對於seq2seq模型類的對話系統,無論輸入是什么,都傾向於生成安全,通用的回復(例如 i don't know 這一類的回復),因為這種響應更符合語法規則,在訓練集中出現頻率也較高,最終生成的概率也最大,而有意義的響應生成概率往往比他們小。如下表所示:
上面的表中是seq2seq對話系統產生的結果,分數最高的回復通常是最常見的句子,當然更有意義的回復也會出現在N-best列表(beam search的結果)中,但一般分數相對更低一點。主要是一般seq2seq模型中的目標函數通常是最大似然函數,最大似然函數更傾向於訓練集中頻率更高的回復。
本論文提出使用MMI(最大互信息)來替換最大似然函數作為新的目標函數,目的是使用互信息減小“I don’t Know”這類無聊響應的生成概率。
2 MMI 模型
在原始的seq2seq模型中,使用的目標函數是最大似然函數,就是在給定輸入S的情況下生成T的概率,其表達式如下:
從這個表達式可以看到,實際上就是給定了源句子的情況下,選擇概率最大的句子最為目標句子,這種情況下就會傾向於訓練集中出現頻率大的句子。
因此引入互信息作為新的目標函數,互信息的定義:度量兩個時間集合之間的相關性。其表達式如下:
將上面的表達式可以改寫成:
我們在上面的式子的基礎上對第二項加上一個$\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中同樣的處理,增加了回復長度的影響。