通过注意力机制,模型就能够有选择地关注输入序列中有用的部分,从而在解码器和编码器之间对齐。
之后,神经机器翻译所面临的问题,基本上也都有了解决方案。
2016年,谷歌推出了首个基于神经机器翻译的翻译系统。
现在,神经机器翻译已经成为了主流翻译工具的核心方法。
在这段发展历程中,RNN和LSTM,已经有了大量的介绍。注意力机制到底是怎么运作的呢?它到底有何魔力?
接下来请你收看——
图解注意力运作机制注意力一共分类两种。一种是全局注意力,使用所有编码器隐藏状态。另一种是局部注意力,使用的是编码器隐藏状态的子集。在这篇文章中,提到的注意力,都是全局注意力。
在开始之前,需要看换一下仅基于seq2seq方法的模型是如何翻译的。
以一个将文本从德语翻译成英语的翻译员为例。
使用“seq2seq”方法的话,他会从头开始逐字逐句阅读德语文本,然后逐字逐句将文本翻译成英语。如果句子特别长的话,他在翻译的时候,可能就已经忘了之前文本上的内容了。
如果使用seq2seq 注意力的方法,他在逐字逐句阅读德语文本的时候,会写下关键词。然后,利用这些关键词,将文本翻译成英语。
在模型中,注意力会为每个单词打一个分,将焦点放在不同的单词上。然后,基于softmax得分,使用编码器隐藏状态的加权和,来聚合编码器隐藏状态,以获得语境向量。
注意力层的实现可以分为6个步骤。
第一步:准备隐藏状态
首先,准备第一个解码器的隐藏状态(红色)和所有可用的编码器的隐藏状态(绿色)。在我们的例子中,有4个编码器的隐藏状态和当前解码器的隐藏状态。
第二步:获取每个编码器隐藏状态的分数
通过评分函数来获取每个编码器隐藏状态的分数(标量)。在这个例子中,评分函数是解码器和编码器隐藏状态之间的点积。
decoder_hidden = [10, 5, 10]
encoder_hidden score
---------------------
[0, 1, 1] 15 (= 10×0 5×1 10×1, the dot product)
[5, 0, 1] 60
[1, 1, 0] 15
[0, 5, 1] 35
在上面的例子中,编码器隐藏状态[5,0,1]的注意力分数为60,很高。这意味着要翻译的下一个词将受到这个编码器隐藏状态的严重影响。
第三步:通过softmax层运行所有得分
我们将得分放到softmax函数层,使softmax得分(标量)之和为1。这些得分代表注意力的分布。