lecture8 - Machine Translation Seq2Seq and Attention

主要内容

统计机器翻译模型(Statistical Machine Translation)

梗概

为什么关于SMT的内容只能写个梗概呢?因为在这节课当中,Abigali See自己也说关于SMT不会讲Full detail,所以看完以后,我也只有一个大概的认知而已,所以就写一点粗略的总结。
首先,既然名字带有统计,那么这个模型显然就是一个基于统计学意义的模型。
以课程中的法-英翻译模型为例:
y y y为预测得到的英文句子, x x x为我们输入的法语句子,我们希望找到最佳的预测句子,使后验概率 p ( y ∣ x ) p(y\vert x) p(yx)最大。
由贝叶斯原理,可以得到:
p ( y ∣ x )    =    p ( x ∣ y ) p ( y ) p ( x ) p(y\vert x)\;=\;\frac{p(x\vert y)p(y)}{p(x)} p(yx)=p(x)p(xy)p(y)
而对于每一个预测结果, p ( x ) p(x) p(x)都是一样的。因此,只需要关注分子部分
课程中将分子部分描述为需要分别训练的两个模型:
cs224n
一个模型在单一语料中进行训练,另一个则需要有英语/法语对应的语料进行训练。但具体如何训练,课程没有继续提及。
其中, p ( y ) p(y) p(y)在训练中还会进一步进行拆分处理:
变成 p ( x , a ∣ y ) p(x,a\vert y ) p(x,ay),其中 a a a是单词之间的对应关系(alignment),然而,这种关系有许多种,一对一,一对多,多对一,多对多都有。
除此之外,这个模型训练时还需要考虑许多别的关系,一个模型由许多子模型构成,总之,SMT是一个很大的研究领域,通常,最好的模型需要耗费许多工程师数年的时间来建设。
这里,课程中稍微提到了训练时一种叫decoding的启发式方法。但这个跟后文中的集束搜索(Beam Search)有些类似,索性在后面一块说。

神经机器翻译模型(Neural Machine Translation)

14年,NMT横空出世,为机器翻译这一研究领域带来了硕大冲击。一张很dramatic的图如下:
cs224n
如名字所示,NMT就是利用神经网络进行机器翻译任务,普遍结构是接下来要提到的Seq2Seq模型,它由两个RNN组成。

Seq2Seq模型(sequence-to-sequence)

关于Seq2Seq,实际上在上到这节课之前,我就有做了一个相关的项目( 虽然比较失败),所以关于这块多多少少也有一些自己的想法。结合这门课希望能理解得更深。
基础结构:
CS224N
左边的RNN被称为编码器(Encoder),右边的RNN被称为解码器(Decoder),可以看到,编码器每一个时间步的输出我们都不会使用,仅有其隐状态会派上用场。
基本的思想是:
编码器将源句子的相关信息压缩,解码器利用这个信息作为初始隐状态进行句子的输出,
上图中,模型使用编码器最后一个时间步的隐状态作为整个源句子的压缩信息。
关于解码器部分,可以稍微说道说道。首先,可以明确的是,解码器是一个条件语言模型(Conditional Language Model),给定了初始隐状态,我们希望模型在每一个时间步基于上一步的输出(序列中的上一个单词)输出正确的预测。
按这个思路,我们在训练时只需要一个表示“开始”的TOKEN即可,然后随后的每一步我们都取上一步的预测作为输入。但实际上,训练时我们不会这么做,这里的trick就如上图所示,我们会假设每一步都预测了正确的单词,手动将目标语句作为解码器的输入,这个做法叫做Teacher Forcing,就好像有老师给出正确答案,指导你学习,除此之外,还有一种做法是以一定概率输入正确单词,也就是时不时会使用上一步的预测作为下一步输入。但就目前看到的Seq2Seq而言,还是Teacher Forcing用的比较多,但其实这个做法也有隐患,那就是模型太过于依赖“老师”,从而导致泛化性能的下降。
Seq2Seq能做的事情有许多,远不止机器翻译。课件上提到几个:
cs224n
(这个生成代码的也太酷了。。。)
NMT相比较SMT,是直接通过每一个时间步的预测单词概率的乘积来得到我们的条件概率 p ( y ∣ x ) p(y\vert x) p(yx),因为本质上这也是一个语言模型。
所以损失函数的计算也跟语言模型上一样的:
J ( θ )    =    1 T ∑ T J ( θ ) i        i ∈ ( 1 , . . . , T ) J(\theta)\;=\;\frac1T\sum_TJ{(\theta)}_i\;\;\;i\in(1,...,T) J(θ)=T1TJ(θ)ii(1,...,T)
然后,是关于上面提到的集束搜索(Beam Search),这个其实在Andrew Ng的课程上已经有所耳闻,但这门课讲的更清楚一些。
一般来说,使用Greedy decoding的方法会存在一个Never go back问题,就是说我们在得到一个错误的预测之后,之后所有的预测都会建立在这个错误预测之上,我们无法回溯。
cs224n
针对这个问题,有一个解决方案就是Beam Search,在每一步,我们评估当前输出的Top K,并记录这些Top K的序列。这句话可能不够清晰,但课程上的图非常好,一下就能看明白:
cs224n
绿色的代表每一次保留的k个输出,在这里,像这样的不完整的预测序列我们称为假设(Hypotheses),我们每一步都计算一个单词的对数似然,评估每个假设的分数。具体来说,每一个假设的分数由下面的式子构成:
S c o r e    =    ∑ T log ⁡ ( y t ∣ y t − 1 , y t − 2 , . . . x ) Score\;=\;\sum_T\log\left(y_t\vert y_{t-1},y_{t-2},...x\right) Score=Tlog(ytyt1,yt2,...x)
实际上就是构成每个序列的单词概率乘积的对数,因此由乘积转变成了求和的形式,这个分数总为负值,绝对值越小越好,因为对数函数的值越靠近1绝对值就越小,这个很好理解。
那么,集束搜索该如何停止呢,在Greedy的方法中,我们得到一个“结束”的TOKEN代表一个完整的序列输出,但在集束搜索中,似乎“结束”这个TOKEN有可能在任何地方出现(因为此时有k个不同的假设),课程中提到两个做法:
1、预先设置好步数阈值,也就是最大的输出序列长度,在达到之前,每出现一个“结束”我们都将这个序列保存下来,然后继续集束搜索。
2、设置好候补序列的数量,如1一样,每一个“结束”我们都将序列保存下来,作为一个序列候补,直到得到足够数量的候补序列。
最后,我们在候补序列中挑选出 s c o r e score score最高的作为预测输出,但这里还有一个问题,就是越长的句子分数会趋向越低。这个也很好理解。所以我们这里计算 s c o r e score score还要进行正规化,也就是除以一个序列长度,以此抵消长度带来的影响。最终得分是 S c o r e T \frac{Score}T TScore

