论文:NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
地址:http://www.arxiv.org/pdf/1409.0473.pdf
本人,小白,找了些相关资料,发现这些东西写的内容非常晦涩难懂,于是自己整理了一份笔记,都是些自己的理解,其中有可能有错误的地方,希望有缘人看到能指正,谢谢大佬。。。希望能帮到大家!!!
encoder-decoder
这个的出现是在seq2seq这个模型中。详细内容在这个视频看的:
https://www.bilibili.com/video/BV1d4411R72S?share_source=copy_web
视频时间很长,很细致,根据我的理解这里简要概括下:
h是隐状态向量
c是状态向量
s是根据上一个输出结果传到下一个结果的隐藏层
go 是开始的标志
图中每个方格就是一个操作单元。可以是RNN 、GRU 、LSTM 。。。就是一些公式中的映射,也就是函数
比如这句话:
encoder-decoder中,将输入句子通过非线性变换转化为中间语义表示C,对于解码器Decoder来说,其任务是根据句子Source的中间语义表示C和之前已经生成的历史信息 y 1 , y 2 . . . y i − 1 y_1,y_2...y_{i-1} y1,y2...yi−1来生成i时刻要生成的单词 y i y_i yi,即 s i = g ( c , s i − 1 , y i − 1 ) s_i = g(c,s_{i-1},y_{i-1}) si=g(c,si−1,yi−1)。这里g(),就是一个映射,也就是一个操作单元.
为什么要把最后一个h映射成c呢?? --------是由于输入尺度不同,需要变化。就比如h是个100维的向量,但decoder需要一个50维的,那h就需要转换为c,c是50维
潜在的问题就是,在编码输入序列时,该模型框架需要压缩所有的信息在一个固定长度的向量中(虽然这个向量的长度其实也是可以变化的),这就会让该模型在面对长句的时候显得十分无力(seq2seq论文中的图也表明当大于35个字的时候,模型的表现直线下降),而且随着序列的增长,句子越前面的词的信息就会丢失的越厉害,虽然有几个小trick来解决这些问题,比如倒序输入句子一遍,或者重复输入两遍,或者使用LSTM模型。但这些都治标不治本,对模型的提升微乎其微,因为在解码时,当前预测词对应的输入词的上下文信息,位置信息等基本都已丢失。
为了解决这个问题,才引入了注意力机制,该机制的本质其实就是引入了当前预测词对应输入词的上下文信息以及位置信息。或者用论文中比较易懂的说法就是,我们现在这个模型不再是傻乎乎的把输入序列编码为一个固定向量,再去解码这个固定向量;我们现在的解码本质上是自动从这个固定向量中抽取有用的信息来解码我的当前词。
【NLP论文笔记】Neural machine translation by jointly learning to align and translate - 简书 (jianshu.com)
注意力机制的encoder-decoder
为了前后词的相关性,先是做了一个双向的传播。
这个就是双向传播的图,就相当于把刚刚那个(就是第一张图)单向编码的过程,从后向前又进行了一遍,每一遍都会有一组h,然后把这俩组的h,合并到一起,生成新的h(图中标的hi)。
之后的过程就是这个图(图是偷来的):
图中的
Z
i
Z_i
Zi就是 s 也就是解码的隐藏层。这个图是求目标语言端
i
=
2
i = 2
i=2,源语言端
j
=
1
j = 1
j=1 , 另一种说法就是 求
y
2
y_2
y2 , 画出了 和
h
1
h_1
h1 的关系。
目标端词
y
i
y_i
yi是用这个公式求出来的:
公式的右边
p
(
y
i
∣
y
<
i
,
X
)
p(y_i|y<i,X)
p(yi∣y<i,X) 是个啥我也不太清楚,我觉着应该就是输入语言端X对应的输出语言
y
i
y_i
yi 的概率。
左边 g ( y i − 1 , z i , c i ) g(y_{i-1},z_i,c_i) g(yi−1,zi,ci) 是与 y i − 1 y_{i-1} yi−1(上一个输出值) z i z_i zi (解码对应的隐藏层), c i c_i ci (我也不知道这个叫什么,其中一篇文章中叫它语境向量,那我也叫它语境向量吧) 这三个的一个映射。那这个映射具体是啥呢,我的理解是可以是RNN,LSTM,GRU。就把它看成RNN吧。
y i − 1 y_{i-1} yi−1 这个就是上一个操作模块的输出,不用求
z
i
z_i
zi 用这个公式求:
f() 和 刚刚的 g() 同理
c
i
c_i
ci 这么求:
h
i
h_i
hi 是知道的,就是双向传播encoder得到的,那求
α
i
j
\alpha_{ij}
αij , (这里的下标需要说明一下,i 是对应
y
i
y_i
yi 的 i ,j 是对应
h
i
h_i
hi 的 i) 根据公式:
这里的exp(),代表的是 e的多少次, T 是说
h
i
h_i
hi 的个数。其中a就是一个对齐模型,用来评估当前预测词,与输入词每一个词的相关度的。跟具体些就是下边的那个式子了。其中
V
a
,
W
A
,
U
a
V_a,W_A,U_a
Va,WA,Ua应该都是些权重。
这下就算完啦!! 这些都是我看一些博文和论文自己的理解,做了个笔记。参考博文有这些,非常感谢他们:
(1条消息) 神经网络机器翻译Neural Machine Translation(2): Attention Mechanism_Clear.的博客-CSDN博客
【NLP论文笔记】Neural machine translation by jointly learning to align and translate - 简书 (jianshu.com)