本文主要是介绍论文笔记:NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
https://www.cnblogs.com/naniJser/p/8900720.html
https://blog.csdn.net/Doron15/article/details/81866095
神经机器翻译不像传统的统计机器翻译,它的目的是建立一个单一的神经网络,使这个网络能够最大化翻译效果。NMT通常是编码器和解码器的结合,编码器把源语句转化为固定长度的向量,由解码器生成翻译。这篇论文认为使用固定长度的向量是提升编码器解码器结构效果的瓶颈,所以提出通过让模型自动(平滑地)搜索源语句中与预测目标单词相关的部分来提升效果,而不是明确地把这些部分转化为生硬的部分。实验显示,效果不错。
之前的NMT在处理长句子的时候会有些困难,尤其是比训练数据集更长的文本。随着数据句子长度增加,基本的编码解码器表现会急剧下降。因此,该论文提出将编码解码模型拓展,使其能够连带地学习去对齐和翻译。每翻译一个单词,它就在源语句中查找信息最相关的位置集合。这个模型基于与这些源位置相关联的上下文向量和所有之前形成的目标单词预测目标单词。
最大的区别在于它不是尝试去把一整个输入句子编码为一个单一的固定长度的向量。而是把输入的句子编码为向量的序列,解码翻译的时候选择这些向量的一个子集。这也就解放了NMT,不需要再把源语句所有的信息,不管有多长,压缩成一个固定长度的向量。这个模型对长句子表现要更好。不过任何长度上它的优势都很明显。在英法翻译的任务中,这个方法可以媲美卷积的基于短语的系统。而且分析显示这个模型在源语句和对应的目标语句之间的对齐效果更好
论文先给出了一般RNN做机器翻译的方法–encoder-decoder
encoder:根据上一个状态还当前输入
decoder:
论文给出的方法:
encoder是bidirectional RNN
decoder
-
decoder
si是i时刻的一个RNN隐含层,并不像之前的编码解码器那样,这里的概率是以每个目标单词yi不同上下文的向量ci作为条件的。 上下文向量ci依靠的是编码器将数据的句子映射的一个注解的序列(h1,…,hTx)。每个注解hi都包含了整个输入序列的信息,而这个信息在输入序列的第i个单词周围的部分有很大的注意力。eij是一个对齐模型,它是给j位置的输入和i位置的输出匹配的好坏打分的。这个分数基于RNN的隐含层si-1和输入句子中的第j个注解hj。 -
encoder(bidirectional RNN)
通常来讲,RNN是顺序地从开始标志x1到最后xTx读取输入序列x的。然后,这里的结构是想要每个单词的解释既总结前面的单词,还有后面的单词。因此,此处使用双向RNN(BiRNN)。
BiRNN包含前向和反向RNN。前向RNN f→按顺序读输入序列(从x1到xTx),并计算前向的隐藏状态(h1→,…,hTx→)的序列。反向RNN按相反的顺序读取序列(从xTx到x1),生成一个反向隐藏层状态(h1←,…,hTx←)的序列。
这篇关于论文笔记:NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!