Commit 6e887147 by 孟霞

合并分支 'master' 到 'mengxia'

Master

查看合并请求 !613
parents 202c8af5 434b9d48
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
\node [] () at ([yshift=0.4cm]output3.north) {$\vdots$}; \node [] () at ([yshift=0.4cm]output3.north) {$\vdots$};
\end{scope} \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) 单系统多输出结果融合}}; \node [align=center,anchor=north,font=\small] () at ([yshift=-0.3cm]SINGLE.south) {\footnotesize{(b) 单系统多输出结果融合}};
\end{tikzpicture} \end{tikzpicture}
\ No newline at end of file
...@@ -219,7 +219,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -219,7 +219,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
%---------------------------------------------------------------------- %----------------------------------------------------------------------
\begin{table}[htp]{ \begin{table}[htp]{
\begin{center} \begin{center}
\caption{英神经机器翻译系统的3-best结果实例} \caption{英神经机器翻译系统的3-best结果实例}
{ {
\begin{tabular}{c|l} \begin{tabular}{c|l}
源文 & 那只敏捷的棕色狐狸跳过了那只懒惰的狗。 \\ 源文 & 那只敏捷的棕色狐狸跳过了那只懒惰的狗。 \\
...@@ -233,9 +233,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -233,9 +233,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\end{center} \end{center}
}\end{table} }\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 % NEW SUBSUB-SECTION
...@@ -245,7 +245,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -245,7 +245,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval 机器翻译的错误分为两类:搜索错误和模型错误。搜索错误是指由于搜索算法的限制,即使潜在的搜索空间中有更好的解,模型也无法找到。比较典型的例子是,在对搜索进行剪枝的时候,如果剪枝过多,找到的结果很有可能不是最优的。这时就出现了搜索错误。 \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] \begin{figure}[htp]
...@@ -256,7 +256,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -256,7 +256,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\end{figure} \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}。从这个角度说,上述问题的成因也较为复杂,因此需要同时考虑模型错误和搜索错误。 \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} ...@@ -534,7 +534,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval 非自回归翻译消除了序列生成中不同位置间的依赖,在每个位置都进行独立的预测,但这反过来会导致翻译质量显着下降,因为缺乏不同单词间依赖关系的建模。因此,也有研究聚焦于在非自回归模型中添加一些自回归组件来提升网络结构的表达能力。 \parinterval 非自回归翻译消除了序列生成中不同位置间的依赖,在每个位置都进行独立的预测,但这反过来会导致翻译质量显着下降,因为缺乏不同单词间依赖关系的建模。因此,也有研究聚焦于在非自回归模型中添加一些自回归组件来提升网络结构的表达能力。
\parinterval 一种做法是将语法作为生成的目标句的框架\upcite{Akoury2019SyntacticallyST}。具体来说,先自回归地预测出一个目标句的句法块序列,将句法树作为序列信息的抽象,然后根据句法块序列非自回归地生成所有目标词。如图\ref{fig:14-21}所示,该模型由一个编码器和两个解码器组成。其中编码器和第一个解码器与标准的Transformer模型相同,用来自回归地预测句法树信息;第二个解码器将第一个解码器的句法信息作为输入,之后再非自回归地生成整个目标句子。在训练过程中,通过使用外部解析器获得对句法预测任务的监督。虽然可以简单地让模型预测整个句法树,但是这种方法会显著增加自回归步骤的数量,从而增大时间开销。因此,为了维持句法信息与解码时间的平衡,这里预测一些由句法类型和子树大小组成的块标识符(如VP3)而不是整个句法树。 \parinterval 一种做法是将语法作为目标语言句子的框架\upcite{Akoury2019SyntacticallyST}。具体来说,先自回归地预测出一个目标语言的句法块序列,将句法树作为序列信息的抽象,然后根据句法块序列非自回归地生成所有目标语言单词。如图\ref{fig:14-21}所示,该模型由一个编码器和两个解码器组成。其中编码器和第一个解码器与标准的Transformer模型相同,用来自回归地预测句法树信息;第二个解码器将第一个解码器的句法信息作为输入,之后再非自回归地生成整个目标句子。在训练过程中,通过使用外部句法分析器获得对句法预测任务的监督信号。虽然可以简单地让模型预测整个句法树,但是这种方法会显著增加自回归步骤的数量,从而增大时间开销。因此,为了维持句法信息与解码时间的平衡,这里预测一些由句法类型和子树大小组成的块标识符(如VP3)而不是整个句法树。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -556,7 +556,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -556,7 +556,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 还有一种做法引入了轻量级的自回归重排序模块\upcite{Ran2019GuidingNN}。为了解决非自回归模型解码搜索空间过大的问题,可以使用重排序技术在相对较少的翻译候选上进行自回归模型的计算。如图\ref{fig:14-22}所示,该方法对源语言句子进行重新排列转换成由源语言单词组成但位于目标语言结构中的伪译文,然后将伪译文进一步转换成目标语言以获得最终的翻译。其中这个重排序模块是一个自回归模型(一层的循环神经网络) \parinterval 还有一种做法引入了轻量级的自回归重排序模块\upcite{Ran2019GuidingNN}。为了解决非自回归模型解码搜索空间过大的问题,可以使用重排序技术在相对较少的翻译候选上进行自回归模型的计算。如图\ref{fig:14-22}所示,该方法对源语言句子进行重新排列转换成由源语言单词组成但位于目标语言结构中的伪译文,然后将伪译文进一步转换成目标语言以获得最终的翻译。其中,这个重排序模块可以是一个轻量自回归模型,例如,一层的循环神经网络
%---------------------------------------------------------------------- %----------------------------------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -573,9 +573,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -573,9 +573,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\subsection{基于迭代精化的非自回归翻译模型} \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] \begin{figure}[htp]
...@@ -588,9 +588,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -588,9 +588,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval 除了使用上一个步骤的输出,当前解码器的输入还使用了添加噪声的正确目标语句子,两种使用情况之间使用一个超参数控制\upcite{Lee2018DeterministicNN}。另外,对于目标语长度的预测,本文使用编码端的输出单独训练了一个独立的长度预测模块,这种方法也推广到了目前大多数模型上。 \parinterval 除了使用上一个步骤的输出,当前解码器的输入还使用了添加噪声的正确目标语句子,两种使用情况之间使用一个超参数控制\upcite{Lee2018DeterministicNN}。另外,对于目标语长度的预测,本文使用编码端的输出单独训练了一个独立的长度预测模块,这种方法也推广到了目前大多数模型上。
\parinterval 另一种方法借鉴了BERT的思想\upcite{devlin2019bert},提出了一种新的解码方法:Mask-Predict\upcite{Ghazvininejad2019MaskPredictPD} \parinterval 另一种方法借鉴了BERT的思想\upcite{devlin2019bert},提出了一种新的解码方法:Mask-Predict\upcite{Ghazvininejad2019MaskPredictPD}。类似于BERT中的[CLS],该方法在源语言句子的最前面加上了一个特殊符号[LEN]作为输入,用来预测目标句的长度$n$。之后,将特殊符[Mask](与BERT中的[Mask]有相似的含义)复制$n$次作为解码器的输入,然后用非自回归的方式生成目标端所有的词。这样生成的翻译可能是比较差的,因此可以将第一次生成的这些词中不确定(即生成概率比较低)的一些词再“擦”掉,依据目标端剩余的单词以及源语言句子重新进行预测,不断迭代,直到满足停止条件为止。图\ref{fig:14-19}给出了一个示例。
\parinterval 类似于BERT的[CLS],该方法在源语句子的最前面加上了一个特殊符号[LEN]作为输入,用来预测目标句的长度$n$。之后,将特殊符[Mask](与BERT中的[Mask]有相似的含义)复制$n$次作为解码器的输入,然后用非自回归的方式生成目标端所有的词。这样生成的翻译可能是比较差的,因此可以将第一次生成出的这些词中不确定(即生成概率比较低)的一些词再“擦”掉,依据目标端剩余的单词以及源语言句子重新进行预测,不断迭代,直到满足停止条件为止。图\ref{fig:14-19}给出了一个示例。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -621,7 +619,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -621,7 +619,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\begin{itemize} \begin{itemize}
\vspace{0.5em} \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] \begin{figure}[htp]
...@@ -631,9 +629,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -631,9 +629,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\label{fig:14-8} \label{fig:14-8}
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\noindent 比如,可以使用基于RNN 的模型和Transformer 模型生成不同的翻译假设,之后都放入集合中;也可以只用Transformer 模型,但是用不同的模型参数构建多个系统,之后分别生成翻译假设。在神经机器翻译中,经常采用的是第二种方式,因为系统开发的成本更低。比如,很多研究工作都是基于一个基础模型,用不同的初始参数、不同层数、不同解码方式生成多个模型进行翻译假设生成。
\vspace{0.5em} \vspace{0.5em}
\item 选择模型。所谓假设选择实际上就是要用一个更强的模型在候选中进行选择。这个“强” 模型一般是由更多、更复杂的子模型组合而成。常用的方法是直接使用翻译假设生成时的模型构建“强” 模型。比如,我们使用了两个模型生成了翻译假设集合,之后对所有翻译假设都分别用这两个模型进行打分。最后,综合两个模型的打分(如线性插值)得到翻译假设的最终得分,并进行选择。当然,也可以使用更强大的统计模型对多个子模型进行组合(如使用多层神经网络)。 \item 选择模型。所谓假设选择实际上就是要用一个更强的模型在候选中进行选择。这个“强” 模型一般是由更多、更复杂的子模型组合而成。常用的方法是直接使用翻译假设生成时的模型构建“强” 模型。比如,使用了两个模型生成了翻译假设集合,之后对所有翻译假设都分别用这两个模型进行打分。最后,综合两个模型的打分(如线性插值)得到翻译假设的最终得分,并进行选择。当然,也可以使用更强大的统计模型对多个子模型进行组合(如使用多层神经网络)。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
...@@ -645,14 +643,14 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -645,14 +643,14 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\subsection{局部预测融合} \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} \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}) \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} \label{eq:14-11}
\end{eqnarray} \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] \begin{figure}[htp]
...@@ -665,7 +663,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -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 公式\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} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
...@@ -675,9 +673,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -675,9 +673,9 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\vspace{0.5em} \vspace{0.5em}
\item 不同模型(局部)架构的调整,比如,使用不同的位置编码模型\upcite{Shaw2018SelfAttentionWR}、多层融合模型\upcite{WangLearning}等; \item 不同模型(局部)架构的调整,比如,使用不同的位置编码模型\upcite{Shaw2018SelfAttentionWR}、多层融合模型\upcite{WangLearning}等;
\vspace{0.5em} \vspace{0.5em}
\item 利用不同数量以及不同数据增强方式产生的伪数据训练模型(参考文献:今年的报告); \item 利用不同数量以及不同数据增强方式产生的伪数据训练模型({\color{red} 参考文献:今年的报告});
\vspace{0.5em} \vspace{0.5em}
\item 利用多分支多通道的模型,不同分支可能有不同结构,使得模型能有更好的表示能力(参考文献:今年的报告); \item 利用多分支多通道的模型,不同分支可能有不同结构,使得模型能有更好的表示能力({\color{red} 参考文献:今年的报告});
\vspace{0.5em} \vspace{0.5em}
\item 利用预训练进行参数共享之后微调的模型; \item 利用预训练进行参数共享之后微调的模型;
\vspace{0.5em} \vspace{0.5em}
...@@ -689,19 +687,19 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -689,19 +687,19 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\subsection{译文重组} \subsection{译文重组}
\parinterval 假设直接从已经生成的译文中进行选择,因此无法产生“新” 的译文,也就是它的输出只能是某个单模型的输出。另一方面,预测融合需要同时使用多个模型进行推断,对计算和内存消耗较大。而且这两种方法有一个共性问题:搜索都是基于一个个字符串,相比指数级的译文空间,所看到的结果还是非常小的一部分。对于这个问题,一种方法是利用更加紧凑的数据结构对指数级的译文串进行表示。比如,可以使用格(lattice)对多个译文串进行表示\upcite{DBLP:conf/emnlp/TrombleKOM08}。图\ref{fig:14-10}展示了基于$n$-best词串和基于lattice 的表示方法的区别。可以看到,lattice 中从起始状态到结束状态的每一条路径都表示一个译文,不同译文的不同部分可以通过lattice 中的节点得到共享\footnote{本例中的lattice 也是一个混淆网络(Confusion Network)。}。理论上,lattice 可以把指数级数量的词串用线性复杂度的结构表示出来。 \parinterval 假设直接从已经生成的译文中进行选择,因此无法产生“新” 的译文,也就是它的输出只能是某个单模型的输出。另一方面,预测融合需要同时使用多个模型进行推断,对计算和内存消耗较大。而且这两种方法有一个共性问题:搜索都是基于一个个字符串,相比指数级的译文空间,所看到的结果还是非常小的一部分。对于这个问题,一种方法是利用更加紧凑的数据结构对指数级的译文串进行表示。比如,可以使用格(Lattice)对多个译文串进行表示\upcite{DBLP:conf/emnlp/TrombleKOM08}。图\ref{fig:14-10}展示了基于$n$-best词串和基于Lattice 的表示方法的区别。可以看到,Lattice 中从起始状态到结束状态的每一条路径都表示一个译文,不同译文的不同部分可以通过Lattice 中的节点得到共享\footnote{本例中的Lattice 也是一个混淆网络(Confusion Network)。}。理论上,Lattice 可以把指数级数量的词串用线性复杂度的结构表示出来。
%---------------------------------------------------------------------- %----------------------------------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\input{./Chapter14/Figures/figure-word-string-representation} \input{./Chapter14/Figures/figure-word-string-representation}
\caption{$n$-best词串表示 vs lattice词串表示} \caption{$n$-best词串表示(左) vs Lattice词串表示(右)}
\label{fig:14-10} \label{fig:14-10}
\end{figure} \end{figure}
%---------------------------------------------------------------------- %----------------------------------------------------------------------
\parinterval 有了lattice 这样的结构,多模型融合又有了新的思路。首先,可以将多个模型的译文融合为lattice。注意,这个lattice 会包含这些模型无法生成的完整译文句子。之后,用一个更强的模型在lattice 上搜索最优的结果。这个过程有可能找到一些“新”的译文,即结果可能是从多个模型的结果中重组而来的。lattice 上的搜索模型可以基于多模型的融合,也可以使用一个简单的模型,这里需要考虑的是将神经机器翻译模型适应到lattice 上进行推断\upcite{DBLP:conf/aaai/SuTXJSL17}。其过程基本与原始的模型推断没有区别,只是需要把模型预测的结果附着到lattice 中的每条边上,再进行推断。 \parinterval 有了Lattice 这样的结构,多模型融合又有了新的思路。首先,可以将多个模型的译文融合为Lattice。注意,这个Lattice 会包含这些模型无法生成的完整译文句子。之后,用一个更强的模型在Lattice 上搜索最优的结果。这个过程有可能找到一些“新”的译文,即结果可能是从多个模型的结果中重组而来的。Lattice 上的搜索模型可以基于多模型的融合,也可以使用一个简单的模型,这里需要考虑的是将神经机器翻译模型适应到Lattice 上进行推断\upcite{DBLP:conf/aaai/SuTXJSL17}。其过程基本与原始的模型推断没有区别,只是需要把模型预测的结果附着到Lattice 中的每条边上,再进行推断。
\parinterval\ref{fig:14-11}对比了不同模型集成方法的区别。从系统开发的角度看,假设选择和模型预测融合的复杂度较低,适合快速原型,而且性能稳定。译文重组需要更多的模块,系统调试的复杂度较高,但是由于看到了更大的搜索空间,因此系统性能提升的潜力较大\footnote{一般来说lattice 上的Oracle 要比$n$-best译文上的Oracle 的质量高。} \parinterval\ref{fig:14-11}对比了不同模型集成方法的区别。从系统开发的角度看,假设选择和模型预测融合的复杂度较低,适合快速开发原型系统,而且性能稳定。译文重组需要更多的模块,系统调试的复杂度较高,但是由于看到了更大的搜索空间,因此系统性能提升的潜力较大\footnote{一般来说Lattice 上的Oracle 要比$n$-best译文上的Oracle 的质量高。}
%---------------------------------------------------------------------- %----------------------------------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -718,19 +716,19 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -718,19 +716,19 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\section{小结与扩展阅读} \section{小结与扩展阅读}
\parinterval 推断系统(或解码系统)是神经机器翻译的重要组成。在神经机器翻译研究中,单独就推断问题进行的讨论并不多见。更多的工作是将其与实践结合,常见于开源系统、评测比赛中。但是,从应用的角度看,研发高效、小巧的推断系统是机器翻译能够被大规模使用的前置条件。本章也从神经机器翻译推断的基本问题出发,重点探讨了推断系统的效率问题、非自回归翻译、多模型集成等问题。但是,由于推断问题涉及方向十分广泛,因此本章也无法对其进行全面覆盖。有若干研究方向值得关注: \parinterval 推断系统(或解码系统)是神经机器翻译的重要组成。在神经机器翻译研究中,单独就推断问题进行的讨论并不多见。更多的工作是将其与实践结合,常见于开源系统、评测比赛中。但是,从应用的角度看,研发高效的推断系统是机器翻译能够被大规模使用的前提。本章也从神经机器翻译推断的基本问题出发,重点探讨了推断系统的效率、非自回归翻译、多模型集成等问题。但是,由于推断问题涉及的问题十分广泛,因此本章也无法对其进行全面覆盖。有若干研究方向值得关注:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \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} \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} \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} \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} \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} \vspace{0.5em}
\item 目前的翻译模型使用交叉熵损失作为优化函数,这在自回归模型上取得了非常优秀的性能。交叉熵是一个严格的损失函数,预测时位置错误的单词都会受到惩罚,即使是编辑距离很小的输出序列。回归模型会避免这种惩罚,因为单词是根据句子前一个词来生成的,而非自回归模型无法获知这个信息。为此,一些研究工作通过改进损失函数来提高非自回归模型的性能。一种做法使用对齐交叉熵函数\upcite{Ghazvininejad2020AlignedCE},其基于标签序列和目标词分布预测序列之间的对齐来计算交叉熵损失,采用动态规划的方法寻找单调对齐使交叉熵损失最小化。也可以使用基于$n$-gram的训练目标\upcite{Shao2020MinimizingTB},希望能最小化模型与参考译文间$n$-gram的差异。该训练目标在$n$-gram的层面上评估预测结果,因此能够建模序列依赖关系。 \item 目前的翻译模型使用交叉熵损失作为优化函数,这在自回归模型上取得了非常优秀的性能。交叉熵是一个严格的损失函数,预测时位置错误的单词都会受到惩罚,即使是编辑距离很小的输出序列。回归模型会避免这种惩罚,因为单词是根据句子前一个词来生成的,而非自回归模型无法获知这个信息。为此,一些研究工作通过改进损失函数来提高非自回归模型的性能。一种做法使用对齐交叉熵函数\upcite{Ghazvininejad2020AlignedCE},其基于标签序列和目标词分布预测序列之间的对齐来计算交叉熵损失,采用动态规划的方法寻找单调对齐使交叉熵损失最小化。也可以使用基于$n$-gram的训练目标\upcite{Shao2020MinimizingTB},希望能最小化模型与参考译文间$n$-gram的差异。该训练目标在$n$-gram的层面上评估预测结果,因此能够建模序列依赖关系。
\vspace{0.5em} \vspace{0.5em}
\item 自回归模型预测目标句时,当前词的生成是以之前已生成的词作为条件的,已生成词提供了较强的目标端上下文信息。然而,非自回归模型并行地生成所有词,因此不存在这样的信息。与自回归模型相比,非自回归模型的解码器需要在信息更少的情况下执行翻译任务。因此很多做法通过给非自回归模型的解码器端引入更多的信息,来降低模型的搜索空间。一些研究工作\upcite{Ma2019FlowSeqNC}通过将条件随机场引入非自回归模型中来对结构依赖进行建模;也有工作引入了一个词嵌入转换矩阵来将源端的词嵌入转换为目标端的词嵌入来增强解码端的输入\upcite{Guo2019NonAutoregressiveNM};此外,也有研究者提出了轻量级的重排序模块来显式的建模重排序信息,以指导非自回归模型的解码\upcite{Ran2019GuidingNN} \item 自回归模型预测目标句时,当前词的生成是以之前已生成的词作为条件的,已生成词提供了较强的目标端上下文信息。然而,非自回归模型并行地生成所有词,因此不存在这样的信息。与自回归模型相比,非自回归模型的解码器需要在信息更少的情况下执行翻译任务。因此很多做法通过给非自回归模型的解码器端引入更多的信息,来降低模型的搜索空间。一些研究工作通过将条件随机场引入非自回归模型中来对结构依赖进行建模\upcite{Ma2019FlowSeqNC};也有工作引入了一个词嵌入转换矩阵来将源端的词嵌入转换为目标端的词嵌入来增强解码端的输入\upcite{Guo2019NonAutoregressiveNM};此外,研究人员也提出了轻量级的重排序模块来显式的建模重排序信息,以指导非自回归模型的解码\upcite{Ran2019GuidingNN}
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
\tikzstyle{circle} = [draw,black,line width=0.6pt,inner sep=3.5pt,rounded corners=4pt,minimum width=2em] \tikzstyle{circle} = [draw,black,line width=0.6pt,inner sep=3.5pt,rounded corners=4pt,minimum width=2em]
\tikzstyle{word} = [inner sep=3.5pt] \tikzstyle{word} = [inner sep=3.5pt]
\node [anchor=center] (node1-1) at (0,0) {\small{\seq{x}}}; \node [anchor=center] (node1-1) at (0,0) {\small{$\seq{x}$}};
\node [anchor=west] (node1-2) at ([xshift=0.8em]node1-1.east) {\small{\seq{y}}}; \node [anchor=west] (node1-2) at ([xshift=0.8em]node1-1.east) {\small{$\seq{y}$}};
\node [anchor=north] (node1-3) at ([xshift=1.0em]node1-1.south) {\small{翻译模型f}}; \node [anchor=north] (node1-3) at ([xshift=1.0em]node1-1.south) {\small{翻译模型$f$}};
\draw [->,line width=0.6pt](node1-1.east)--(node1-2.west); \draw [->,line width=0.6pt](node1-1.east)--(node1-2.west);
\begin{pgfonlayer}{background} \begin{pgfonlayer}{background}
...@@ -21,9 +21,9 @@ ...@@ -21,9 +21,9 @@
\draw [->,thick]([xshift=0.2em]remark1.east).. controls (2.9,-0.25) and (2.9,-0.7) ..([yshift=0.2em]node3.north); \draw [->,thick]([xshift=0.2em]remark1.east).. controls (2.9,-0.25) and (2.9,-0.7) ..([yshift=0.2em]node3.north);
\node [anchor=north] (node4-1) at ([xshift=-1.0em,yshift=-7.0em]remark1.south) {\small{\seq{y}}}; \node [anchor=north] (node4-1) at ([xshift=-1.0em,yshift=-7.0em]remark1.south) {\small{$\seq{y}$}};
\node [anchor=west] (node4-2) at ([xshift=0.8em]node4-1.east) {\small{\seq{x}}}; \node [anchor=west] (node4-2) at ([xshift=0.8em]node4-1.east) {\small{$\seq{x}$}};
\node [anchor=north] (node4-3) at ([xshift=1.0em]node4-1.south) {\small{翻译模型g}}; \node [anchor=north] (node4-3) at ([xshift=1.0em]node4-1.south) {\small{翻译模型$g$}};
\draw [->,line width=0.6pt](node4-1.east)--(node4-2.west); \draw [->,line width=0.6pt](node4-1.east)--(node4-2.west);
\begin{pgfonlayer}{background} \begin{pgfonlayer}{background}
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
\parinterval 神经机器翻译带来的性能提升是显著的,但随之而来的问题是对海量双语训练数据的依赖。不过,不同语言可以使用的数据规模是不同的。比如汉语、英语这种使用范围广泛的语言,存在着大量的双语平行句对,这些语言被称为{\small\bfnew{富资源语言}}\index{富资源语言}(High-resource Language\index{High-resource Language})。而对于其它一些使用范围稍小的语言,如斐济语、古吉拉特语等,相关的数据非常稀少,这些语言被称为{\small\bfnew{低资源语言}}\index{低资源语言}(Low-resource Language\index{Low-resource Language})。世界上现存语言超过5000种,仅有很少一部分为富资源语言,绝大多数均为低资源语言。即使在富资源语言中,对于一些特定的领域,双语平行语料也是十分稀缺的。有时,一些特殊的语种或者领域甚至会面临“零资源”的问题。因此,{\small\bfnew{低资源机器翻译}}\index{低资源机器翻译}(Low-resource Machine Translation)是当下急需解决且颇具挑战的问题。 \parinterval 神经机器翻译带来的性能提升是显著的,但随之而来的问题是对海量双语训练数据的依赖。不过,不同语言可以使用的数据规模是不同的。比如汉语、英语这种使用范围广泛的语言,存在着大量的双语平行句对,这些语言被称为{\small\bfnew{富资源语言}}\index{富资源语言}(High-resource Language\index{High-resource Language})。而对于其它一些使用范围稍小的语言,如斐济语、古吉拉特语等,相关的数据非常稀少,这些语言被称为{\small\bfnew{低资源语言}}\index{低资源语言}(Low-resource Language\index{Low-resource Language})。世界上现存语言超过5000种,仅有很少一部分为富资源语言,绝大多数均为低资源语言。即使在富资源语言中,对于一些特定的领域,双语平行语料也是十分稀缺的。有时,一些特殊的语种或者领域甚至会面临“零资源”的问题。因此,{\small\bfnew{低资源机器翻译}}\index{低资源机器翻译}(Low-resource Machine Translation)是当下急需解决且颇具挑战的问题。
\parinterval 本章将对低资源神经机器翻译的相关问题、模型和方法展开介绍,内容涉及数据的有效使用、双向翻译模型、多语言翻译建模、无监督机器翻译、领域适应五个方面。下面一一展开讨论。 \parinterval 本章将对低资源神经机器翻译的相关问题、模型和方法展开介绍,内容涉及数据的有效使用、双向翻译模型、多语言翻译建模、无监督机器翻译、领域适应五个方面。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SECTION 16.1 % NEW SECTION 16.1
...@@ -48,8 +48,8 @@ ...@@ -48,8 +48,8 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsubsection{1. 回译} \subsubsection{1. 回译}
\parinterval {\small\bfnew{回译}}\index{回译}(Back Translation, BT\index{Back Translation}是目前机器翻译任务上最常用的一种数据增强方法\upcite{Sennrich2016ImprovingNM,DBLP:conf/emnlp/EdunovOAG18,DBLP:conf/aclnmt/HoangKHC18}。回译的主要思想是:利用目标语言-源语言模型(反向翻译模型)来生成伪双语句对,用于训练源语言-目标语言翻译模型(正向翻译模型)。假设我们的目标是训练一个英汉翻译模型。首先,使用双语数据训练汉英翻译模型,即反向翻译模型。然后通过该模型将额外的汉语单语句子翻译为英语句子,从而得到大量的生成英语- 真实汉语伪双语句对。然后,将回译得到的伪双语句对和真实双语句对混合,训练得到最终的英汉神经机器翻译模型。 \parinterval {\small\bfnew{回译}}\index{回译}(Back Translation, BT\index{Back Translation}是目前机器翻译任务上最常用的一种数据增强方法\upcite{Sennrich2016ImprovingNM,DBLP:conf/emnlp/EdunovOAG18,DBLP:conf/aclnmt/HoangKHC18}。回译的主要思想是:利用目标语言-源语言模型(反向翻译模型)来生成伪双语句对,用于训练源语言-目标语言翻译模型(正向翻译模型)。假设我们的目标是训练一个英汉翻译模型。首先,使用双语数据训练汉英翻译模型,即反向翻译模型。然后通过该模型将额外的汉语单语句子翻译为英语句子,从而得到大量的生成英语- 真实汉语伪双语句对。然后,将回译得到的伪双语句对和真实双语句对混合,训练得到最终的英汉神经机器翻译模型。
回译方法是模型无关的,只需要训练一个反向翻译模型,就可以简单有效地利用单语数据来增加训练数据的数量,因此在工业界也得到了广泛采\upcite{Hassan2018AchievingHP,DBLP:conf/iclr/LampleCDR18,DBLP:conf/emnlp/LampleOCDR18}。图\ref{fig:16-1} 给出了回译方法的一个简要流程。 回译方法是模型无关的,只需要训练一个反向翻译模型,就可以简单有效地利用单语数据来增加训练数据的数量,因此得到了广泛使\upcite{Hassan2018AchievingHP,DBLP:conf/iclr/LampleCDR18,DBLP:conf/emnlp/LampleOCDR18}。图\ref{fig:16-1} 给出了回译方法的一个简要流程。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 围绕如何利用回译方法生成伪双语数据,研究人员们进行了详细的分析探讨。一般观点认为,反向模型的性能越好,生成的伪数据质量也就更高,对正向模型的性能提升也就越大\upcite{Sennrich2016ImprovingNM,DBLP:conf/aclnmt/HoangKHC18}。不过,在实践中发现,即使一些简单的策略也能带来性能的增长。比如,对于一些低资源翻译任务,通过将目标语言句子复制到源语言端构造伪数据便能为模型带来增益\upcite{DBLP:conf/wmt/CurreyBH17}。原因在于,即使构造的双语伪数据是不准确的,其目标语言端仍然是真实数据,可以使解码器训练地更加充分,因此保证了神经机器翻译模型生成结果的流畅度。但是,相比这些简单的伪数据生成策略,利用目标语言单语数据进行回译可以获得更高质量的数据\upcite{DBLP:conf/wmt/CurreyBH17}。一种可能的解释是,双语伪数据的源语言是模型生成的翻译结果,保留了两种语言之间的互译信息,相比真实数据又存在一定的噪声。神经机器翻译模型在伪双语句对上进行训练,可以学习到如何处理带有噪声的输入,提高了模型的健壮性。 \parinterval 围绕如何利用回译方法生成伪双语数据,研究人员们进行了详细的分析探讨。一般观点认为,反向模型的性能越好,生成的伪数据质量也就更高,对正向模型的性能提升也就越大\upcite{Sennrich2016ImprovingNM,DBLP:conf/aclnmt/HoangKHC18}。不过,在实践中发现,即使一些简单的策略也能带来性能的增长。比如,对于一些低资源翻译任务,通过将目标语言句子复制到源语言端构造伪数据便能带来增益\upcite{DBLP:conf/wmt/CurreyBH17}。原因在于,即使构造的双语伪数据是不准确的,其目标语言端仍然是真实数据,可以使解码器训练地更加充分,因此保证了神经机器翻译模型生成结果的流畅度。但是,相比这些简单的伪数据生成策略,利用目标语言单语数据进行回译可以获得更高质量的数据\upcite{DBLP:conf/wmt/CurreyBH17}。一种可能的解释是,双语伪数据的源语言是模型生成的翻译结果,保留了两种语言之间的互译信息,相比真实数据又存在一定的噪声。神经机器翻译模型在伪双语句对上进行训练,可以学习到如何处理带有噪声的输入,提高了模型的健壮性。
\parinterval 在回译方法中,反向翻译模型的训练只依赖于有限的双语数据,因此生成的源语言端伪数据的质量难以保证。为此,可以采用{\small\sffamily\bfnew{迭代式回译}}\index{迭代式回译}(Iterative Back Translation)\index{Iterative Back Translation}的方法\upcite{DBLP:conf/aclnmt/HoangKHC18},同时利用源语言端和目标语言端的单语数据,不断通过回译的方式来提升正向和反向翻译模型的性能。图\ref{fig:16-2}展示了迭代式回译的框架。首先,使用双语数据训练一个正向翻译模型,然后利用额外的源语言单语数据通过回译的方式生成伪双语数据,来提升反向翻译模型的性能,再利用反向翻译模型和额外的目标语言单语数据生成伪双语数据,用于提升正向翻译模型的性能。可以看出,迭代式回译的过程是完全闭环的,因此可以一直重复进行,直到正向和反向翻译模型的性能均不再提升。 \parinterval 在回译方法中,反向翻译模型的训练只依赖于有限的双语数据,因此生成的源语言端伪数据的质量难以保证。为此,可以采用{\small\sffamily\bfnew{迭代式回译}}\index{迭代式回译}(Iterative Back Translation)\index{Iterative Back Translation}的方法\upcite{DBLP:conf/aclnmt/HoangKHC18},同时利用源语言端和目标语言端的单语数据,不断通过回译的方式来提升正向和反向翻译模型的性能。图\ref{fig:16-2}展示了迭代式回译的框架。首先,使用双语数据训练一个正向翻译模型,然后利用额外的源语言单语数据通过回译的方式生成伪双语数据,来提升反向翻译模型的性能,再利用反向翻译模型和额外的目标语言单语数据生成伪双语数据,用于提升正向翻译模型的性能。可以看出,迭代式回译的过程是完全闭环的,因此可以一直重复进行,直到正向和反向翻译模型的性能均不再提升。
...@@ -73,9 +73,9 @@ ...@@ -73,9 +73,9 @@
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 然而,研究人员发现,在低资源场景中,由于缺乏双语数据,高质量的伪双语数据对于模型来说更有帮助。而在富资源场景下,在回译产生的源语言句子中添加一些噪声,提高翻译结果的多样性,反而可以达到更好的效果,比较常用的方法是使用采样、Top-$k$解码和加噪\upcite{DBLP:conf/emnlp/EdunovOAG18,DBLP:conf/aclnmt/ImamuraFS18,DBLP:conf/emnlp/WuWXQLL19}。回译中常用的解码方式为束搜索,在生成每个词的时候只考虑预测概率最高的词,因此生成的翻译结果质量更高,但导致的问题是翻译结果主要集中在部分高频词上,生成的伪数据缺乏多样性,也就很难去准确地覆盖真实的数据分布\upcite{DBLP:conf/icml/OttAGR18}。采样解码是指在解码过程中,对词表中所有的词按照预测概率进行随机采样,因此整个词表中的词都有可能被选中,从而使生成结果多样性更强,但翻译质量和流畅度也会明显下降。Top-$k$解码是对束搜索和采样解码的一个折中方法。在解码过程中,Top-$k$解码对词表中预测概率最高的前$k$个词进行随机采样,这样在保证翻译结果准确性的前提下,也提高了结果的多样性。加噪方法在束搜索的解码结果加入一些噪声,如丢掉或掩码部分词、打乱句子顺序等。这些方法在生成的源语言句子中引入了噪声,不仅提高了对包含低频词或噪声句子的训练次数,同时也可以提高模型的鲁棒性和泛化能力\upcite{DBLP:conf/icml/VincentLBM08} \parinterval 然而,研究人员发现,在低资源场景中,由于缺乏双语数据,高质量的伪双语数据对于模型来说更有帮助。而在富资源场景下,在回译产生的源语言句子中添加一些噪声,提高翻译结果的多样性,反而可以达到更好的效果,比较常用的方法是使用采样、Top-$k$解码和加噪\upcite{DBLP:conf/emnlp/EdunovOAG18,DBLP:conf/aclnmt/ImamuraFS18,DBLP:conf/emnlp/WuWXQLL19}。回译中常用的解码方式为束搜索,在生成每个词的时候只考虑预测概率最高的词,因此生成的翻译结果质量更高,但导致的问题是翻译结果主要集中在部分高频词上,生成的伪数据缺乏多样性,也就很难去准确地覆盖真实的数据分布\upcite{DBLP:conf/icml/OttAGR18}。采样解码是指在解码过程中,对词表中所有的词按照预测概率进行随机采样,因此整个词表中的词都有可能被选中,从而使生成结果多样性更强,但翻译质量和流畅度也会明显下降。Top-$k$解码是对束搜索和采样解码的一个折中方法。在解码过程中,Top-$k$解码对词表中预测概率最高的前$k$个词进行随机采样,这样在保证翻译结果准确性的前提下,提高了结果的多样性。加噪方法在束搜索的解码结果加入一些噪声,如丢掉或掩码部分词、打乱句子顺序等。这些方法在生成的源语言句子中引入了噪声,不仅提高了对包含低频词或噪声句子的训练次数,同时也可以提高模型的健壮性和泛化能力\upcite{DBLP:conf/icml/VincentLBM08}
\parinterval 与回译方法类似,源语言的单语数据也可以通过一个双语数据训练的正向翻译模型获得对应的目标语言译文,从而构造正向翻译的伪数据\upcite{DBLP:conf/emnlp/ZhangZ16}。与回译方法相反,这时的伪数据中源语言句子是真实的,而目标语言句子是生成的,构造的伪数据对译文的流畅性并没有太大帮助,其主要作用是提升了编码器的特征提取能力。然而,由于伪数据中生成的译文质量很难保证,因此利用正向翻译模型生成伪数据的方法带来的性能提升效果要弱于回译,甚至可能是有害的\upcite{DBLP:conf/emnlp/WuWXQLL19} \parinterval 与回译方法类似,源语言单语数据也可以通过一个双语数据训练的正向翻译模型获得对应的目标语言译文,从而构造正向翻译的伪数据\upcite{DBLP:conf/emnlp/ZhangZ16}。与回译方法相反,这时的伪数据中源语言句子是真实的,而目标语言句子是自动生成的,构造的伪数据对译文的流畅性并没有太大帮助,其主要作用是提升了编码器的特征提取能力。然而,由于伪数据中生成的译文质量很难保证,因此利用正向翻译模型生成伪数据的方法带来的性能提升效果要弱于回译,甚至可能是有害的\upcite{DBLP:conf/emnlp/WuWXQLL19}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
...@@ -92,7 +92,7 @@ ...@@ -92,7 +92,7 @@
\vspace{0.5em} \vspace{0.5em}
\item 掩码单词:句子中的每个词均有$\funp{P}_{\rm{Mask}}$的概率被替换为一个额外的[Mask]词。[Mask]的作用类似于占位符,可以理解为一个句子中的部分词被涂抹掉,无法得知该位置词的准确含义。 \item 掩码单词:句子中的每个词均有$\funp{P}_{\rm{Mask}}$的概率被替换为一个额外的[Mask]词。[Mask]的作用类似于占位符,可以理解为一个句子中的部分词被涂抹掉,无法得知该位置词的准确含义。
\vspace{0.5em} \vspace{0.5em}
\item 打乱顺序:将句子中距离较近的某些词的位置进行随机交换,打乱句子中的单词顺序 \item 打乱顺序:将句子中距离较近的某些词的位置进行随机交换。
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
%---------------------------------------------- %----------------------------------------------
...@@ -103,12 +103,12 @@ ...@@ -103,12 +103,12 @@
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
\input{./Chapter16/Figures/figure-three-common-methods-of-adding-noise} \input{./Chapter16/Figures/figure-three-common-methods-of-adding-noise}
\caption{三种加噪方法} \caption{三种数据加噪方法}
\label{fig:16-3} \label{fig:16-3}
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 和回译方法相似,加噪方法一般仅在源语言句子上进行操作,既保证了目标语言句子的流畅度,又可以提高训练数据量,增加数据的多样性,也可以提高模型的鲁棒性和泛化能力\upcite{DBLP:conf/icml/VincentLBM08}。加噪作为一种简单有效的方法,实际的应用场景很多,比如: \parinterval 和回译方法相似,加噪方法一般仅在源语言句子上进行操作,既保证了目标语言句子的流畅度,又可以提高训练数据量,增加数据的多样性,也可以提高模型的健壮性和泛化能力\upcite{DBLP:conf/icml/VincentLBM08}。加噪作为一种简单有效的方法,实际的应用场景很多,比如:
%---------------------------------------------- %----------------------------------------------
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
...@@ -121,20 +121,20 @@ ...@@ -121,20 +121,20 @@
\end{itemize} \end{itemize}
%---------------------------------------------- %----------------------------------------------
\parinterval 另外一种方法是进行词替换。将一个句子中的某个词替换为其他词,可能并不会影响句子的合理性和流畅度。比如,对于“我出去玩。”这句话,将“我”替换为“你”、“他”、“我们”或者将“玩”替换为“骑车”、“学习”、“吃饭”等,虽然改变了语义,但句子仍然是合理的。词替换方法即是将双语数据中的部分词替换为词表中的其他词,在保证句子的语义或语法正确性的前提下,增加了训练数据的多样性。 \parinterval 另外一种方法是进行词替换。将一个句子中的某个词替换为其他词,可能并不会影响句子的合理性和流畅度。比如,对于“我/出去/玩。”这句话,将“我”替换为“你”、“他”、“我们”或者将“玩”替换为“骑车”、“学习”、“吃饭”等,虽然改变了语义,但句子在语法上仍然是合理的。词替换方法即是将双语数据中的部分词替换为词表中的其他词,在保证句子的语义或语法正确性的前提下,增加了训练数据的多样性。
\parinterval 词替换的另一种策略是将目标语中的稀有词替换为语义相近的词\upcite{DBLP:conf/acl/FadaeeBM17a}。词表中的稀有词由于出现次数较少,很容易导致训练不充分问题,从而无法准确预测稀有词\upcite{DBLP:conf/acl/SennrichHB16a}。通过语言模型将源语言句子中的某个词替换为满足语法或语义条件的稀有词,然后通过词对齐工具找到源语言句子中被替换的词在目标语言句子中对应的位置,借助翻译词典等方法将目标语言句子中的对应位置的词替换为源语言句子中被替换的词对应的翻译结果,从而生成得到伪双语数据。 \parinterval 词替换的另一种策略是将目标语中的稀有词替换为语义相近的词\upcite{DBLP:conf/acl/FadaeeBM17a}。词表中的稀有词由于出现次数较少,很容易导致训练不充分问题,从而无法准确预测稀有词\upcite{DBLP:conf/acl/SennrichHB16a}。通过语言模型将源语言句子中的某个词替换为满足语法或语义条件的稀有词,然后通过词对齐工具找到源语言句子中被替换的词在目标语言句子中对应的位置,借助翻译词典将这位目标语言位置的单词替换为词典中的翻译结果,从而生成得到伪双语数据。
\parinterval 此外,通过在源语言或目标语言中随机选择某些词,将这些词替换为词表中随机的一个词,也可以得到伪双语数据\upcite{DBLP:conf/emnlp/WangPDN18}。随机选择句子中的某个词,将这个词的词嵌入替换为其他词的词嵌入加权表示融合,权重可以通过语言模型来计算,相比离散的替换方式(替换为其他词等),这种丰富的分布式表示相比直接使用词嵌入可以包含更多的语义信息,同一个词在不同的上下文中也会被替换为不同的上下文表示\upcite{DBLP:conf/acl/GaoZWXQCZL19} \parinterval 此外,通过在源语言或目标语言中随机选择某些词,将这些词替换为词表中随机的一个词,也可以得到伪双语数据\upcite{DBLP:conf/emnlp/WangPDN18}。随机选择句子中的某个词,将这个词的词嵌入替换为其他词的词嵌入加权表示融合,权重可以通过语言模型来计算,相比离散的替换方式(替换为其他词等),这种丰富的分布式表示相比直接使用词嵌入可以包含更多的语义信息,同一个词在不同的上下文中也会被替换为不同的上下文表示结果\upcite{DBLP:conf/acl/GaoZWXQCZL19}
\parinterval 相比上述两种方法只是对句子做轻微的修改,{\small\bfnew{转述}}(Paraphrasing)\index{转述}\index{Paraphrasing}方法考虑到了自然语言表达的多样性,通过对原始句子进行改写,使用不同的句式来传达相同含义的信息\upcite{DBLP:journals/coling/BhagatH13,2010Generating}。比如对于“东北大学自然语言处理实验室的室训是精益求精、百炼成钢。”这句话,可以使用其他的句式来表达同样的含义,“精益求精、百炼成钢是东北大学自然语言处理实验室的室训”。转述在机器翻译任务上得到了广泛引用\upcite{DBLP:conf/wmt/GuoH19,DBLP:conf/acl/ZhouSW19,DBLP:conf/eacl/LapataSM17},通过转述方法对原始的双语数据进行改写,训练数据可以覆盖更多的语言学现象,同时由于每个句子可以对应多个不同的翻译,可以避免模型过拟合,提高泛化能力。 \parinterval 相比上述两种方法只是对句子做轻微的修改,{\small\bfnew{转述}}(Paraphrasing)\index{转述}\index{Paraphrasing}方法考虑到了自然语言表达的多样性,通过对原始句子进行改写,使用不同的句式来传达相同含义的信息\upcite{DBLP:journals/coling/BhagatH13,2010Generating}。比如对于“东北大学的校训是自强不息、知行合一”这句话,可以使用其他的句式来表达同样的含义,例如,“自强不息、知行合一是东北大学的校训”。转述在机器翻译任务上得到了广泛引用\upcite{DBLP:conf/wmt/GuoH19,DBLP:conf/acl/ZhouSW19,DBLP:conf/eacl/LapataSM17},通过转述方法对原始的双语数据进行改写,训练数据可以覆盖更多的语言学现象,同时由于每个句子可以对应多个不同的翻译,可以避免模型过拟合,提高泛化能力。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsubsection{3. 双语句对挖掘} \subsubsection{3. 双语句对挖掘}
\parinterval 在双语平行语料缺乏的时候,从可比语料中挖掘可用的双语句对也是一种有效的方法\upcite{finding2006adafre,method2008keiji,2005Improving,DBLP:conf/naacl/SmithQT10,DBLP:conf/emnlp/WuZHGQLL19}。可比语料是指源语言和目标语言虽然不是完全互译的文本,但是蕴含了丰富的双语对照知识,可以从中挖掘出可用的双语句对来训练。相比双语平行语料来说,可比语料相对容易获取,比如,多种语言报道的新闻事件、多种语言的维基百科词条和多种语言翻译的书籍(如圣经等)等。如图\ref{fig:16-4}中展示的维基百科词条所示。 \parinterval 在双语平行语料缺乏的时候,从可比语料中挖掘可用的双语句对也是一种有效的方法\upcite{finding2006adafre,2005Improving,DBLP:conf/emnlp/WuZHGQLL19}。可比语料是指源语言和目标语言虽然不是完全互译的文本,但是蕴含了丰富的双语对照知识,可以从中挖掘出可用的双语句对来训练。相比双语平行语料来说,可比语料相对容易获取,比如,多种语言报道的新闻事件、多种语言的维基百科词条和多种语言翻译的书籍(如圣经等)等。如图\ref{fig:16-4}中展示的维基百科词条所示。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -145,16 +145,16 @@ ...@@ -145,16 +145,16 @@
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 可比语料大多存在于网页中,内容较为复杂,可能会存在较大比例的噪声干扰,如HTML字符、乱码等。首先需要对内容进行充分的数据清洗操作,得到干净的可比语料,然后从中抽取出可用的双语句对。传统的抽取方法一般通过统计模型或双语词典来得到,比如,通过计算两个不同语言句子之间的单词重叠数或BLEU值\upcite{finding2006adafre,method2008keiji};通过排序模型或二分类器判断一个目标语言句子和一个源语言句子互译的可能性\upcite{DBLP:journals/coling/MunteanuM05,DBLP:conf/naacl/SmithQT10} \parinterval 可比语料大多存在于网页中,内容较为复杂,可能会存在较大比例的噪声,如HTML字符、乱码等。首先需要对内容进行充分的数据清洗操作,得到干净的可比语料,然后从中抽取出可用的双语句对。传统的抽取方法一般通过统计模型或双语词典来得到,比如,通过计算两个不同语言句子之间的单词重叠数或BLEU值\upcite{finding2006adafre,method2008keiji};通过排序模型或二分类器判断一个目标语言句子和一个源语言句子互译的可能性\upcite{DBLP:journals/coling/MunteanuM05,DBLP:conf/naacl/SmithQT10}
\parinterval 另外一种比较有效的方法是根据两种语言中每个句子的表示向量来抽取\upcite{DBLP:conf/emnlp/WuZHGQLL19}。首先,对于两种语言的每个句子,分别使用词嵌入加权平均等方法计算得到句子的表示向量,然后计算每个源语言句子和目标语言句子之间的余弦相似度,相似度大于一定阈值的句对则认为是可用的双语句对\upcite{DBLP:conf/emnlp/WuZHGQLL19}。然而,不同语言单独训练得到的词嵌入可能多对应不同的表示空间,因此得到的表示向量无法用于衡量两个句子的相似度\upcite{DBLP:journals/corr/MikolovLS13}。为了解决这个问题,一般使用在同一表示空间的跨语言词嵌入来表示两种语言的单词\upcite{DBLP:journals/jair/RuderVS19}。在跨语言词嵌入中,不同语言相同意思的词对应的词嵌入具有较高的相似性,因此得到的句向量也就可以用于衡量两个句子是否表示相似的语义\upcite{DBLP:conf/icml/LeM14}。关于跨语言词嵌入的具体内容,可以参考\ref{unsupervised-dictionary-induction}小节 \parinterval 另外一种比较有效的方法是根据两种语言中每个句子的表示向量来抽取\upcite{DBLP:conf/emnlp/WuZHGQLL19}。首先,对于两种语言的每个句子,分别使用词嵌入加权平均等方法计算得到句子的表示向量,然后计算每个源语言句子和目标语言句子之间的余弦相似度,相似度大于一定阈值的句对则认为是可用的双语句对\upcite{DBLP:conf/emnlp/WuZHGQLL19}。然而,不同语言单独训练得到的词嵌入可能多对应不同的表示空间,因此得到的表示向量无法用于衡量两个句子的相似度\upcite{DBLP:journals/corr/MikolovLS13}。为了解决这个问题,一般使用在同一表示空间的跨语言词嵌入来表示两种语言的单词\upcite{DBLP:journals/jair/RuderVS19}。在跨语言词嵌入中,不同语言相同意思的词对应的词嵌入具有较高的相似性,因此得到的句向量也就可以用于衡量两个句子是否表示相似的语义\upcite{DBLP:conf/icml/LeM14}。关于跨语言词嵌入的具体内容,可以参考\ref{unsupervised-dictionary-induction}节的内容
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsection{基于语言模型的方法} \subsection{基于语言模型的方法}
\parinterval 除了构造双语数据进行数据增强,直接利用单语数据也是机器翻译中的常用方法。通常,单语数据会被用于语言模型的学习(见{\chaptertwo})。对于机器翻译系统,使用语言模型也是一件十分自然的事情,在目标语言端,语言模型可以帮助系统产生更加流畅的译文;在源语言端,语言模型也可以用于句子编码,进而更好地生成句子的表示结果。在传统方法中,语言模型更多的被使用在目标语端。不过,近些年来随着预训练技术的发展,语言模型也被使用在神经机器翻译的编码端。下面将从语言模型在目标端的融合、预训练词嵌入、预训练编码器和多任务学习等方向介绍基于语言模型的单语数据使用方法。 \parinterval 除了构造双语数据进行数据增强,直接利用单语数据也是机器翻译中的常用方法。通常,单语数据会被用于语言模型的学习(见{\chaptertwo})。对于机器翻译系统,使用语言模型也是一件十分自然的事情,在目标语言端,语言模型可以帮助系统选择更加流畅的译文输出;在源语言端,语言模型也可以用于句子编码,进而更好地生成句子的表示结果。在传统方法中,语言模型更多的被使用在目标语端。不过,近些年来随着预训练技术的发展,语言模型也被使用在神经机器翻译的编码端。下面将从语言模型在目标端的融合、预训练词嵌入、预训练编码器和多任务学习等方向介绍基于语言模型的单语数据使用方法。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
...@@ -172,7 +172,7 @@ ...@@ -172,7 +172,7 @@
\parinterval 浅融合方法独立训练翻译模型和语言模型,在生成每个词的时候,对两个模型的预测概率进行加权求和得到最终的预测概率。浅融合的不足在于,解码过程对每个词均采用相同的语言模型权重,这实际上是不合理的。比如,在汉语-英语翻译系统中,英语句子中的冠词可能在汉语句子中没有显式的单词对应,这种情况下,英语语言模型可以提供更多帮助,保证翻译结果更加符合英语的语言结构;而在翻译某些名词的时候,语言模型由于没有源语言句子的信息,反而会对解码过程产生干扰,因此权重越小越好。针对这个问题,深融合联合翻译模型和语言模型进行训练,从而在解码过程中动态地计算语言模型的权重,从而更好地融合翻译模型和语言模型来计算预测概率。 \parinterval 浅融合方法独立训练翻译模型和语言模型,在生成每个词的时候,对两个模型的预测概率进行加权求和得到最终的预测概率。浅融合的不足在于,解码过程对每个词均采用相同的语言模型权重,这实际上是不合理的。比如,在汉语-英语翻译系统中,英语句子中的冠词可能在汉语句子中没有显式的单词对应,这种情况下,英语语言模型可以提供更多帮助,保证翻译结果更加符合英语的语言结构;而在翻译某些名词的时候,语言模型由于没有源语言句子的信息,反而会对解码过程产生干扰,因此权重越小越好。针对这个问题,深融合联合翻译模型和语言模型进行训练,从而在解码过程中动态地计算语言模型的权重,从而更好地融合翻译模型和语言模型来计算预测概率。
\parinterval 大多数情况下,译文端语言模型的使用可以提高翻译结果的流畅度。不过,它并不会增加翻译结果对源语言句子表达的{\small\bfnew{充分性}}\index{充分性}(Adequacy\index{Adequacy}),即源语言句子的信息是否被充分体现到了译文中。也有一些研究发现,神经机器翻译过于关注译文的流畅度,但是充分性的问题没有很好的考虑,比如,神经机器翻译系统的结果中经常出现漏译等问题。也有一些研究提出控制翻译充分性的方法,让译文在流畅度和充分性之间达到平衡\upcite{DBLP:conf/acl/TuLLLL16,li-etal-2018-simple,DBLP:journals/tacl/TuLLLL17} \parinterval 大多数情况下,译文端语言模型的使用可以提高翻译结果的流畅度。不过,它并不会增加翻译结果对源语言句子表达的{\small\bfnew{充分性}}\index{充分性}(Adequacy\index{Adequacy}),即源语言句子的信息是否被充分体现到了译文中。也有一些研究发现,神经机器翻译过于关注译文的流畅度,但是充分性的问题没有很好的考虑,比如,神经机器翻译系统的结果中经常出现漏译等问题。也有一些研究人员提出控制翻译充分性的方法,让译文在流畅度和充分性之间达到平衡\upcite{DBLP:conf/acl/TuLLLL16,li-etal-2018-simple,DBLP:journals/tacl/TuLLLL17}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
...@@ -183,27 +183,18 @@ ...@@ -183,27 +183,18 @@
\parinterval 实现上述想法的一种手段是{\small\sffamily\bfnew{预训练}}\index{预训练}(Pre-training)\index{Pre-training}\upcite{DBLP:conf/nips/DaiL15,DBLP:journals/corr/abs-1802-05365,radford2018improving,devlin2019bert}。预训练的做法相当于将表示模型的学习任务从目标任务中分离出来,这样可以利用额外的更大规模的数据进行学习。常用的一种方法是使用语言建模等方式在大规模单语数据上进行训练,来得到神经机器翻译模型中的一部分(比如词嵌入和编码器等)的模型参数,作为模型的初始值。然后,神经机器翻译模型在双语数据上进行{\small\sffamily\bfnew{微调}}\index{微调}(Fine-tuning)\index{Fine-tuning},以得到最终的翻译模型。 \parinterval 实现上述想法的一种手段是{\small\sffamily\bfnew{预训练}}\index{预训练}(Pre-training)\index{Pre-training}\upcite{DBLP:conf/nips/DaiL15,DBLP:journals/corr/abs-1802-05365,radford2018improving,devlin2019bert}。预训练的做法相当于将表示模型的学习任务从目标任务中分离出来,这样可以利用额外的更大规模的数据进行学习。常用的一种方法是使用语言建模等方式在大规模单语数据上进行训练,来得到神经机器翻译模型中的一部分(比如词嵌入和编码器等)的模型参数,作为模型的初始值。然后,神经机器翻译模型在双语数据上进行{\small\sffamily\bfnew{微调}}\index{微调}(Fine-tuning)\index{Fine-tuning},以得到最终的翻译模型。
\parinterval 词嵌入可以被看作是对每个独立单词进行的表示学习,在自然语言处理的众多任务中都扮演着重要角色\upcite{DBLP:conf/icml/CollobertW08,2011Natural,DBLP:journals/corr/abs-1901-09069}。到目前为止已经有大量的词嵌入学习方法被提出(见{\chapternine}),因此可以直接应用这些方法在海量的单语数据上训练得到词嵌入,用来初始化神经机器翻译模型的词嵌入矩阵\upcite{DBLP:conf/aclwat/NeishiSTIYT17,2018When} \parinterval 词嵌入可以被看作是对每个独立单词进行的表示学习,在自然语言处理的众多任务中都扮演着重要角色\upcite{DBLP:conf/icml/CollobertW08,2011Natural,DBLP:journals/corr/abs-1901-09069}。到目前为止已经有大量的词嵌入学习方法被提出(见{\chapternine}),因此可以直接应用这些方法在海量的单语数据上训练得到词嵌入,用来初始化神经机器翻译模型的词嵌入参数矩阵\upcite{DBLP:conf/aclwat/NeishiSTIYT17,2018When}
\parinterval 需要注意的是,在神经机器翻译中使用预训练词嵌入有两种方法。一种方法是直接将词嵌入作为固定的输入,也就是在训练机器翻译模型的过程中,并不调整词嵌入的参数。这样做的目的是完全将词嵌入模块独立出来,机器翻译可以被看作是在固定的词嵌入输入上进行的建模,从而降低了机器翻译系统学习的难度。另一种方法是仍然遵循``预训练+微调''的策略,将词嵌入作为翻译模型的初始值。之后在机器翻译训练过程中,词嵌入模型结果会被进一步更新。近些年,在词嵌入预训练的基础上进行微调的方法受到研究者越来越多的青睐。因为在实践中发现,完全用单语数据学习的单词表示,与双语上的翻译任务并不完全匹配。目标语言的信息也会影响源语言的表示学习,在预训练词嵌入的基础上进一步进行微调是更加有效的方案。 \parinterval 需要注意的是,在神经机器翻译中使用预训练词嵌入有两种方法。一种方法是直接将词嵌入作为固定的输入,也就是在训练机器翻译模型的过程中,并不调整词嵌入的参数。这样做的目的是完全将词嵌入模块独立出来,机器翻译可以被看作是在固定的词嵌入输入上进行的建模,从而降低了机器翻译系统学习的难度。另一种方法是仍然遵循``预训练+微调''的策略,将词嵌入作为翻译模型的初始值。之后在机器翻译训练过程中,词嵌入模型结果会被进一步更新。近些年,在词嵌入预训练的基础上进行微调的方法受到研究者越来越多的青睐。因为在实践中发现,完全用单语数据学习的单词表示,与双语上的翻译任务并不完全匹配。目标语言的信息也会影响源语言的表示学习,在预训练词嵌入的基础上进一步进行微调是更加有效的方案。
\parinterval 虽然预训练词嵌入在海量的单语数据上学习到了丰富的表示,但词嵌入很主要的一个缺点是无法解决一词多义问题。在不同的上下文中,同一个单词经常表示不同的意思,但词嵌入是完全相同的。模型需要在编码过程中通过上下文去理解每个词在当前语境下的含义,从而增加了建模的复杂度。因此,上下文词向量在近些年得到了广泛的关注\upcite{DBLP:conf/acl/PetersABP17,mccann2017learned,DBLP:conf/naacl/PetersNIGCLZ18}。上下文词嵌入是指一个词的表示不仅依赖于单词自身,还要根据所在的上下文语境来得到。由于在不同的上下文中,每个词对应的词嵌入是不同的,因此无法简单地通过词嵌入矩阵来表示,通常的做法是使用海量的单语数据预训练语言模型任务,使模型具备丰富的特征提取能力\upcite{DBLP:conf/naacl/PetersNIGCLZ18,radford2018improving,devlin2019bert}。比如,{\small\bfnew{来自语言模型的嵌入}}(Embeddings from Language Models,ELMo)\index{ELMo}\index{来自语言模型的嵌入}通过BiLSTM模型预训练语言模型任务,通过线性融合不同层的表示来得到每个词的上下文词嵌入,在很多自然语言处理任务上均得到了最佳的性能\upcite{DBLP:conf/naacl/PetersNIGCLZ18} \parinterval 虽然预训练词嵌入在海量的单语数据上学习到了丰富的表示,但词嵌入很主要的一个缺点是无法解决一词多义问题。在不同的上下文中,同一个单词经常表示不同的意思,但词嵌入是完全相同的。模型需要在编码过程中通过上下文去理解每个词在当前语境下的含义,从而增加了建模的复杂度。因此,上下文词向量在近些年得到了广泛的关注\upcite{DBLP:conf/acl/PetersABP17,mccann2017learned,DBLP:conf/naacl/PetersNIGCLZ18}。上下文词嵌入是指一个词的表示不仅依赖于单词自身,还要根据所在的上下文语境来得到。由于在不同的上下文中,每个词对应的词嵌入是不同的,因此无法简单地通过词嵌入矩阵来表示,通常的做法是使用海量的单语数据预训练语言模型任务,使模型具备丰富的特征提取能力\upcite{DBLP:conf/naacl/PetersNIGCLZ18,radford2018improving,devlin2019bert}
%----------------------------------------------
\begin{figure}[htp]
\centering
\input{./Chapter16/Figures/figure-elmo-model-structure}
\caption{ELMo模型结构示意图}
\label{fig:16-5}
\end{figure}
%----------------------------------------------
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsubsection{3. 预训练模型} \subsubsection{3. 预训练模型}
\parinterval 相比固定的词嵌入,上下文词嵌入包含了在当前语境中的语义信息,丰富了模型的输入表示,降低了训练难度。但是,模型仍有大量的参数需要从零学习,来进一步提取整个句子的表示。那么,能不能在预训练阶段中直接得到预训练好的模型参数,在下游任务中仅仅通过任务特定的数据对模型参数进行微调,来得到一个较强的模型呢?{\small\bfnew{生成式预训练}}(Generative Pre-Training,GPT)\index{生成式预训练}\index{GPT}和来自Transformer的{\small\bfnew{双向编码器表示}}(Bidirectional Encoder Representations from Transformers,BERT)\index{双向编码器表示}\index{BERT}对这种方法进行了探索,并取得了令人振奋的实验结果 \parinterval 相比固定的词嵌入,上下文词嵌入包含了在当前语境中的语义信息,丰富了模型的输入表示,降低了训练难度。但是,模型仍有大量的参数需要从零学习,来进一步提取整个句子的表示。那么,能不能在预训练阶段中直接得到预训练好的模型参数,在下游任务中仅仅通过任务特定的数据对模型参数进行微调,来得到一个较强的模型呢?{\small\bfnew{生成式预训练}}(Generative Pre-Training,GPT)\index{生成式预训练}\index{GPT}和来自Transformer的{\small\bfnew{双向编码器表示}}(Bidirectional Encoder Representations from Transformers,BERT)\index{双向编码器表示}\index{BERT}对这个问题进行了探索
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -214,17 +205,17 @@ ...@@ -214,17 +205,17 @@
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval GPT\upcite{radford2018improving}通过Transformer模型自回归地训练单向语言模型,类似于神经机器翻译模型的解码器,相比ELMo中使用的BiLSTM模型,Tranformer架构的表示能力更强。在大规模单语数据上预训练得到的模型结构只需要进行简单的修改,然后通过任务特定的训练数据进行微调,就可以很好地适配到下游任务中,在多个任务中均取得了当时最佳的结果。之后提出的BERT模型更是将预训练的作用提升到了新的水平\upcite{devlin2019bert}。GPT模型十分严重的一个缺陷在于模型只能进行单向编码,也就是前面的文本在建模时无法获取到后面的信息。而BERT提出了一种自编码的方式,使模型在预训练阶段可以通过双向编码的方式进行建模,进一步增强了模型的表示能力。 \parinterval GPT\upcite{radford2018improving}通过Transformer模型自回归地训练单向语言模型,类似于神经机器翻译模型的解码器,相比双向LSTM等模型,Tranformer架构的表示能力更强。在大规模单语数据上预训练得到的模型结构只需要进行简单的修改,然后通过任务特定的训练数据进行微调,就可以很好地适配到下游任务中。之后提出的BERT模型更是将预训练的作用提升到了新的水平\upcite{devlin2019bert}。GPT模型的一个缺陷在于模型只能进行单向编码,也就是前面的文本在建模时无法获取到后面的信息。而BERT提出了一种自编码的方式,使模型在预训练阶段可以通过双向编码的方式进行建模,进一步增强了模型的表示能力。
\parinterval BERT的核心思想是通过{\small\bfnew{掩码语言模型}}(Masked Language model,MLM)\index{掩码语言模型}\index{MLM}任务进行预训练。掩码语言模型的思想类似于完形填空,随机选择输入句子中的部分词掩码,模型来预测这些被掩码的词。掩码的具体做法是将被选中的词替换为一个特殊的词[Mask],这样模型在训练过程中,无法得到掩码位置词的信息,需要联合上下文内容进行预测,因此提高了模型对上下文的特征提取能力。实验表明,相比在下游任务中仅利用上下文词嵌入,在大规模单语输数据上预训练的模型具有更强的表示能力。同时,对比单向预训练模型GPT,BERT这种双向编码的训练方式也展示出了更好的效果 \parinterval BERT的核心思想是通过{\small\bfnew{掩码语言模型}}(Masked Language model,MLM)\index{掩码语言模型}\index{MLM}任务进行预训练。掩码语言模型的思想类似于完形填空,随机选择输入句子中的部分词掩码,模型来预测这些被掩码的词。掩码的具体做法是将被选中的词替换为一个特殊的词[Mask],这样模型在训练过程中,无法得到掩码位置词的信息,需要联合上下文内容进行预测,因此提高了模型对上下文的特征提取能力。实验表明,相比在下游任务中仅利用上下文词嵌入,在大规模单语输数据上预训练的模型具有更强的表示能力。而使用掩妈的方式训练也给机器翻译提供了新的思路,在本章的部分内容中也会使用到类似方法
\parinterval 在神经机器翻译任务中,预训练模型可以用于初始化编码器的模型参数\upcite{DBLP:conf/emnlp/ClinchantJN19,DBLP:conf/emnlp/ImamuraS19,DBLP:conf/naacl/EdunovBA19}。之所以用在编码器而不是解码器端,主要原因在于编码器的作用主要在于特征提取,训练难度相对较高,而解码器的作用主要在于生成,和编码器提取到的表示是强依赖的,相对比较脆弱\upcite{DBLP:journals/corr/abs-1908-06259}。模型在预训练阶段的生成过程中并没有考虑到额外的表示信息,因此和神经机器翻译的编码器存在着明显的不一致问题,所以目前主流的做法是仅利用预训练模型对编码器的模型参数进行初始化。 \parinterval 在神经机器翻译任务中,预训练模型可以用于初始化编码器的模型参数\upcite{DBLP:conf/emnlp/ClinchantJN19,DBLP:conf/emnlp/ImamuraS19,DBLP:conf/naacl/EdunovBA19}。之所以用在编码器而不是解码器端,主要原因在于编码器的作用主要在于特征提取,训练难度相对较高,而解码器的作用主要在于生成,和编码器提取到的表示是强依赖的,相对比较脆弱\upcite{DBLP:journals/corr/abs-1908-06259}。模型在预训练阶段的生成过程中并没有考虑到额外的表示信息,因此和神经机器翻译的编码器存在着明显的不一致问题,所以目前主流的做法是仅利用预训练模型对编码器的模型参数进行初始化。
\parinterval 然而,在实践中发现,参数初始化的方法在一些富资源语种上提升效果并不明显,甚至反而有些下降\upcite{DBLP:journals/corr/abs-2002-06823}。原因可能在于,预训练模型可以带来显著提升的一个重要原因在于预训练阶段的训练数据规模是非常大的,因此在下游任务数据量较少的情况下帮助较大。而在一些富资源语种上,双语句对的数据量可以达到千万级别,因此简单通过预训练模型来初始化模型参数无法带来明显的提升。此外,预训练模型的训练目标并没有考虑到序列到序列的生成,与神经机器翻译的训练目标并不完全一致,两者训练得到的模型参数可能存在一些区别。 \parinterval 然而,在实践中发现,参数初始化的方法在一些富资源语种上提升效果并不明显,甚至反而会带来性能的下降\upcite{DBLP:journals/corr/abs-2002-06823}。原因可能在于,预训练阶段的训练数据规模是非常大的,因此在下游任务数据量较少的情况下帮助较大。而在一些富资源语种上,双语句对的数据量可以达到千万级别,因此简单通过预训练模型来初始化模型参数无法带来明显的提升。此外,预训练模型的训练目标并没有考虑到序列到序列的生成,与神经机器翻译的训练目标并不完全一致,两者训练得到的模型参数可能存在一些区别。
\parinterval 因此,一些做法将预训练模型和翻译模型进行融合,将预训练模型作为一个独立的模块来为编码器或者解码器提供句子级表示信息\upcite{DBLP:journals/corr/abs-2002-06823,DBLP:conf/aaai/YangW0Z00020}。另外一种做法是针对生成任务进行预训练。机器翻译是一种典型的语言生成任务,不仅包含源语言表示学习的问题,还有序列到序列的映射,以及目标端序列生成的问题,这些知识是无法单独通过(源语言)单语数据学习到的。因此,可以使用单语数据对编码器-解码器结构进行预训练\upcite{song2019mass,DBLP:conf/acl/LewisLGGMLSZ20,DBLP:conf/emnlp/QiYGLDCZ020} \parinterval 因此,一些做法将预训练模型和翻译模型进行融合,将预训练模型作为一个独立的模块来为编码器或者解码器提供句子级表示信息\upcite{DBLP:journals/corr/abs-2002-06823,DBLP:conf/aaai/YangW0Z00020}。另外一种做法是针对生成任务进行预训练。机器翻译是一种典型的语言生成任务,不仅包含源语言表示学习的问题,还有序列到序列的映射,以及目标端序列生成的问题,这些知识是无法单独通过(源语言)单语数据学习到的。因此,可以使用单语数据对编码器-解码器结构进行预训练\upcite{song2019mass,DBLP:conf/acl/LewisLGGMLSZ20,DBLP:conf/emnlp/QiYGLDCZ020}
\parinterval{\small\bfnew{掩码端到端预训练}}(MAsked Sequence to Sequence pre-training,MASS)\index{掩码端到端预训练}\index{MASS}方法为例\upcite{song2019mass},其思想与BERT十分相似,也是在预训练过程中采用掩码的方式,随机选择编码器输入句子中的连续片段替换为特殊词[Mask],然后在解码器端预测这个连续片段,如图\ref{fig:16-7} 所示。这种做法可以使得编码器端捕捉上下文信息,同时迫使解码器依赖于编码器进行自回归地生成,从而学习到编码器和解码器之间的注意力。为了适配下游的机器翻译任务,使预训练模型可以学习到不同语言的表示,MASS对不同语言的句子采用共享词汇表和模型参数的方法,利用同一个预训练模型来进行不同语言句子的预训练。通过这种方式,模型既学到了对源语言句子的编码,也学习到了对目标语言句子的生成,之后通过双语句对对预训练模型的参数进行微调,模型可以快速收敛到较好的水平。 \parinterval{\small\bfnew{掩码端到端预训练}}(MAsked Sequence to Sequence pre-training,MASS)\index{掩码端到端预训练}\index{MASS}方法为例\upcite{song2019mass},其思想与BERT十分相似,也是在预训练过程中采用掩码的方式,随机选择编码器输入句子中的连续片段替换为特殊词[Mask],然后在解码器端预测这个连续片段,如图\ref{fig:16-7} 所示。这种做法可以使得编码器端捕捉上下文信息,同时迫使解码器依赖于编码器进行自回归地生成,从而学习到编码器和解码器之间的注意力。为了适配下游的机器翻译任务,使预训练模型可以学习到不同语言的表示,MASS对不同语言的句子采用共享词汇表和模型参数的方法,利用同一个预训练模型来进行不同语言句子的预训练。通过这种方式,模型既学到了对源语言句子的编码,也学习到了对目标语言句子的生成方法,之后通过使用双语句对来对预训练模型的参数进行微调,模型可以快速收敛到较好的水平。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -235,16 +226,16 @@ ...@@ -235,16 +226,16 @@
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 此外,还有很多工作对如何将语言模型应用到神经机器翻译模型中进行了研究。研究人员分析了预训练词嵌入为何在神经机器翻译模型中有效\cite{2018When};如何在神经机器翻译模型中利用预训练的BERT模型\cite{DBLP:conf/emnlp/ClinchantJN19,DBLP:conf/emnlp/ImamuraS19,DBLP:conf/aaai/YangW0Z00020,DBLP:conf/aaai/WengYHCL20,DBLP:conf/emnlp/ImamuraS19};如何针对神经机器翻译任务进行预训练\cite{DBLP:journals/corr/abs-2001-08210,DBLP:conf/aaai/JiZDZCL20,DBLP:conf/acl/LewisLGGMLSZ20};针对机器翻译中的Code-switching问题进行预训练\cite{DBLP:journals/corr/abs-2009-08088};如何在微调过程中避免遗忘原始的语言模型任务\cite{DBLP:journals/corr/abs-2010-09403} \parinterval 此外,还有很多工作对如何将语言模型应用到神经机器翻译模型中进行了研究。研究人员分析了预训练词嵌入为何在神经机器翻译模型中有效\upcite{2018When};如何在神经机器翻译模型中利用预训练的BERT模型\upcite{DBLP:conf/emnlp/ClinchantJN19,DBLP:conf/emnlp/ImamuraS19,DBLP:conf/aaai/YangW0Z00020,DBLP:conf/aaai/WengYHCL20,DBLP:conf/emnlp/ImamuraS19};如何针对神经机器翻译任务进行预训练\upcite{DBLP:journals/corr/abs-2001-08210,DBLP:conf/aaai/JiZDZCL20,DBLP:conf/acl/LewisLGGMLSZ20};针对机器翻译中的Code-switching问题进行预训练\upcite{DBLP:journals/corr/abs-2009-08088};如何在微调过程中避免遗忘原始的语言模型任务\upcite{DBLP:journals/corr/abs-2010-09403}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsubsection{4. 多任务学习} \subsubsection{4. 多任务学习}
\parinterval 在训练一个神经网络的时候,往往会给定模型一个训练目标,希望模型通过不断训练在这个目标上表现地越来越好。我们希望模型在训练过程中可以自动提取到与训练目标相关的所有信息。然而,过分地关注单个训练目标,可能使模型忽略掉其他可能有帮助的信息,这些信息可能来自于一些其他相关的任务\upcite{DBLP:journals/corr/Ruder17a}。通过联合多个独立但相关的任务共同学习,任务之间相互``促进'',就是{\small\sffamily\bfnew{多任务学习}}\index{多任务学习}(Multitask Learning)\index{Multitask Learning}方法\upcite{DBLP:journals/corr/Ruder17a,DBLP:books/sp/98/Caruana98,liu2019multi}。多任务学习的常用做法是针对多个相关的任务,共享模型的部分参数来学习不同任务之间相似的特征,并通过特定的模块来学习每个任务独立的特征。常用的策略是对底层的模型参数进行共享,顶层的模型参数用于独立学习各个不同的任务,具体示意图可以参考\ref{subsec-15.3.2}小节中的{\red{多任务结构图}} \parinterval 在训练一个神经网络的时候,会给定模型一个训练目标,希望模型通过不断训练在这个目标上表现地越来越好。我们希望模型在训练过程中可以自动提取到与训练目标相关的所有信息。然而,过分地关注单个训练目标,可能使模型忽略掉其他可能有帮助的信息,这些信息可能来自于一些其他相关的任务\upcite{DBLP:journals/corr/Ruder17a}。通过联合多个独立但相关的任务共同学习,任务之间相互``促进'',就是{\small\sffamily\bfnew{多任务学习}}\index{多任务学习}(Multitask Learning)\index{Multitask Learning}方法\upcite{DBLP:journals/corr/Ruder17a,DBLP:books/sp/98/Caruana98,liu2019multi}。多任务学习的常用做法是针对多个相关的任务,共享模型的部分参数来学习不同任务之间相似的特征,并通过特定的模块来学习每个任务独立的特征(见\chapterfifteen)。常用的策略是对底层的模型参数进行共享,顶层的模型参数用于独立学习各个不同的任务
\parinterval 在神经机器翻译中,应用多任务学习的主要策略是将翻译任务作为主任务,同时设置一些仅使用单语数据的子任务,通过这些子任务来捕捉单语数据中的语言知识\upcite{DBLP:conf/emnlp/DomhanH17,DBLP:conf/emnlp/ZhangZ16,DBLP:journals/corr/LuongLSVK15}。一种多任务学习的方法是利用源语言单语数据,通过单个编码器对源语言数据进行建模,然后分别使用两个解码器来学习源语言排序和翻译任务。源语言排序任务是指对句子的顺序进行调整,可以通过单语数据来构造训练数据,从而使编码器训练地更加充分\upcite{DBLP:conf/emnlp/ZhangZ16},如图\ref{fig:16-8}所示。 \parinterval 在神经机器翻译中,应用多任务学习的主要策略是将翻译任务作为主任务,同时设置一些仅使用单语数据的子任务,通过这些子任务来捕捉单语数据中的语言知识\upcite{DBLP:conf/emnlp/DomhanH17,DBLP:conf/emnlp/ZhangZ16,DBLP:journals/corr/LuongLSVK15}。一种多任务学习的方法是利用源语言单语数据,通过单个编码器对源语言数据进行建模,然后分别使用两个解码器来学习源语言排序和翻译任务。源语言排序任务是指对句子的顺序进行调整,可以通过单语数据来构造训练数据,从而使编码器被训练得更加充分\upcite{DBLP:conf/emnlp/ZhangZ16},如图\ref{fig:16-8}所示。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
\centering \centering
...@@ -254,7 +245,7 @@ ...@@ -254,7 +245,7 @@
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 虽然神经翻译模型可以看作一个受限的语言模型,但生成过程中却依赖于源语言信息,因此无法直接利用目标语言单语数据进行多任务学习。针对这个问题,可以对原有翻译模型结构进行修改,在解码器底层增加一个语言模型子层,这个子层用于学习语言模型任务,与编码器端是完全独立的,如图\ref{fig:16-9}所示\upcite{DBLP:conf/emnlp/DomhanH17}。在训练过程中,可以分别将双语数据和单语数据送入翻译模型和语言模型进行计算,双语数据训练产生的梯度用于对整个模型进行参数更新,而单语数据产生的梯度只对语言模型子层进行参数更新。通过这种方式,可以有效利用单语数据使解码器端的底层网络训练地更加充分,从而提取到更有效的特征来生成翻译结果。 \parinterval 虽然神经翻译模型可以看作一种语言生成模型,但生成过程中却依赖于源语言信息,因此无法直接利用目标语言单语数据进行多任务学习。针对这个问题,可以对原有翻译模型结构进行修改,在解码器底层增加一个语言模型子层,这个子层用于学习语言模型任务,与编码器端是完全独立的,如图\ref{fig:16-9}所示\upcite{DBLP:conf/emnlp/DomhanH17}。在训练过程中,可以分别将双语数据和单语数据送入翻译模型和语言模型进行计算,双语数据训练产生的梯度用于对整个模型进行参数更新,而单语数据产生的梯度只对语言模型子层进行参数更新。通过这种方式,可以有效利用单语数据使解码器端的底层网络训练得更加充分,从而提取到更有效的特征来生成翻译结果。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -305,7 +296,7 @@ ...@@ -305,7 +296,7 @@
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsection{对偶学习} \subsection{对偶学习}
\parinterval 对称,也许是人类最喜欢的美,其始终贯穿在整个人类文明的诞生与发展之中。古语“夫美者,上下、内外、大小、远近皆无害焉,故曰美”描述的即是这样的美。在人工智能的任务中,也存在着这样的对称结构,比如机器翻译中英译汉和汉译英、图像处理中的图像标注和图像生成以及语音处理中的语音识别和文字合成等。利用这些任务的对称性质(也称对偶性),可以使互为对偶的两个任务获得更有效的反馈,从而使对应的模型相互学习、相互提高。目前,对偶学习的思想已经广泛应用于低资源机器翻译领域,其不仅能够提升在有限双语资源下的翻译模型性能({\small\bfnew{有监督对偶学习}},Supervised Dual Learning\upcite{DBLP:conf/icml/XiaQCBYL17,DBLP:conf/acl/SuHC19,DBLP:journals/ejasmp/RadzikowskiNWY19},而且能够利用未标注的单语数据来进行学习({\small\bfnew{无监督对偶学习}},Dual Unsupervised Learning\upcite{qin2020dual,DBLP:conf/iccv/YiZTG17,DBLP:journals/access/DuRZH20}。下面将一一展开讨论。 \parinterval 对称,也许是人类最喜欢的美,其始终贯穿在整个人类文明的诞生与发展之中。古语“夫美者,上下、内外、大小、远近皆无害焉,故曰美”描述的即是这样的美。在人工智能的任务中,也存在着这样的对称结构,比如机器翻译中英译汉和汉译英、图像处理中的图像标注和图像生成以及语音处理中的语音识别和文字合成等。利用这些任务的对称性质(也称对偶性),可以使互为对偶的两个任务获得更有效的反馈,从而使对应的模型相互学习、相互提高。目前,对偶学习的思想已经广泛应用于低资源机器翻译领域,其不仅能够提升在有限双语资源下的翻译模型性能({\small\bfnew{有监督对偶学习}},Supervised Dual Learning\index{Supervised Dual Learning}\upcite{DBLP:conf/icml/XiaQCBYL17,DBLP:conf/acl/SuHC19,DBLP:journals/ejasmp/RadzikowskiNWY19},而且能够利用未标注的单语数据来进行学习({\small\bfnew{无监督对偶学习}},Unsupervised Dual Learning\index{Unsupervised Dual Learning}\upcite{qin2020dual,DBLP:conf/iccv/YiZTG17,DBLP:journals/access/DuRZH20}。下面将一一展开讨论。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
...@@ -319,13 +310,13 @@ ...@@ -319,13 +310,13 @@
\label{eq:16-3} \label{eq:16-3}
\end{eqnarray} \end{eqnarray}
\parinterval 公式\eqref{eq:16-3}很自然地把两个方向的翻译模型$\funp{P}(\seq{y}|\seq{x})$$\funp{P}(\seq{x}|\seq{y})$以及两个语言模型$\funp{P}(\seq{x})$$\funp{P}(\seq{y})$联系起来:$\funp{P}(\seq{x})\funp{P}(\seq{y}|\seq{x})$应该与$\funp{P}(\seq{y})\funp{P}(\seq{x}|\seq{y})$接近,因为它们都表达了同一个联合分布$\funp{P}(\seq{x},\seq{y})$。因此,在构建训练两个方向的翻译模型的目标函数时,除了它们单独训练时各自使用的极大似然估计目标函数,可以额外增加一个目标项来鼓励两个方向的翻译模型: \parinterval 公式\eqref{eq:16-3}很自然地把两个方向的翻译模型$\funp{P}(\seq{y}|\seq{x})$$\funp{P}(\seq{x}|\seq{y})$以及两个语言模型$\funp{P}(\seq{x})$$\funp{P}(\seq{y})$联系起来:$\funp{P}(\seq{x})\funp{P}(\seq{y}|\seq{x})$应该与$\funp{P}(\seq{y})\funp{P}(\seq{x}|\seq{y})$接近,因为它们都表达了同一个联合分布$\funp{P}(\seq{x},\seq{y})$。因此,在构建训练两个方向的翻译模型的目标函数时,除了它们单独训练时各自使用的极大似然估计目标函数,可以额外增加一个目标项来鼓励两个方向的翻译模型,例如
\begin{eqnarray} \begin{eqnarray}
{L}_{\rm{dual}} & = & (\log{\funp{P}(\seq{x})} + \log{\funp{P}(\seq{y}|\seq{x})} - \log{\funp{P}(\seq{y})} - \log{\funp{P}(\seq{x}|\seq{y}))^{2}} {L}_{\rm{dual}} & = & (\log{\funp{P}(\seq{x})} + \log{\funp{P}(\seq{y}|\seq{x})} - \log{\funp{P}(\seq{y})} - \log{\funp{P}(\seq{x}|\seq{y}))^{2}}
\label{eq:16-4} \label{eq:16-4}
\end{eqnarray} \end{eqnarray}
\parinterval 通过该正则化项,我们将互为对偶的两个任务放在一块学习,通过任务对偶性加强监督学习的过程,就是有监督对偶学习\upcite{DBLP:conf/icml/XiaQCBYL17,qin2020dual}。这里,$\funp{P}(\seq{x})$$\funp{P}(\seq{y})$这两个语言模型是预先训练好的,并不参与翻译模型的训练。可以看到,对于单独的一个模型来说,其目标函数增加了与另外一个方向的模型相关的项。这样的形式与L1/L2正则化非常类似(见{\chapterthirteen}),因此可以把这个方法看作是一种任务特定的正则化的手段(由翻译任务本身的性质所启发而来)。有监督对偶学习实际上要优化下面这个损失函数: \parinterval 通过该正则化项,我们将互为对偶的两个任务放在一块学习,通过任务对偶性加强监督学习的过程,就是有监督对偶学习\upcite{DBLP:conf/icml/XiaQCBYL17,qin2020dual}。这里,$\funp{P}(\seq{x})$$\funp{P}(\seq{y})$这两个语言模型是预先训练好的,并不参与翻译模型的训练。可以看到,对于单独的一个模型来说,其目标函数增加了与另外一个方向的模型相关的项。这样的形式与L1/L2正则化非常类似(见{\chapterthirteen}),因此可以把这个方法看作是一种任务特定的正则化的手段(由翻译任务本身的性质所启发而来)。有监督对偶学习实际上要优化如下的损失函数:
\begin{eqnarray} \begin{eqnarray}
{L} & = & \log{\funp{P}(\seq{y}|\seq{x})}+\log{\funp{P}(\seq{x}|\seq{y})}+{L}_{\rm{dual}} {L} & = & \log{\funp{P}(\seq{y}|\seq{x})}+\log{\funp{P}(\seq{x}|\seq{y})}+{L}_{\rm{dual}}
\label{eq:16-5} \label{eq:16-5}
...@@ -340,16 +331,16 @@ ...@@ -340,16 +331,16 @@
\parinterval 如上一节所述,有监督的对偶学习需要使用双语数据来训练两个翻译模型。幸运的是,存在大量的单语数据可供使用。因此,如何使用这些单语数据来提升翻译模型的性能是一个关键问题。 \parinterval 如上一节所述,有监督的对偶学习需要使用双语数据来训练两个翻译模型。幸运的是,存在大量的单语数据可供使用。因此,如何使用这些单语数据来提升翻译模型的性能是一个关键问题。
\parinterval 无监督对偶学习为我们提供了一个思路\upcite{qin2020dual}。假设目前有两个比较弱的翻译模型,一个原始任务模型f将源语言句子$\seq{x}$翻译成目标语言句子$\seq{y}$和一个对偶任务模型g将目标语言句子$\seq{y}$翻译成源语言句子$\seq{x}$。翻译模型可由有限的双语训练或者使用无监督机器翻译的方法得到。如图\ref{fig:16-11}所示,无监督对偶学习的做法是,先通过原始任务模型$f$将一个源语言单语句子$x$翻译为目标语言句子$y$,由于没有参考译文,我们无法判断$y$的正确性。但通过语言模型,可以判断这个句子是否通顺、符合语法规范,这些信息可用来评估翻译模型$f$的翻译流畅性。随后,再通过对偶任务模型$g$将目标语言句子$y$再翻译为源语言句子$x^{'}$。如果模型$f$$g$的翻译性能较好,那么$x^{'}$$x$会十分相似。通过计算二者的{\small\bfnew{重构损失}}\index{重构损失}(Reconstruction Loss)\index{Reconstruction Loss},就可以优化模型$f$$g$的参数。这个过程可以多次迭代,从大量的无标注单语数据上不断提升性能。 \parinterval 无监督对偶学习为我们提供了一个思路\upcite{qin2020dual}。假设目前有两个比较弱的翻译模型,一个原始任务模型$f$将源语言句子$\seq{x}$翻译成目标语言句子$\seq{y}$,一个对偶任务模型$g$将目标语言句子$\seq{y}$翻译成源语言句子$\seq{x}$。翻译模型可由有限的双语训练或者使用无监督机器翻译的方法得到。如图\ref{fig:16-11}所示,无监督对偶学习的做法是,先通过原始任务模型$f$将一个源语言单语句子$x$翻译为目标语言句子$y$,由于没有参考译文,我们无法判断$y$的正确性。但通过语言模型,可以判断这个句子是否通顺、符合语法规范,这些信息可用来评估翻译模型$f$的翻译流畅性。随后,再通过对偶任务模型$g$将目标语言句子$y$再翻译为源语言句子$x^{'}$。如果模型$f$$g$的翻译性能较好,那么$x^{'}$$x$会十分相似。通过计算二者的{\small\bfnew{重构损失}}\index{重构损失}(Reconstruction Loss)\index{Reconstruction Loss},就可以优化模型$f$$g$的参数。这个过程可以多次迭代,从大量的无标注单语数据上不断提升性能。
\parinterval 从统计建模的角度看,如果在有监督对偶学习对联合分布$\funp{P}(y|x)$建模的基础上把$y$看作一个隐变量,那么可以得到边缘分布$\funp{P}(x)$,也就是关于$x$的语言模型: \parinterval 从统计建模的角度看,如果在有监督对偶学习对联合分布$\funp{P}(y|x)$建模的基础上把$y$看作一个隐变量,那么可以得到边缘分布$\funp{P}(x)$,也就是关于$x$的语言模型:
\begin{eqnarray} \begin{eqnarray}
\funp{P}(\seq{x}) &=& \sum_{\seq{y}}\funp{P}(\seq{x},\seq{y}) \nonumber \\ \funp{P}(\seq{x}) &=& \sum_{\seq{y}}\funp{P}(\seq{x},\seq{y}) \nonumber \\
&=& \sum_{\seq{y}}\funp{P}(\seq{x}|\seq{y})\funp{P}(\seq{y}|\seq{x}) & \ge & \sum_{\seq{y}}\funp{P}(\seq{x}|\seq{y})\funp{P}(\seq{y}|\seq{x})
\label{eq:16-6} \label{eq:16-6}
\end{eqnarray} \end{eqnarray}
\parinterval 公式\eqref{eq:16-6}假设$\funp{P}(\seq{x}|\seq{y})=\funp{P}(\seq{x}|\seq{x},\seq{y})$。这个假设显然是成立的,因为当知道一个句子的译文时,并不需要知道它的源文就可以把它翻译回去。如果直接优化(最大化)公式\eqref{eq:16-6}右侧,相当于对这个等式$\funp{P}(\seq{x}|\seq{y})$$\funp{P}(\seq{y}|\seq{x})$施加了{\small\sffamily\bfnew{循环一致性}}\index{循环一致性}(Circle Consistency)\index{Circle Consistency}的约束\upcite{DBLP:conf/iccv/ZhuPIE17},也就是对于一个句子$\seq{x}$,通过$\funp{P}(\seq{y}|\seq{x})$把它翻译成$\seq{y}$后,根据$\funp{P}(\seq{x}|\seq{y})$应该能重新翻译出$\seq{x}$,如图\ref{fig:16-11}所示。公式\eqref{eq:16-6}给出了同时优化$\funp{P}(\seq{x}|\seq{y})$$\funp{P}(\seq{y}|\seq{x})$的一个目标函数形式。这个目标函数的一个额外的好处是它本质上是在学习一个由$\funp{P}(\seq{x}|\seq{y})$$\funp{P}(\seq{y}|\seq{x})$组成的语言模型$\funp{P}(\seq{x})$,而$\funp{P}(\seq{x})$的学习依赖于单语数据,这意味着这个目标函数可以很自然地直接使用大量单语数据来同时训练两个翻译模型。相同的结论可以推广到$\funp{P}(\seq{y})$\upcite{DBLP:conf/nips/HeXQWYLM16} \parinterval 公式\eqref{eq:16-6}使用了$\funp{P}(\seq{x}|\seq{x},\seq{y}) \ge \funp{P}(\seq{x}|\seq{y})$。这样,$\sum_{\seq{y}}\funp{P}(\seq{x}|\seq{y})\funp{P}(\seq{y}|\seq{x})$描述了$\funp{P}(\seq{x})$的一个下界。因此,如果直接优化(最大化)公式\eqref{eq:16-6}右端,相当于对这个等式$\funp{P}(\seq{x}|\seq{y})$$\funp{P}(\seq{y}|\seq{x})$施加了{\small\sffamily\bfnew{循环一致性}}\index{循环一致性}(Circle Consistency)\index{Circle Consistency}的约束\upcite{DBLP:conf/iccv/ZhuPIE17},也就是对于一个句子$\seq{x}$,通过$\funp{P}(\seq{y}|\seq{x})$把它翻译成$\seq{y}$后,根据$\funp{P}(\seq{x}|\seq{y})$应该能重新翻译出$\seq{x}$,如图\ref{fig:16-11}所示。公式\eqref{eq:16-6}给出了同时优化$\funp{P}(\seq{x}|\seq{y})$$\funp{P}(\seq{y}|\seq{x})$的一个目标函数形式。这个目标函数的一个额外的好处是它本质上是在学习一个由$\funp{P}(\seq{x}|\seq{y})$$\funp{P}(\seq{y}|\seq{x})$组成的语言模型$\funp{P}(\seq{x})$,而$\funp{P}(\seq{x})$的学习依赖于单语数据,这意味着这个目标函数可以很自然地直接使用大量单语数据来同时训练两个翻译模型。相同的结论可以推广到$\funp{P}(\seq{y})$\upcite{DBLP:conf/nips/HeXQWYLM16}
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
...@@ -389,7 +380,7 @@ ...@@ -389,7 +380,7 @@
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval节将对上面三种典型方法进行讨论。 \parinterval 本节将对上面三种典型方法进行讨论。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION % NEW SUB-SECTION
...@@ -613,15 +604,15 @@ ...@@ -613,15 +604,15 @@
\noindent 其中, $\operatorname{SVD}(\cdot)$表示奇异值分解,$\mathbi{Y}'$$\mathbi{X}'$中的单词来自$D$且行对齐。利用上式可以获得新的$\mathbi{W}$,通过$\mathbi{W}$可以归纳出新的$D$,如此迭代进行微调最后即可以得到收敛的$D$ \noindent 其中, $\operatorname{SVD}(\cdot)$表示奇异值分解,$\mathbi{Y}'$$\mathbi{X}'$中的单词来自$D$且行对齐。利用上式可以获得新的$\mathbi{W}$,通过$\mathbi{W}$可以归纳出新的$D$,如此迭代进行微调最后即可以得到收敛的$D$
\parinterval 较早的无监督方法是基于GAN的方法\upcite{DBLP:conf/acl/ZhangLLS17,DBLP:conf/emnlp/ZhangLLS17,DBLP:conf/iclr/LampleCRDJ18},这是一个很自然的想法,利用生成器产生映射然后用判别器来区别两个空间,尽管它取得了不错的效果,然而研究表明GAN缺乏稳定性,容易在低资源语言对上失败\upcite{hartmann2018empirical},因此有不少改进的工作,比如:利用{\small\bfnew{变分自编码器}}\index{变分自编码器}(Variational Autoencoders,VAEs)\index{Variational Autoencoders}来捕获更深层次的语义信息并结合对抗训练的方法\upcite{DBLP:conf/emnlp/DouZH18,DBLP:conf/naacl/MohiuddinJ19};通过改进最近邻点的度量函数来提升性能的方法\upcite{DBLP:conf/acl/HuangQC19,DBLP:conf/emnlp/JoulinBMJG18};利用多语言信号来提升性能的方法\upcite{DBLP:conf/emnlp/ChenC18,DBLP:conf/emnlp/TaitelbaumCG19,DBLP:journals/corr/abs-1811-01124,DBLP:conf/naacl/HeymanVVM19};也有一些工作舍弃GAN,通过直接优化度量空间距离来进行匹配的方法\upcite{DBLP:conf/emnlp/HoshenW18,DBLP:conf/emnlp/XuYOW18,DBLP:conf/emnlp/Alvarez-MelisJ18,DBLP:conf/emnlp/MukherjeeYH18}。此外,也有另外一些工作是旨在分析或提升无监督词典归纳的鲁棒性。比如通过大量实验来分析无监督词典归纳任务的局限性、难点以及挑战\upcite{DBLP:conf/acl/SogaardVR18,DBLP:conf/acl/OrmazabalALSA19,DBLP:conf/emnlp/VulicGRK19,DBLP:conf/emnlp/HartmannKS18};分析和对比目前各种无监督方法的性能\upcite{DBLP:conf/nips/HartmannKS19};通过实验分析指出目前所用的数据集存在的问题\upcite{DBLP:conf/emnlp/Kementchedjhieva19} \parinterval 较早的无监督方法是基于GAN的方法\upcite{DBLP:conf/acl/ZhangLLS17,DBLP:conf/emnlp/ZhangLLS17,DBLP:conf/iclr/LampleCRDJ18},这是一个很自然的想法,利用生成器产生映射然后用判别器来区别两个空间,尽管它取得了不错的效果,然而研究表明GAN缺乏稳定性,容易在低资源语言对上失败\upcite{hartmann2018empirical},因此有不少改进的工作,比如:利用{\small\bfnew{变分自编码器}}\index{变分自编码器}(Variational Autoencoders,VAEs)\index{Variational Autoencoders}来捕获更深层次的语义信息并结合对抗训练的方法\upcite{DBLP:conf/emnlp/DouZH18,DBLP:conf/naacl/MohiuddinJ19};通过改进最近邻点的度量函数来提升性能的方法\upcite{DBLP:conf/acl/HuangQC19,DBLP:conf/emnlp/JoulinBMJG18};利用多语言信号来提升性能的方法\upcite{DBLP:conf/emnlp/ChenC18,DBLP:conf/emnlp/TaitelbaumCG19,DBLP:journals/corr/abs-1811-01124,DBLP:conf/naacl/HeymanVVM19};也有一些工作舍弃GAN,通过直接优化度量空间距离来进行匹配的方法\upcite{DBLP:conf/emnlp/HoshenW18,DBLP:conf/emnlp/XuYOW18,DBLP:conf/emnlp/Alvarez-MelisJ18,DBLP:conf/emnlp/MukherjeeYH18}。此外,也有另外一些工作是旨在分析或提升无监督词典归纳的健壮性。比如通过大量实验来分析无监督词典归纳任务的局限性、难点以及挑战\upcite{DBLP:conf/acl/SogaardVR18,DBLP:conf/acl/OrmazabalALSA19,DBLP:conf/emnlp/VulicGRK19,DBLP:conf/emnlp/HartmannKS18};分析和对比目前各种无监督方法的性能\upcite{DBLP:conf/nips/HartmannKS19};通过实验分析指出目前所用的数据集存在的问题\upcite{DBLP:conf/emnlp/Kementchedjhieva19}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsubsection{2. 鲁棒性问题} \subsubsection{2. 健壮性问题}
\parinterval 目前很多无监督词典归纳方法在相似语言对比如英-法,英-德已经取得不错的结果,然而在远距离语言对比如英-中,英-日等性能仍然很差\upcite{DBLP:conf/emnlp/VulicGRK19,A2020Li}。无监督词典归纳的鲁棒性仍然存在巨大的挑战。这有多个层面的原因: \parinterval 目前很多无监督词典归纳方法在相似语言对比如英-法,英-德已经取得不错的结果,然而在远距离语言对比如英-中,英-日等性能仍然很差\upcite{DBLP:conf/emnlp/VulicGRK19,A2020Li}。无监督词典归纳的健壮性仍然存在巨大的挑战。这有多个层面的原因:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
...@@ -635,7 +626,7 @@ ...@@ -635,7 +626,7 @@
\vspace{0.5em} \vspace{0.5em}
\end{itemize} \end{itemize}
\parinterval 无监督方法的鲁棒性是一个很难解决的问题。对于词典推断这个任务来说,是否有必要无监督仍然值得商榷,因为其作为一个底层任务,不仅可以利用词嵌入,还可以利用单语、甚至是双语信息。此外,基于弱监督的方法代价也不是很大,只需要数千个词典即可,有了监督信号的引导,鲁棒性问题就能得到一定的缓解。 \parinterval 无监督方法的健壮性是一个很难解决的问题。对于词典推断这个任务来说,是否有必要无监督仍然值得商榷,因为其作为一个底层任务,不仅可以利用词嵌入,还可以利用单语、甚至是双语信息。此外,基于弱监督的方法代价也不是很大,只需要数千个词典即可,有了监督信号的引导,健壮性问题就能得到一定的缓解。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SECTION 16.4.2 % NEW SUB-SECTION 16.4.2
...@@ -824,7 +815,7 @@ P(\mathbi{y}|\mathbi{x}) & = & \frac{\mathrm{cos}(\mathbi{x},\mathbi{y})/\tau}{\ ...@@ -824,7 +815,7 @@ P(\mathbi{y}|\mathbi{x}) & = & \frac{\mathrm{cos}(\mathbi{x},\mathbi{y})/\tau}{\
\parinterval 在统计机器翻译时代,使用基于数据或模型的方法来提升机器翻译模型在特定领域上的翻译性能就已经备受关注,而这些技术和思想也为神经机器翻译中的领域适应技术提供了参考。 \parinterval 在统计机器翻译时代,使用基于数据或模型的方法来提升机器翻译模型在特定领域上的翻译性能就已经备受关注,而这些技术和思想也为神经机器翻译中的领域适应技术提供了参考。
\parinterval 统计机器翻译中,领域适应可以分为基于混合模型的方法\upcite{DBLP:conf/wmt/FosterK07,DBLP:conf/iwslt/BisazzaRF11,niehues2012detailed,DBLP:conf/acl/SennrichSA13,joty2015using,imamura2016multi}、基于数据加权的方法\upcite{DBLP:conf/emnlp/MatsoukasRZ09,DBLP:conf/emnlp/FosterGK10,shah2012general,DBLP:conf/iwslt/MansourN12,DBLP:conf/cncl/ZhouCZ15}、基于数据选择的方法\upcite{DBLP:conf/lrec/EckVW04,DBLP:conf/coling/ZhaoEV04,DBLP:conf/acl/MooreL10,DBLP:conf/acl/DuhNST13,DBLP:conf/coling/HoangS14,joty2015using,chen2016bilingual}和基于伪数据的方法\upcite{DBLP:conf/iwslt/Ueffing06,DBLP:conf/coling/WuWZ08,DBLP:conf/iwslt/Schwenk08,DBLP:conf/wmt/BertoldiF09,DBLP:conf/wmt/LambertSSA11},本小节将对这四种方法进行简单介绍。 \parinterval 统计机器翻译中,领域适应可以分为基于混合模型的方法\upcite{DBLP:conf/iwslt/BisazzaRF11,niehues2012detailed,DBLP:conf/acl/SennrichSA13}、基于数据加权的方法\upcite{DBLP:conf/emnlp/MatsoukasRZ09,DBLP:conf/emnlp/FosterGK10,shah2012general}、基于数据选择的方法\upcite{DBLP:conf/lrec/EckVW04,DBLP:conf/acl/MooreL10,DBLP:conf/acl/DuhNST13,DBLP:conf/coling/HoangS14}和基于伪数据的方法\upcite{DBLP:conf/iwslt/Ueffing06,DBLP:conf/coling/WuWZ08,DBLP:conf/iwslt/Schwenk08,DBLP:conf/wmt/BertoldiF09},本节将对这四种方法进行简单介绍。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
...@@ -864,7 +855,7 @@ P(\mathbi{y}|\mathbi{x}) & = & \frac{\mathrm{cos}(\mathbi{x},\mathbi{y})/\tau}{\ ...@@ -864,7 +855,7 @@ P(\mathbi{y}|\mathbi{x}) & = & \frac{\mathrm{cos}(\mathbi{x},\mathbi{y})/\tau}{\
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
\subsubsection{3. 基于数据选择的方法} \subsubsection{3. 基于数据选择的方法}
\parinterval 源领域大规模的双语数据中通常会包含一些和目标领域相似的句子,基于数据选择的方法通过相似度函数选择出与目标领域相似的源领域数据,再把选择出的源领域数据与原始目标领域数据进行混合,之后训练模型,增加目标领域的双语数据规模,从而提高模型在目标领域的性能。相似度可以通过语言模型\upcite{DBLP:conf/lrec/EckVW04,DBLP:conf/coling/ZhaoEV04,moore2010intelligent,DBLP:conf/acl/DuhNST13}、 多模型联合\upcite{DBLP:conf/coling/HoangS14,joty2015using}、卷积神经网络\upcite{chen2016bilingual}等方法进行计算。 \parinterval 源领域大规模的双语数据中通常会包含一些和目标领域相似的句子,基于数据选择的方法通过相似度函数选择出与目标领域相似的源领域数据,再把选择出的源领域数据与原始目标领域数据进行混合,之后训练模型,增加目标领域的双语数据规模,从而提高模型在目标领域的性能。相似度可以通过语言模型\upcite{DBLP:conf/lrec/EckVW04,DBLP:conf/coling/ZhaoEV04,DBLP:conf/acl/DuhNST13}、 多模型联合\upcite{DBLP:conf/coling/HoangS14,joty2015using}、卷积神经网络\upcite{chen2016bilingual}等方法进行计算。
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
...@@ -891,7 +882,7 @@ P(\mathbi{y}|\mathbi{x}) & = & \frac{\mathrm{cos}(\mathbi{x},\mathbi{y})/\tau}{\ ...@@ -891,7 +882,7 @@ P(\mathbi{y}|\mathbi{x}) & = & \frac{\mathrm{cos}(\mathbi{x},\mathbi{y})/\tau}{\
\subsubsection{1. 基于多领域数据的方法} \subsubsection{1. 基于多领域数据的方法}
\parinterval 一种简单的思路是利用其他领域的数据来辅助低资源领域上的模型训练,即基于多领域数据的领域适应\upcite{DBLP:conf/acl/ChuDK17,DBLP:journals/corr/abs-1708-08712,DBLP:conf/acl/WangTNYCP20,DBLP:conf/acl/JiangLWZ20}。实际上,多领域建模也可以看作是一种多语言建模问题(相关内容见本章\ref{multilingual-translation-model}节)。通过借助其他相似领域的训练数据,可以缓解目标领域数据缺乏的问题。比如,想要训练网络小说领域的翻译系统,可以通过加入文学、字幕等领域的翻译数据来增加数据量。 \parinterval 一种简单的思路是利用其他领域的数据来辅助低资源领域上的模型训练,即基于多领域数据的领域适应\upcite{DBLP:journals/corr/abs-1708-08712,DBLP:conf/acl/WangTNYCP20,DBLP:conf/acl/JiangLWZ20}。实际上,多领域建模也可以看作是一种多语言建模问题(相关内容见本章\ref{multilingual-translation-model}节)。通过借助其他相似领域的训练数据,可以缓解目标领域数据缺乏的问题。比如,想要训练网络小说领域的翻译系统,可以通过加入文学、字幕等领域的翻译数据来增加数据量。
\parinterval 但在神经机器翻译中,多领域数据不平衡问题也会导致数据量较少的领域训练不充分,带来较低的翻译品质。目前比较常用的多领域数据方法是在数据中加入标签来提高神经机器翻译模型对不同领域的区分能力\upcite{DBLP:conf/acl/ChuDK17},该方法主要通过两种策略来缓解领域不平衡问题: \parinterval 但在神经机器翻译中,多领域数据不平衡问题也会导致数据量较少的领域训练不充分,带来较低的翻译品质。目前比较常用的多领域数据方法是在数据中加入标签来提高神经机器翻译模型对不同领域的区分能力\upcite{DBLP:conf/acl/ChuDK17},该方法主要通过两种策略来缓解领域不平衡问题:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论