CS224N笔记(五) Lecture8 机器翻译、Seq2Seq以及Attention注意力机制

一、背景知识

机器翻译,Machine Translation,简称MT,是一种运用计算机将一个句子从一种语言翻译成另一种语言的技术,是自然语言处理领域中一项重要的任务。机器翻译最早可以追溯到19世纪50年代的冷战时期,其目的是实现英语和俄语的翻译,但那个时候的技术手段主要是基于规则。之后到90年代才出现了基于统计学的机器翻译技术,而在2010后乘着深度学习的风,神经网络也被大量应用于机器翻译中,并且取得了长足发展。下文将对统计机器翻译和神经网络机器翻译进行详细介绍。

假设要将某种语言的一个句子 x x x翻译成另一种语言最合适的句子 y y y,可以用下面式子来表达:

a r g m a x y P ( y ∣ x ) (1) argmax_{y} P(y|x) \tag{1} argmaxyP(yx)(1)

无论是统计机器翻译,还是神经网络机器翻译都是以公式(1)为目标,建立模型,只是寻找模型参数的过程有些不同。

二、统计机器翻译

统计机器翻译,英文全称Statistical Machine Translation,简称SMG。它是以贝叶斯概率为基础,将公式(1)拆解成两个部分:

a r g m a x y P ( x ∣ y ) P ( y ) (2) argmax_y P(x|y)P(y) \tag{2} argmaxyP(xy)P(y)(2)

公式(2)中的 P ( y ) P(y) P(y)是先验概率,实际上可以理解成一个统计语言模型,它表征句子 y y y有多大的概率是合法(即正常人说的),这一项保障了翻译的流畅度(fluency),而 P ( x ∣ y ) P(x|y) P(xy)可以理解成一个翻译模型,它保障翻译的保真度(fidelity)。这样我们就能分解出两个模型,逐一攻破,其中统计语言模型P(y)只需要在目标语言的语料库上训练即可,而翻译模型P(x|y)则需要两种语言的配对语料库上训练。

1. 单词对齐

翻译模型 P ( x ∣ y ) P(x|y) P(xy)需要在配对语料上训练,具体该如何实现?这其中最重要的一个步骤就是单词对齐。所谓单词对齐,就是找到源句子中的每个单词对应目标句子的哪个单词。只要模型能够找准单词对齐的关系,也能顺理成章地正确翻译句子,但是单词对齐是一个较为复杂的任务,因为它包含很多种情况:

  1. 一个词对应一个词
  2. 多个词对应一个词或者一个词对应多个词
  3. 多个词对应多个词(短语级别的对齐)

一般在建立模型 P ( x ∣ y ) P(x|y) P(xy)时会引入隐变量 a a a,它表示单词的配对关系,这样我们所要建立的模型可以表示为 P ( x , a ∣ y ) P(x,a|y) P(x,ay),在对含有隐变量的模型进行参数估计时,可以采用EM算法(Expectation Maximization),课上只是简单提了一下。EM算法在李航的《统计学习方法》和周志华的《机器学习》中都有介绍,这里就不展开了。

2. SMT的解码

我们在回头看一下公式(2):

a r g m a x y P ( x ∣ y ) P ( y ) (2) argmax_y P(x|y)P(y) \tag{2} argmaxyP(xy)P(y)(2)

假设我们已经建立起了翻译模型 P ( x ∣ y ) P(x|y) P(xy)和统计语言模型 P ( y ) P(y) P(y),那么接公式(2)需要将所有可能的翻译句子 y y y都代入式子中,然后求得能使得概率值最大的 y y y,可想而知这是非常耗时耗力的。一般会采用维比特算法(动态规划)来计算,这一过程也叫做解码。

3. SMT的缺点

  1. SMT需要考虑的细节过多
  2. 包含了太多独立设计的子模块
  3. 需要许多特征工程上的工作
  4. 需耗费大量人力去做短语配对、语言配对

三、神经网络机器翻译Seq2Seq

