Seq2Seq and Attention(二)

声明:本文是学习https://lena-voita.github.io/nlp_course/seq2seq_and_attention.html的笔记,小伙伴也可以自行跳转学习原文。

在之前的文章中我们介绍了什么是Seq2Seq,现在我们来介绍一下什么是Attention。

Atteintion

问题

固定的编码器表示问题

固定的源信息表示是不理想的:
(1)对于编码器,压缩句子是困难的。
(2)对于解码器,在不同的步中,不同的信息可能是不同相关性。

在目前我们所看的模型中,编码器将所有的源句子压缩为一个向量。这可能是很困难的----源句子的可以表达的意思是无穷的。当编码器强制的将所有信息都放入到一个向量中,看起来就像忘掉了一些信息。

不仅对于编码器来说将所有的信息放入到一个向量中是困难的,这对于解码器来说也是困难的。解码器只看到了源信息的一个表示。然而在每一步,源句子的不同的部分可能比其他部分更有用。但目前的设置中,解码器只能在相同的固定的表示中抽取相关信息----绝非易事。

High-Level View

Attention在论文 Neural Machine Translation by Jointly Learning to Align and Translate中被提出去解决固定表示问题。

Attention:在不同的步,让模型“注意”不同的输入部分

一个attention机器是神经网络的一部分呢。在解码器的每一步,它决定了源信息哪一部分是更重要的。在这中方式中,编码器不需要将全部的信息压缩到一个向量中----编码器给出所有源token的表示。

在这里插入图片描述
在每一步中,注意力机制:
(1)接收attention输入:一个解码器状态ht和所有的编码器状态s1,s2,…,sm
(2)计算attention得分:
对于每一个编码器状态sk,attention计算他针对解码器状态ht的 相关性。一般情况下,他使用一个attention函数,函数接收一个解码器状态一个编码器状态并且返回一个标量值score(ht,sk)。
(3)计算注意力权重:一个概率分布----在attention分数上应用softmax函数
(4)计算attention输出:带权重的编码器状态之和。

一般的计算模式如下图所示:
计算模式
注意:每一个事情都是不同的----端到端的学习

主要观点是一个神经网络可以学到哪个输入部分更为重要。因为这里的每一个事情都是不同的(注意力函数,softmax,和其他的东西),带有注意力机制的模型可以端到端的进行训练。你不需要特地教模型怎样去挑选想要的词----模型自己就会学习怎样挑选重要信息。

跟着下图复习一下attention机制的作用,并注意权重的变化。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如何计算Attention score?

在上边的流程中,我们还没有明确如何计算attention scores。

在这里插入图片描述
你可以使用任何你想要的函数–甚至是比较复杂的一个。但是,通常,你不需要这样做,----这有几个流行的简单的计算方法变体效果很好。

在这里插入图片描述
最流行的计算attention score方法:

(1)dot-product 最简单的方法
(2)bilinear function(“Luong attention”)–在论文
Effective Approaches to Attention-based Neural Machine Translation
中被使用
(3)multi-layer perceptron (aka “Bahdanau attention”)----在original paper
中被提出

模型变种:Bahdanau and Luong

在讨论早期的attention模型时,你可能也想了解一下这些变体:
Bahdanau attention:来自于论文Neural Machine Translation by Jointly Learning to Align and Translate由Dzmitry Bahdanau, KyungHyun Cho and Yoshua Bengio发布,也是attention第一次出现的论文。

Luong attention --来自论文Effective Approaches to Attention-based Neural Machine Translation 作者是Minh-Thang Luong, Hieu Pham, Christopher D. Manning.

Bahdanau Model

encoder:双向的
为了更好的编码每一个源序列词语,编码器有两个RNN,一个前向的一个后向的,后向的将输入反向读取。对于每一个token,是将两个RNN的状态相连接。

attention score:multi-layer perceptron
为了得到一个attention score,使用multi-layer perceptron 在一个encoder状态和一个decoder状态上。

attention applied: 在解码器每步之间
attention 被用于decoder的每步之间:状态ht-1被用于计算attention。他的输出是ct,之后ct和ht-1都被在时间t传递到解码器

在这里插入图片描述

Luong Model

encoder:单向的

attention score: blinear function
attention applied:在解码器RNN产生状态t和做预测之间

attention被用于在RNN编码器t之后产生预测之前。状态ht被用于计算attention他的输出是ct。然后ht与ct结合得到一个更新的表示ht*,ht*用于得到预测。
在这里插入图片描述

Attention Learns (Nearly) Alignment

我们引入attention的目的是在每一步中,我们可能需要关注不同的源token,因为这个token在当前步中是更相关的。现在让我们来看一下哪个源单词我们的decoder使用了?
在这里插入图片描述
图片来自论文:Neural Machine Translation by Jointly Learning to Align and Translate.

在这个例子中,我们可以看到attention学习的是源和目的词之间的对齐。解码器看的是当前翻译的那个词的源词。

声明:本文是学习https://lena-voita.github.io/nlp_course/seq2seq_and_attention.html的笔记,小伙伴也可以自行跳转学习原文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值