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的表示。

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

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

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

跟着下图复习一下attention机制的作用,并注意权重的变化。
Seq2Seq and Attention(二)
Seq2Seq and Attention(二)
Seq2Seq and Attention(二)
Seq2Seq and Attention(二)
Seq2Seq and Attention(二)
Seq2Seq and Attention(二)
Seq2Seq and Attention(二)
Seq2Seq and Attention(二)

如何计算Attention score?

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

Seq2Seq and Attention(二)
你可以使用任何你想要的函数–甚至是比较复杂的一个。但是,通常,你不需要这样做,----这有几个流行的简单的计算方法变体效果很好。

Seq2Seq and Attention(二)
最流行的计算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传递到解码器

Seq2Seq and Attention(二)

Luong Model

encoder:单向的

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

attention被用于在RNN编码器t之后产生预测之前。状态ht被用于计算attention他的输出是ct。然后ht与ct结合得到一个更新的表示ht*,ht*用于得到预测。
Seq2Seq and Attention(二)

Attention Learns (Nearly) Alignment

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

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

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

上一篇:【笔记】Encoder-Decoder模型


下一篇:矢量化的HTML5拓扑图形组件设计