Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mtbookv2
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
NiuTrans
mtbookv2
Commits
2e9695d0
Commit
2e9695d0
authored
Dec 26, 2020
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wording (sec 14)
parent
e26d4832
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
20 行增加
和
26 行删除
+20
-26
Chapter14/chapter14.tex
+20
-26
没有找到文件。
Chapter14/chapter14.tex
查看文件 @
2e9695d0
...
...
@@ -219,7 +219,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\begin{example}
源语言句子:我们期待安理会尽早就此作出决定。
\qquad\
机器译文
\ \,
1
\
:We look forward to the Security Council making a decision on this
\qquad\
机器译文
\ \,
1
\
:We look forward to the Security Council making a decision on this
\hspace
{
8.3em
}
as soon as possible.
...
...
@@ -405,7 +405,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\section
{
非自回归翻译
}
\parinterval
目前大多数神经机器翻译模型都使用了编码器-解码器框架
来实现
,编码器的输出会被送入到解码器,解码器自左向右逐词生成目标语言句子,也就是,第
$
j
$
个目标语言单词的生成依赖于先前生成的
$
j
-
1
$
个词。这种翻译方式也被称作
{
\small\sffamily\bfseries
{
自回归解码
}}
\index
{
自回归解码
}
(Autoregressive Decoding)
\index
{
Autoregressive Decoding
}
。虽然以Transformer为代表的模型使得训练过程高度并行化,加快了训练速度。但由于推断过程自回归的特性,模型无法同时生成译文中的所有单词,这导致模型的推断过程非常缓慢,这对于神经机器的实际应用是个很大的挑战。因此,如何设计一个在训练和推断阶段都能够并行化的模型是目前研究的热点之一。
\parinterval
目前大多数神经机器翻译模型都使用了编码器-解码器框架,编码器的输出会被送入到解码器,解码器自左向右逐词生成目标语言句子,也就是,第
$
j
$
个目标语言单词的生成依赖于先前生成的
$
j
-
1
$
个词。这种翻译方式也被称作
{
\small\sffamily\bfseries
{
自回归解码
}}
\index
{
自回归解码
}
(Autoregressive Decoding)
\index
{
Autoregressive Decoding
}
。虽然以Transformer为代表的模型使得训练过程高度并行化,加快了训练速度。但由于推断过程自回归的特性,模型无法同时生成译文中的所有单词,这导致模型的推断过程非常缓慢,这对于神经机器的实际应用是个很大的挑战。因此,如何设计一个在训练和推断阶段都能够并行化的模型是目前研究的热点之一。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -429,7 +429,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\label
{
eq:14-9
}
\end{eqnarray}
\noindent
其中,位置
$
j
$
上的输出
$
y
_
j
$
只依赖于输入句子
$
\seq
{
x
}$
,与其它位置上的输出无关。于是,所有位置上
${
y
_
j
}$
都可以并行生成,大大提高了GPU 等并行运算设备的利用率。这种方式一般可以带来几倍甚至十几倍的速度提升。
\noindent
其中,位置
$
j
$
上的输出
$
y
_
j
$
只依赖于输入句子
$
\seq
{
x
}$
,与其它位置上的输出无关。于是,所有位置上
${
y
_
j
}$
都可以并行生成,大大提高了GPU 等并行运算设备的利用率。
理想情况下,
这种方式一般可以带来几倍甚至十几倍的速度提升。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -437,7 +437,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\subsection
{
非自回归翻译模型的结构
}
\parinterval
在介绍非自回归模型的具体结构之前,先来看看如何实现一个简单的非自回归翻译模型。这里用标准的Transformer来举例。首先为了一次性
能够
生成所有的词,需要丢弃解码端对未来信息屏蔽的矩阵,从而去掉模型的自回归性。此外,还要考虑生成译文的长度。自回归模型每步的输入是上一步解码出的结果,当预测到终止符<eos>时序列的生成就自动停止了,然而非自回归模型却没有这样的特性,因此还需要一个长度预测器来预测出其长度,之后再用这个长度得到每个位置的表示,进而完成整个序列的生成。
\parinterval
在介绍非自回归模型的具体结构之前,先来看看如何实现一个简单的非自回归翻译模型。这里用标准的Transformer来举例。首先为了一次性生成所有的词,需要丢弃解码端对未来信息屏蔽的矩阵,从而去掉模型的自回归性。此外,还要考虑生成译文的长度。自回归模型每步的输入是上一步解码出的结果,当预测到终止符<eos>时序列的生成就自动停止了,然而非自回归模型却没有这样的特性,因此还需要一个长度预测器来预测出其长度,之后再用这个长度得到每个位置的表示,进而完成整个序列的生成。
\parinterval
图
\ref
{
fig:14-12
}
就是一个最简单的非自回归翻译模型,它的推断过程可以一次性解码出整个目标语言序列。但是这样得到的模型所翻译出的句子质量很低。比如,在IWSLT英德等数据上的BLEU值只有个位数,而现在最好的自回归模型已经能够达到30左右的BLEU值。这是因为每个位置词的分布
$
\funp
{
P
}
(
y
_
j
)
$
只依赖于源语言句子
$
\seq
{
x
}$
,使得
$
\funp
{
P
}
(
y
_
j
)
$
的预测不准确。
...
...
@@ -450,7 +450,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\end{figure}
%----------------------------------------------------------------------
\parinterval
完全独立地对每个词建模,会出现什么问题呢?来看一个例子,将汉语
“干得好!”翻译成英文,可以翻译成“Good job!”或者“Well done!”。假设生成这两种翻译的概率是相等的,即一半的概率是“Good job!”,另一半的概率是“Well done!”。由于非自回归模型的条件独立性假设,解码时第一个词“Good”和“Well”的概率是差不多大的,第二个词“job”和“done”的概率差不多大的,会使得模型生成出“Good done!”或者“Well job
!”这样错误的翻译,如图
\ref
{
fig:14-13
}
所示。这便是影响句子质量的关键问题,称之为
{
\small\sffamily\bfseries
{
多峰问题
}}
\index
{
多峰问题
}
(Multi-modality Problem)
\index
{
Multi-modality Problem
}
\upcite
{
Gu2017NonAutoregressiveNM
}
。针对非自回归模型难以处理多峰问题进行改进是提升非自回归模型质量的关键。
\parinterval
完全独立地对每个词建模,会出现什么问题呢?来看一个例子,将汉语
句子“干/得/好/!”翻译成英文,可以翻译成“Good job !”或者“Well done !”。假设生成这两种翻译的概率是相等的,即一半的概率是“Good job !”,另一半的概率是“Well done !”。由于非自回归模型的条件独立性假设,解码时第一个词“Good”和“Well”的概率是差不多大的,第二个词“job”和“done”的概率差不多大的,会使得模型生成出“Good done !”或者“Well job
!”这样错误的翻译,如图
\ref
{
fig:14-13
}
所示。这便是影响句子质量的关键问题,称之为
{
\small\sffamily\bfseries
{
多峰问题
}}
\index
{
多峰问题
}
(Multi-modality Problem)
\index
{
Multi-modality Problem
}
\upcite
{
Gu2017NonAutoregressiveNM
}
。针对非自回归模型难以处理多峰问题进行改进是提升非自回归模型质量的关键。
%----------------------------------------------------------------------
\begin{figure}
[htp]
...
...
@@ -469,7 +469,10 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\subsubsection
{
1. 基于繁衍率的非自回归模型
}
\parinterval
图
\ref
{
fig:14-14
}
给出了基于繁衍率的Transformer非自回归模型的结构
\upcite
{
Gu2017NonAutoregressiveNM
}
,由以下四个模块组成:编码器,解码器,繁衍率预测器和解码端的位置注意力模块。
\parinterval
图
\ref
{
fig:14-14
}
给出了基于繁衍率的Transformer非自回归模型的结构
\upcite
{
Gu2017NonAutoregressiveNM
}
,由以下四个模块组成:编码器,解码器,繁衍率预测器和解码端的位置注意力模块。与自回归翻译模型类似,Transformer模型的编码器和解码器都完全由前馈神经网络和多头注意力模块组成。在解码开始之前,非自回归模型需要知道译文的长度,以便并行生成所有单词。更重要的是,非自回归模型需要一次性生成出所有的译文单词,因此不能像自回归模型那样用已生成的词作为第一个解码器层的输入。
\parinterval
那么非自回归模型解码器的输入是什么呢?如果完全省略第一个解码器层的输入,或者仅使用位置嵌入,将会导致性能非常差。这里使用繁衍率来解决这个问题,繁衍率指的是对于每个源语言单词预测所对应的目标语言单词的个数(见
{
\chaptersix
}
)。这样,最终译文长度则由所有源语言单词对应的繁衍率之和决定(图
\ref
{
fig:14-14
}
中的数字1
\
1
\
2
\
0
\
1表示繁衍率序列)。这个繁衍率序列可以通过外部词对齐工具得到,从而来训练这个繁衍率预测器。但由于外部词对齐系统会出现错误,因此在模型收敛之后,需要在繁衍率预测器上加一个强化学习的损失来进行微调。
%----------------------------------------------------------------------
\begin{figure}
[htp]
...
...
@@ -480,16 +483,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\end{figure}
%----------------------------------------------------------------------
\parinterval
与自回归翻译模型类似,Transformer模型的编码器和解码器都完全由前馈神经网络和多头注意力模块组成。在解码开始之前,非自回归模型需要知道译文的长度,以便并行生成所有单词。更重要的是,非自回归模型需要一次性生成出所有的译文单词,因此不能像自回归模型那样用已生成的词作为第一个解码器层的输入。那么非自回归模型解码器的输入是什么呢?如果完全省略第一个解码器层的输入,或者仅使用位置嵌入,将会导致性能非常差。这里使用繁衍率来解决这个问题,繁衍率指的是对于每个源语言单词预测所对应的目标语言单词的个数(见
\chaptersix
)。翻译过程取决于繁衍率序列(图
\ref
{
fig:14-14
}
中的数字1
\
1
\
2
\
0
\
1),最终译文长度则由所有源语言单词对应的繁衍率之和决定。这个繁衍率序列可以通过外部词对齐工具得到,从而来训练这个繁衍率预测器。但由于外部词对齐系统会出现错误,因此在模型收敛之后,需要在繁衍率预测器上加一个强化学习的损失来进行微调。
\parinterval
另外,在每个解码器层中还包括额外的位置注意力模块,该模块与Transformer模型的其它部分中使用的多头注意力机制相同,如公式
\eqref
{
eq:14-10
}
:
\begin{eqnarray}
\textrm
{
Attention
}
(
\mathbi
{
Q
}
,
\mathbi
{
K
}
,
\mathbi
{
V
}
)
&
=
&
\textrm
{
Softmax
}
(
\frac
{
\mathbi
{
Q
}{
\mathbi
{
K
}}^{
T
}}{
\sqrt
{
d
_
k
}}
)
\cdot
\mathbi
{
V
}
\label
{
eq:14-10
}
\end{eqnarray}
\noindent
其中,
$
d
_
k
$
表示模型的隐层大小,其中位置编码作为
$
\mathbi
{
Q
}$
和
$
\mathbi
{
K
}$
,解码端上一层的输出作为
$
\mathbi
{
V
}$
。将位置信息直接结合到注意力过程中,比单独的位置嵌入提供了更强的位置信息,同时该附加信息可能还会提高解码器执行局部重排序的能力。
\parinterval
另外,在每个解码器层中还包括额外的位置注意力模块,该模块与Transformer模型的其它部分中使用的多头注意力机制相同。其仍然基于
$
\mathbi
{
Q
}$
、
$
\mathbi
{
K
}$
、
$
\mathbi
{
V
}$
之间的计算(见
{
\chaptertwelve
}
),只是把位置编码作为
$
\mathbi
{
Q
}$
和
$
\mathbi
{
K
}$
, 解码端上一层的输出作为
$
\mathbi
{
V
}$
。这种方法提供了更强的位置信息。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -499,7 +493,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval
知识蒸馏的基本思路是让学生模型所表示的函数尽可能去拟合教师模型所表示的函数(见
\chapterthirteen
)。如果想要训练一个小模型,同时希望它的性能与大模型一样好,这时可以把大模型看作传授知识的“教师”,把小模型看作接受知识的“学生”。在训练时,先将输入送给教师模型,让它预测出概率分布,作为小模型的监督信息来计算损失函数,进而完成小模型的训练。
\parinterval
类似的,可以让自回归模型作为“教师”,非自回归模型作为“学生”。把自回归神经机器翻译
生成的句子作为新的训练样本,送给非自回归机器翻译
进行学习
\upcite
{
Gu2017NonAutoregressiveNM,Lee2018DeterministicNN,Zhou2020UnderstandingKD,Guo2020FineTuningBC
}
。这种方式能够一定程度上解决多峰问题。因为,经过训练的自回归模型会始终将相同的源语言句子翻译成相同的译文。这样的操作得到的数据集噪声更少,能够降低非自回归模型学习的难度。
\parinterval
类似的,可以让自回归模型作为“教师”,非自回归模型作为“学生”。把自回归神经机器翻译
模型生成的句子作为新的训练样本,送给非自回归机器翻译模型
进行学习
\upcite
{
Gu2017NonAutoregressiveNM,Lee2018DeterministicNN,Zhou2020UnderstandingKD,Guo2020FineTuningBC
}
。这种方式能够一定程度上解决多峰问题。因为,经过训练的自回归模型会始终将相同的源语言句子翻译成相同的译文。这样的操作得到的数据集噪声更少,能够降低非自回归模型学习的难度。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -515,11 +509,11 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\subsection
{
更好的训练目标
}
\parinterval
虽然非自回归翻译可以显著提升翻译速度,但是很多情况下其翻译质量还是低于传统的自回归翻译
\upcite
{
Gu2017NonAutoregressiveNM,Kaiser2018FastDI,Guo2020FineTuningBC
}
。因此,很多工作致力于缩小自回归模型和非自回归模型的性能差距
\upcite
{
Ran2020LearningTR,Tu2020ENGINEEI,Shu2020LatentVariableNN
}
。一些
方法
通常通过修改训练目标来达到提升非自回归翻译品质的目的,例如:
\parinterval
虽然非自回归翻译可以显著提升翻译速度,但是很多情况下其翻译质量还是低于传统的自回归翻译
\upcite
{
Gu2017NonAutoregressiveNM,Kaiser2018FastDI,Guo2020FineTuningBC
}
。因此,很多工作致力于缩小自回归模型和非自回归模型的性能差距
\upcite
{
Ran2020LearningTR,Tu2020ENGINEEI,Shu2020LatentVariableNN
}
。一些通常通过修改训练目标来达到提升非自回归翻译品质的目的,例如:
\begin{itemize}
\vspace
{
0.5em
}
\item
基于层级知识蒸馏的方法
\upcite
{
Li2019HintBasedTF
}
。由于自回归模型和非自回归模型的结构相差不大,因此可以将翻译质量更高的自回归模型作为“教师”,通过给非自回归模型提供监督信号,使其逐块地学习前者的分布。研究人员发现了两点非常有意思的现象:1)非自回归模型输出的重复单词的位置的隐藏状态非常相似。2)非自回归模型的注意力分布比自回归模型的分布更加分散。这两点发现启发了研究人员使用自回归模型中的隐层状态来指导非自回归模型学习。通过计算两个模型隐层状态的距离以及注意力矩阵的KL散度
\footnote
{
KL散度即相对熵
}
作为额外的损失来帮助非自回归模型的训练过程。
\item
基于层级知识蒸馏的方法
\upcite
{
Li2019HintBasedTF
}
。由于自回归模型和非自回归模型的结构相差不大,因此可以将翻译质量更高的自回归模型作为“教师”,通过给非自回归模型提供监督信号,使其逐块地学习前者的分布。研究人员发现了两点非常有意思的现象:1)非自回归模型输出的重复单词的位置的隐藏状态非常相似。2)非自回归模型的注意力分布比自回归模型的分布更加分散。这两点发现启发了研究人员使用自回归模型中的隐层状态来指导非自回归模型学习。通过计算两个模型隐层状态的距离以及注意力矩阵的KL散度
\footnote
{
KL散度即相对熵
。
}
作为额外的损失来帮助非自回归模型的训练过程。
\vspace
{
0.5em
}
\item
基于模仿学习的方法
\upcite
{
Wei2019ImitationLF
}
。这种观点认为非自回归模型可以从性能优越的自回归模型中学得知识。
{
\small\bfnew
{
模仿学习
}}
\index
{
模仿学习
}
(Imitation Learning
\index
{
Imitation Learning
}
)是强化学习中的一个概念,即从专家那里学习正确的行为,与监督学习很相似
\upcite
{
Ho2016ModelFreeIL,Ho2016GenerativeAI,Duan2017OneShotIL
}
。与其不同的是,模仿学习不是照搬专家的行为,而是学习专家为什么要那样做。换句话说,学习的不是专家的镜像,而是一个专家的行为分布。这里,可以将自回归模型作为专家,非自回归模型学习不同时间步和不同层的解码状态,最后将模仿学习的损失与交叉熵损失加权求和后作为最终的优化目标。
\vspace
{
0.5em
}
...
...
@@ -533,9 +527,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\subsection
{
引入自回归模块
}
\parinterval
非自回归翻译消除了序列生成中不同位置间的依赖,在每个位置都进行独立的预测,但这反过来会导致翻译质量显着下降,因为缺乏
不同单词间依赖关系的建模。因此,也有研究聚焦于
在非自回归模型中添加一些自回归组件来提升网络结构的表达能力。
\parinterval
非自回归翻译消除了序列生成中不同位置间的依赖,在每个位置都进行独立的预测,但这反过来会导致翻译质量显着下降,因为缺乏
对不同单词间依赖关系的建模。因此,可以考虑
在非自回归模型中添加一些自回归组件来提升网络结构的表达能力。
\parinterval
一种做法是将
语法作为目标语言句子的框架
\upcite
{
Akoury2019SyntacticallyST
}
。具体来说,先自回归地预测出一个目标语言的句法块序列,将句法树作为序列信息的抽象,然后根据句法块序列非自回归地生成所有目标语言单词。如图
\ref
{
fig:14-21
}
所示,该模型由一个编码器和两个解码器组成。其中编码器和第一个解码器与标准的Transformer模型相同,用来自回归地预测句法树信息;第二个解码器将第一个解码器的句法信息作为输入,之后再非自回归地生成整个译文。在训练过程中,通过使用外部句法分析器获得对句法预测任务的监督信号。虽然可以简单地让模型预测整个句法树,但是这种方法会显著增加自回归步骤的数量,从而增大时间开销。因此,为了维持句法信息与解码时间的平衡,这里预测一些由句法类型
和子树大小组成的块标识符(如VP3)而不是整个句法树。
\parinterval
一种做法是将
句法信息作为目标语言句子的框架
\upcite
{
Akoury2019SyntacticallyST
}
。具体来说,先自回归地预测出一个目标语言的句法块序列,将句法树作为序列信息的抽象,然后根据句法块序列非自回归地生成所有目标语言单词。如图
\ref
{
fig:14-21
}
所示,该模型由一个编码器和两个解码器组成。其中编码器和第一个解码器与标准的Transformer模型相同,用来自回归地预测句法树信息;第二个解码器将第一个解码器的句法信息作为输入,之后再非自回归地生成整个译文。在训练过程中,通过使用外部句法分析器获得对句法预测任务的监督信号。虽然可以简单地让模型预测整个句法树,但是这种方法会显著增加自回归步骤的数量,从而增大时间开销。因此,为了维持句法信息与解码时间的平衡,这里预测一些由句法标记
和子树大小组成的块标识符(如VP3)而不是整个句法树。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -546,7 +540,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\end{figure}
%----------------------------------------------
\parinterval
另一种做法是半自回归地生成译文
\upcite
{
Wang2018SemiAutoregressiveNM
}
。如图
\ref
{
fig:14-20
}
所示,自回归模型从左到右依次生成译文,具有“最强”的自回归性;而非自回归模型完全独立的生成每个译文单词,具有“最弱”的自回归性;半自回归模型则是将整个译文分成
$
k
$
个块,在组内执行非自回归解码,在组间则执行自回归的解码,能够在每个时间步并行产生多个连续的单词。通过调整块的大小,半自回归模型可以灵活的调整到自回归模型(当
$
k
$
等于1)和非自回归模型(当
$
k
$
大于最大的译文长度)上来。
\parinterval
另一种做法是半自回归地生成译文
\upcite
{
Wang2018SemiAutoregressiveNM
}
。如图
\ref
{
fig:14-20
}
所示,自回归模型从左到右依次生成译文,具有“最强”的自回归性;而非自回归模型完全独立的生成每个译文单词,具有“最弱”的自回归性;半自回归模型则是将整个译文分成
$
k
$
个块,在组内执行非自回归解码,在组间则执行自回归的解码,能够在每个时间步并行产生多个连续的单词。通过调整块的大小,半自回归模型可以灵活的调整到自回归模型(当
$
k
$
等于1)和非自回归模型(当
$
k
$
大于
等于
最大的译文长度)上来。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -574,7 +568,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\subsection
{
基于迭代精化的非自回归翻译模型
}
\parinterval
如果一次并行生成整个序列,往往会导致单词之间的关系很难捕捉,
因此也限制了这类方法的能力。即使生成了错误的译文单词,这类方法也无法修改。针对这些问题,也可以使用迭代式的生成方式
\upcite
{
Lee2018DeterministicNN,Ghazvininejad2019MaskPredictPD,Kasai2020NonAutoregressiveMT
}
。这种方法放弃了一次生成最终的译文句子,而是将解码出的文本
再重新送给解码器,在每次迭代中来改进之前生成的译文单词,可以理解为句子级的自回归模型。这样做的好处在于,每次迭代的过程中可以利用已经生成的部分翻译结果,来指导其它部分的生成。
\parinterval
如果一次并行生成整个序列,往往会导致单词之间的关系很难捕捉,
即使生成了错误的译文单词,这类方法也无法修改。针对这些问题,也可以使用迭代式的生成方式
\upcite
{
Lee2018DeterministicNN,Ghazvininejad2019MaskPredictPD,Kasai2020NonAutoregressiveMT
}
。这种方法放弃了一次生成最终的译文句子,而是将解码出的译文
再重新送给解码器,在每次迭代中来改进之前生成的译文单词,可以理解为句子级的自回归模型。这样做的好处在于,每次迭代的过程中可以利用已经生成的部分翻译结果,来指导其它部分的生成。
\parinterval
图
\ref
{
fig:14-18
}
展示了这种方法的简单示例。它拥有一个编码器和
$
N
$
个解码器。编码器首先预测出译文的长度,然后将输入
$
\seq
{
x
}$
按照长度复制出
$
\seq
{
x'
}$
作为第一个解码器的输入,之后生成
$
\seq
{
y'
}$
作为第一轮迭代的输出。接下来再把
$
\seq
{
y'
}$
输入给第二个解码器输出
$
\seq
{
y''
}$
,以此类推。那么迭代到什么时候结束呢?一种简单的做法是提前制定好迭代次数,这种方法能够自主地对生成句子的质量和效率进行平衡。另一种称之为“自适应”的方法,具体是通过计算当前生成的句子上一次生成的变化量来自动停止,例如,使用杰卡德相似系数作为变化量函数
\footnote
{
杰卡德相似系数是衡量有限样本集之间的相似性与差异性的一种指标,杰卡德相似系数值越大,样本相似度越高。
}
。另外,需要说明的是,图
\ref
{
fig:14-18
}
中是使用多个解码器的一种逻辑示意。真实的系统仅需要一个解码器,并运行多次,就达到了迭代精化的目的。
...
...
@@ -582,20 +576,20 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\begin{figure}
[htp]
\centering
\input
{
./Chapter14/Figures/figure-iteration
}
\caption
{
基于迭代精化的非自回归翻译模型
}
\caption
{
基于迭代精化的非自回归翻译模型
运行示例
}
\label
{
fig:14-18
}
\end{figure}
%----------------------------------------------
\parinterval
除了使用上一个步骤的输出,当前解码器的输入还使用了添加噪声的正确目标语言句子,两种使用情况之间使用一个超参数控制
\upcite
{
Lee2018DeterministicNN
}
。另外,对于译文长度的预测,本章使用编码端的输出单独训练了一个独立的长度预测模块,这种方法也推广到了目前大多数模型上。
\parinterval
另一种方法借鉴了BERT的思想
\upcite
{
devlin2019bert
}
,
提出了一种新的解码方法:
Mask-Predict
\upcite
{
Ghazvininejad2019MaskPredictPD
}
。类似于BERT中的[CLS],该方法在源语言句子的最前面加上了一个特殊符号[LEN]作为输入,用来预测目标句的长度
$
n
$
。之后,将特殊符[Mask](与BERT中的[Mask]有相似的含义)复制
$
n
$
次作为解码器的输入,然后用非自回归的方式生成目标端所有的词。这样生成的翻译可能是比较差的,因此可以将第一次生成的这些词中不确定(即生成概率比较低)的一些词再“擦”掉,依据目标端剩余的单词以及源语言句子重新进行预测,不断迭代,直到满足停止条件为止。图
\ref
{
fig:14-19
}
给出了一个示例。
\parinterval
另一种方法借鉴了BERT的思想
\upcite
{
devlin2019bert
}
,
称为
Mask-Predict
\upcite
{
Ghazvininejad2019MaskPredictPD
}
。类似于BERT中的[CLS],该方法在源语言句子的最前面加上了一个特殊符号[LEN]作为输入,用来预测目标句的长度
$
n
$
。之后,将特殊符[Mask](与BERT中的[Mask]有相似的含义)复制
$
n
$
次作为解码器的输入,然后用非自回归的方式生成目标端所有的词。这样生成的翻译可能是比较差的,因此可以将第一次生成的这些词中不确定(即生成概率比较低)的一些词再“擦”掉,依据目标端剩余的单词以及源语言句子重新进行预测,不断迭代,直到满足停止条件为止。图
\ref
{
fig:14-19
}
给出了一个示例。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter14/Figures/figure-mask-predict
}
\caption
{
Mask-Predict
的模型结构
}
\caption
{
Mask-Predict
方法的运行示例
}
\label
{
fig:14-19
}
\end{figure}
%----------------------------------------------
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论