赞
踩
机器翻译 (Machine Translation)是一个将源语言句子 x x x翻译成目标语言句子 y y y的过程。机器翻译的相关研究最开始于19世纪50年代。
在19世纪50年代,机器翻译受到冷战时期推动,翻译系统主要是将俄语翻译成英语,通过规则匹配,从双语对应关系字典库中将源语言翻译成目标语言。
从1990年到2010年,主流方法是统计模型,其核心思想就是从数据中学习一种概率模型,例如:法语翻译成英语任务中,给定一个法语
x
x
x句子,我们希望找出最匹配的英语句子
y
y
y,优化函数如下:
a
r
g
m
a
x
y
P
(
y
∣
x
)
argmax_yP(y|x)
argmaxyP(y∣x)
使用贝叶斯规则,等同如下:
a
r
g
m
a
x
y
P
(
x
∣
y
)
p
(
y
)
argmax_yP(x|y)p(y)
argmaxyP(x∣y)p(y)
p
(
x
∣
y
)
p(x|y)
p(x∣y)概率由翻译模型根据翻译统计数据计算出来,而
p
(
y
)
p(y)
p(y)是语言模型,根据语言数据语料可以统计得出。
统计模型需要大量的语料,而且需要很多人工去构建特征,一个好的统计模型将是十分庞大和复杂。
2014年,神经机器翻译模型 (NMT)的诞生,奠定了新的里程碑,模型结构如下所示:
seq2seq模型,其中编码由一个RNN组成,解码由另外一个RNN构成。seq2seq模型是一种有条件约束的语言模型,因为在解码器是从目标句子
y
y
y中预测下一个单词,而有条件约束是因为解码的过程中会依据源语言句子
x
x
x。如下图所示:
在解码decode截断,使用贪心策略,每次用当前输出最大的概率预测词作为下一个预测结果。但是解码过程中只要有一步出错,会导致错误累积越多,越后的解码离正确的越远,这也就是beam search搜索出现的原因,在beam search中,解码截断的每个step提供会保留多个选择,最终选择最好的一个序列。
接下来,我们看下在解码过程中beam search的运作原理。首先,在翻译模型里,我们希望找到一个最大的
p
(
y
∣
x
)
p(y|x)
p(y∣x),其中
p
(
y
∣
x
)
p(y|x)
p(y∣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(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(y1∣x)p(y2∣y1,x)p(y3∣y1,y2,x)...,p(yt∣y1,...,yt−1,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为解码序列。
在机器翻译中,通常用BLEU指标来评估机器翻译的效果,BLEU主要是通过对比机器翻译的结果和人类翻译的结果来计算分值,主要基于如下两点:
attention的核心思想是在decoder解码的每一个step,关注源目标句子最相关的部分,这部分叫做context向量,在解码的每一个步骤,context向量都是动态计算出来的,主要是通过decoder阶段上一个时刻step (或者当前step) RNN的hidden向量与encoder的所有step的hidden 向量计算attention权重,然后得到加权后的context向量,具体可以参考博文 seq2seq model: beam search和attention机制理解,context向量可以作用如下两块:
如下图,只将context向量用在decoder每个step的分类层的一个输入上:
上图的计算方式流程步骤如下:
step 1: encoder阶段得到源句子的每个step的hidden向量
h
1
,
.
.
.
,
h
N
∈
R
h
h_1,...,h_N \in R^h
h1,...,hN∈Rh
step2: decoder阶段,在step t时刻,得到hidden向量 s t ∈ R h s_t \in R^h st∈Rh
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=1∑Naithi∈Rh
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计算过程:
以此类推,直到解码结束。
https://www.aclweb.org/anthology/D14-1179.pdf
https://web.stanford.edu/class/cs20si/syllabus.htm
https://arxiv.org/pdf/1409.0473.pdf
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。