nlp复习--seq2seq & attention

seq2seq

seq2seq又叫Encoder-Decoder模型。它可以实现从一个序列到任意一个序列的转换,模型如下所示,其左半部分为Encoder部分,右半部分为Decoder部分。
nlp复习--seq2seq & attention
在翻译的应用中,可以理解为看完一个句子,提炼出它的大意
Seq2Seq模型中的向量 c就代表着context vector,即含有所有输入句信息的向量。

缺点

基础的Seq2Seq有一些缺点,因为Encoder将输入编码为固定大小状态向量的过程实际上是一“信息有损压缩”的过程,如果信息量越大,那么这个转化向量的过程对信息的损失就越大,基础的模型连接Encoder和Decoder模块的组件仅仅是一个固定大小的状态向量,这使得Decoder无法直接去关注到输入信息的更多细节。相当于是在输入一句话之后,看完一遍,立刻要求进行翻译;对于人而言,长句子的效果也不会很好。

改进

seq2seq +attention
则类似于翻译人员从头到尾阅读德语文本,同时写下关键字,然后他开始翻译成英语。 在翻译每个德语单词时,他使用了自己写下的关键字。

总结:翻译每一个单词时,阅读的文本内容里面不是每个单词都是一样重要,而是应该有不同权重,这就体现了attention机制的重要。

seq2seq +attention模型:

nlp复习--seq2seq & attention
这意味着在生成每个单词yi的时候,原先都是相同的中间语义表示C会替换成根据当前生成单词而不断变化的 ci,ci是每个单词给了不同权重训练出来的向量。
ci怎么出来的???
nlp复习--seq2seq & attention
nlp复习--seq2seq & attention
f2 函数代表Encoder对输入英文单词的某种变换函数(把不同英语单词变换成不同的数表示)
g代表Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,(g函数表示不同的单词加上不同权重通过变换成ci。)----g函数就是对构成元素加权求和

那么问题是这个权重究竟是怎么算出来的呢???
nlp复习--seq2seq & attention
Decoder是一个rnn在生成yi之前肯定会生成一个隐藏状态Hi,用Hi一一和输入句子中每个单词对应的RNN隐层节点状态hj进行对比,通过F函数可以得到Hi和hj的对齐可能性(可能是计算出的两个的相似度),然后通过softMax函数就可以得到相加为1的三个数,这三个数就是不同单词对应的权重。由于a值是计算出来的所以不是网络参数,不是通过训练出来的,而是算出来的。

nlp复习--seq2seq & attention
Source就是输入,Source中的构成元素想象成是由一系列的<Key,Value>数据对构成。
此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:
nlp复习--seq2seq & attention
注:和上面对应
Query:生成yi之前肯定会生成一个隐藏状态Hi
Key:hj
Value:机器翻译例子中key、Value是同一个值。
Value的权重系数:aij

seq2seq +attention模型生成一个y的过程
(粉色对应的是上一个yi传下来的隐藏状态)
nlp复习--seq2seq & attention
看一下整体过程:

attention解码器RNN接收嵌入以及初始解码器隐藏状态作为输入。
RNN处理其输入,产生新的隐藏状态向量(h4)
attention计算步骤:使用编码器隐藏状态和h4向量来计算该时间步长的上下文向量(C4)。
将h4和C4连接成一个向量。
通过前馈神经网络传递此向量。
前馈神经网络的输出指示该时间步长的输出字。
重复下一步的步骤

注:最后得到的输出是通过h4和C4一起得到的就是没有关键词的通读一遍得到的内容和有关键词读一遍的内容一起输入来翻译。

self-attention

self-attention模块接收n个输入,并返回n个输出。 这个模块会做什么? 简单来说,self-attention机制允许输入彼此交互(“自我”)并找出它们应该更多关注的对象(“关注”)。 输出是这些交互和注意力得分的加权和。
而Self Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。其具体计算过程是一样的,只是计算对象发生了变化而已。

分为以下步骤:

准备输入
初始化权重
生成key,query和value
计算输入1的attention score(将query和key进行点积操作)
计算softmax
将分数与值(value)相乘
对加权值求和以获得输出1
对输入2和输入3重复步骤4–7