CH1-語言模型和解碼算法

講義鏈接

1、NLG的定義及應用場景

NLG是指,生產出任何新文本。被用於以下場景:

1. 機器翻譯
2. 摘要
3. 對話(任務型、閒聊型、問答型)
4. 創意寫作:寫故事,寫詩
5. 生成式,相比於抽取式
6. 圖像描述

2、語言模型

2.1 LM

語言建模(Language Modeling)是指,在給定詞語的情況下,預測下一個詞的概率,用公式表示爲:

P(yty1,...,y(t1))P(y_t|y_1,...,y_(t-1))

而語言模型(Language Model)是隻一種系統,用以預測上述概率的分佈。

2.2 RNN-LM

如果用RNN網絡來預測上述概率,那麼這個語音模型就稱爲RNN-LM。

2.3 Conditional LM

如果出了已出現的詞,我們還知道其他的輸入條件,那麼我們就可以進行條件語言建模(ConditionalLanguageModel),用公式表示爲

P(yty1,...,y(t1),x) P(y_t|y_1,...,y_(t-1),x)

這種建模方法在很多應用中都有用到:

  • 機器翻譯:x是源句子,y是目標句子
  • 摘要生成:x是輸入文本,y是摘要文本
  • 對話:x是歷史聊天記錄,y是下一句話

2.4 泛RNN語言模型的訓練

一般模型有兩部分組成:編碼器(RNN)和解碼器(RNN)。

有一種訓練方式,是將真正的生成句子輸入解碼器中,而不是解碼器生成的句子。這種訓練方式是Teacher Forcing

以NeuralMachineTranslation爲例:

3、解碼算法

語言模型訓練好之後,我們會通過解碼算法來生成文本。

這裏會介紹兩種解碼算法,貪心解碼(Greedy Decoding)算法和簇搜索(Beam Search)算法

3.1 貪心解碼算法

一種比較簡單的算法,就是在每一步中預測最有可能的那個詞. 這個詞會被作爲下一次預測時的輸入。

上述過程是重複進行的,直到預測出結束符<END>或者生成的詞個數已經達到設定的最大值。

整個過程如下圖所示:

GreedyDecoding算法的缺點在於,由於沒有backtracking回溯過程,即每一次的最好並不是全局的最佳,所以文本生成的效果不是特別好,比如會出現不符合語法邏輯、不自然、不合理的情況。

3.2 beam search解碼算法

搜索算法旨在從若干可能的句子裏,一次就找出可能性比較高的句子,這個句子可能並不是最優的結果。

核心思想:在每一步解碼過程中,跟蹤k個最可能的部分序列(我們稱之爲假設 hypotheses ),這個k就是 束大小,beam size

生成階段的循環過程結束時,選擇概率最大的句子片段(這裏的片段是因爲還要考慮到生成長度,所以我們會進行一些調整)

舉個例子如下圖,此時k=2

藍色的數字值是該句子的得分$score(y_i|y_1,..,y_(i-1),x)$,通過如下公式計算得到:

i=1tlogPLM(yiy1,,yi1,x) \sum_{i=1}^{t} \log P_{\mathrm{LM}}\left(y_{i} | y_{1}, \ldots, y_{i-1}, x\right)

每個時間步都只保留了k=2個節點往下繼續搜索。最後pie對應的路徑打分最高,最後的句子是

he hit me with a pie

從圖中可以看出,不同路徑預測輸出結束標誌符的時間點可能不一樣,比如第三步時,已經有I was hit這樣一個結果還不錯的句子產生了,這樣一句預測完成的句子,稱之爲完全路徑

爲了從不同長度的完全路徑中挑選一個最佳答案,我們會根據生成句子的長度進行分值的歸一化,

1ti=1tlogPLM(yiy1,,yi1,x) \frac{1}{t} \sum_{i=1}^{t} \log P_{\mathrm{LM}}\left(y_{i} | y_{1}, \ldots, y_{i-1}, x\right)

不同大小的k對結果有什麼影響呢?

如果k越小的話,每次考慮的範圍就越小,出現的問題約同貪心解碼(k=1時就回退到貪心解碼)

k越大的話,每一步都需要更多假設,會造成更多計算量

不僅如此,對NMT來說,k越大,BLEU 值會越小,因爲即使對長度進行了歸一化,但是k越大,越偏向生成短文本。NMT的六大挑戰一文中,對比了不同k情況下的BLEU值,

可以看到,k越大,生成質量越差,特別是如果沒有進行長度歸一化,結果會更差。當然不同場景下,最優k值也是不同的,比如Czech–English的翻譯中,k選4最好,而English– Romanian翻譯中,k=30會得到最好的結果。

此外,在閒聊型對話任務中,k越大,生成的答案通用性越強(示例見下圖)

當一方說,“我大多情況下都以生鮮爲主,不怎麼去雜貨店買東西”,可以看到k比較小的時候,回答都是比較有主題的,比如圍繞飲食、健康開展的。而隨着k變大,回覆也變得含含糊糊,不會答錯但是也沒那麼相關,有一點答非所問。

3.3 基於採樣的解碼算法

因爲beam seach中每次要進行khypothese,所以可能不會那麼efficient.這就推進了基於採樣的解碼算法誕生。

3.3.1 PureSampling

每一個時間步tt下,從分佈PtP_t隨機選一個作爲下一個詞.和貪心解碼算法一樣,也是每次只選一個詞,但是隨機的而不是選概率最大。

3.3.2 Top-n Sampling

每一個時間步tt下,從分佈PtP_t中,按照概率選取nn個,再從中隨機選一個

可以看到當n=1n=1時就是貪心,當n=1n=1時就是pure sample

nn越大,生成的文本更具有多樣性,當然也更加危險,因爲不知道會出來什麼玩意兒。

nn越小,生成的文本更加具有通用性,雖然可能有點跑偏,但是生成的文本比較安全,不會出錯。

3.3.3 不是解碼算法的 Softmax temperature

beam searchsampling的解碼算法中,我們都是根據概率大小進行選擇的。在softmax過程中,我們還會做一點變化,引入了一個溫度參數τ\tau

Pt(w)=exp(sw/τ)wVexp(sw/τ) P_{t}(w)=\frac{\exp \left(s_{w} / \tau\right)}{\sum_{w^{\prime} \in V} \exp \left(s_{w^{\prime}} / \tau\right)}

τ\tau越大,PtP_t分佈就會越平滑,詞表中每個詞被選中的概率就會比較平均,所以生成的結果越具有多樣性。

τ\tau越小,PtP_t分佈就會越尖銳,詞表中每個詞被選中的概率就會不平均,總有一些詞選不到,而另外一些詞總被選到,所以生成的結果越比較常見。

3.4 解碼算法總結

貪心解碼算法非常簡單,但是效果也不好

束搜索效果比較好,但是也會出現回答太普通,太短等問題。

採樣方法則是結果更具有多樣性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章