概述
问题:重复翻译,漏译问题,传统基于注意力的NMT不能有效追踪注意力历史,导致decoder会忽略历史的注意力信息
解决方法:一个及时更新的key-memory来跟踪注意力历史,一个固定的value-memory来存储翻译过程中源语句的表示。 通过两个存储器之间的非平凡变换和迭代交互,解码器关注于更合适的源端单词,用于在每个解码步骤预测下一个目标单词,因此可以提高翻译的充分性。
思路:首先利用decoder的前一时刻状态和前一时刻的预测来生成一个查询,根据查询在key-memory中计算注意力向量,利用注意力向量和value-memory获得上下文向量,并使用查询和上下文向量计算decoder当前时刻的隐藏层状态,最后使用隐藏层状态更新value-memory。
key-memory:动态的,伴随decoder状态的更新链
value-memory:固定的,在整个翻译过程存储源语句表示
在每个解码步骤中,一层一层地重复进行多轮存储器操作,这可以通过考虑在早期阶段实现的“中间”注意力结果,从而使解码器有机会重新注意。 这种结构允许模型利用可能的复杂转换和交互:1)同一层中的key-value存储器对,以及2)不同层的key(和value)存储器。
key-value memory-augmented attention model
三个组成部分:1)编码器(左侧),编码整个源语句并输出其注释作为key-memory和value-memory的初始化; 2)key-value存储器增强注意模型(在中间),生成源语句的上下文表示,其适合于在key-memory和value-memory上执行的迭代存储器访问操作,来预测下一目标单词; 3)解码器(右侧),逐步预测下一个目标单词。
步骤t解码器状态首先遇到之前的预测来形成一个查询状态
解码器使用查询状态在key-memory中找到一个准确的注意力向量,根据的指导,在value-memory中找到源上下文表示,然后利用和更新key-memory。
是第r轮t时间步的key-memory状态,注意力向量的计算,表示了对于中的slot的归一化权重,第r轮t时间步j个slot是,Address计算可以使用基于内容的注意力机制,的第j个cell可以计算为:
源语句上下文向量的获得:
其中是value-memory的状态
然后使用查询状态和上下文向量来获得“中间”隐藏层状态
最终使用“中间”隐藏层状态来更新key-memory状态
更新操作可以分为两步:forget和add
forget操作决定memory slot中哪些内容需要被移除,表示memory slot中每一个维度需要被移除的值
add操作决定当前信息哪些应该被写入memory作为新添加的内容。
训练过程:
预测目标语句中的最后一个单词依赖于源语句的最后一个单词,也就是说注意力概率应该接近1.0,生成其他单词的时候不应该过多集中注意在,因此可以定义:
因此训练目标可以写成:
最后
以上就是忧虑海燕为你收集整理的《Neural Machine Translation with Key-Value Memory-Augmented Attention》(IJCAI 2018)的全部内容,希望文章能够帮你解决《Neural Machine Translation with Key-Value Memory-Augmented Attention》(IJCAI 2018)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复