iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 25
0
AI & Data

30 天學會深度學習和 Tensorflow系列 第 25

24. 深度學習甜點系列:需要專注力的機械翻譯員

  • 分享至 

  • xImage
  •  

Neural Machine Translation training model

先來簡單複習一下一個 Seq2Seq 架構中的 Neural Machine Translation 系統。
Seq2Seq NMT

Seq2Seq 架構:包含了一個 encoder RNN 網路(綠色)和 decoder RNN 網路(紫色)
訓練模型包含兩個步驟:

  1. 訓練步驟(Training):最佳化 decode 的目標語言序列(Y)給定一 encode 來源語言序列(X) 的 conditional probability。P(Y|X)
  2. 推測步驟(Inference):給定一 encode 來源語言序列(X),透過 Beam Search 找出一到數個最佳 decode 的目標語言序列候選。Beam Search 搜尋到的序列候選,必定有較其他可能序列較大的 P(Yi|X) 值。

這裡都用大寫字母來表示序列集合。

Bi-directional RNN

因為 RNN 的架構是只有單向的,這無法捕捉機械翻譯中,兩種語言描述一件事情的順序可能不同,所以又有了雙向 RNN(Bi-directional RNN)。在雙向 RNN 中,除了需學習在原先 forward 的 RNN 中的 forward 狀態輸出外,還要增加一個 backward RNN 的 backward 狀態輸出。(見下圖)

Bi-directional RNN architecture

顧名思義,backward RNN 其實就是從序列的最後一個位置開始,一直到序列第一個位置才結束。而每一個位置的最後輸出,則是合併兩個 RNN 的狀態輸出(backward / forward)作為 softmax 的輸入來計算出。要注意的是,forward 和 backward RNN 不能同時開始進行,必定要先執行過一次 forward RNN 的訓練後,以 forward RNN 最後一個狀態為 backward RNN 的初始狀態,才能開始進行 backward RNN。由於這個時序順序,造成雙向 RNN 不適合做即時的序列分析如語音辨識,但應用在離線的機械翻譯是沒問題的。

但在應用雙向 RNN 於機械翻譯時,要注意的是只有 encoder 的部分才可以使用雙向 RNN,因為 decoder 主要是作為序列生成模型,使用雙向 RNN 並沒有太大的幫助。

Attention mechanism

雖然 Seq2Seq 在機械翻譯上獲得了長足的進步,但仍然在處理長序列的翻譯時表現卻仍不佳。在進入 Attention mechanism 的解說之前,先思考一個問題:若 LSTM 的設計是為了解決在訓練長序列 vanishing gradient ,那為何在已使用 RNN 架構的 Seq2Seq 還需要 Attention mechanism?

BLEU score vs Sequence length

因為,很不幸地,根據課程的解釋,當翻譯的句子愈來愈長的時候,評量機械翻譯與人類翻譯差異的標準分數 BLEU ,會隨著來源句子而下降。然而再加入 attention mechanism 時,則會維持一定的分數,而不至於隨著來源句子長度而下滑。那麼什麼是 BLEU 分數呢?這裡先簡短的說明

BLEU score

BLEU 是 Bilingual Evaluation Understudy 的縮寫,主要是將機械翻譯的輸出與一組人類翻譯的結果做比較。因為翻譯的好壞是因人而異,所以提供多個品質不錯的人類翻譯有助於正確評估機械翻譯的表現。

Attention Architecture

Attention 架構其實是每一個 decoding 狀態序列對每一個 ecoding 狀態序列的 attention 權重連接。可以見下圖,decoding 序列,S,在每一個序列位置都有一個連接的 https://chart.googleapis.com/chart?cht=tx&chl=%5Calpha 權重。這些權重在圖中,以不同顏色標註,對於第一個 decoding 狀態位置的 attention 權重,以藍色表示。而第二個位置為紫色,接著是綠色。

Attention Mechanism Overview

