机器翻译模型的编码器是先读取整个句子后传递到解码器中翻译,对于过长句子序列(例如超过30个词的句子)的记忆能力弱,翻译效果不理想。此时就出现了注意力模型,它是模仿人类翻译,一部分一部分地翻译,从而提高长句子的翻译能力。
传送门:Attention Is All You Need简记(多头注意力、自注意力、位置嵌入)
本文示例翻译法语句子:Jane visite I’Afrique en Septembre。用来索引法语序列的词。
使用双向RNN用于待翻译序列的特征提取。下图中蓝色的表示激活值,左右箭头表方向,分别是前向传播 和 后向传播 的激活值。
注意力权重
注意力模型在生成每个翻译结果时只考虑部分提取到的特征。注意力权重参数(a set of attention weights)表示当你在时间步处生成输出词,你应该花多少注意力在第个输入词上面。例如分别表示前三个单词对第一个词语的翻译结果具有的影响力。类似的分别表示表示在翻译得到第二个单词时,要分别放多少注意力在前三个单词上。并且前一步翻译的输出也会作为下一步的输入。
翻译过程
翻译使用的是一个单向RNN,用状态表示decoder RNN的隐藏状态(the hidden state in this RNN),表示上下文(context),作为状态的输入。参数满足以下公式:
1、每次考虑的所有注意力权重之和等于1
2、特征步激活值和注意力权重的乘积之和作翻译模型的输入,即上下文
计算注意力权重
为了满足,计算注意力权重的方法(即使用softmax)是:
计算上式的关键是计算得分,现直到计算需要上一个deocder翻译状态的值和特征提取模型encoder中本状态的激活值但不知道具体函数关系,需要通过一个小的神经网络学习对应的具体的函数关系式。
除了学习,还有现成的表达式可以利用。
通过为每个单词分配分值,注意力为不同单词分配不同的注意力。然后利用 softmax 对编码器隐藏状态进行加权求和,得到上下文向量(context vector)。
架构中的注意力模块负责自动学习注意力权重α_ij,该权重会捕获 h_i(编码器隐状态,被称之为候选状态)和 s_j(解码器隐状态,被称之为查询状态)之间的相关性。这些注意力权重之后会被用于构建上下文向量 c,而该向量经过处理后作为输入传递给解码器。
注意力模型的缺点
缺点是时间花费是,因为注意力参数部分的计算。如果有个输入词,个输出词,则注意力权重参数的总数就是x。
酷文章:
想继续深入了解注意力?一篇就够了:深度学习中的注意力模型--张俊林