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
4668f88a
Commit
4668f88a
authored
Dec 15, 2020
by
曹润柘
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'master' 到 'caorunzhe'
Master 查看合并请求
!610
parents
8c7e96d8
efc3f8f0
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
27 行增加
和
28 行删除
+27
-28
Chapter14/Figures/figure-hypothesis-generation.tex
+2
-1
Chapter14/chapter14.tex
+25
-27
没有找到文件。
Chapter14/Figures/figure-hypothesis-generation.tex
查看文件 @
4668f88a
...
...
@@ -42,7 +42,7 @@
\node
[] () at ([yshift=0.4cm]output3.north)
{$
\vdots
$}
;
\end{scope}
\node
[align=center,anchor=north,font=
\small
] () at ([yshift=-0.3cm]MULTIPLE.south)
{
\footnotesize
{
(a) 多系统输出结
构
融合
}}
;
\node
[align=center,anchor=north,font=
\small
] () at ([yshift=-0.3cm]MULTIPLE.south)
{
\footnotesize
{
(a) 多系统输出结
果
融合
}}
;
\node
[align=center,anchor=north,font=
\small
] () at ([yshift=-0.3cm]SINGLE.south)
{
\footnotesize
{
(b) 单系统多输出结果融合
}}
;
\end{tikzpicture}
\ No newline at end of file
Chapter14/chapter14.tex
查看文件 @
4668f88a
...
...
@@ -219,7 +219,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
%----------------------------------------------------------------------
\begin{table}
[htp]
{
\begin{center}
\caption
{
中
英神经机器翻译系统的3-best结果实例
}
\caption
{
汉
英神经机器翻译系统的3-best结果实例
}
{
\begin{tabular}
{
c|l
}
源文
&
那只敏捷的棕色狐狸跳过了那只懒惰的狗。
\\
...
...
@@ -233,9 +233,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\end{center}
}
\end{table}
%----------------------------------------------------------------------
\parinterval
机器翻译输出缺乏多样性会带来很多问题。一个直接的问题是在重排序时
无法
选择到更好的译文,因为所有候选都没有太大的差别。另一方面,当需要利用
$
n
$
-best输出来表示翻译假设空间时,缺乏多样性的译文也会使得翻译后验概率的估计不够准确,造成建模的偏差。在一些模型训练方法中,这种后验概率估计的偏差也会造成较大的影响
\upcite
{
DBLP:conf/acl/ShenCHHWSL16
}
。从人工翻译的角度,同一个源语言句子的译文应该是多样的,因此过于相似的译文也无法反映足够多的翻译现象。
\parinterval
机器翻译输出缺乏多样性会带来很多问题。一个直接的问题是在重排序时
很难
选择到更好的译文,因为所有候选都没有太大的差别。另一方面,当需要利用
$
n
$
-best输出来表示翻译假设空间时,缺乏多样性的译文也会使得翻译后验概率的估计不够准确,造成建模的偏差。在一些模型训练方法中,这种后验概率估计的偏差也会造成较大的影响
\upcite
{
DBLP:conf/acl/ShenCHHWSL16
}
。从人工翻译的角度,同一个源语言句子的译文应该是多样的,因此过于相似的译文也无法反映足够多的翻译现象。
\parinterval
因此增加译文多样性成为了机器翻译中一个有价值的研究方向。在统计机器翻译中就有很多尝试
\upcite
{
DBLP:conf/emnlp/DuanLXZ09,DBLP:conf/acl/XiaoZZW10,xiao2013bagging
}
。主要思路是通过加入一些“扰动”让翻译模型的行为发生变化,进而得到区别更大的译文。类似的方法也同样适用于神经机器翻译。例如,可以在推断过程中加入额外的模型,用于惩罚出现相似译文的情况
\upcite
{
Li2016ADO,Li2016MutualIA
}
。也
有研究者
在翻译模型中引入新的隐含变量或者加入新的干扰,进而控制多样性译文的输出
\upcite
{
He2018SequenceTS,Shen2019MixtureMF,Wu2020GeneratingDT
}
。类似的,也可以利用模型中局部结构的多样性来生成多样的译文
\upcite
{
Sun2020GeneratingDT
}
。除了考虑每个译文之间的多样性,也可以对译文进行分组,之后增加不同组之间的多样性
\upcite
{
Vijayakumar2016DiverseBS
}
。
\parinterval
因此增加译文多样性成为了机器翻译中一个有价值的研究方向。在统计机器翻译中就有很多尝试
\upcite
{
DBLP:conf/emnlp/DuanLXZ09,DBLP:conf/acl/XiaoZZW10,xiao2013bagging
}
。主要思路是通过加入一些“扰动”让翻译模型的行为发生变化,进而得到区别更大的译文。类似的方法也同样适用于神经机器翻译。例如,可以在推断过程中加入额外的模型,用于惩罚出现相似译文的情况
\upcite
{
Li2016ADO,Li2016MutualIA
}
。也
可以
在翻译模型中引入新的隐含变量或者加入新的干扰,进而控制多样性译文的输出
\upcite
{
He2018SequenceTS,Shen2019MixtureMF,Wu2020GeneratingDT
}
。类似的,也可以利用模型中局部结构的多样性来生成多样的译文
\upcite
{
Sun2020GeneratingDT
}
。除了考虑每个译文之间的多样性,也可以对译文进行分组,之后增加不同组之间的多样性
\upcite
{
Vijayakumar2016DiverseBS
}
。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -245,7 +245,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval
机器翻译的错误分为两类:搜索错误和模型错误。搜索错误是指由于搜索算法的限制,即使潜在的搜索空间中有更好的解,模型也无法找到。比较典型的例子是,在对搜索进行剪枝的时候,如果剪枝过多,找到的结果很有可能不是最优的。这时就出现了搜索错误。
\parinterval
在统计机器翻译中,搜索错误可以通过减少剪枝进行缓解。比较简单的方式是增加搜索束宽度,这往往会带来一定的性能提升
\upcite
{
Xiao2016ALA
}
。也可以对搜索问题进行单独建模,以保证学习到的模型出现更少的搜索错误
\upcite
{
Liu2014SearchAwareTF,Yu2013MaxViolationPA
}
。但是,在神经机器翻译中,这个问题却表现出不同的现象:在很多神经机器翻译系统中,随着搜索束的增大,系统的BLEU不升反降。图
\ref
{
fig:14-3
}
展示了BLEU随束大小的变化曲线。这个现象与传统的常识是相违背的,因此也有一些研究尝试解释这个现象
\upcite
{
Stahlberg2019OnNS,Niehues2017AnalyzingNM
}
。在实验中,研究
者也发现增加搜索束的大小会导致翻译生成的结果变得更短。他们将这个现象归因于:增加搜索束的大小,会导致更多的模型错误,因为神经机器翻译的建模是基于局部归一的最大似然估计
\upcite
{
Sountsov2016LengthBI,Murray2018CorrectingLB,StahlbergNeural
}
。另一方面,也有研究者
把这种翻译过短的现象归因于搜索错误
\upcite
{
Stahlberg2019OnNS
}
。由于搜索时所面临的搜索空间是十分巨大的,因此搜索时可能无法找到模型定义的“最好”的译文。在某种意义上,这也体现了一种训练和推断不一致的问题。
\parinterval
在统计机器翻译中,搜索错误可以通过减少剪枝进行缓解。比较简单的方式是增加搜索束宽度,这往往会带来一定的性能提升
\upcite
{
Xiao2016ALA
}
。也可以对搜索问题进行单独建模,以保证学习到的模型出现更少的搜索错误
\upcite
{
Liu2014SearchAwareTF,Yu2013MaxViolationPA
}
。但是,在神经机器翻译中,这个问题却表现出不同的现象:在很多神经机器翻译系统中,随着搜索束的增大,系统的BLEU不升反降。图
\ref
{
fig:14-3
}
展示了BLEU随束大小的变化曲线。这个现象与传统的常识是相违背的,因此也有一些研究尝试解释这个现象
\upcite
{
Stahlberg2019OnNS,Niehues2017AnalyzingNM
}
。在实验中,研究
人员也发现增加搜索束的大小会导致翻译生成的结果变得更短。他们将这个现象归因于:增加搜索束的大小,会导致更多的模型错误,因为神经机器翻译的建模是基于局部归一的最大似然估计
\upcite
{
Sountsov2016LengthBI,Murray2018CorrectingLB,StahlbergNeural
}
。另一方面,也有研究人员
把这种翻译过短的现象归因于搜索错误
\upcite
{
Stahlberg2019OnNS
}
。由于搜索时所面临的搜索空间是十分巨大的,因此搜索时可能无法找到模型定义的“最好”的译文。在某种意义上,这也体现了一种训练和推断不一致的问题。
%----------------------------------------------------------------------
\begin{figure}
[htp]
...
...
@@ -256,7 +256,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\end{figure}
%----------------------------------------------------------------------
\parinterval
也有研究者针对降低搜索错误提出了一些解决方案。典型
的思路是从训练和推断的行为和目标不一致的角度切入。比如,为了解决
{
\small\sffamily\bfseries
{
曝光偏置
}}
\index
{
曝光偏置
}
(Exposure Bias)
\index
{
Exposure Bias
}
问题
\upcite
{
Ranzato2016SequenceLT
}
,可以让系统使用前面步骤的预测结果作为预测下一个词所需要的历史信息,而不是依赖于标准答案
\upcite
{
Bengio2015ScheduledSF,Zhang2019BridgingTG
}
。另一方面,为了解决训练和推断目标不一致的问题,可以在训练的时候模拟推断的行为,同时让模型训练的目标与评价系统的标准尽可能一致
\upcite
{
DBLP:conf/acl/ShenCHHWSL16
}
。
\parinterval
一种解决问题
的思路是从训练和推断的行为和目标不一致的角度切入。比如,为了解决
{
\small\sffamily\bfseries
{
曝光偏置
}}
\index
{
曝光偏置
}
(Exposure Bias)
\index
{
Exposure Bias
}
问题
\upcite
{
Ranzato2016SequenceLT
}
,可以让系统使用前面步骤的预测结果作为预测下一个词所需要的历史信息,而不是依赖于标准答案
\upcite
{
Bengio2015ScheduledSF,Zhang2019BridgingTG
}
。另一方面,为了解决训练和推断目标不一致的问题,可以在训练的时候模拟推断的行为,同时让模型训练的目标与评价系统的标准尽可能一致
\upcite
{
DBLP:conf/acl/ShenCHHWSL16
}
。
\parinterval
需要注意的是,前面提到的搜索束变大造成的翻译品质下降的问题还有其它解决方法。比如,可以通过对结果重排序来缓解这个问题
\upcite
{
DBLP:conf/emnlp/Yang0M18
}
,也可以通过设计更好的覆盖度模型来生成长度更加合理的译文
\upcite
{
li-etal-2018-simple
}
。从这个角度说,上述问题的成因也较为复杂,因此需要同时考虑模型错误和搜索错误。
...
...
@@ -534,7 +534,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval
非自回归翻译消除了序列生成中不同位置间的依赖,在每个位置都进行独立的预测,但这反过来会导致翻译质量显着下降,因为缺乏不同单词间依赖关系的建模。因此,也有研究聚焦于在非自回归模型中添加一些自回归组件来提升网络结构的表达能力。
\parinterval
一种做法是将语法作为
生成的目标句的框架
\upcite
{
Akoury2019SyntacticallyST
}
。具体来说,先自回归地预测出一个目标句的句法块序列,将句法树作为序列信息的抽象,然后根据句法块序列非自回归地生成所有目标词。如图
\ref
{
fig:14-21
}
所示,该模型由一个编码器和两个解码器组成。其中编码器和第一个解码器与标准的Transformer模型相同,用来自回归地预测句法树信息;第二个解码器将第一个解码器的句法信息作为输入,之后再非自回归地生成整个目标句子。在训练过程中,通过使用外部解析器获得对句法预测任务的监督
。虽然可以简单地让模型预测整个句法树,但是这种方法会显著增加自回归步骤的数量,从而增大时间开销。因此,为了维持句法信息与解码时间的平衡,这里预测一些由句法类型和子树大小组成的块标识符(如VP3)而不是整个句法树。
\parinterval
一种做法是将语法作为
目标语言句子的框架
\upcite
{
Akoury2019SyntacticallyST
}
。具体来说,先自回归地预测出一个目标语言的句法块序列,将句法树作为序列信息的抽象,然后根据句法块序列非自回归地生成所有目标语言单词。如图
\ref
{
fig:14-21
}
所示,该模型由一个编码器和两个解码器组成。其中编码器和第一个解码器与标准的Transformer模型相同,用来自回归地预测句法树信息;第二个解码器将第一个解码器的句法信息作为输入,之后再非自回归地生成整个目标句子。在训练过程中,通过使用外部句法分析器获得对句法预测任务的监督信号
。虽然可以简单地让模型预测整个句法树,但是这种方法会显著增加自回归步骤的数量,从而增大时间开销。因此,为了维持句法信息与解码时间的平衡,这里预测一些由句法类型和子树大小组成的块标识符(如VP3)而不是整个句法树。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -556,7 +556,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\end{figure}
%----------------------------------------------
\parinterval
还有一种做法引入了轻量级的自回归重排序模块
\upcite
{
Ran2019GuidingNN
}
。为了解决非自回归模型解码搜索空间过大的问题,可以使用重排序技术在相对较少的翻译候选上进行自回归模型的计算。如图
\ref
{
fig:14-22
}
所示,该方法对源语言句子进行重新排列转换成由源语言单词组成但位于目标语言结构中的伪译文,然后将伪译文进一步转换成目标语言以获得最终的翻译。其中
这个重排序模块是一个自回归模型(一层的循环神经网络)
。
\parinterval
还有一种做法引入了轻量级的自回归重排序模块
\upcite
{
Ran2019GuidingNN
}
。为了解决非自回归模型解码搜索空间过大的问题,可以使用重排序技术在相对较少的翻译候选上进行自回归模型的计算。如图
\ref
{
fig:14-22
}
所示,该方法对源语言句子进行重新排列转换成由源语言单词组成但位于目标语言结构中的伪译文,然后将伪译文进一步转换成目标语言以获得最终的翻译。其中
,这个重排序模块可以是一个轻量自回归模型,例如,一层的循环神经网络
。
%----------------------------------------------------------------------
\begin{figure}
[htp]
...
...
@@ -573,9 +573,9 @@ 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'
}$
输入给解码器2输出
$
\seq
{
y''
}$
,以此类推。那么迭代到什么时候结束呢?一种简单的做法是提前制定好迭代次数,这种方法能够自主地对生成句子的质量和效率进行平衡。另一种称之为“自适应”的方法,具体是通过计算当前生成的句子上一次生成的变化量来自动停止,例如,使用杰卡德相似系数
\footnote
{
杰卡德相似系数是衡量有限样本集之间的相似性与差异性的一种指标,杰卡德相似系数值越大,样本相似度越高。
}
作为变化量函数
。
\parinterval
图
\ref
{
fig:14-18
}
展示了这种方法的简单示例。它拥有一个解码器和
$
N
$
个编码器。解码器首先预测出目标句子的长度,然后将输入
$
\seq
{
x
}$
按照长度复制出
$
\seq
{
x'
}$
作为第一个解码器的输入,之后生成
$
\seq
{
y'
}$
出作为第一轮迭代的输出。接下来再把
$
\seq
{
y'
}$
输入给解码器2输出
$
\seq
{
y''
}$
,以此类推。那么迭代到什么时候结束呢?一种简单的做法是提前制定好迭代次数,这种方法能够自主地对生成句子的质量和效率进行平衡。另一种称之为“自适应”的方法,具体是通过计算当前生成的句子上一次生成的变化量来自动停止,例如,使用杰卡德相似系数
作为变化量函数
\footnote
{
杰卡德相似系数是衡量有限样本集之间的相似性与差异性的一种指标,杰卡德相似系数值越大,样本相似度越高。
}
。另外,需要说明的是,图
\ref
{
fig:14-18
}
中使用多个解码器一种逻辑示意。真实的系统仅需要一个解码器,并运行多次,就达到了迭代精化的目的
。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -588,9 +588,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval
除了使用上一个步骤的输出,当前解码器的输入还使用了添加噪声的正确目标语句子,两种使用情况之间使用一个超参数控制
\upcite
{
Lee2018DeterministicNN
}
。另外,对于目标语长度的预测,本文使用编码端的输出单独训练了一个独立的长度预测模块,这种方法也推广到了目前大多数模型上。
\parinterval
另一种方法借鉴了BERT的思想
\upcite
{
devlin2019bert
}
,提出了一种新的解码方法:Mask-Predict
\upcite
{
Ghazvininejad2019MaskPredictPD
}
。
\parinterval
类似于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]
...
...
@@ -621,7 +619,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\begin{itemize}
\vspace
{
0.5em
}
\item
假设生成。构建翻译假设集合是假设选择的第一步,也是最重要的一步。理想的情况下,我们希望这个集合尽可能包含更多高质量的翻译假设,这样后面有更大的几率选出更好的结果。不过,由于单个模型的性能是有上限的,因此无法期望这些翻译假设的品质超越单个模型的上限。研究人员更加关心的是翻译假设的多样性,因为已经证明多样的翻译假设非常有助于提升系统融合的性能
\upcite
{
DBLP:journals/corr/LiMJ16,xiao2013bagging
}
。为了生成多样的翻译假设,通常有两种思路:1)使用不同的模型生成翻译假设;2)使用同一个模型的不同参数和设置生成翻译假设。图
\ref
{
fig:14-8
}
展示了二者的区别。
\item
假设生成。构建翻译假设集合是假设选择的第一步,也是最重要的一步。理想的情况下,我们希望这个集合尽可能包含更多高质量的翻译假设,这样后面有更大的几率选出更好的结果。不过,由于单个模型的性能是有上限的,因此无法期望这些翻译假设的品质超越单个模型的上限。研究人员更加关心的是翻译假设的多样性,因为已经证明多样的翻译假设非常有助于提升系统融合的性能
\upcite
{
DBLP:journals/corr/LiMJ16,xiao2013bagging
}
。为了生成多样的翻译假设,通常有两种思路:1)使用不同的模型生成翻译假设;2)使用同一个模型的不同参数和设置生成翻译假设。图
\ref
{
fig:14-8
}
展示了二者的区别。
比如,可以使用基于RNN 的模型和Transformer 模型生成不同的翻译假设,之后都放入集合中;也可以只用Transformer 模型,但是用不同的模型参数构建多个系统,之后分别生成翻译假设。在神经机器翻译中,经常采用的是第二种方式,因为系统开发的成本更低。比如,很多研究工作都是基于一个基础模型,用不同的初始参数、不同层数、不同解码方式生成多个模型进行翻译假设生成。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -631,9 +629,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\label
{
fig:14-8
}
\end{figure}
%----------------------------------------------
\noindent
比如,可以使用基于RNN 的模型和Transformer 模型生成不同的翻译假设,之后都放入集合中;也可以只用Transformer 模型,但是用不同的模型参数构建多个系统,之后分别生成翻译假设。在神经机器翻译中,经常采用的是第二种方式,因为系统开发的成本更低。比如,很多研究工作都是基于一个基础模型,用不同的初始参数、不同层数、不同解码方式生成多个模型进行翻译假设生成。
\vspace
{
0.5em
}
\item
选择模型。所谓假设选择实际上就是要用一个更强的模型在候选中进行选择。这个“强” 模型一般是由更多、更复杂的子模型组合而成。常用的方法是直接使用翻译假设生成时的模型构建“强” 模型。比如,
我们
使用了两个模型生成了翻译假设集合,之后对所有翻译假设都分别用这两个模型进行打分。最后,综合两个模型的打分(如线性插值)得到翻译假设的最终得分,并进行选择。当然,也可以使用更强大的统计模型对多个子模型进行组合(如使用多层神经网络)。
\item
选择模型。所谓假设选择实际上就是要用一个更强的模型在候选中进行选择。这个“强” 模型一般是由更多、更复杂的子模型组合而成。常用的方法是直接使用翻译假设生成时的模型构建“强” 模型。比如,使用了两个模型生成了翻译假设集合,之后对所有翻译假设都分别用这两个模型进行打分。最后,综合两个模型的打分(如线性插值)得到翻译假设的最终得分,并进行选择。当然,也可以使用更强大的统计模型对多个子模型进行组合(如使用多层神经网络)。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -645,14 +643,14 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\subsection
{
局部预测融合
}
\parinterval
神经机器翻译模型对每个目标
端位置
$
j
$
的单词分布进行预测,即对于目标语言词汇表中的每个单词
$
y
_
j
$
,需要计算
$
\funp
{
P
}
(
y
_
j |
\seq
{
y
}_{
<j
}
,
\seq
{
x
}
)
$
。假设有
$
K
$
个神经机器翻译系统,那么每个系统
$
k
$
都可以独立的计算这个概率,记为
$
\funp
{
P
}_{
k
}
(
y
_
j |
\seq
{
y
}_{
<j
}
,
\seq
{
x
}
)
$
。于是,可以用公式
\eqref
{
eq:14-11
}
融合这
$
K
$
个系统的预测:
\parinterval
神经机器翻译模型对每个目标
语言端位置
$
j
$
的单词分布进行预测,即对于目标语言词汇表中的每个单词
$
y
_
j
$
,计算
$
\funp
{
P
}
(
y
_
j |
\seq
{
y
}_{
<j
}
,
\seq
{
x
}
)
$
。假设有
$
K
$
个神经机器翻译系统,那么每个系统
$
k
$
都可以独立计算这个概率,记为
$
\funp
{
P
}_{
k
}
(
y
_
j |
\seq
{
y
}_{
<j
}
,
\seq
{
x
}
)
$
。于是,可以用如下方式
融合这
$
K
$
个系统的预测:
\begin{eqnarray}
\funp
{
P
}
(y
_{
j
}
|
\seq
{
y
}_{
<j
}
,
\seq
{
x
}
)
&
=
&
\sum
_{
k=1
}^
K
\gamma
_{
k
}
\cdot
\funp
{
P
}_{
k
}
(y
_
j |
\seq
{
y
}_{
<j
}
,
\seq
{
x
}
)
\label
{
eq:14-11
}
\end{eqnarray}
\
parinterval
其中
$
\gamma
_{
k
}$
表示第
$
k
$
个系统的权重,且满足
$
\sum
_{
k
=
1
}^{
K
}
\gamma
_{
k
}
=
1
$
。公式
\eqref
{
eq:14-9
}
是一种线性模型。权重
$
\{
\gamma
_{
k
}
\}
$
可以在开发集上自动调整,比如,使用最小错误率训练得到最优的权重(见
\chapterfour
)。不过在实践中发现,如果这
$
K
$
个模型都是由一个基础模型衍生出来的,权重
$
\{
\gamma
_{
k
}
\}
$
对最终结果的影响并不大。因此,有时候也简单的将权重设置为
$
\gamma
_{
k
}
=
\frac
{
1
}{
K
}$
。图
\ref
{
fig:14-9
}
展示了对三个模型预测结果的集成。
\
noindent
其中,
$
\gamma
_{
k
}$
表示第
$
k
$
个系统的权重,且满足
$
\sum
_{
k
=
1
}^{
K
}
\gamma
_{
k
}
=
1
$
。权重
$
\{
\gamma
_{
k
}
\}
$
可以在开发集上自动调整,比如,使用最小错误率训练得到最优的权重(见
\chapterseven
)。不过在实践中发现,如果这
$
K
$
个模型都是由一个基础模型衍生出来的,权重
$
\{
\gamma
_{
k
}
\}
$
对最终结果的影响并不大。因此,有时候也简单的将权重设置为
$
\gamma
_{
k
}
=
\frac
{
1
}{
K
}$
。图
\ref
{
fig:14-9
}
展示了对三个模型预测结果的集成。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -665,7 +663,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval
公式
\eqref
{
eq:14-11
}
是一种典型的线性插值模型,这类模型在语言建模等任务中已经得到成功应用。从统计学习的角度,多个模型的插值可以有效的降低经验错误率。不过,多模型集成依赖一个假设:这些模型之间需要有一定的互补性。这种互补性有时也体现在多个模型预测的上限上,称为Oracle。比如,可以把这
$
K
$
个模型输出中BLEU最高的结果作为Oracle,也可以选择每个预测结果中使BLEU 达到最高的译文单词,这样构成的句子作为Oracle。当然,并不是说Oracle 提高,模型集成的结果一定会变好。因为Oracle 是最理想情况下的结果,而实际预测的结果与Oracle 往往有很大差异。如何使用Oracle 进行模型优化也是很多研究者在探索的问题。
\parinterval
此外,如何构建集成用的模型也是非常重要的,甚至说这部分工作会成为模型集成方法中最困难的部分
\upcite
{
DBLP:conf/wmt/LiLXLLLWZXWFCLL19,
Sun2019BaiduNM,Wang2018TencentNM,DBLP:conf/wmt/SennrichHB16,Bi2019MultiagentLF
}
。为了增加模型的多样性,常用的方法有:
\parinterval
此外,如何构建集成用的模型也是非常重要的,甚至说这部分工作会成为模型集成方法中最困难的部分
\upcite
{
DBLP:conf/wmt/LiLXLLLWZXWFCLL19,
Wang2018TencentNM,DBLP:conf/wmt/SennrichHB16
}
。为了增加模型的多样性,常用的方法有:
\begin{itemize}
\vspace
{
0.5em
}
...
...
@@ -675,9 +673,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\vspace
{
0.5em
}
\item
不同模型(局部)架构的调整,比如,使用不同的位置编码模型
\upcite
{
Shaw2018SelfAttentionWR
}
、多层融合模型
\upcite
{
WangLearning
}
等;
\vspace
{
0.5em
}
\item
利用不同数量以及不同数据增强方式产生的伪数据训练模型(
参考文献:今年的报告
);
\item
利用不同数量以及不同数据增强方式产生的伪数据训练模型(
{
\color
{
red
}
参考文献:今年的报告
}
);
\vspace
{
0.5em
}
\item
利用多分支多通道的模型,不同分支可能有不同结构,使得模型能有更好的表示能力(
参考文献:今年的报告
);
\item
利用多分支多通道的模型,不同分支可能有不同结构,使得模型能有更好的表示能力(
{
\color
{
red
}
参考文献:今年的报告
}
);
\vspace
{
0.5em
}
\item
利用预训练进行参数共享之后微调的模型;
\vspace
{
0.5em
}
...
...
@@ -689,19 +687,19 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\subsection
{
译文重组
}
\parinterval
假设直接从已经生成的译文中进行选择,因此无法产生“新” 的译文,也就是它的输出只能是某个单模型的输出。另一方面,预测融合需要同时使用多个模型进行推断,对计算和内存消耗较大。而且这两种方法有一个共性问题:搜索都是基于一个个字符串,相比指数级的译文空间,所看到的结果还是非常小的一部分。对于这个问题,一种方法是利用更加紧凑的数据结构对指数级的译文串进行表示。比如,可以使用格(
lattice)对多个译文串进行表示
\upcite
{
DBLP:conf/emnlp/TrombleKOM08
}
。图
\ref
{
fig:14-10
}
展示了基于
$
n
$
-best词串和基于lattice 的表示方法的区别。可以看到,lattice 中从起始状态到结束状态的每一条路径都表示一个译文,不同译文的不同部分可以通过lattice 中的节点得到共享
\footnote
{
本例中的lattice 也是一个混淆网络(Confusion Network)。
}
。理论上,l
attice 可以把指数级数量的词串用线性复杂度的结构表示出来。
\parinterval
假设直接从已经生成的译文中进行选择,因此无法产生“新” 的译文,也就是它的输出只能是某个单模型的输出。另一方面,预测融合需要同时使用多个模型进行推断,对计算和内存消耗较大。而且这两种方法有一个共性问题:搜索都是基于一个个字符串,相比指数级的译文空间,所看到的结果还是非常小的一部分。对于这个问题,一种方法是利用更加紧凑的数据结构对指数级的译文串进行表示。比如,可以使用格(
Lattice)对多个译文串进行表示
\upcite
{
DBLP:conf/emnlp/TrombleKOM08
}
。图
\ref
{
fig:14-10
}
展示了基于
$
n
$
-best词串和基于Lattice 的表示方法的区别。可以看到,Lattice 中从起始状态到结束状态的每一条路径都表示一个译文,不同译文的不同部分可以通过Lattice 中的节点得到共享
\footnote
{
本例中的Lattice 也是一个混淆网络(Confusion Network)。
}
。理论上,L
attice 可以把指数级数量的词串用线性复杂度的结构表示出来。
%----------------------------------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter14/Figures/figure-word-string-representation
}
\caption
{$
n
$
-best词串表示
vs lattice词串表示
}
\caption
{$
n
$
-best词串表示
(左) vs Lattice词串表示(右)
}
\label
{
fig:14-10
}
\end{figure}
%----------------------------------------------------------------------
\parinterval
有了
lattice 这样的结构,多模型融合又有了新的思路。首先,可以将多个模型的译文融合为lattice。注意,这个lattice 会包含这些模型无法生成的完整译文句子。之后,用一个更强的模型在lattice 上搜索最优的结果。这个过程有可能找到一些“新”的译文,即结果可能是从多个模型的结果中重组而来的。lattice 上的搜索模型可以基于多模型的融合,也可以使用一个简单的模型,这里需要考虑的是将神经机器翻译模型适应到lattice 上进行推断
\upcite
{
DBLP:conf/aaai/SuTXJSL17
}
。其过程基本与原始的模型推断没有区别,只是需要把模型预测的结果附着到l
attice 中的每条边上,再进行推断。
\parinterval
有了
Lattice 这样的结构,多模型融合又有了新的思路。首先,可以将多个模型的译文融合为Lattice。注意,这个Lattice 会包含这些模型无法生成的完整译文句子。之后,用一个更强的模型在Lattice 上搜索最优的结果。这个过程有可能找到一些“新”的译文,即结果可能是从多个模型的结果中重组而来的。Lattice 上的搜索模型可以基于多模型的融合,也可以使用一个简单的模型,这里需要考虑的是将神经机器翻译模型适应到Lattice 上进行推断
\upcite
{
DBLP:conf/aaai/SuTXJSL17
}
。其过程基本与原始的模型推断没有区别,只是需要把模型预测的结果附着到L
attice 中的每条边上,再进行推断。
\parinterval
图
\ref
{
fig:14-11
}
对比了不同模型集成方法的区别。从系统开发的角度看,假设选择和模型预测融合的复杂度较低,适合快速
原型,而且性能稳定。译文重组需要更多的模块,系统调试的复杂度较高,但是由于看到了更大的搜索空间,因此系统性能提升的潜力较大
\footnote
{
一般来说l
attice 上的Oracle 要比
$
n
$
-best译文上的Oracle 的质量高。
}
。
\parinterval
图
\ref
{
fig:14-11
}
对比了不同模型集成方法的区别。从系统开发的角度看,假设选择和模型预测融合的复杂度较低,适合快速
开发原型系统,而且性能稳定。译文重组需要更多的模块,系统调试的复杂度较高,但是由于看到了更大的搜索空间,因此系统性能提升的潜力较大
\footnote
{
一般来说L
attice 上的Oracle 要比
$
n
$
-best译文上的Oracle 的质量高。
}
。
%----------------------------------------------------------------------
\begin{figure}
[htp]
...
...
@@ -718,19 +716,19 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\section
{
小结与扩展阅读
}
\parinterval
推断系统(或解码系统)是神经机器翻译的重要组成。在神经机器翻译研究中,单独就推断问题进行的讨论并不多见。更多的工作是将其与实践结合,常见于开源系统、评测比赛中。但是,从应用的角度看,研发高效
、小巧的推断系统是机器翻译能够被大规模使用的前置条件。本章也从神经机器翻译推断的基本问题出发,重点探讨了推断系统的效率问题、非自回归翻译、多模型集成等问题。但是,由于推断问题涉及方向
十分广泛,因此本章也无法对其进行全面覆盖。有若干研究方向值得关注:
\parinterval
推断系统(或解码系统)是神经机器翻译的重要组成。在神经机器翻译研究中,单独就推断问题进行的讨论并不多见。更多的工作是将其与实践结合,常见于开源系统、评测比赛中。但是,从应用的角度看,研发高效
的推断系统是机器翻译能够被大规模使用的前提。本章也从神经机器翻译推断的基本问题出发,重点探讨了推断系统的效率、非自回归翻译、多模型集成等问题。但是,由于推断问题涉及的问题
十分广泛,因此本章也无法对其进行全面覆盖。有若干研究方向值得关注:
\begin{itemize}
\vspace
{
0.5em
}
\item
机器翻译系统中的推断也借用了
{
\small\sffamily\bfseries
{
统计推断
}}
\index
{
统计推断
}
(Statistical Inference)
\index
{
Statistical Inference
}
的概念。传统意义上讲,这类方法都是在利用样本数据去推测总体的趋势和特征。因此,从统计学的角度也有很多不同的思路。例如,贝叶斯学习等方法就在自然语言处理中得到广泛应用
\upcite
{
Held2013AppliedSI,Silvey2018StatisticalI
}
。其中比较有代表性的是
{
\small\sffamily\bfseries
{
变分方法
}}
\index
{
变分方法
}
(Variational Methods)
\index
{
Variational Methods
}
。这类方法通过引入新的隐含变量来对样本的分布进行建模,从某种意义上说它是在描述“分布的分布”,因此这种方法对事物的统计规律描述得更加细致
\upcite
{
Beal2003VariationalAF
}
。这类方法也被成功地用于统计机器翻译
\upcite
{
Li2009VariationalDF,xiao2011language,
}
和神经机器翻译
\upcite
{
Bastings2019ModelingLS,Shah2018GenerativeNM,Su2018VariationalRN,Zhang2016VariationalNM
}
。
\vspace
{
0.5em
}
\item
推断系统也可以受益于更加高效的网络结构。这方面工作集中在结构化剪枝、减少模型的冗余计算、低秩分解等方向。结构化剪枝中的代表性工作是LayerDrop
\upcite
{
DBLP:conf/iclr/FanGJ20,DBLP:conf/emnlp/WangXZ20,DBLP:journals/corr/abs-2002-02925
}
,这类方法在训练时随机选择部分子结构,在推断时根据输入来选择模型中的部分层进行计算,而跳过其余层,达到加速和减少参数量的目的。有关减少冗余计算的研究主要集中在改进注意力机制上,本章正文中已经有所介绍。低秩分解则针对词向量或者注意力的映射矩阵进行改进,例如词频自适应表示
\upcite
{
DBLP:conf/iclr/BaevskiA19
}
,词频越高则对应的向量维度越大,反之则越小,或者层数越高注意力映射矩阵维度越小
\upcite
{
DBLP:journals/corr/abs-2006-04768,DBLP:journals/corr/abs-1911-12385,DBLP:journals/corr/abs-1906-09777,DBLP:conf/nips/YangLSL19
}
。在实践中比较有效的是较深的编码器与较浅的解码器结合的方式,极端情况下解码器仅使用1层神经网络即可取得与多层神经网络相媲美的翻译精度,而极大地提升翻译效率
\upcite
{
DBLP:journals/corr/abs-2006-10369,DBLP:conf/aclnmt/HuLLLLWXZ20,DBLP:journals/corr/abs-2010-02416
}
。
\item
推断系统也可以受益于更加高效的网络结构。这方面工作集中在结构化剪枝、减少模型的冗余计算、低秩分解等方向。结构化剪枝中的代表性工作是LayerDrop
\upcite
{
DBLP:conf/iclr/FanGJ20,DBLP:conf/emnlp/WangXZ20,DBLP:journals/corr/abs-2002-02925
}
,这类方法在训练时随机选择部分子结构,在推断时根据输入来选择模型中的部分层进行计算,而跳过其余层,达到加速和减少参数量的目的。有关减少冗余计算的研究主要集中在改进注意力机制上,本章正文中已经有所介绍。低秩分解则针对词向量或者注意力的映射矩阵进行改进,例如词频自适应表示
\upcite
{
DBLP:conf/iclr/BaevskiA19
}
,词频越高则对应的向量维度越大,反之则越小,或者层数越高注意力映射矩阵维度越小
\upcite
{
DBLP:journals/corr/abs-2006-04768,DBLP:journals/corr/abs-1911-12385,DBLP:journals/corr/abs-1906-09777,DBLP:conf/nips/YangLSL19
}
。在实践中比较有效的是较深的编码器与较浅的解码器结合的方式,极端情况下解码器仅使用1层神经网络即可取得与多层神经网络相媲美的翻译精度,而极大地提升翻译效率
\upcite
{
DBLP:journals/corr/abs-2006-10369,DBLP:conf/aclnmt/HuLLLLWXZ20,DBLP:journals/corr/abs-2010-02416
}
。
在
{
\chapterfifteen
}
还会进一步对高效神经机器翻译的模型结构进行讨论。
\vspace
{
0.5em
}
\item
在对机器翻译推断系统进行实际部署时,对存储的消耗也是需要考虑的因素。因此如何让模型变得更小也是研发人员所关注的方向。当前的模型压缩方法主要可以分为几类:剪枝、量化、知识蒸馏和轻量方法,其中轻量方法主要是更轻量模型结构的设计,这类方法已经在上文进行了介绍。剪枝主要包括权重大小剪枝
\upcite
{
Han2015LearningBW,Lee2019SNIPSN,Frankle2019TheLT,Brix2020SuccessfullyAT
}
、面向多头注意力的剪枝
\upcite
{
Michel2019AreSH,DBLP:journals/corr/abs-1905-09418
}
、网络层以及其他部分的剪枝等
\upcite
{
Liu2017LearningEC,Liu2019RethinkingTV
}
,还有一些方法也通过在训练期间采用正则化的方式来提升剪枝能力
\upcite
{
DBLP:conf/iclr/FanGJ20
}
。量化方法主要通过截断浮点数来减少模型的存储大小,使其仅使用几个比特位的数字表示方法便能存储整个模型,虽然会导致舍入误差,但压缩效果显著
\upcite
{
DBLP:journals/corr/abs-1906-00532,Cheong2019transformersZ,Banner2018ScalableMF,Hubara2017QuantizedNN
}
。一些方法利用知识蒸馏手段还将Transformer模型蒸馏成如LSTMs 等其他各种推断速度更快的架构
\upcite
{
DBLP:journals/corr/HintonVD15,Munim2019SequencelevelKD,Tang2019DistillingTK
}
。另外还有一些其他方法不仅在输出上,还在权重矩阵和隐藏的激活层上对“教师模型”知识进行更深入的挖掘
\upcite
{
Jiao2020TinyBERTDB
}
。
\vspace
{
0.5em
}
\item
目前的翻译模型使用交叉熵损失作为优化函数,这在自回归模型上取得了非常优秀的性能。交叉熵是一个严格的损失函数,预测时位置错误的单词都会受到惩罚,即使是编辑距离很小的输出序列。回归模型会避免这种惩罚,因为单词是根据句子前一个词来生成的,而非自回归模型无法获知这个信息。为此,一些研究工作通过改进损失函数来提高非自回归模型的性能。一种做法使用对齐交叉熵函数
\upcite
{
Ghazvininejad2020AlignedCE
}
,其基于标签序列和目标词分布预测序列之间的对齐来计算交叉熵损失,采用动态规划的方法寻找单调对齐使交叉熵损失最小化。也可以使用基于
$
n
$
-gram的训练目标
\upcite
{
Shao2020MinimizingTB
}
,希望能最小化模型与参考译文间
$
n
$
-gram的差异。该训练目标在
$
n
$
-gram的层面上评估预测结果,因此能够建模序列依赖关系。
\vspace
{
0.5em
}
\item
自回归模型预测目标句时,当前词的生成是以之前已生成的词作为条件的,已生成词提供了较强的目标端上下文信息。然而,非自回归模型并行地生成所有词,因此不存在这样的信息。与自回归模型相比,非自回归模型的解码器需要在信息更少的情况下执行翻译任务。因此很多做法通过给非自回归模型的解码器端引入更多的信息,来降低模型的搜索空间。一些研究工作
\upcite
{
Ma2019FlowSeqNC
}
通过将条件随机场引入非自回归模型中来对结构依赖进行建模;也有工作引入了一个词嵌入转换矩阵来将源端的词嵌入转换为目标端的词嵌入来增强解码端的输入
\upcite
{
Guo2019NonAutoregressiveNM
}
;此外,也有研究者
提出了轻量级的重排序模块来显式的建模重排序信息,以指导非自回归模型的解码
\upcite
{
Ran2019GuidingNN
}
。
\item
自回归模型预测目标句时,当前词的生成是以之前已生成的词作为条件的,已生成词提供了较强的目标端上下文信息。然而,非自回归模型并行地生成所有词,因此不存在这样的信息。与自回归模型相比,非自回归模型的解码器需要在信息更少的情况下执行翻译任务。因此很多做法通过给非自回归模型的解码器端引入更多的信息,来降低模型的搜索空间。一些研究工作
通过将条件随机场引入非自回归模型中来对结构依赖进行建模
\upcite
{
Ma2019FlowSeqNC
}
;也有工作引入了一个词嵌入转换矩阵来将源端的词嵌入转换为目标端的词嵌入来增强解码端的输入
\upcite
{
Guo2019NonAutoregressiveNM
}
;此外,研究人员也
提出了轻量级的重排序模块来显式的建模重排序信息,以指导非自回归模型的解码
\upcite
{
Ran2019GuidingNN
}
。
\vspace
{
0.5em
}
\end{itemize}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论