這個 https://chart.googleapis.com/chart?cht=tx&amp;chl=%5Calpha 權重是一個二維的矩陣,列的部分是 decoding 狀態位置索引,而行的部分則是 encoding 狀態位置索引。這些權重的意義在於該 decoding 狀態位置該給予每個 encoding 狀態多少的權重,或注意力(attention)。而在語言模型上,每一個目標來源狀態位置 t 的 https://chart.googleapis.com/chart?cht=tx&amp;chl=%5Calpha<t, t’> 權重會構成一個 context vector。這個 context vector 會計算每一個輸入狀態位置的權重。

這個 context vector 機械翻譯中,可以視為來源語言和目標語言做 alignment 的機率分佈。與其如序列做一對一的對齊,使用 context vector 並計算輸入狀態對此 context vector 的貢獻,可以避免有或無(1 或 0)的輸出方法,也容許較為模糊的對齊比對。

這也是為何要用狀態序列,而不是使用輸入和輸出序列的原因。因為狀態本身就是模擬隱含於可觀察序列的轉換機率,所以使用狀態對狀態序列的對齊,更能捕捉來源和目標語言做 alignment 時的每一種對應的機率值。

下圖則是較為清楚的 Bi-directional Seq2Seq 加上了 Attention Mechanism,由下圖可以看到在成為 attention 機制輸入前,需要將 bi-directional RNN 的 forward 狀態和 backward 狀態合併為一向量,才能成為 atttention 機制的輸入。

Attention Model For Bi-directional RNN

而 attention 機制,本身也是一個類神經網路模組,可以看到 attention 類神經網路模組,除了取所有的 encoder 狀態為輸入,a<t’>,還需要前一個位置的 decoder 狀態,S<t-1>,才能計算出 context vector。我們可以看下面的課程投影片截圖

Attention Network Abstraction

而詳細的架構可以見下圖,最後一層的 softmax 則是做 normalization,使得所有的 https://chart.googleapis.com/chart?cht=tx&amp;chl=%5Calpha <t, .> 權重成機率分佈,也是上圖中,將單獨的 network 輸出 e<t, t’> 加總,並算出 normalized https://chart.googleapis.com/chart?cht=tx&amp;chl=%5Calpha <t,t’> 的公式:

Compute Attention Weight

最後的 context vector 的計算則是將每一個輸入狀態分別乘上 attention 權重(https://chart.googleapis.com/chart?cht=tx&amp;chl=%5Calpha<t, t’>)得到。

上面都是針對標準 RNN 單元或只有一個狀態輸出所做的解說,若是使用 LSTM,擁有兩個狀態輸出(短期記憶狀態輸出 S<t> 和長期記憶狀態輸出 C<t>)的話,該用何者來當作 attention 機制的輸入(S<t-1> 或是 C<t-1>)和 context vector 連接的輸出(S<t> 或是 C<t>)呢?

該使用短期記憶或是長期記憶輸出,主要是看應用。若是語言生成系統,如機械翻譯,因為短期記憶本身就是長期記憶狀態的函數,所以使用短期記憶狀態,也就是 S<t-1>即可。然而,也可以將長和短期記憶狀態輸出合併成一個向量作為輸出,如果擔心輸出閘門在輸出短期記憶狀態時,把長期記憶狀態的貢獻給丟了。

而下圖則是將 Attention network 模組的 activation 取出,對應來源語言和目標語言所繪製的 attention map。由這個 attention map 可以將哪一個來源語言單詞該對應到哪一個目標語言單詞視覺化。

Attention Visualization

明天!我們要來結合 CNN 和 RNN,看看這兩種類神經網路架構的合體可以為我們完成什麼事情。


上一篇
23. 深度學習甜點系列:機械翻譯員如何翻譯
下一篇
25. 深度學習甜點系列:幫影像註解
系列文
30 天學會深度學習和 Tensorflow30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言