打字猴:1.700539042e+09
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
1700539080 我们可以对此给出一个直观的理解:在生成一个输出词时,会考虑每一个输入词和当前输出词的对齐关系,对齐越好的词,会有越大的权重,对生成当前输出词的影响也就越大。图10.7展示了翻译时注意力机制的权重分布,在互为翻译的词对上会有最大的权重[29]。
1700539081
1700539082
1700539083
1700539084
1700539085 图10.7 注意力机制的权重分布
1700539086
1700539087
1700539088
1700539089 在机器翻译这样一个典型的Seq2Seq模型里,生成一个输出词yj,会用到第i个输入词对应的隐状态hi以及对应的注意力权重αij。如果只使用一个方向的循环神经网络来计算隐状态,那么hi只包含了x0到xi的信息,相当于在αij这里丢失了xi后面的词的信息。而使用双向循环神经网络进行建模,第i个输入词对应的隐状态包含了和,前者编码x0到xi的信息,后者编码xi及之后所有词的信息,防止了前后文信息的丢失,如图10.8所示。
1700539090
1700539091
[ 上一页 ]  [ :1.700539042e+09 ]  [ 下一页 ]