深入浅出讲解seq2seq中的Attention机制

  • 本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!
  • 个人主页:有梦想的程序星空
  • 个人介绍:小编是人工智能领域硕士,全栈工程师,深耕Flask后端开发、数据挖掘、NLP、Android开发、自动化等领域,有较丰富的软件系统、人工智能算法服务的研究和开发经验。
  • 如果文章对你有帮助,欢迎关注点赞收藏订阅。

1.Attention机制的提出:

Attention模型最早是在计算机视觉领域提出,首次用于解决nlp问题在2014年[1]。由于seq2seq中的原始输入序列中的单词对于目标输出序列的重要性程度是一致的,当输入序列过长时,此模型的效果将会降低。

比如,在机器翻译方面,对于输入序列为“自”,“然”,“语”,“言”,生成的输出序列为“Natural”,“Language”。事实上,我们发现,“自”“然”对于“Natural”的贡献应该更大,而“语”“言”对于“Language”的贡献应该更大,但是Seq2seq模型给每个单词分配相同的权重,因而在长序列情况下,效果并不理想,Attention就是为了解决当输入序列过长时模型效果变差而引入的。

2.Seq2seq+Attention模型:

深入浅出讲解seq2seq中的Attention机制_第1张图片

(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)通过score()函数计算Decoder的隐藏状态和Encoder的隐藏状态的相关性打分:

{​{\rm{e}}_{ij}} = score({s_i},{h_j})

其中,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)计算每一个Encoder的隐藏状态的权重得分:

{\alpha _{ij}} = \frac{​{\exp ({e_{ij}})}}{​{\sum\limits_{k = 1}^{​{T_x}} {\exp ({e_{ik}})} }}

(3)语义向量是对于Encoder输出的隐藏状态的一个加权平均:

{c_i} = \sum\limits_{j = 1}^{​{T_x}} {​{\alpha _{ij}}{h_j}}

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.

你可能感兴趣的:(深入浅出讲解自然语言处理,自然语言处理,深度学习)