目录
从NMT的历史谈到现代,讲解了attention机制的动机、原理及最新的拓展。通过实例展示谷歌翻译的变化,直言不讳指出其过度炒作。Manning今天还换上了新MBP,挺潮的。
机器翻译
-
传统衡量机器对语言理解的测试之一
-
同时涉及到语言分析与理解
-
一个每年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是整个原文的总结。
常见的encoder实际上加了一些extension,比如GRU或LSTM。
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还避免了传统MT中的黑盒子(reorder之类)模型。NMT也存在弱点
-
无法显式利用语义或语法结构(依存句法分析完全用不上了,有些工作正在展开)
-
无法显式利用指代相消之类的结果
可见太统一的闭环系统也有自己的烦恼啊。
统计/神经网络机器翻译
Manning说除了英语之外,学生中第二大语种是中文,而且他亮出了简体中文的例子,真是让人激动啊。他还特意在不同年份测试了google翻译的效果:
其中,13年有所进步,14-16年又退步了并且停滞了3年。直到2017年才有质的飞跃。
我觉得这个句子涉及到指代相消,MT系统很难消解损兵的“他们”。MT系统必须有这样的常识:兵力悬殊的两军对战,人数少的一方更容易失败。估计语料不足以给它这种知识。
NMT主要由工业界促进
2016-02 微软在Android和iOS上发布了离线NMT系统,这对境外旅游人士特别有帮助。
2016-08 Systran发布了NMT模型
2016-09 Google发布了NMT系统,大肆宣传了一番,并且overclaim比得上人工翻译质量。Manning真是直言不讳啊。
介绍Attention
朴素encoder-decoder的问题是,只能用固定维度的最后一刻的encoder隐藏层来表示源语言Y,必须将此状态一直传递下去,这是个很麻烦的事情。事实上,早期的NMT在稍长一点的句子上效果就骤降。
Attention机制
解决方法是将encoder的历史状态视作随机读取内存,这样不仅增加了源语言的维度,而且增加了记忆的持续时间(LSTM只是短时记忆)。
这种机制也与人类译员的工作流程类似:不是先把长长的一个句子暗记于心再开始闭着眼睛翻译,而是草草扫一眼全文,然后一边查看原文一边翻译。这种“一边……一边……”其实类似于语料对齐的过程,即找出哪部分原文对应哪部分译文。而NMT中的attention是隐式地做对齐的。
词语对齐
传统的SMT中需要显式地做双语对齐:
而attention model是在翻译的过程中隐式地对齐。
同时学习翻译和对齐
一个非常棒的可视化,显示attention model成功地对齐了法语和英语,其中一小段语序的调整也反应出来了:
打分
在图示问号时刻,究竟应该关注哪些时刻的encoder状态呢?关注的强度是多少呢?
有一种打分机制,以前一刻的decoder状态和某个encoder状态为参数,输出得分:
然后softmax归一化分值转化为概率,这个概率称为对齐权值(alignment weights):
这个概率也代表模型应该将多少比例的注意力放在一个历史状态上:
加权和得到一个context vector,作为条件之一生成decoder的当前状态:
而分数的获得,是通过attention function进行的。attention function有多种选择,其中流行的是中间这种。$W_a$给了两个向量更复杂的interaction,而最后一种根本没有interaction。
有一些观点认为模型不应该注意所有的事情,可能对长句子来讲比较有潜力:
但这些观点并没有取得更好的成绩:
句子特短的时候,模型们的得分都不高。这纯粹是因为语料中的短句子本来就语义隐晦,比如某个专有名词作为标题。而有attention的模型在句子很长的时候,效果依然没有下降,说明了attention的重要性。
LSTM非常擅长生成自然的文本,但有时候译文与原文相去甚远,没有把注意力放在原文上。比如下面红色的名字不知道从哪里冒出来的:
加了attention好了很多,还是比不上人类,有时候会把同一个意思的词重复两遍:
更多attention!覆盖范围
在图片标题生成研究中,模型通过对图片不同区域的attention生成了不同的词语:
如何保证不错过任何重要的区域呢?
Doubly attention
一种思路是同时注意原文和译文:
用旧模型的语言学思想拓展attention
可以利用IBM2等模型中的位置或fertility(丰富程度),因为一般而言一个词最多翻译为两三个词,如果生成了五六个词,那么模型可能在重复生成。
decoder
模型能够在给定原文$ s $的情况下计算译文$ \bar{s} $的概率$ \mathbb{P}(\bar{s} | s) $之后,就来到传统的问题了,找出最可能的译文$ \bar{s}* $:
$$ \bar{s}* = \operatorname{argmax}_{\bar{s}}(\mathbb{P}(\bar{s} | s )) $$
在decoding的时候,朴素想法是生成所有的翻译,用语言模型打分,然后挑最大的。但译文数量是词表大小的指数函数,无法实现。
Ancestral sampling
在时刻$t$,根据之前的词语生成当前词语$x_t$:
$$ x_t \sim \mathbb{P}( x_t | x_1, \ldots, x_n) $$
可以多次sample取最好的。
理论上完美无缺,但实践中只会产生高方差的差效果。你也不想同一个句子每次翻译结果都不一样。
Greedy Search
不多想了,贪婪地选取当前最可能的那个单词:
$$ x_t = \operatorname{argmax}_{\tilde{x_t}} \mathbb{P}( \tilde{x_t} | x_1, \ldots, x_n) $$
缺点显而易见,不是全局最优,走错一步会影响后面的部分。
Beam search
老生常谈了,从不搜索到贪婪搜索到柱搜索,随处可见。
每个时刻记录$k$个最可能的选项(剪枝),在其中进行搜索。
$$ \mathcal{H}_t = \{ (x_1^1, \ldots, x_t^1), \ldots, (x_1^K, \ldots, x_t^K) \} $$
然后递推$ \mathcal{H}_{t+1} $:
$$ \tilde{\mathcal{H}}_{t+1} = \bigcup_{k=1}^K \tilde{\mathcal{H}_{t+1}^k}$$
其中
$$ \tilde{\mathcal{H}_{t+1}^k} = \{ (x_1^k, \ldots, x_t^k, v_1), \ldots, (x_1^k, \ldots, x_t^k, v_{|V|})\}$$
也就是说把词表中的词丢进入计算概率取前$K$个。
效果对比
采样要采50轮才得到比贪心搜索稍好的结果,但很小的柱搜索轻松超越了它们。另外,基于短语的MT常用的柱搜索大小是100到150,可见NMT的优势。
2018年4月30日的翻译:
In the year 1519, 600 Spaniards landed in Mexico to conquer the Aztec empire, which had a population of several million. They first met two-thirds of their lost soldiers.