神经网络机器翻译,英文全称Neural Machine Translation,简称NMT,是使用单个神经网络进行机器翻译的方法,这种神经网络称为Sequence-to-sequence,简称seq2seq,下面将对其模型结构以及相关原理展开介绍。

1. seq2seq的结构与基本原理

图1展示的seq2seq的结构,以及测试推理的过程。它是由两个RNN组成,分别作为编码器和解码器,将源句子输入到编码器RNN中提取出源句子的特征,将该特征输入到解码器RNN中进行翻译,得到目标句子。注意图中的粉红色虚线,解码器中每一步的输出都会作为下一步的输入,一直向前推进,直到某一步输出句子结束标示。

图1 测试推理阶段

在训练阶段稍有不同,如图2所示,在解码时没有了图1的粉红色箭头,每一步的输入不是从上一步的输出获得,而是输入了groundtruth单词。我们希望每一步的输出能与groundtruth句子的下一个单词吻合,可以用交叉熵损失来约束。
请添加图片描述

按照课程中的说法,在训练时解码器的输入一般是用groundtruth,这种训练方式叫做Teacher Forcing,把正确答案告诉解码强迫它学习,但是其实这并不是唯一做法。有学者提出应当在训练时采用和推理时一样的策略,即把解码器自己的输出,作为下一时刻的输入,即使这个词可能是错的。这种方法的好处在于更好地模拟推理时的情况,我们希望模型能够对抗扰动,即使某一个词出错,后面还能正确输出,不要一旦出错就越来越偏。这种想法有其道理,但是会非常难训练,模型在一开始训练一定是大概率出错的,训练过程会很缓慢且不稳定。

为此,有学者提出了Scheduled Resampling的训练策略,翻译可以叫“有计划的采样”,或者是“有计划的学习”,简而言之就是训练要先易后难。具体做法以一定概率选择要用上一时刻的输出,还是真是的groudtruth,而这个概率是动态变化的,一开始可以用高概率选择groundtruth,让模型先快速学习,后面再以高概率选择上一时刻的输出,以模型实际推理时的扰动,使模型更加鲁棒。

由于seq2seq用一个整体模型就实现了机器翻译,它跟统计机器翻译中将模型分解出翻译模型和统计语言模型的方法有本质区别,此时我们求解公式(1)的方式为:

a r g m a x y P ( y ∣ x ) = a r g m a x y P ( y 1 ∣ x ) P ( y 2 ∣ y 1 , x ) P ( y 3 ∣ y 1 , y 2 , x ) . . . P ( y T ∣ y 1 , . . . , y T − 1 , x ) (3) argmax_y P(y|x)= argmax_y P(y_1|x)P(y_2|y_1,x)P(y_3|y_1,y_2,x)...P(y_T|y_1,...,y_{T-1},x) \tag{3} argmaxyP(yx)=argmaxyP(y1x)P(y2y1,x)P(y3y1,y2,x)...P(yTy1,...,yT1,x)(3)

公式(3)的含义是是以 x x x源句子作为条件,预测输出的第一个单词 y 1 y_1 y1,保留对应的概率,然后以 x x x y 1 y_1 y1,预测第二个单词 y 2 y_2 y2,保留对应的概率,依此类推,将所有概率值乘起来,就是给定源句子 x x x的情况下,预测序列为 y = [ y 1 , y 2 , y 3 . . . . , y T ] y=[y_1,y_2,y_3....,y_T] y=[y1,y2,y3....,yT]的概率。

2. 贪婪编码与波束搜索

上面的seq2seq模型一个最大问题是它采用了贪婪解码,何谓贪婪?即求解每一步的输出都是基于当前状况的最优解,而没有考虑全局的最优解。在这个场景下,解码器每一步的输出都是取argmax,即预测当前时刻最可能的单词,但是向前推进后不能再回过头,即使发现后面的单词预测说不通。当然,我们可以计算所有可能的 y y y序列的概率,然后取其中概率值最大的作为结果。但是这会相当耗费计算资源,假设词典大小为V, y y y序列的长度是T,那么 y y y序列一共有 V T V^T VT中可能,复杂度过高。

