机器翻译(Machine Translation):seq2seq模型+attention机制

1 定义

机器翻译 (Machine Translation)是一个将源语言句子 x x x翻译成目标语言句子 y y y的过程。机器翻译的相关研究最开始于19世纪50年代。

2 进展

2.1 规则匹配模型

在19世纪50年代,机器翻译受到冷战时期推动,翻译系统主要是将俄语翻译成英语,通过规则匹配,从双语对应关系字典库中将源语言翻译成目标语言。

2.2 统计模型

从1990年到2010年,主流方法是统计模型,其核心思想就是从数据中学习一种概率模型,例如:法语翻译成英语任务中,给定一个法语 x x x句子,我们希望找出最匹配的英语句子 y y y,优化函数如下:
a r g m a x y P ( y ∣ x ) argmax_yP(y|x) argmaxyP(yx)
使用贝叶斯规则,等同如下:
a r g m a x y P ( x ∣ y ) p ( y ) argmax_yP(x|y)p(y) argmaxyP(xy)p(y)
p ( x ∣ y ) p(x|y) p(xy)概率由翻译模型根据翻译统计数据计算出来,而 p ( y ) p(y) p(y)是语言模型,根据语言数据语料可以统计得出。
统计模型需要大量的语料,而且需要很多人工去构建特征,一个好的统计模型将是十分庞大和复杂。

2.3 seq2seq模型

2014年,神经机器翻译模型 (NMT)的诞生,奠定了新的里程碑,模型结构如下所示:
在这里插入图片描述

seq2seq模型,其中编码由一个RNN组成,解码由另外一个RNN构成。seq2seq模型是一种有条件约束的语言模型,因为在解码器是从目标句子 y y y中预测下一个单词,而有条件约束是因为解码的过程中会依据源语言句子 x x x。如下图所示:
在这里插入图片描述
在解码decode截断,使用贪心策略,每次用当前输出最大的概率预测词作为下一个预测结果。但是解码过程中只要有一步出错,会导致错误累积越多,越后的解码离正确的越远,这也就是beam search搜索出现的原因,在beam search中,解码截断的每个step提供会保留多个选择,最终选择最好的一个序列。

2.3.1 beam search

接下来,我们看下在解码过程中beam search的运作原理。首先,在翻译模型里,我们希望找到一个最大的 p ( y ∣ x ) p(y|x) p(yx),其中 p ( y ∣ x ) p(y|x) p(yx)的计算形式如下:
p ( y ∣ x ) = 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 ) p(y|x) = 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) p(yx)=p(y1x)p(y2y1,x)p(y3y1,y2,x)...,p(yty1,...,yt1,x)
如果我们穷举所有的 y y y,则计算代价将会非常高,复杂度将为 O ( V t ) O(V^t) O(Vt),其中 V V V是词典大小, t t t是目标语言长度。而beam search在解码的每一步只需要保留 k k k个最大概率的翻译序列部分。 k k k是beam size,虽然没法保证全局的最优,但是却十分高效,在实际场景中,效果也很好。
接下来我们看一个解码的例子,以beam size=2为例,如下图所示:
在这里插入图片描述
每个step选取top 2个概率最大的序列,依次往下解码,直到结束,其中标有红色的字是每次解码过程中选取的最大的概率最大的词,在最后的解码中,选取最终的概率最大的序列,如下图所示:
在这里插入图片描述
绿色字体的序列: start the poor don’t have any money为解码序列。

2.3.2 BLEU (Bilingual Evaluation Understudy)

在机器翻译中,通常用BLEU指标来评估机器翻译的效果,BLEU主要是通过对比机器翻译的结果和人类翻译的结果来计算分值,主要基于如下两点:

  • n-gram的精确度(通常用3-grams或者4-grams)
  • 翻译太短会受到惩罚
    BLEU是有用的,但是不够完美,主要存在的问题是,在翻译领域,翻译一个句子通常会有很多种方法,一个好的翻译有可能会得到一个很差的BLEU分值,因为和人类的翻译在n-gram上有较少的重叠。

2.3.2 attention

attention的核心思想是在decoder解码的每一个step,关注源目标句子最相关的部分,这部分叫做context向量,在解码的每一个步骤,context向量都是动态计算出来的,主要是通过decoder阶段上一个时刻step (或者当前step) RNN的hidden向量与encoder的所有step的hidden 向量计算attention权重,然后得到加权后的context向量,具体可以参考博文 seq2seq model: beam search和attention机制理解,context向量可以作用如下两块:

  • decoder阶段RNN的一个输入 s i = f ( c i , y i − 1 , s i − 1 ) s_i = f(c_i,y_{i-1},s_{i-1}) si=f(ci,yi1,si1),其中 y i − 1 y_{i-1} yi1表示解码阶段上一个步骤预测的词对应的向量, c i c_i ci是当前计算出来的context向量, s i − 1 s_{i-1} si1是上一时刻hidden状态向量
  • 在decoder阶段分类层的一个输入,预测每个step的下一个词label, y i = g ( s i , c i ) y_i = g(s_i, c_i) yi=g(si,ci) s i s_i si c i c_i ci可以concat到一起

如下图,只将context向量用在decoder每个step的分类层的一个输入上:
在这里插入图片描述
上图的计算方式流程步骤如下:

  • step 1: encoder阶段得到源句子的每个step的hidden向量
    h 1 , . . . , h N ∈ R h h_1,...,h_N \in R^h h1,...,hNRh

  • step2: decoder阶段,在step t时刻,得到hidden向量 s t ∈ R h s_t \in R^h stRh

  • step3: 计算当前step t的attention分值
    e t = [ s t T h 1 , . . , s t T h N ] ∈ R N e^t = [s_t^Th_1,..,s_t^Th_N] \in R^N et=[stTh1,..,stThN]RN

  • step4: 用softmax归一化,得到attention分值的概率分布分数(相加之和为1)
    a t = s o f t m a x ( e t ) ∈ R N a^t = softmax(e^t) \in R^N at=softmax(et)RN

  • step 5: 计算attention向量 (context向量)
    a t = ∑ i = 1 N a i t h i ∈ R h a_t = \sum_{i=1}^Na_i^th_i \in R^h at=i=1NaithiRh

  • step 6: 将attention向量 a t a_t at与解码阶段的hidden向量 s t s_t st拼接到一起,进入分类层
    [ a t ; s t ] ∈ R 2 h [a_t;s_t] \in R^{2h} [at;st]R2h

下图是第二个step计算过程:
在这里插入图片描述
以此类推,直到解码结束。

2.3.2.1 attention作用

  • atention机制能够让decoder关注与当前解码相关的encoder源句子核心部分,大大提高了神经机器翻译模型效果
  • 对梯度消失有一定的帮助,因为attention机制提供了源句子信息与解码过程的直接连接,缩短了路径距离
  • attention机制提供了一些可解释性,通过attention分值,可以直观看到每一步的解码过程,decoder更关注encoder源句子的那部分
  • attention机制在文章摘要,对话,code生成等多个应用都取得了效果

3 参考

https://www.aclweb.org/anthology/D14-1179.pdf
https://web.stanford.edu/class/cs20si/syllabus.htm
https://arxiv.org/pdf/1409.0473.pdf

猜你喜欢

转载自blog.csdn.net/BGoodHabit/article/details/109714177