Seq2Seq
在Seq2Seq结构中,编码器Encoder把所有的输入序列都编码成一个统一的语义向量Context,然后再由解码器Decoder解码。在解码器Decoder解码的过程中,不断地将前一个时刻 [公式] 的输出作为后一个时刻 [公式] 的输入,循环解码,直到输出停止符为止。
- Encoder 是一个 GRU
- Decoder 也是一个 GRU
- 训练采用cross entropy loss,与语言模型类似
- 与经典RNN结构不同的是,Seq2Seq结构不再要求输入和输出序列有相同的时间长度!
注意力机制
简单来说,注意力本质上就是一个经过softmax层输出的向量。早期神经网络中,Encoder会通过RNN将最后一个step的隐藏状态向量c作为输出,Deocder利用向量c进行翻译。这样做有一个缺点,翻译时过分依赖于这个将整个sentence压缩成固定输入的向量。输入的sentence有可能包含上百个单词,这么做不可避免会造成信息的丢失,翻译结果也无法准确了。
Bahdanau Attention
- Encoder是一个双向RNN
- Attention Function
LuongAttention
与BahdanauAttention整体结构类似,LuongAttention对原结构进行了部分调整,如下