NMT And Attention

机器翻译

传统衡量机器对语言理解的测试之一
同时涉及到语言分析与理解
一个每年400亿美金的产业
主要在欧洲,亚洲也在兴起

机器翻译的需求

Google每天翻译1000亿单词
Facebook研发了自己的翻译系统,因为通用的机器翻译系统无法适应社交领域
eBay用机器翻译来促进跨境交易

什么是NMT

抽象的架构就是一个encoder一个decoder:

NMT:青铜时代

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

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

现代NMT模型

之前课上也提到过,一个RNN做encoder,另一个RNN做decoder:

实际使用的系统更加复杂:

这里的RNN可视作以原文为条件的conditional语言模型

RNN Encoder

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

Decoder

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

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

MT的发展

基于短语的MT就是2016-11之前的Google翻译所采用的系统,其发展是缓慢的。神经网络兴起之后,出现了一种基于Syntax-based SMT(估计是换换词向量),发展也不快。但NMT的发展是最迅猛的:

NMT的四大优势

End-to-end training
    为优化同一个损失函数调整所有参数
Distributed representation
    更好地利用词语、短语之间的相似性
Better exploitation of context
    利用更多上下文——原文和部分译文的上下文
生成的文本更流畅
    可能跟上述优势有关

NMT也存在弱点

无法显式利用语义或语法结构(依存句法分析完全用不上了,有些工作正在展开)
无法显式利用指代相消之类的结果

统计/神经网络机器翻译

Manning说除了英语之外,学生中第二大语种是中文,而且他亮出了简体中文的例子,真是让人激动啊。他还特意在不同年份测试了google翻译的效果:

其中,13年有所进步,14-16年又退步了并且停滞了3年。直到2017年才有质的飞跃。

NMT主要由工业界促进

2016-02 微软在Android和iOS上发布了离线NMT系统,这对境外旅游人士特别有帮助。
2016-08 Systran发布了NMT模型
2016-09 Google发布了NMT系统,大肆宣传了一番,并且overclaim比得上人工翻译质量。Manning真是直言不讳啊。

介绍Attention

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

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

这种机制也与人类译员的工作流程类似:不是先把长长的一个句子暗记于心再开始闭着眼睛翻译,而是草草扫一眼全文,然后一边查看原文一边翻译。这种“一边……一边……”其实类似于语料对齐的过程,即找出哪部分原文对应哪部分译文。而NMT中的attention是隐式地做对齐的。

词语对齐

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

同时学习翻译和对齐

一个非常棒的可视化,显示attention model成功地对齐了法语和英语,其中一小段语序的调整也反应出来了:

打分

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

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

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

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

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

有一些观点认为模型不应该注意所有的事情,可能对长句子来讲比较有潜力:

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

更多attention!覆盖范围

在图片标题生成研究中,模型通过对图片不同区域的attention生成了不同的词语:

decoder

Ancestral sampling

在时刻$t$,根据之前的词语生成当前词语$x_t$:

可以多次sample取最好的。

理论上完美无缺,但实践中只会产生高方差的差效果。你也不想同一个句子每次翻译结果都不一样。

每个时刻记录$k$个最可能的选项(剪枝),在其中进行搜索。

然后递推 $H_{t+1}$

其中

也就是说把词表中的词丢进入计算概率取前$K$个。

效果对比

采样要采50轮才得到比贪心搜索稍好的结果,但很小的柱搜索轻松超越了它们。另外,基于短语的MT常用的柱搜索大小是100到150,可见NMT的优势。

Encoder-Decoder框架

注意力机制是一种通用的思想,本身不依赖于特定框架,但是目前主要和Encoder-Decoder框架(编码器-解码器)结合使用。下图是二者相结合的结构:

类似的,Encoder-Decoder框架作为一种深度学习领域的常用框架模式,在文本处理、语言识别和图像处理等领域被广泛使用。其编码器和解码器并非是特定的某种神经网络模型,在不同的任务中会套用不同的模型,比如文本处理和语言识别中常用RNN模型,图形处理中一般采用CNN模型。

以下是没有引入注意力机制的RNN Encoder-Decoder框架:

下面就以Seq2Seq(异步的序列到序列模型)模型为例,来对比未加入注意力机制的模型和加入了注意力机制后的模型。

未加入注意力机制的RNN Encoder-Decoder

未加入注意力机制的RNN Encoder-Decoder框架在处理序列数据时,可以做到先用编码器把长度不固定的序列X编码成长度固定的向量表示C,再用解码器把这个向量表示解码为另一个长度不固定的序列y,输入序列X和输出序列y的长度可能是不同的。

《Learning phrase representations using RNN encoder-decoder for statistical machine translation》这篇论文提出了一种RNN Encoder-Decoder的结构,如下图。除外之外,这篇文章的牛逼之处在于首次提出了GRU(Gated Recurrent Unit)这个常用的LSTM变体结构。

把这种结构用在文本处理中,给定输入序列$X=[x_1,x_2,…,x_T]$,也就是由单词序列构成的句子,这样的一个解码-编码过程相当于是求另一个长度可变的序列$y=[y_1, y_2, …, y_{T′}]$的条件概率分布:$p(y)=p(y_1, y_2, …, y_{T′} | x_1,x_2,…,x_T)$。经过解码后,这个条件概率分布可以转化为下面的连乘形式:

所以在得到了表示向量c和之前预测的所有词 ${y_1,y_2,…, y_{t-1}}$后,这个模型是可以用来预测第$t$个词$yt$的,也就是求条件概率$p(y_t | {y_1,y_2,…, y_{t-1}}, c)$。

对照上面这个图,我们分三步来计算这个条件概率:

加入注意力机制的RNN Encoder-Decoder

《Neural Machine Translation by Jointly Learning to Align and Translate 》这篇论文在上面那篇论文的基础上,提出了一种新的神经网络翻译模型(NMT)结构,也就是在RNN Encoder-Decoder框架中加入了注意力机制。这篇论文中的编码器是一个双向GRU,解码器也是用RNN网络来生成句子。

用这个模型来做机器翻译,那么给定一个句子$X=[x_1,x_2,…,x_T]$,通过编码-解码操作后,生成另一种语言的目标句子$y=[y_1, y_2, …, y_{T′}]$,也就是要计算每个可能单词的条件概率,用于搜索最可能的单词,公式如下:

生成第$t$个单词的过程图示如下:

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信