自然語言處理-第十六期-神經網絡翻譯Beam Search

背景

自然語言處理-第十六期-神經網絡翻譯Beam Search

從十二期開始,分別介紹了 Seq2Seq 模型 和 Attention Mechanism。這些模型框架是神經網絡翻譯(NMT) 和 聊天機器人(Chatbot)的核心組成部分。本期將帶來Beam Search 部分.

回顧

Seq2Seq Model

Seq2Seq其實就是Encoder-Decoder + Sequence,將一個序列 encode,然後再將其decode成另一個序列。

但是Seq2Seq有一個明顯的問題是,將一個Vector向量 decode 成一個序列時,如果該句子太長,那麼其結果會不太理想(因為Gradient Vanishing or Explosion)

自然語言處理-第十六期-神經網絡翻譯Beam Search

Attention Mechanism

Seq2Seq面對的問題是,Encoder 只輸出一個向量,而基於此向量我們需要decode成一個長句。

那麼Attention Mechanism 解決的辦法也很直接。 就是在原有的 Vector 向量上,再增加一個 Vector (原義是指 我們需要Pay Attention的地方)

自然語言處理-第十六期-神經網絡翻譯Beam Search

而這個Context Vector 是 原始序列各個單詞的

權重組合。當我們翻譯I 時,大部分的權重就會被分配到 I 這個單詞所輸出的Hidden State

換個角度說,其實現了軟對其。將 翻譯的詞 與 被翻譯的詞 進行 軟對其。

再換個角度,這是Dynamic Memory Network,可以動態的提取需要的Hidden State

自然語言處理-第十六期-神經網絡翻譯Beam Search

關於這些內容,更詳細一些的可以從第十二期~十五期找到.

Beam Search

通過上述回顧我們可以看出來,不論是 Seq2Seq 還是 Attention Mechanism,都是解決了 Decoder 部分 輸入值的問題。

當基礎Seq2Seq模型時,Decoder 獲取的hidden State不足,所以Attention Mechanism 又給了一個動態的Vector。

但是前幾期都沒有涉及一個問題就是, 當Decoder 拿到一個Vector的時候,如何解壓成一個完整的句子?

其實,Decoder的作用就是,在給定輸入Vector的情況下,計算詞庫的概率分佈。

如下圖是NG 課程的一個截圖,他就是計算在10000個詞庫,每個單詞的概率。

自然語言處理-第十六期-神經網絡翻譯Beam Search

Greedy Search

既然我們知道了Decoder的任務就是計算單詞的概率分佈。 那麼最直接的方法肯定是取概率最大的那個單詞。 這也就是Greedy Search。

但是,Greedy Search的效果並不好,這也很好理解。因為,其並沒有考慮概率的差距。當有兩個單詞概率很接近的時候,其非常武斷的就選擇了 概率最大的一方。

Beam Search

在解釋Beam Search 之前,舉個例子,這個例子很有幫助我的理解。

現在很多的翻譯模型,並不是 預測單詞而是預測字母。那麼假設我們正在Decoder的過程中,我們已經生成了happ 四個字母,那麼接下來很可能出現以下幾個:

Happy

Happiness

Happen

對於這個例子,如果是Greedy Search,其只是選擇概率最大的那個。我個人覺得概率最大的很可能是y,畢竟Happy的頻率較高(這句話並沒有道理的哈只是假設假設,因為其概率主要取決於訓練文本,而不是我們個人的感官)。那麼,Greedy Search就會很“果斷”地選擇Y,即Happy

但是,其實有一種更合理的方法。

Step 1. 預測第五個字母時,留下可能性最大的兩個選擇,假設是(i,e);

Step 2. 基於第一步的兩個選擇,分別再找到 可能性最大的兩個字母,假設是(in,im,en,er);

Step 3. 基於兩個字母的組合,來選擇第五個位子應該出現的字母,分別計算(in,im,en,er)的概率;

尤其是對於語言來說,這種方法有很明顯的優點。因為大家知道,英文中很多詞根,比如 er ,on,ion,ing,ow 等等。都是成組合出現的。

Beam Search就是這樣一種方法,其對於Greedy Search最大的提升在於,其不僅僅考慮了單個單詞的概率, 其還考慮了前後幾個 放在一起的概率。這對於本身就有既定模式的語言來說,可以說非常有效。

另外,Beam Search 可以指定Beam的數量,比如是兩個,或者三個。

自然語言處理-第十六期-神經網絡翻譯Beam Search

總結下

最基礎的Beam Search 其實思路非常簡單。就是在計算概率分佈的時候,不要只選擇概率最大的那個。 而是選擇概率最大的幾個,然後這幾個作為備選方案 再往後看看。然後,結合其與之後的幾個單詞 一起計算概率。

下期預告

Beam Search 包括Greedy Search其實有一個問題,就是沒預測一個單詞需要遍歷一邊詞庫。對於較大的詞庫來說,是一個問題。 而且Beam Search還增加了其工作量,需要遍歷幾遍。

雖然我還不瞭解,但是對於這個問題,肯定是有改良方法的。等我搞懂了就給大家帶來。


分享到:


相關文章: