seq2seq(序列对序列),是一种深度学习模型,在机器翻译、文本摘要和图像字幕等方面取得了很大的成功。谷歌翻译从2016年底开始在生产中使用这种模型, 是基于此基础上的Seq2seq Models With Attention。
seq2seq:
上下文向量成为这类型模型的瓶颈,这给模型处理长句带来了挑战。Bahdanau和Luong等人,2015年提出了一个解决方案,介绍并改进了一种称为“attention”的技术,极大地提高了机器翻译系统的质量。attention允许模型根据需要输入序列的相关部分。
让我们继续研究attention模型。attention模型与经典的seq2seq模型有两个主要区别:
1. 编码器将更多的数据传递给解码器。编码器不传递编码阶段的最后一个隐藏状态,而是将所有的隐藏状态传递给解码器:
2. an attention解码器在产生输出之前会执行一个额外的步骤。为了关注与这个解码时间步长相关的输入部分,解码器做了以下工作:
- 查看它接收到的一组编码器隐藏状态——每个编码器隐藏状态都与输入语句中的某个单词关联最大
- 给每个隐藏状态一个分数(现在我们忽略这个分数是如何计算的)
- 将每个隐藏状态乘以softmaxed的分数,从而放大得分高的隐藏状态,淹没得分低的隐藏状态
这个评分练习是在解码器端每次执行一个步骤时完成的。
- 注意解码器RNN接收embedding of the <END> token和初始解码器隐藏状态。
- RNN处理它的输入,产生一个输出和一个新的隐藏状态向量(h4)。输出被丢弃。
- Attention 步骤:我们使用编码器隐藏状态和h4向量来计算这个时间步骤的上下文向量(C4)。
- 我们把h4和C4连接成一个向量。
- 我们通过一个前馈神经网络(一个与模型联合训练的神经网络)来传递这个向量。
- 前馈神经网络的输出表示该时间步长的输出字。
- 重复下面的步骤
这是另一种观察我们在每一个解码步骤中注意到的输入句子的哪一部分的方法:
请注意,模型并不只是盲目地将输出的第一个单词与输入的第一个单词对齐。实际上,它从训练阶段学习了如何对齐该语言对中的单词。关于这种机制的精确性的一个例子可以从上面列出的注意力论文中得到:
可以看出模型在输出“欧洲经济区”时是如何正确注意的。在法语中,这些单词的顺序与英语相反(“european enne economique zone”)。其他的每个词的顺序都差不多。
如果您觉得已经准备好学习实现,那么确定TensorFlow的实现 Neural Machine Translation (seq2seq) Tutorial.