一、seq2seq
seq2seq 模型就像一个翻译模型,输入是一个序列(比如一个英文句子),输出也是一个序列(比如该英文句子所对应的法文翻译)。这种结构最重要的地方在于输入序列和输出序列的长度是可变的。
一般用Encode和decode机制,先把输入内容按照时间序列保存到一个矩阵中,然后解码翻译到目标文件,直到输出终止符。这个方法的问题是,时间序列太长的时候翻译效果比较差。
-
1.1 编码器
seq2seq网络的编码器是一个RNN,它为输入句子中的每个单词输出一些值. 对于每个输入字,编码器输出一个向量和一个隐藏状态,并将隐藏状态用于下一个输入字。
- 1.2 解码器
在最简单的seq2seq解码器中,我们只使用编码器的最后一个输出. 这个最后的输出有时称为上下文向量,因为它从整个序列编码上下文. 该上下文向量被用作解码器的初始隐藏状态
.
二. 注意力解码器(attention )
注意力允许解码器网络针对解码器自身输出的每一步”聚焦”编码器输出的不同部分. 首先我们计算一组注意力权重. 这些将被乘以
编码器输出矢量获得加权的组合. 结果(在代码中为attn_applied
)[2] 应该包含关于输入序列的特定部分的信息, 从而帮助解码器选择正确的输出单词.
使用解码器的输入
和隐藏状态
作为输入,利用另一个前馈层 attan
计算注意力权重, 由于训练数据中有各种大小的句子,为了实际创建和训练此层, 我们必须选择最大长度的句子(输入长度,用于编码器输出),以适用于此层. 最大长度的句子将使用所有注意力权重,而较短的句子只使用前几个.
- “Teacher forcing” 是将实际目标输出用作每个下一个输入的概念
- 参考