为了解决这个问题,我们可以用波束搜索(Beam search),波束搜索是在每一步都保留 k k k个分数最高的输出,用这 k k k个输出作为下一步的输入,又再发散出 k ∗ k k*k kk种可能的输出,保留其中分数最高的 k k k个,再进行下一步的预测。这里分数的定义如下:

s c o r e ( y 1 , . . . , y t ) = l o g P ( y 1 , . . . , y t ∣ x ) = ∑ i = 1 t l o g P ( y i ∣ y 1 , . . . , y i − 1 , x ) (4) score(y_1,...,y_t)=logP(y_1,...,y_t|x)=\sum_{i=1}^{t}logP(y_i|y_1,...,y_{i-1},x) \tag{4} score(y1,...,yt)=logP(y1,...,ytx)=i=1tlogP(yiy1,...,yi1,x)(4)

这个分数定义本质上就是对公式(3)的 P ( y ∣ x ) P(y|x) P(yx)取对数,但是需要注意的是,由于概率都是0到1之间的数值,取对数后为负数,因此分数都是负数,但是仍然是分数越高越好,即越靠近0越好。

光从定义上解释不够,下面结合图例进行解释。假设 k = 2 k=2 k=2,那在预测第一步,我们保留其中两个分数最高的预测he和I

在这里插入图片描述

接下来以he和I分别作为下一步的输入,它们分别又能计算得到V个分数(V为整个词典的大小),但是我们仍然只保留各自分数最高的两个单词,即以单词he作为输入时,保留了分数最高的两个输出hit和struck,以单词I作为输入时,保留了分数最高的两个输出was和got:

在这里插入图片描述

因此到第二步时有4个备选单词,我们保留分数最高的2个即hit和was,让它们继续以同样的方式发散出下一步4个可能的输出a、me、hit、struck:

在这里插入图片描述

一直这样发散下去,那么什么时候停止?一般可以选择两中停止方式:

  1. 设定最大时间T,预测T次后就必须停止。
  2. 一直发散直到收集到至少n个以结尾的预测。

波束搜索存在的最大问题是它偏向于取序列最短的预测结果,因为序列越短,分数越高,解决这个问题的方式是对长度进行归一化,在公式(4)的前方除以长度t,即:

1 t ∑ i = 1 t l o g P ( y i ∣ y 1 , . . . , y i − 1 , x ) (5) \frac{1}{t} \sum_{i=1}^{t}logP(y_i|y_1,...,y_{i-1},x) \tag{5} t1i=1tlogP(yiy1,...,yi1,x)(5)

最后有四点注意事项:

  1. k的大小是人为设定的,一般取值为5~10。
  2. 如果中途保留的某个高分输出是,那该路径就截止了,但它仍会占用 k k k中的一个名额。
  3. 波束搜索不能找到全局最优解,它是准确率与效率折中的方法。

3. NMT的优缺点

相比起统计机器翻译SMT,神经网络机器翻译NMT的优点在于:

  1. 性能更好,体现在句子更流畅、更好地利用到上下文和短语相似性。
  2. 可以进行端到端的优化,不像SMT那样具有太多独立的子模块只能逐个优化。
  3. 不需要特征工程,节省人力。

但是它也有缺点:

  1. 可解释性较差,很难debug
  2. 很难人为控制,很难添加人设计的特殊规则或翻译指导

四、机器翻译的评价方法

Lecture9 介绍了机器翻译的一种评价方法BLEU(Bi-Lingual Evaluation Understudy),它是计算机器翻译和结果和人自己翻译的结果间的相似性,具体地,它是以n-gram的匹配度来衡量两个机器预测和人工翻译间的相似性,并且会对过短的句子作出惩罚。BLEU的缺点在于翻译并没有标准答案,同一个句子可以用不同的单词组合来描述,所以可能出现一个翻译得不错的句子,其BLEU分数却很低。

五、注意力机制

1. seq2seq中的注意力机制

