淺談seq2seq中的Attention機制

1.Attention機制的提出:

Attention模型最早是在計算機視覺領域提出,首次用於解決nlp問題在2014年[1]。由於seq2seq中的原始輸入序列中的單詞對於目標輸出序列的重要性程度是一致的,當輸入序列過長時,此模型的效果將會降低。

比如,在機器翻譯方面,對於輸入序列爲“自”,“然”,“語”,“言”,生成的輸出序列爲“Natural”,“Language”。事實上,我們發現,“自”“然”對於“Natural”的貢獻應該更大,而“語”“言”對於“Language”的貢獻應該更大,但是Seq2seq模型給每個單詞分配相同的權重,因而在長序列情況下,效果並不理想,Attention就是爲了解決當輸入序列過長時模型效果變差而引入的。

2.Seq2seq+Attention模型:

(1)首先將輸入單詞轉換爲詞向量和上一個時間點的隱藏狀態一起進入Encoder層,輸出的是這個時間點的隱藏狀態。

(2)Decoder方面接收的是目標單詞的詞向量和上一個時間點的隱藏狀態,輸出的是這個時間點的隱藏狀態。

(3)然後,將Decoder的隱藏狀態和Encoder的隱藏狀態輸入到Attention層,計算出語義向量context vector。

(4)接着,context vector可以作爲輸入和目標單詞串起來作爲LSTM的輸入。之後又回到一個隱藏狀態。以此循環。

論文地址:https://arxiv.org/abs/1409.0473,論文題目爲Neural Machine Translation by Jointly Learning to Align and Translate。

3.Attention權重的計算:

(1) {{\rm{e}}_{ij}} = score({s_i},{h_j}) ,通過score()函數計算Decoder的隱藏狀態和Encoder的隱藏狀態的相關性打分。

其中,score()函數的計算方式有如下幾種:

score({h_t},{\overline h _s}) = \left\{ {\begin{array}{*{20}{c}} {{h_t}^T{{\overline h }_s}}\\ {{h_t}^T{W_\alpha }{{\overline h }_s}}\\ {v_\alpha ^T\tanh ({W_\alpha }[{h_t}^T;{{\overline h }_s}])} \end{array}\;\;\;\begin{array}{*{20}{c}} {dot}\\ {general}\\ {concat} \end{array}} \right.

(2) {\alpha _{ij}} = \frac{{\exp ({e_{ij}})}}{{\sum\limits_{k = 1}^{{T_x}} {\exp ({e_{ik}})} }},計算每一個Encoder的隱藏狀態的權重得分。

(3){c_i} = \sum\limits_{j = 1}^{{T_x}} {{\alpha _{ij}}{h_j}} ,語義向量是對於Encoder輸出的隱藏狀態的一個加權平均。

 

4.總結:

seq2seq+Attention相對於seq2seq模型的改進:

(1)Encoder提供所有節點的隱藏狀態給Decoder,不僅僅是最後一個節點的隱藏狀態。

(2)Decoder計算每個隱藏狀態的相關性分數,並使用softmax函數得到每個隱藏狀態的權重得分,這樣使得相關性高的隱藏狀態有更高的權重。

參考文獻:

[1] Bahdanau D , Cho K , Bengio Y . Neural Machine Translation by Jointly Learning to Align and Translate[J]. computer science, 2014.

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