神经机器翻译(NMT)根据上下文单词来预测下一个词,并按照序列生成整个目标句子。在训练时,它以正确标注的单词作为上下文进行预测,而在推理时,它只能从头开始生成整个序列。训练和推理的差异造成了整个过程的误差累积。除此之外,词级别的训练要求生成的序列和正确标注的序列严格匹配,这会导致对不同于正确标注序列但是合理翻译的句子的过度校正。这篇文章提出了一种新颖的解决方法,在训练阶段,模型不仅从正确标注的序列中采样上下文单词,同时在预测生成的序列中采样上下文单词;在推理阶段,使用句级别最优的预测。
论文地址:
https://arxiv.org/pdf/1906.02448.pdf
引言
神经机器翻译模型在训练时,在训练时,它以正确标注的单词作为上下文进行预测,而在推理时,它只能从头开始生成整个序列。这样做的结果是训练和推理中的预测词分别来自不同的分布,训练来自于数据分布,推理来自于模型分布。这种差异被称为暴露偏差(Exposure Bias),导致训练于推理之间的差距。随着目标序列的增长,错误会不断地在序列中积累。为了解决这个问题,直观来看,模型应该在与推理相同的条件下进行训练,在训练时使用正确标注的词和预测得到的词作为上下文可以作为一种解决方法。
NMT模型通常使用优化交叉熵损失的方法来进行训练,这需要预测序列和正确标注序列在词级别的严格匹配。一旦模型生成偏离正确标注序列的单词,交叉熵损失就会立即纠正错误并且让剩下的预测回归正确标注序列。这会导致一个新的问题:一个句子通常有多个合理的翻译,即是模型产生了与正确标注序列不同的词,也不能说模型犯了错误。但是这种强行校正却可能令预测序列产生语法或者意思上的错误,这个问题被称为过度校正(Over Correction)错误。
文章提出一种减小训练和推理之间距离的方法,并且提高模型对过度校正恢复的能力。文章首先从预测的单词中选择Oracle单词,然后从Oracle单词和正确标注的单词中进行抽样,所得的结果作为上下文进行训练。Oracle单词不仅仅通过单词贪婪搜索来选择,还是用句级的评估结果来选择,例如BLEU。在训练开始时,模型以更大的概率选择正确标注的单词作为上下文进行训练,随着模型收敛,模型以更大的概率选择Oracle单词作为上下文进行训练。通过这种方法,模型训练从完全引导变为较少引导,并且模型有机会学习处理推理中产生的错误,修正因为过度校正产生的错误。
模型结构
文章使用RNN-based NMT作为例子进行实验。假设输入序列为 x = { x 1 , . . . , x ∣ x ∣ } x=\{x_1,...,x_{|x|}\} x={x1,...,x∣x∣},翻译结果为 y ∗ = { y 1 ∗ , . . . , y ∣ y ∗ ∣ ∗ } y^*=\{y_1^*,...,y^*_{|y^*|}\} y∗={y1∗,...,y∣y∗∣∗}
编码器
使用双向GRU作为编码器
x
i
x_i
xi代表
h
i
=
[
h
i
→
,
h
i
←
]
h_i=[\stackrel{\rightarrow}{h_i}, \stackrel{\leftarrow}{h_i}]
hi=[hi→,hi←],
e
x
i
e_{x_i}
exi代表
x
i
x_i
xi的embedding。
Attention
Attention用于提取源语言信息。在第
j
j
j步,目标词
y
j
∗
y^*_j
yj∗和第
i
i
i个源端词的相关度为
源端向量为
解码段
使用GRU的一种变体进行解码。第
j
j
j步,目标的隐藏状态
s
j
s_j
sj为
目标词表的概率分布
P
j
P_j
Pj为
其中
g
g
g代表线性变换,
W
o
W_o
Wo用来映射
t
j
t_j
tj到
o
j
o_j
oj,每一个目标词在
o
j
o_j
oj中拥有一个对应维度。
结构图
步骤
如果预测第 j j j步的目标词汇 y j y_j yj,首先需要在第 j − 1 j-1 j−1步选择Oracle词汇 y j − 1 o r a c l e y_{j-1}^{oracle} yj−1oracle,接下来在概率为 p p p的标注词汇 y j − 1 ∗ y^*_{j-1} yj−1∗ 和 概 率 为 和概率为 和概率为 1 − p 1-p 1−p 的Oracle词汇 y j − 1 o r a c l e y_{j-1}^{oracle} yj−1oracle中进行采样,最后使用采样所得词代替原始训练词 y j − 1 ∗ y^*_{j-1} yj−1∗进行训练和推理。
Oracle词汇选择
文章使用两种方法选择Oracle词汇:其一为在词汇级别使用贪婪搜索策略进行选择,其二为在句级别选择Oracle句,使用N-gram匹配Oracle句和标注序列,得到过度校正修复的能力。Oracle词汇应为标注词汇的近义词或者与标注词汇很相近。
词级别Oracle (Word-Level Oracle)
对于解码的第
j
−
1
j-1
j−1步,一个选择Oracle词的直接方法为选择词汇分布
P
j
−
1
P_{j-1}
Pj−1中概率最高的词。但是这种方法鲁棒性不足。
使用Gumbel-Max方法可以更高效的从候选分布中进行抽样。Gumbel噪声,可以视为一种正则化,可以加在
o
j
−
1
o_{j-1}
oj−1上,目标词
y
j
−
1
y_{j-1}
yj−1的词汇分布近似为
其中
η
\eta
η为一元随机向量
u
U
(
0
,
1
)
u~U(0,1)
u U(0,1)计算得到的Gumbel噪声,
t
a
u
tau
tau是温度。当
t
a
u
tau
tau接近0时,
s
o
f
t
m
a
x
softmax
softmax方程与
a
r
g
m
a
x
argmax
argmax类似,当
t
a
u
tau
tau接近无穷大,
s
o
f
t
m
a
x
softmax
softmax方程接近一元分布。最后1-best词语由下式选择
Gumbel只用来选择Oracle词汇,对训练的损失方程没有影响。
句级别Oracle (Sentence-Level Oracle)
句级别的Oracle使用N-gram匹配,可令翻译变得更加灵活,同时选用BLEU作为句级别的参考。为选择句级别的Oracle,文章使用beam search得到每一个batch全部的候选句。在进行beam search的过程中,Gumbel噪声可以用于每一个词的生成过程。通过计算预测语句与标注语句的BLEU值,拥有最高值的预测语句被视为Oracle语句。令
y
S
=
(
y
1
s
,
.
.
.
,
y
∣
y
S
∣
S
)
y^S=(y_1^s,...,y^S_{|y^S|})
yS=(y1s,...,y∣yS∣S),在第
j
j
j步解码,句级别的Oracle词为
但是预测语句并不一定与标注语句拥有同样的长度,所以文中使用Force Decoding的方法来确定两个语句拥有相同的长度。
Force Decoding
对于超过长度的预测语句,此方法会提前选择EOS结束预测,对于短于长度的预测语句,此方法会选择除EOS外最高概率的值继续进行预测。
Sampling with Decay
标注词汇和Oracle词汇的选择概率会随着训练进行改变,文章定义
p
p
p作为依据训练轮数
e
e
e的衰减方程:
其中
μ
\mu
μ为超参
训练损失方程
其中N为训练数据集中的句对数目,
∣
y
n
∣
|y^n|
∣yn∣为第
n
n
n个标注句子的长度,
P
j
n
P^n_j
Pjn代表第
n
n
n句第
j
j
j步的预测概率分布,因此
P
j
n
[
y
j
n
]
P^n_j[y^n_j]
Pjn[yjn]为预测第
j
j
j步标注词汇
y
j
n
y_j^n
yjn的概率
实验
文章在中英NIST数据集和英德WMT14数据集上进行实验。
所得结果为
结论
端到端的NMT模式逐字生成翻译,但是仅仅使用标注词作为训练时的上下文,忽略的推理生成词作为训练上下文的情况。为减小训练和推理之间的差距,在于此一个单词时,文章使用一个采样方法选择标注词汇或者推理词汇作为训练上下文。除此之外,文章还提出词级别Oracle和句级别Oracle的选择,句级别Oracle可以进一步的为模型提供过度校正修复的功能,同时文章还指出句级别Oracle结果优于词级别Oracle
个人思考
文章针对端对端NMT模型训练和推理的差异进行了深入研究,提出了结合预测语句和标注语句进行训练的新方法。个人认为这种方法类似于一种语料增广的方法,即将训练语句进行微小并且合理的修改,并将修改语句加入到后续训练之中。除此之外,Transformer对编码端的修改大大提高了翻译质量,但是解码端依然使用之前的解码方法。将解码端与编码端的差异进行缩小可以很好的提升翻译质量,文章提供了一种很好的思路来实现这个想法。
扫码识别关注,获取更多论文解读