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

本文深入解析Seq2seq模型结合Attention机制的工作原理,探讨其如何改善长序列输入时的模型表现,特别是在机器翻译任务中,通过计算Attention权重提高翻译质量。
  • 本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!
  • 个人主页:有梦想的程序星空
  • 个人介绍:小编是人工智能领域硕士,全栈工程师,深耕Flask后端开发、数据挖掘、NLP、Android开发、自动化等领域,有较丰富的软件系统、人工智能算法服务的研究和开发经验。
  • 如果文章对你有帮助,欢迎关注点赞收藏订阅。

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)通过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.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有梦想的程序星空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值