目录
二、Introduction to Machine Translation
2.2 Statistical Machine Translation(SMT)
三、Neural Machine Translation(神经机器翻译)- NMT
4.1 Exhaustive search decoding(穷举搜索)
五、Attention Mechanism(注意力机制)- 解决bottleneck problem
5.1 序列到序列网络(Sequence to Sequence network)
5.4 Attention Mechanism(注意力机制)
六、Evaluation of Machine Translation
6.1 Bilingual Evaluation Understudy (BLEU)
七、Other things you could do with Encoder-Decoder Models
一、RNN语言模型回顾
1、RNN损失函数
二、Introduction to Machine Translation
2.1、定义
翻译句子x xx从一种语言(源语言)到句子y yy另一种语言(目标语言)。下面这个例子就是从法语转换成为英文。
2.2 Statistical Machine Translation(SMT)
(1)核心思想是从数据中学习概率模型。给定目标语言的句子 x,我们寻找翻译者产生 x 的句子 y。我们知道,通过选择给定 x 最可能的句子 y,我们的错误机会最小化。因此,我们希望选择 y为了最大化 Pr(y|x)。
使用贝叶斯定理,我们可以将这个最大化问题转化为 Pr(y) 和 Pr(x|y) 的乘积,其中 Pr(y) 是 y 的语言模型概率(y 是那个地方的正确句子)并且Pr(x|y) 是给定 y 的 x 的翻译概率。换句话说,考虑到候选翻译的正确程度以及它与上下文的匹配程度,我们正在寻找最有可能的翻译。
公式前一部分P ( x ∣ y ) 是翻译模型,负责翻译词和词组,从平行数据中学习。。后一部分P ( y ) 是语言模型,负责使译文更加流畅,从单语数据中学习。
(2)SMT 需要三个步骤:
- 语言模型(根据上下文,正确的词是什么?)
- 翻译模型(给定单词的最佳翻译是什么?)
- 找到正确的单词顺序的方法。
(3) 优点
- 思路容易理解,有可解释性
- 减少语言专家的手工工作
- 一种适用于更多语言对的 SMT
- 少词典外翻译:使用正确的语言模型,翻译更流畅
(4)缺点
- 需要大量的特征工程,耗费人力
- 空间复杂度较高,需要存储额外资源,例如平行语句
- 需要双语语料库
- 特定错误很难修复
- 不太适合词序差异较大的语言对
2.3 Alignment(对齐) for SMT
为了训练出一个性能优秀的翻译模型,我们首先需要有很多的平行数据(从原文到译文)。这就需要引出对齐的概念。找到原文中的哪个短语对应到译文中的哪个短语。我们用 a (latent variables) 代表对齐。因此,我们的翻译模型从最大化P ( x ∣ y ) 变成了最大化P ( x , a ∣ y ) 。对齐的难点就在于原文中可能存在词语没有对应的译文(counterpart)。
我们还需要考虑单词在句子中不同位置导致对句意产生的不同的影响。即便能够进行对应,对齐本身也十分复杂,有可能出现以下3种情况:
(1)多对一:多个译文词组对应一个原文词组。
(2)一对多:一个译文词组对应多个原文词组。类似的词被称为多产词(fertile word)。
(3)多对多:多个译文词组对应多个原文词组。无法进行更细致的拆分。
2.4 Decoding(解码) for SMT
在对齐之后,我们需要进行翻译。如果使用暴力方法,即枚举所有可能的译文并计算其概率,显然不太现实,因为复杂度太高。更有效的方法是进行启发式搜索算法(heuristic search algorithm)——dynamic programming,放弃探索所有可能性较小的译文。
三、Neural Machine Translation(神经机器翻译)- NMT
3.1 定义
神经机器翻译 (NMT) 是一种使用单个神经网络进行机器翻译的方法,模型架构是序列到序列模型(sequence-to-sequence, seq2seq)。
3.2 NMT概率计算
在NMT中,我们直接计算P ( y ∣ x ) 而不是像SMT拆开计算:
不过,在训练过程中,我们仍然需要大量的平行语料。
3.3 损失函数
在 argmax P(y|x)的过程中,我们可以进行贪心搜索或者束搜索(Beam search),虽然不保证能找到最佳的解决方案,但是大概率会找到一个还不错的译文。如果使用贪心搜索,解码会在<End>词出现后停止。但如果使用束搜索,那么不同假设会在不同时间步输出<End>词,所以我们可以预先设置一个时间步界限(到达时间t之后停止)或者完整译文个数的界限(输出了n个完整译文之后停止)作为搜索的停止条件。
另外,我们需要对损失函数进行归一化,否则模型会倾向于输出短句。
3.4 优点和缺点
优点:
- 充分利用上下文,译文更流畅
- 只需要对端到端模型的优化,不需要对子系统单独进行优化
- 无需特征工程,减少人工
缺点:
- 解释性较差
- 难以人工规定翻译输出规则(例如规定某个特定词组的翻译、去除偏见等)
- 需要双语语料库
- 生僻字问题
四、Decoding
4.1 Exhaustive search decoding(穷举搜索)
时间复杂度,V is vocab size。
下面我们来看一个例子:
假设现在有一个简化版的中文翻译英文任务,输入和输出如下,为了方便描述搜索算法,限制输出词典只有{"I", "H", "U"} 这3个候选词,限制1个时间步长翻译1个汉字,1个汉字对应1个英文单词,这里总共3个汉字,所以只有3个时间步长。
中文输入:"我" "恨" "你"
英文输出:"I" "H" "U"
目标:得到最优的翻译序列 I-H-U
最直观的方法就是穷举所有可能的输出序列,3个时间步长,每个步长3种选择,共计 3*3*3 = 27种排列组合。
I-I-I
I-I-H
I-I-U
I-H-I
I-H-H
I-H-U
I-U-I
I-U-H
I-U-U
H-I-I
H-I-H
H-I-U
H-H-I
H-H-H
H-H-U
H-U-I
H-U-H
H-U-U
U-I-I
U-I-H
U-I-U
U-H-I
U-H-H
U-H-U
U-U-I
U-U-H
U-U-U
从所有的排列组合中找到输出条件概率最大的序列。穷举搜索能保证全局最优,但计算复杂度太高,当输出词典稍微大一点根本无法使用。
4.2 Greedy decoding(贪心搜索)
贪心算法在翻译每个字的时候,直接选择条件概率最大的候选值作为当前最优。如下图所以,
- 第1个时间步长:首先翻译"我",发现候选"I"的条件概率最大为0.6,所以第一个步长直接翻译成了"I"。
- 第2个时间步长:翻译"我恨",发现II概率0.2,IH概率0.7,IU概率0.1,所以选择IH作为当前步长最优翻译结果。
- 第3个时间步长:翻译"我恨你",发现IHI概率0.05,IHH概率0.05,IHU概率0.9,所以选择IHU作为最终的翻译结果。
贪心算法每一步选择中都采取在当前状态下最好或最优的选择,通过这种局部最优策略期望产生全局最优解。但是期望是好的,能不能实现是另外一回事了。贪心算法本质上没有从整体最优上加以考虑,并不能保证最终的结果一定是全局最优的。但是相对穷举搜索,搜索效率大大提升。
4.3 Beam search decoding(束搜索)
beam search是对greedy search的一个改进算法。相对greedy search扩大了搜索空间,但远远不及穷举搜索指数级的搜索空间,是二者的一个折中方案。
beam search有一个超参数beam size(束宽),设为 k 。第一个时间步长,选取当前条件概率最大的 k 个词,当做候选输出序列的第一个词。之后的每个时间步长,基于上个步长的输出序列,挑选出所有组合中条件概率最大的 k 个,作为该时间步长下的候选输出序列。始终保持 k 个候选。最后从 k 个候选中挑出最优的。
最终选择score最高的那组序列输出翻译的句子。
(1)还是以上面的任务为例,假设 k = 2 ,我们走一遍这个搜索流程:
- 第一个时间步长:如下图所示,I和H的概率是top2,所以第一个时间步长的输出的候选是I和H,将I和H加入到候选输出序列中。
beam search 第一个时间步长
- 第2个时间步长:如下图所示,以I开头有三种候选{II, IH, IU},以H开头有三种候选{HI, HH, HU}。从这6个候选中挑出条件概率最大的2个,即IH和HI,作为候选输出序列。
beam search 第二个时间步长
- 第3个时间步长:同理,以IH开头有三种候选{IHI, IHH, IHU},以HI开头有三种候选{HII, HIH, HIU}。从这6个候选中挑出条件概率最大的2个,即IHH和HIU,作为候选输出序列。因为3个步长就结束了,直接从IHH和IHU中挑选出最优值IHU作为最终的输出序列。
beam search 第三个时间步长。
(2)Beam search decoding – Stopping Criterion
- 贪婪解码中,通常我们一直解码直到模型产生一个token
- 在波束搜索解码中,不同的假设可能会在不同的时间步长上产生令牌
- 当一个假设产生 时,该假设是完整的。
- 将其放在一边,继续通过波束搜索探索其他假设。
- 通常我们会继续进行波束搜索,直到:
- 我们到达时间步 T(其中 T 是某个预定义的截止值),或者
- 我们至少有 n 个完整的假设(其中 n 是预定义的截止值)
- 当出现较长的假设得分较低(longer hypotheses have lower scores),我们需要对scores归一化来解决这个问题:
(3)改变beam size k
- beam search不保证全局最优,但是比greedy search搜索空间更大,一般结果比greedy search要好。
- greedy search 可以看做是 beam size = 1时的 beam search
- k 越大意味着您考虑的假设越多
- 较大的 k 计算成本更高
五、Attention Mechanism(注意力机制)- 解决bottleneck problem
5.1 序列到序列网络(Sequence to Sequence network)
序列到序列网络(Sequence to Sequence network),也叫做seq2seq网络, 又或者是编码器解码器网络(Encoder Decoder network), 是一个由两个称为编码器解码器的RNN组成的模型。在这里进行介绍的作用是确定变量的名称,为接下来讲注意力机制做铺垫。
自编码器也是seq2seq模型中的一种。在自编码器中,解码器的工作是将编码器产生的向量还原成为原序列。经过压缩之后不可避免的会出现信息的损失,我们需要尽量将这种损失降低(方法是设置合理的中间向量大小和经过多次训练迭代的编码-解码器)。
5.2 编码器
把一个不定长的输入序列变换成一个定长的背景变量c,并在该背景变量中编码输入序列信息。编码器可以使用循环神经网络。在时间步t ,循环神经网络将输入的特征向量 和上个时间步的隐藏状态变换为当前时间步的隐藏状态。
接下来,编码器通过自定义函数q 将各个时间步的隐藏状态变换为背景变量
例如,我们可以将背景变量设置成为输入序列最终时间步的隐藏状态
以上描述的编码器是一个单向的循环神经网络,每个时间步的隐藏状态只取决于该时间步及之前的输入子序列。我们也可以使用双向循环神经网络构造编码器。在这种情况下,编码器每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输入),并编码了整个序列的信息。
5.3 解码器
5.4 Attention Mechanism(注意力机制)
Attention机制的基本思想是:打破了传统编码器-解码器结构在编解码时都依赖于内部一个固定长度向量的限制。
Attention机制的实现是 通过保留LSTM编码器对输入序列的中间输出结果,然后训练一个模型来对这些输入进行选择性的学习并且在模型输出时将输出序列与之进行关联。
Attention-based Model 其实就是一个相似性的度量,当前的输入与目标状态约相似,那么在当前的输入的权重就会越大。就是在原有的model上加入了Attention的思想。
具体而言,采用传统编码器-解码器结构的LSTM/RNN模型存在一个问题:不论输入长短都将其编码成一个固定长度的向量表示,这使模型对于长输入序列的学习效果很差(解码效果很差)。而attention机制则克服了上述问题,原理是在模型输出时会选择性地专注考虑输入中的对应相关的信息。使用attention机制的方法被广泛应用在各种序列预测任务上,包括文本翻译、语音识别等。
5.4.1 Attention执行过程
在注意力得分(attention scores)那个区域的小圆圈代表向量点乘,使用softmax函数将注意力得分转换成注意力分布(attention distribution)。我们可以看到,在第一步,大部分注意力被分配给了源序列的第一个单词。通过加权相加的方法得到了编码器的一个隐状态。将编码器产生的隐状态和解码器的隐状态进行叠加,就可以产生解码器在该时间步的输出。
- Computing the attention scores
- Taking softmax to get attention distribution
-
Using attention distribution to take weighted sum of values
5.4.2 Attention计算过程
计算注意力得分的方法 (课件用第一种点乘):
- 点乘注意力
- 乘法注意力
- 乘法注意力
5.4.3 注意力中的相关公式
5.4.4 Attention机制优点
- 解决了信息瓶颈的问题
- 缓解了梯度消失的问题
- 在一定程度上提供了可解释性
- 解决了软对齐问题(模型自己学习的,不需要人工调控)
六、Evaluation of Machine Translation
6.1 Bilingual Evaluation Understudy (BLEU)
BLEU将机器翻译的译文与数个人工翻译进行比较并计算相似度。得分基于:(1) n-gram准确率(1~4-grams);(2) 对超短句的惩罚。
该评测标准很有用,但并不完美。好的翻译有可能因为其与评测使用的翻译的n-gram重叠度较低而得到较差的BLEU分数。