转载自 Attentive Sequence to Sequence Networks
Attentive Sequence to Sequence Networks
1、Encoder-Decoder 框架
首先我们模型的整体框图如下:
Encoder-Decoder 框架可以这么直观地去理解:可以把它看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。
对于句子对<X,Y>,我们的目标是给定输入句子 X,期待通过Encoder-Decoder 框架来生成目标句子 Y。
X 和 Y 可以是同一种语眼,也可以是两种不同的语言。
而 X 和 Y 分别由各⾃的单词序列构成:
Encoder 为对输入句子X 进行编码,将输入句子通过非线性变换转化为中间语义表示 C:
2、机器翻译例子
在本次讲解内容中,采用机器翻译作为讲解例子。
我们的目标是将法语翻译成中文,如下图所示:
首先可以看一个翻译例子对应的 Encoder-Decoder network:
其中编码和解码的模型,可以是 MLP、RNN、CNN 或者其它模型, 不限定模型的种类,也体现了 Encoder-Decoder 的灵活性。
继续来细看模型图:
在上图中,我们能看出源语言通过模型 encoder 为一个句子表示 c,然后再解码的过程中 c 和 yi 生成下一时刻的 y(i+1)单词。
如下图所示:
3、Attention 机制
3.1 引出 Attention 机制
注意力模型(Attention Model)的作用在于重新分配“注意力”。
人类在接收信息时,总是会有选择性的注意某些特定内容,比如 过马路时总是会注意来往的车辆而不是天空,上课时总是会注意老师 说的话而不是教室外面的噪音等等。
注意力集中对于人类有着重要的意义,使得人类能够把有限的精力放到重要的事情上去;如果注意力不集中,那么无论是学习还是生活,效率都会大大降低。
对于深度学习模型,同样存在“注意力”不集中的问题。
以自然语言处理中的 Encoder-Decoder 结构为例,在逐词解码的过程中,每一项都使用了相同的语义特征 C 来帮助解码。
换言之,Encoder 整个输入句子中的所有词语对于 Decoder 解码 出的每一个词语都有相同的贡献。
显然,这种方法是不合理的:输一句子中的不同字符对于输出中不同位置的字符的影响应该是不相同的。
以机器翻译的任务举例,法语中“le chat est noir EOS”会被翻译成英语“the cat is black EOS”,对于 翻译出“is”这个词语,其信息应该是由单词“est”提供的,而与“le chat” ⽆关。
然而在 Encoder-Decoder 结构解码过程中,整个句子的特征 C 会一直作用于每个词语的解码过程,也就是说,“le chat”对于解码出词语 “is”也起到了和单词“est”相同的作用。
为了解决上述的不合理情况,注意力机制被引入 Seq2Seq 模型中。 顾名思义,“注意力”机制使得在解码过程中,关注的重点从整个输入句子转移到某些特定的、可能对当前解码词语更加重要的输入词语上 去。
转移关注的重点是通过加权值的方法来完成的。
Attention 模型有着相应权重调整机制,简单来说,就是对在组成 特征向量时对每一项进行动态赋权。
有了相应的权重,得到的新的特征 C 就具备了表示不同输入词语重要性的能力;因为引入了 Attention 这样⼀种新的信息,在较长句子上的实际效果要明显优于未加入 Attention 机制的模型。
下图显示了翻译成目标语言的时候,源语言的每个词对目标语言的每个词的权重分布,其中颜色越深代表相应的权重越大。
那么我们如何在原来的结构中加入 attention 机制,根据上面分析,也就是将原来不变的 c 改为能够动态改变的ci" ,其中 i 代表的是此时已经解码到了第 i 个单词了,结构图如下:
3.2 训练方式以及如何求解 ci
如何求解? 总共有三种方式。
1、dot 方式: 直接做点积
2、general 方式:两个向量之间加入一个参数矩阵,可以训练得到。
3、concat 方式:两个向量做拼接 如下图所示:
训练方式有如下俩种:
1、Teacher Forcing Use standard sequence as input for decoding
2、Scheduled Sampling Use (sampled) automatically predicted output as input for decoding 形式化表示如下图所示: