天天看点

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

目录

神经机器翻译NMT

神经机器翻译的架构

神经机器翻译的青铜时代

现代神经机器翻译的序列模型

RNN Encoder

Decoder:循环语言模型

机器翻译的发展

神经机器翻译的四大优势

统计/神经机器翻译

神经机器翻译主要由工业界促进

Attention:朴素RNN&长序列

Attention机制

词语对齐

同时学习翻译和对齐

Scoring

  • 神经机器翻译NMT

神经机器翻译是用一个大型神经网络建模整个翻译过程的系统。

神经机器翻译的架构

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

神经机器翻译的青铜时代

80年代神经网络是个很边缘的领域,另外计算力也很有限。当时的NMT系统很简陋:词表四五十,固定的50个输入(二进制编码),固定的66个输出,一到三层隐藏层,150个单元。

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

90年代出现了一种类似RNN的更复杂的框架:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

现代神经机器翻译的序列模型

一个RNN做encoder,另一个RNN做decoder。

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

实际系统中使用深层RNN:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

这里的RNN可视作条件循环语言模型:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

RNN Encoder

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

最后一个隐藏层的状态Y是整个原文的总结。

常见的encoder实际上加了一些扩展,比如GRU或LSTM。

Decoder:循环语言模型

常见的做法是把encoder的最后一层(最后一个时刻)作为decoder的第一层,这样就必须用LSTM保持中期记忆。

另一种做法是将encoder最后一层喂给decoder的每一层,这样就不会有记忆丢失的后顾之忧了。

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

机器翻译的发展

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

神经机器翻译的四大优势

  1. End-to-end training

    为优化同一个损失函数调整所有参数

  2. Distributed representation

    更好地利用词语、短语之间的相似性

  3. Better exploitation of context

    利用更多上下文——原文和部分译文的上下文

  4. More fluent text generation

    深度学习文本生成质量更好

统计/神经机器翻译

不同年份google翻译的效果测试:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

神经机器翻译主要由工业界促进

2016-02 微软在Android和iOS上发布了离线NMT系统。

2016-08 Systran发布了NMT模型。

2016-09 Google发布了NMT系统,声称比得上人工翻译质量。

  • Attention:朴素RNN&长序列

朴素encoder-decoder的问题是,只能用固定维度的最后一刻的encoder隐藏层来表示源语言Y,必须将此状态一直传递下去,这是个很麻烦的事情。事实上,早期的NMT在稍长一点的句子上效果就骤降。

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

Attention机制

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

解决方法是将encoder的历史状态视作随机读取内存,这样不仅增加了源语言的维度,而且增加了记忆的持续时间(LSTM只是短时记忆)。

词语对齐

传统的SMT中需要显式地做双语对齐:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

而attention model是在翻译的过程中隐式地对齐。

同时学习翻译和对齐

attention model成功地对齐了法语和英语,其中一小段语序的调整也反应出来了:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

Scoring

在图示问号时刻,究竟应该关注哪些时刻的encoder状态呢?关注的强度是多少呢?

有一种打分机制,以前一刻的decoder状态和某个encoder状态为参数,输出得分:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

然后softmax归一化分值转化为概率,这个概率称为对齐权值(alignment weights):

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

这个概率也代表模型应该将多少比例的注意力放在一个历史状态上:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

加权和得到一个context vector,作为条件之一生成decoder的当前状态:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

而分数的获得,是通过attention function进行的。attention function有多种选择,其中流行的是中间这种。Wa给了两个向量更复杂的interaction,而最后一种根本没有interaction。

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

有一些观点认为模型不应该注意所有的事情:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

但这些观点并没有取得更好的成绩:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

句子特别短的时候,模型的得分都不高。这纯粹是因为语料中的短句子本来就语义隐晦,比如某个专有名词作为标题。而有attention的模型在句子很长的时候,效果依然没有下降,说明了attention的重要性。

LSTM非常擅长生成自然的文本,但有时候译文与原文相去甚远,没有把注意力放在原文上。比如下面红色的名字不知道从哪里冒出来的:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

加了attention好了很多,还是比不上人类,有时候会把同一个意思的词重复两遍:

CS224N笔记——神经机器翻译与Attention机制神经机器翻译NMTAttention:朴素RNN&长序列

继续阅读