评估指标(Metric)

BLEU(Bilingual Evaluation Understudy)
关于这个也是 Andrew Ng提到的,这个反而课上没有细说,大概的内容是将机器翻译的结果与人工翻译的结果进行n-gram的比较,即相同的chunk在人工翻译中出现的次数。关于这个,也有一个讲得比较全的博客,贴上来:
BLEU的计算与实现
但是BLEU始终是一种基于重叠度的评估指标,但有时很好的翻译的遣词造句不一定与人工翻译用词一致。所以这也不是一个完美的评估。

优势与劣势

这里的优势劣势都是相对SMT而言

优势

1、端到端(end-to-end)的训练
NMT使用神经网络进行训练,梯度信号从输出传递至输入进行训练,而不用像SMT分割多个子模块进行单独训练。
2、更好的表现
翻译更加流畅,很明显NMT使用了更多语料中的上下文的信息。
3、人工干预更少
相比SMT而言,NMT需要人们做的工作少得多。面对不同的语言,人们可以用类似的方法进行训练。

劣势

1、更差的可解释性
这个应该是所有神经网络的通病了,我们无法知晓在模型中真正发生了什么,输入塞进去,另一端就源源不断地产生输出。
2、很难控制模型
这一点与可解释性息息相关,很难去制订一些规则引导模型的输出。例如一些不好的词语,人们很难控制模型确保其不产生这样的预测。
3、机器翻译固有的缺点
这个应该有许多,我这里直接将课程中的一些例子贴上来:
cs224n
CS224N
CS224N

注意力机制(Attention)

课程的最后,引入了当今大热的Attention机制,Abaigail也说,这可以认为是NLP领域新的Vanila。
这个思路实际上跟人在处理句子的思路类似,我们在翻译的时候不总是关注句子固定的部分,也就是说,特定的词语可能与待翻译句子中特定的部分相关,注意到在上文的NMT中,解码器始终使用着来自编码器的最终输出。而在刚才对于注意力的描述中,也能看出注意力机制的主要思想就是找到某种方法去获取编码器当中不同部分的信息。用向量的形式来说就是,找到某种方法获得编码器每一部分的权重,基本上,这里说的每一部分就是指每一步的隐状态。而这个某种方法就是各种Attention不同之处,但总体的思路就是”权重+隐状态“,这个权重的寻找方法就很多了,有通过神经网络单独训练的(Addictive Attention),隐状态点乘后Softmax输出权重的(Dot-Product Attention)等等,这里也不展开叙述了。
最终,编码器各时间步隐状态的加权和构成上下文向量(Context Vector),作为解码器各时间步的输入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值