1700539030
1700539031
(10.20)
1700539032
1700539033
1700539034
1700539035
1700539036
(10.21)
1700539037
1700539038
其中f和g是非线性变换,通常是多层神经网络;yi是输出序列中的一个词,si是对应的隐状态。
1700539039
1700539040
1700539041
1700539042
1700539043
图10.6 序列到序列模型结构示意图
1700539044
1700539045
在实际使用中,会发现随着输入序列的增长,模型的性能发生了显著下降。这是因为编码时输入序列的全部信息压缩到了一个向量表示中。随着序列增长,句子越前面的词的信息丢失就越严重。试想翻译一个有100个词的句子,需要将整个句子全部词的语义信息编码在一个向量中。而在解码时,目标语言的第一个词大概率是和源语言的第一个词相对应的,这就意味着第一步的解码就需要考虑100步之前的信息。建模时的一个小技巧是将源语言句子逆序输入,或者重复输入两遍来训练模型,以得到一定的性能提升。使用长短期记忆模型能够在一定程度上缓解这个问题,但在实践中对于过长的序列仍然难以有很好的表现。同时,Seq2Seq模型的输出序列中,常常会损失部分输入序列的信息,这是因为在解码时,当前词及对应的源语言词的上下文信息和位置信息在编解码过程中丢失了。
1700539046
1700539047
Seq2Seq模型中引入注意力机制就是为了解决上述的问题。在注意力机制中,仍然可以用普通的循环神经网络对输入序列进行编码,得到隐状态h1,h2…hT。但是在解码时,每一个输出词都依赖于前一个隐状态以及输入序列每一个对应的隐状态
1700539048
1700539049
1700539050
,
1700539051
1700539052
(10.22)
1700539053
1700539054
1700539055
,
1700539056
1700539057
(10.23)
1700539058
1700539059
其中语境向量ci是输入序列全部隐状态h1,h2…hT的一个加权和
1700539060
1700539061
1700539062
,
1700539063
1700539064
(10.24)
1700539065
1700539066
其中注意力权重参数αij并不是一个固定权重,而是由另一个神经网络计算得到
1700539067
1700539068
1700539069
,
1700539070
1700539071
(10.25)
1700539072
1700539073
1700539074
.
1700539075
1700539076
(10.26)
1700539077
1700539078
神经网络a将上一个输出序列隐状态si−1和输入序列隐状态hj作为输入,计算出一个xj,yi对齐的值eij,再归一化得到权重αij。
1700539079
[
上一页 ]
[ :1.70053903e+09 ]
[
下一页 ]