浅谈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.

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