seq2seq还存在一个问题——瓶颈问题,即源句子中每个词的特征最后都集中单一个特征向量上,要求该特征向量能够表征整个句子以及每个词的含义,这造成了一种信息瓶颈,会影响翻译的效果。注意力机制是用来解决该问题的重要方法,即核心思想是在解码时,将解码器与编码器每一步的输出直接连接,引入权重,让模型学会在解码时的每一步关注编码器特定位置上的输出。如下图所示:

seq2seq的注意力机制

在解码时将当前时刻的隐状态和编码器每一步的输出分别做内积,得到每个位置注意力分数,用softmax函数对分数进行归一化得到最终的注意力分数,将这些分数作为一种权重,对编码器各个位置上的特征进行加权求和得到最终的注意力输出,它是一个向量,与隐状态的尺寸一致,将该向量与解码器的隐状态向量做拼接,再去预测词汇。解码时每一步都进行这样的操作,这样就能利用上源句子每个位置上的信息,并且获得一种关注句子特定部分的能力。

注意力机制的好处在于:

  1. 提升模型性能
  2. 解决了信息瓶颈问题
  3. 有利于缓解梯度消失问题
  4. 提高了模型的可解释性,这可以看作一个单词软对齐,并且是由模型自己习得的

2. 注意力机制的常见形式

注意力机制应用广泛,不仅仅是在机器翻译中可以用,具有普适性。一般注意力机制中会涉及几个变量:

  1. 用来计算分数或权重的特征向量 h 1 , . . . , h N ∈ R d 1 h_1,...,h_N \isin R^{d_1} h1,...,hNRd1 s ∈ R d 2 s \isin R^{d_2} sRd2
  2. 分数,或者说权重 e ∈ R N e \isin R^N eRN
  3. 通过softmax函数归一化后的分数或权重 α = s o f t m a x ( e ) ∈ R N \alpha = softmax(e) \isin R^N α=softmax(e)RN
  4. 用分数或权重对特征向量进行加权求和得到的最终的注意力输出 a = ∑ i = 1 N α i h i ∈ R d 1 a=\sum_{i=1}^{N} \alpha_i h_i \isin R^{d_1} a=i=1NαihiRd1

不同的注意力机制通常是在计算分数时采用了不一样的方式,主要有三种方法:

  1. 基本的内积运算,即 e i = s T h i ∈ R e_i = s^Th_i \isin R ei=sThiR,这时候一般要求向量长度一致即 d 1 = d 2 d_1=d_2 d1=d2
  2. 积性运算(Multiplicative): e i = s T W h i ∈ R e_i = s^TWh_i \isin R ei=sTWhiR,这里会引入一个可学习的权值矩阵 W ∈ R d 1 × d 2 W \isin R^{d_1 \times d_2} WRd1×d2
  3. 加性运算(Additive): e i = v T t a n h ( W 1 h i + W 2 s ) ∈ R e_i = v^Ttanh(W_1h_i+W_2s) \isin R ei=vTtanh(W1hi+W2s)R,这里引入了两个矩阵 W 1 ∈ R d 3 × d 1 W_1 \isin R^{d_3 \times d_1} W1Rd3×d1 W 2 ∈ R d 3 × d 2 W_2 \isin R^{d_3 \times d_2} W2Rd3×d2,还引入了一个权值向量 v 3 ∈ R d 3 v_3 \isin R^{d_3} v3Rd3,这里 d 3 d_3 d3是一个超参数

六、机器翻译当前的难点

尽管借助深度学习,机器翻译在近年来得到迅猛发展,但是还存在许多难点没有被完全解决:

  1. 词典外的单词难以翻译,尤其是那些新兴流行词
  2. 训练集与测试集间的域间差异
  3. 长文本翻译难以保持上下文信息,比如说翻译一本书
  4. 依赖与大量的训练数据,语言对可能不足
  5. 模型没有常识
  6. 成语俚语很难翻译
  7. 训练集样本不够丰富,使得模型在翻译时有偏差
  8. 会输出一些不可解释的翻译

六、参考文献

  1. CS224N Lecture 8、9 slides
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值