本课概要
1、机器翻译(MT)
2、带attention的序列模型
3、序列模型解码器(decoder)
一、机器翻译(MT)
机器翻译是一个十分经典的语言理解的测试,涉及语言分析(language analysis)与语言生成(language generation)。
机器翻译是一个巨大的商业市场,每年的市场规模达到400亿美元,在欧洲和亚洲都有市场。
神经机器翻译(NMT):神经机器翻译是利用一个巨大的神经网络来为整体机器翻译过程建模。
1、神经机器翻译的历史回顾
最早开始于1987年,Allen将神经网络应用到了机器翻译之中。
1992年,Chrisman构建了一个神经网络机器翻译的模型获得了75%的正确率。
2、现代的神经机器翻译(NMT)
神经机器翻译的现代序列模型之一[Sutskever et al. 2014, cf. Bahdanau et al. 2014, et seq.],它将每个预测的输出都输入到了下一个节点中。
从另一个角度来看,我们可以认为上面的模型是一种条件循环语言模型,以前一个单词为条件进行概率的估计。
正如我们在前面的课程中所学习的那样,我们可以把现代的神经机器翻译(NMT)模型分为两个部分,一部分是编码(encode),一部分是解码(decode)。
在encode部分,我们会一次读取源语言的一个词/部分,最后的隐藏状态Y将会总结整个源句子,可以使用任何循环的激活函数,tanh,GRUs,LSTM,CNN等等。
在decode的阶段,利用encode阶段的最后一个节点和decode阶段的前一个Z以及输入进行当前Z的计算,并采用优化算法进行优化。
从实际的表现来看,现代的神经机器翻译的表现不俗,增长很快,迅速超过了其他机器翻译的方法。
神经机器翻译的成功主要有四个原因:
- 端对端的训练过程:所有的参数都是同一时间基于损失函数来进行优化的
- 基于分布的表征(猜测这里可能指的是word2evc等利用数字向量对单词的表征):可以更好地利用单词和词组之间的相关性
- 能更好地利用上下文:NMT可以使用更多的文本内容,使得翻译更加准确
- 更流程的文本生成:深度学习的文本生成的质量更高
其他一切也值得关注的因素
- 在原来的模型中有一些黑箱(black box)模型,比如重新排序(reordering),音译(transliteration)
- 清楚使用句法和语义结构
- 使用对话结构,复指(anaphora)等
从谷歌翻译每年的表现来看,我们也可以看到加入NMT(2017)之后,翻译质量得到了提升。
目前在工业界NMT已经被大量投入使用了。
- 2016/6,微软发布了离线运行的基于安卓和IOS的深度神经网络机器翻译
- 2016/8,Systran发布了纯NMT的模型
- 2016/9,谷歌发布了NMT
在实际的多语种的翻译中,我们实际上不会直接建立两两配对的神经机器翻译模型(比如一共80种语言的话,就需要80*79种机器翻译模型),而是会使用一个中间语言(interlingua),先将源语言翻译为中间语言,中间语言再翻译为目标语言,这样我们只需要训练80+80个模型就可以了。
二、带attention的序列模型
正如我们前面所描绘的那样,encoder阶段的最后一个节点代表整个源语言句子的信息,将会成为decoder阶段的所有节点的输入Y。从实际的引用来看,这样的结构对长句子的翻译效果要差于短句子,因此需要寻找一个改进方法。
研究者们找到的一个改进的方法是:attention机制,构建一个源状态池(Pool of source states)或者说RAM,将encoder中的状态放入,然后在decoder阶段基于需求抽取需要翻译的状态节点。([Larochelle & Hinton, 2010], [Denil, Bazzani, Larochelle, Freitas, 2012])从某种程度上,这样的机制更接近于人类翻译者的行为机制。
attention机制有点类似于统计机器翻译(SMT)中的对应(assignment)过程,也就是将源语言和目标语言的各个部分对应起来。
attention机制中,它会比较目标隐层和源隐层,并给源隐层打分。
接下来,对分数进行标准化计算。
根据加权平均构建一个上下文向量(context vector)
计算下一个隐藏状态。
具体分数的计算有很多种算法,这里介绍主要的三种(对应下面的三行公式):
- 第一行:计算源语言hs和目标语言的ht的点积,基本思想是计算两者的相似度,但是没有学习到交叉(interaction)影响
- 第二行:中间加入了一个W矩阵,可以构建ht和hs之间的交叉(interaction)影响
- 第三行:连接ht和hs,训练一层神经网络;但是这个也没有很好地学习到交叉(interaction)影响,所以更进一步的做法是训练多层的神经网络
对于长句子的翻译而言,attention的范围包含全部的句子,就会导致后馈计算涉及到所有节点,因此我们可以考虑使用局部(local)attention。
从结果来看,attention机制确实可以有效提升长句子的翻译。
我们可以进一步拓展attention机制。
比如doubly attention,就在原来的基础上增加了基于目标语言的attention。
最近几年来,原来应用于对应模型(alignment model)的一些语言思想开始被应用于attention机制的拓展。
- 基于coverage的attention [Tu, Lu, Liu, Liu, Li, ACL’16]
- position (IBM2) + Markov (HMM) + fertility (IBM3-5) + alignment symmetry (BerkeleyAligner) [Cohn, Hoang, Vymolova, Yao, Dyer, Haffari, NAACL’16]
三、序列模型解码器(decoder)
思考到decoder的运作,第一个想法可能是给所有可能的翻译都打分,然后选出最好的一个。这个想法是不可行的,因为这个算法复杂度将会高到无法实现。
方法一:Ancestral Sampling
从基于前一个翻译单词的条件概率分布里面随机取一个单词作为当前的翻译,然后再重复这样的步骤。
这种方法的优点在于,速度快而且是无偏;缺点是这种方法方差大每次翻译的结果都不一样。
方法二:贪婪搜索
每次决定翻译的时候,都根据目前的条件概率选择概率最大的那个目标语言单词。优点是在时间和空间上都是很有效的,但是缺点是很有可能得到的是次优解。
方法三:束(beam)搜索
在t时刻,进行翻译的时候留下K个概率最高的备选项,然后在t+1时刻,进行翻译的时候再给出K个概率最高的备选项,这样就可以得到K²个备选项,从中选出K个概率最高的备选项。它的优点是翻译质量比较高,缺点是计算起来比较费时,不太容易并行计算。
其中K的确定方法是利用一个验证集(validation),选择使其翻译质量最高的K。
三种方法的训练结果显示束(beam)搜索得到的效果是最好的: