Commit b2b3e6cc by 曹润柘

mirror update

parent 61c7b92e
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\tikzstyle{node}=[rounded corners=2pt,draw,minimum width=5em,minimum height=2em,drop shadow,font=\footnotesize]
\node[node,fill=blue!20] (nmt1) at (0,0){NMT系统1};
\node[node,anchor=west,fill=yellow!20] (nmt2) at ([xshift=1em]nmt1.east){NMT系统2};
\node[node,anchor=west,fill=red!20] (nmt3) at ([xshift=1em]nmt2.east){NMT系统3};
\node[node,anchor=south,fill=blue!20] (n1) at ([yshift=2.4em]nmt1.north){我不悦};
\node[node,anchor=west,fill=yellow!20] (n2) at ([xshift=1em]n1.east){我不开心};
\node[node,anchor=west,fill=red!20] (n3) at ([xshift=1em]n2.east){吾怀忳忳};
\node[node,anchor=south,fill=green!20,minimum height=1.6em] (task1) at ([yshift=2.6em]n2.north){不同任务};
\node[node,anchor=west,fill=green!20,minimum height=1.6em] (task2) at ([xshift=8em]task1.east){源任务};
\node[node,anchor=north,minimum height=3.2em,fill=orange!20] (n4) at ([yshift=-2em]task2.south){};
\node[draw,anchor=north,cylinder,shape border rotate=90,minimum width=3em,aspect=0.4,fill=orange!20] (kd) at ([yshift=-1.7em]n4.south){\footnotesize 知识};
\node[draw,minimum width=4em,font=\scriptsize,anchor=north,inner ysep=2pt,fill=blue!20] at ([yshift=-2.35em]task2.south){我不悦};
\node[draw,minimum width=4em,font=\scriptsize,anchor=north,inner ysep=2pt,fill=yellow!20] at ([yshift=-3.75em]task2.south){我不开心};
\node[node,anchor=west,fill=green!20,minimum height=1.6em] (task3) at ([xshift=3em]task2.east){目标任务};
\node[node,anchor=north,fill=red!20] (n5) at ([yshift=-2.5em]task3.south){吾怀忳忳};
\node[node,anchor=north,fill=red!20] (sys) at ([yshift=-2.5em]n5.south){学习系统};
\draw[->,thick] ([yshift=-0.2em,xshift=-0.7em]task1.-145) -- node[left,font=\scriptsize,yshift=0.2em]{书面语}([yshift=0.2em]n1.90);
\draw[->,thick] ([yshift=-0.2em]task1.-90) -- node[right,font=\scriptsize,yshift=0.2em,xshift=-0.2em]{口语}([yshift=0.2em]n2.90);
\draw[->,thick] ([yshift=-0.2em,xshift=0.7em]task1.-45) -- node[right,font=\scriptsize,yshift=0.2em]{文言文}([yshift=0.2em]n3.90);
\draw[->,thick] ([yshift=-0.2em]task2.-90) -- ([yshift=0.2em]n4.90);
\draw[->,thick] ([yshift=-0.2em]task3.-90) -- ([yshift=0.2em]n5.90);
\draw[->,thick] ([yshift=-0.2em]n1.-90) -- ([yshift=0.2em]nmt1.90);
\draw[->,thick] ([yshift=-0.2em]n2.-90) -- ([yshift=0.2em]nmt2.90);
\draw[->,thick] ([yshift=-0.2em]n3.-90) -- ([yshift=0.2em]nmt3.90);
\draw[->,thick] ([yshift=-0.2em]n4.-90) -- ([yshift=0.2em]kd.90);
\draw[->,thick] ([yshift=-0.2em]n5.-90) -- ([yshift=0.2em]sys.90);
\draw[->,thick] ([yshift=0.3em,xshift=0.2em]kd.0) -- ([yshift=-0.2em,xshift=-0.2em]sys.180);
\end{tikzpicture}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\node[draw,circle,inner sep=2pt,minimum size=2em,fill=blue!20] (x) at (0,0) {$\seq{x}$};
\node[draw,circle,inner sep=2pt,minimum size=2em,fill=red!15] (p) at (0,-2.4) {$\seq{p}$};
\node[draw,circle,inner sep=2pt,minimum size=2em,fill=blue!20] (y) at (2.4,-1.2) {$\seq{y}$};
\draw[-,dashed,thick,black!50] (x.-90) -- (p.90);
\draw[-,dashed,thick,black!50] (p.0) -- (y.-135);
\draw[->,out=0,in=125,thick] (x.0) to node[above]{$\funp{P}(\seq{y}|\seq{x})$}(y.135);
\draw[->,out=0,in=-125,thick] (p.0) to node[below,yshift=-0.1em]{$\funp{P}(\seq{y}|\seq{p})$}(y.-135);
\end{tikzpicture}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\tikzstyle{lan}=[font=\footnotesize,inner ysep=2pt,minimum height=1em]
\node[minimum height=3em,minimum width=8em,fill=orange!20,draw,rounded corners=2pt,align=center] (sys) at (0,0){多语言 \\ 单模型系统};
\node[draw,font=\footnotesize,minimum width=4em,fill=blue!20,rounded corners=1pt] (en) at (-3em,4em){英语};
\node[draw,font=\footnotesize,minimum width=4em,fill=blue!20,rounded corners=1pt] (fr) at (3em,4em){法语};
\node[minimum width=4em] at (6.6em,4em){$\dots$};
\node[draw,font=\footnotesize,minimum width=4em,fill=yellow!20,rounded corners=1pt] (de) at (-3em,-4em){德语};
\node[draw,font=\footnotesize,minimum width=4em,fill=yellow!20,rounded corners=1pt] (sp) at (3em,-4em){西班牙语};
\node[minimum width=4em] at (6.6em,-4em){$\dots$};
\draw[->,thick] (en.-90) -- ([xshift=-1em]sys.90);
\draw[->,thick] (fr.-90) -- ([xshift=1em]sys.90);
\draw[->,thick] ([xshift=-1em]sys.-90) -- (de.90);
\draw[->,thick] ([xshift=1em]sys.-90) -- (sp.90);
\node[font=\footnotesize] (train) at (11em,7em) {\small\bfnew{训练阶段:}};
\node[anchor=north,font=\footnotesize] (pair1) at ([yshift=-1em,xshift=1em]train.south) {双语句对1:};
\node[anchor=west,draw=blue!40,lan,minimum width=9.8em,fill=blue!20] (box1) at ([yshift=.7em,xshift=0.4em]pair1.east) {};
\node[anchor=west,lan] at ([yshift=.7em,xshift=0.4em]pair1.east) {英语:{\color{red}<spanish>} \ hello};
\node[anchor=west,draw=yellow!40,lan,minimum width=9.8em,fill=yellow!20] (box2) at ([yshift=-.7em,xshift=0.4em]pair1.east) {};
\node[anchor=west,lan] at ([yshift=-.7em,xshift=0.4em]pair1.east) {西班牙语:hola};
\node[anchor=north,font=\footnotesize] (pair2) at ([yshift=-4.5em,xshift=1em]train.south) {双语句对2:};
\node[anchor=west,draw=blue!40,lan,minimum width=9.8em,fill=blue!20] (box3) at ([yshift=.7em,xshift=0.4em]pair2.east) {};
\node[anchor=west,lan] at ([yshift=.7em,xshift=0.4em]pair2.east) {法语:{\color{red}<german>} \ Bonjour};
\node[anchor=west,draw=yellow!40,lan,minimum width=9.8em,fill=yellow!20] (box4) at ([yshift=-.7em,xshift=0.4em]pair2.east) {};
\node[anchor=west,lan] at ([yshift=-.7em,xshift=0.4em]pair2.east) {德语:Hallo};
\node[anchor=north,font=\footnotesize] (decode) at ([yshift=-8em]train.south) {\small\bfnew{解码阶段:}};
\node[anchor=north,font=\footnotesize] (input) at ([yshift=-0.6em]decode.south) {输入:};
\node[anchor=west,draw=blue!40,lan,minimum width=9.8em,fill=blue!20] (box5) at ([xshift=0.4em]input.east) {};
\node[anchor=west,lan] at ([xshift=0.4em]input.east) {英语:{\color{red}<german>} \ hello};
\node[anchor=north,font=\footnotesize] (output) at ([yshift=-2.6em]decode.south) {输出:};
\node[anchor=west,draw=yellow!40,lan,minimum width=9.8em,fill=yellow!20] (box6) at ([xshift=0.4em]output.east) {};
\node[anchor=west,lan] at ([xshift=0.4em]output.east) {德语:Hallo};
\node[anchor=north,lan,minimum width=9.8em] (box7) at ([yshift=-2em]box4.south) {};
\begin{pgfonlayer}{background}
\node[fill=red!15,draw=red!30,rounded corners=2pt,inner ysep=6pt,line width=1pt][fit=(train)(box4)]{};
\node[fill=green!20,,draw=green!40,rounded corners=2pt,inner ysep=6pt,line width=1pt][fit=(decode)(box7)(box6)]{};
\end{pgfonlayer}
\end{tikzpicture}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\tikzstyle{node}=[rounded corners=4pt,draw,minimum height=3em,drop shadow,font=\footnotesize]
\node[node,minimum width=6em,minimum height=2.4em,fill=blue!20] (encoder1) at (0,0){\small 编码器};
\node[node,anchor=west,minimum width=6em,minimum height=2.4em,fill=blue!20] (encoder2) at ([xshift=4em,yshift=0em]encoder1.east){\small 编码器};
\node[node,anchor=west,minimum width=6em,minimum height=2.4em,fill=red!20] (encoder3) at ([xshift=3em]encoder2.east){\small 编码器};
\node[node,anchor=north,minimum width=6em,minimum height=2.4em,fill=blue!20] (decoder1) at ([yshift=-3em]encoder1.south){\small 解码器};
\node[node,anchor=west,minimum width=6em,minimum height=2.4em,fill=blue!20] (decoder2) at ([xshift=4em,yshift=0em]decoder1.east){\small 解码器};
\node[node,anchor=west,minimum width=6em,minimum height=2.4em,fill=red!20] (decoder3) at ([xshift=3em]decoder2.east){\small 解码器};
\node[anchor=north,font=\scriptsize,fill=yellow!20] (w1) at ([yshift=-1.6em]decoder1.south){知识 \ 就是 \ 力量 \ \ <EOS>};
\node[anchor=north,font=\scriptsize,fill=green!20] (w3) at ([yshift=-1.6em]decoder3.south){Wissen \ ist \ Machit \ . \ <EOS>};
\node[anchor=south,font=\scriptsize,fill=orange!20] (w2) at ([yshift=1.6em]encoder1.north){Knowledge \ is \ power \ . };
\node[anchor=south,font=\scriptsize,fill=orange!20] (w4) at ([yshift=1.6em]encoder3.north){Knowledge \ is \ power \ . };
\draw[->,thick] (decoder1.-90) -- (w1.north);
\draw[->,thick] (decoder3.-90) -- (w3.north);
\draw[->,thick] (w2.-90) -- (encoder1.90);
\draw[->,thick] (w4.-90) -- (encoder3.90);
\node [anchor=north,single arrow,minimum height=2.2em,fill=blue!20,rotate=-90] (arrow1) at ([yshift=-1.4em,xshift=0.4em]encoder1.south) {};
\node [anchor=north,single arrow,minimum height=2.2em,fill=blue!20,rotate=-90] (arrow2) at ([yshift=-1.4em,xshift=0.4em]encoder2.south) {};
\node [anchor=north,single arrow,minimum height=2.2em,fill=red!20,rotate=-90] (arrow3) at ([yshift=-1.4em,xshift=0.4em]encoder3.south) {};
\node[anchor=south,yshift=3.4em] at (encoder1.north){\small\bfnew{父模型}};
\node[anchor=south,yshift=3.4em] at (encoder3.north){\small\bfnew{子模型}};
\draw[->,dash pattern=on 3pt off 2pt,thick] ([yshift=0em]encoder1.0) -- node[above,font=\scriptsize]{参数复用}(encoder2.180);
\draw[->,dash pattern=on 3pt off 2pt,thick] (encoder2.0) -- node[above,font=\scriptsize]{微调}(encoder3.180);
\draw[->,dash pattern=on 3pt off 2pt,thick] ([yshift=0em]decoder1.0) -- node[above,font=\scriptsize]{参数复用}(decoder2.180);
\draw[->,dash pattern=on 3pt off 2pt,thick] (decoder2.0) -- node[above,font=\scriptsize]{微调}(decoder3.180);
\end{tikzpicture}
%%% outline
%-------------------------------------------------------------------------
\begin{tikzpicture}
\node[draw,circle,inner sep=2pt,minimum size=2em,fill=blue!20] (x) at (0,0) {$\seq{x}$};
\node[draw,circle,inner sep=2pt,minimum size=2em,fill=red!15] (p) at (2,0) {$\seq{p}$};
\node[draw,circle,inner sep=2pt,minimum size=2em,fill=blue!20] (y) at (4,0) {$\seq{y}$};
\draw[-,dashed,thick,black!50] (x.0) -- (p.180);
\draw[-,dashed,thick,black!50] (p.0) -- (y.180);
\draw[->,out=90,in=90,thick] (x.90) to node[above]{$\funp{P}(\seq{p}|\seq{x})$}(p.90);
\draw[->,out=90,in=90,thick] (p.90) to node[above]{$\funp{P}(\seq{y}|\seq{p})$}(y.90);
\end{tikzpicture}
......@@ -167,10 +167,10 @@
\subsubsection{1. 语言模型在目标端的融合}{\color{red}许:这部分介绍有点详细,跟其他部分的风格有点不统一,是否需要重新组织一下?}{\color{blue} 我觉得可以稍微精简一下,特别是低下那个图,如果说不清楚就不用说了,不画就行。要不说的内容多,没有介绍清楚,反倒造成读者的误解!}
\parinterval 融合目标语言端的语言模型是一种最直接的使用单语数据的方法\upcite{2015OnGulcehre,DBLP:journals/csl/GulcehreFXCB17,DBLP:conf/wmt/StahlbergCS18}。实际上,神经机器翻译模型本身也具备了语言模型的作用,因为在解码器本质上也是一个语言模型,用于描述生成译文词串的规律。类似于语言模型,神经机器翻译模型可以自回归地生成翻译结果。对于一个双语句对$(\mathbi{x}, \mathbi{y})$,神经机器翻译模型根据源语言句子$\mathbi{x}$和前面生成的词来预测当前位置词的概率分布:
\parinterval 融合目标语言端的语言模型是一种最直接的使用单语数据的方法\upcite{2015OnGulcehre,DBLP:journals/csl/GulcehreFXCB17,DBLP:conf/wmt/StahlbergCS18}。实际上,神经机器翻译模型本身也具备了语言模型的作用,因为在解码器本质上也是一个语言模型,用于描述生成译文词串的规律。类似于语言模型,神经机器翻译模型可以自回归地生成翻译结果。对于一个双语句对$(\seq{x}, \seq{y})$,神经机器翻译模型根据源语言句子$\seq{x}$和前面生成的词来预测当前位置词的概率分布:
\begin{eqnarray}
\log{P(\mathbi{y} | \mathbi{x}; \theta)} & = & \sum_{t}{\log{P(y_t | \mathbi{x}, {\mathbi{y}}_{<t}; \theta)}}
\log{P(\seq{y} | \seq{x}; \theta)} & = & \sum_{t}{\log{P(y_t | \seq{x}, {\seq{y}}_{<t}; \theta)}}
\label{eq:16-1-xc}
\end{eqnarray}
......@@ -187,7 +187,7 @@
\parinterval 浅融合通过对神经机器翻译模型和语言模型的预测概率进行插值来得到最终的预测概率:
\begin{eqnarray}
\log{\funp{P}(y_t | \mathbi{x}, \mathbi{y}_{<t})}& = & \log{\funp{P}(y_t | \mathbi{x}, \mathbi{y}_{<t}; \theta_{TM})} + \beta \log{\funp{P}(y_t | \mathbi{y}_{<t}; \theta_{LM})}
\log{\funp{P}(y_t | \seq{x}, \seq{y}_{<t})}& = & \log{\funp{P}(y_t | \seq{x}, \seq{y}_{<t}; \theta_{TM})} + \beta \log{\funp{P}(y_t | \seq{y}_{<t}; \theta_{LM})}
\label{eq:16-2-xc}
\end{eqnarray}
......@@ -197,7 +197,7 @@
\parinterval 深融合的预测方式为:
\begin{eqnarray}
\log{\funp{P}(y_t | \mathbi{x}, \mathbi{y}_{<t})}& = & \log{\funp{P}(y_t | \mathbi{x}, \mathbi{y}_{<t}; s_{t})}
\log{\funp{P}(y_t | \seq{x}, \seq{y}_{<t})}& = & \log{\funp{P}(y_t | \seq{x}, \seq{y}_{<t}; s_{t})}
\label{eq:16-3-xc}
\end{eqnarray}
......@@ -308,16 +308,16 @@ g_{t}& = & \sigma (w^{T}s_{t}^{TM} + b)
\subsection{双向训练}
\parinterval 回顾神经机器翻译系统的建模过程,给定一个互译的句对$(\mathbi{x},\mathbi{y})$,一个从源语言句子$\mathbi{x}$到目标语言句子$\mathbi{y}$的翻译被表示为求条件概率$\funp{P}(\mathbi{y}|\mathbi{x})$的问题。类似地,一个从目标语言句子$\mathbi{y}$到源语言句子$\mathbi{x}$的翻译可以表示为$\funp{P}(\mathbi{x}|\mathbi{y})$。通常来说,神经机器翻译的训练一次只得到一个方向的模型,也就是$\funp{P}(\mathbi{y}|\mathbi{x})$或者$\funp{P}(\mathbi{x}|\mathbi{y})$。这意味着$\funp{P}(\mathbi{y}|\mathbi{x})$$\funp{P}(\mathbi{x}|\mathbi{y})$之间是互相独立的。$\funp{P}(\mathbi{y}|\mathbi{x})$$\funp{P}(\mathbi{x}|\mathbi{y})$是否真的没有关系呢?比如,$\mathbi{x}$$\mathbi{y}$是相同大小的向量,且$\mathbi{x}$$\mathbi{y}$的变换是一个线性变换,也就是与一个方阵$\mathbi{W}$做矩阵乘法:
\parinterval 回顾神经机器翻译系统的建模过程,给定一个互译的句对$(\seq{x},\seq{y})$,一个从源语言句子$\seq{x}$到目标语言句子$\seq{y}$的翻译被表示为求条件概率$\funp{P}(\seq{y}|\seq{x})$的问题。类似地,一个从目标语言句子$\seq{y}$到源语言句子$\seq{x}$的翻译可以表示为$\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}|\seq{y})$之间是互相独立的。$\funp{P}(\seq{y}|\seq{x})$$\funp{P}(\seq{x}|\seq{y})$是否真的没有关系呢?比如,$\seq{x}$$\seq{y}$是相同大小的向量,且$\seq{x}$$\seq{y}$的变换是一个线性变换,也就是与一个方阵$\seq{W}$做矩阵乘法:
\begin{eqnarray}
\mathbi{y} & = & \mathbi{x} \cdot \mathbi{W}
\seq{y} & = & \seq{x} \cdot \seq{W}
\label{eq:16-6-xc}
\end{eqnarray}
\parinterval 这里可以把$\mathbi{x}$$\mathbi{y}$都看作分布式的向量表示;$\mathbi{W}$应当是一个满秩矩阵,否则对于任意一个$\mathbi{x}$经过$\mathbi{W}$变换得到的$\mathbi{y}$只落在所有可能的$\mathbi{y}$的一个子空间内,即在给定$\mathbi{W}$的情况下有些$\mathbi{y}$不能被任何一个$\mathbi{x}$表达,而这不符合常识,因为不管是什么句子,我们总能找到它的一种译文。若$\mathbi{W}$是满秩矩阵说明$\mathbi{W}$可逆,也就是给定$\mathbi{x}$$\mathbi{y}$的变换$\mathbi{W}$下,$\mathbi{y}$$\mathbi{x}$的变换必然是$\mathbi{W}$的逆而不是其他矩阵。
\parinterval 这里可以把$\seq{x}$$\seq{y}$都看作分布式的向量表示;$\seq{W}$应当是一个满秩矩阵,否则对于任意一个$\seq{x}$经过$\seq{W}$变换得到的$\seq{y}$只落在所有可能的$\seq{y}$的一个子空间内,即在给定$\seq{W}$的情况下有些$\seq{y}$不能被任何一个$\seq{x}$表达,而这不符合常识,因为不管是什么句子,我们总能找到它的一种译文。若$\seq{W}$是满秩矩阵说明$\seq{W}$可逆,也就是给定$\seq{x}$$\seq{y}$的变换$\seq{W}$下,$\seq{y}$$\seq{x}$的变换必然是$\seq{W}$的逆而不是其他矩阵。
\parinterval 这个例子说明$\funp{P}(\mathbi{y}|\mathbi{x})$$\funp{P}(\mathbi{x}|\mathbi{y})$直觉上应当存在联系。当然,$\mathbi{x}$$\mathbi{y}$之间是否存在简单的线性变换关系并没有结论,但是上面的例子给出了一种对源语言句子和目标语言句子进行相互转化的思路。实际上,研究人员已经通过一些数学技巧用目标函数来把$\funp{P}(\mathbi{y}|\mathbi{x})$$\funp{P}(\mathbi{x}|\mathbi{y})$联系起来,这样训练神经机器翻译系统一次就可以同时得到两个方向的翻译模型,使得训练变得更加高效\upcite{Hassan2018AchievingHP,DBLP:conf/aaai/Zhang0LZC18,DBLP:conf/wmt/SunJXHWW19}。双向联合训练的基本思想是:使用两个方向的翻译模型对单语数据进行解码,之后用解码后的翻译与原始的单语数据作为训练语料,通过多次迭代更新两个方向上的机器翻译模型。
\parinterval 这个例子说明$\funp{P}(\seq{y}|\seq{x})$$\funp{P}(\seq{x}|\seq{y})$直觉上应当存在联系。当然,$\seq{x}$$\seq{y}$之间是否存在简单的线性变换关系并没有结论,但是上面的例子给出了一种对源语言句子和目标语言句子进行相互转化的思路。实际上,研究人员已经通过一些数学技巧用目标函数来把$\funp{P}(\seq{y}|\seq{x})$$\funp{P}(\seq{x}|\seq{y})$联系起来,这样训练神经机器翻译系统一次就可以同时得到两个方向的翻译模型,使得训练变得更加高效\upcite{Hassan2018AchievingHP,DBLP:conf/aaai/Zhang0LZC18,DBLP:conf/wmt/SunJXHWW19}。双向联合训练的基本思想是:使用两个方向的翻译模型对单语数据进行解码,之后用解码后的翻译与原始的单语数据作为训练语料,通过多次迭代更新两个方向上的机器翻译模型。
\parinterval\ref{fig:16-1-fk}给出了一个双向训练的详细流程,这里只展示了前两轮迭代。在第一次迭代开始之前,首先使用双语数据对两个初始翻译模型执行预训练。为了保持一致性,这里称之为第0轮迭代。在第一轮迭代中,首先使用这两个翻译模型$M_{x \rightarrow y}^{0}$$M_{y \rightarrow x}^{0}$翻译单语数据$X=\{ x^{(s)} \}$$Y= \{ y^{(t)} \}$后得到伪训练数据集$X'=\{ x^{(s)},y_{0}^{s} \}$$Y'=\{ x^{(t)},y_{0}^{t} \}$。然后,模型$M_{x \rightarrow y}^{1}$$M_{y \rightarrow x}^{1}$使用上面的两个伪训练集和原始双语数据混合进行训练并执行参数更新。第二轮迭代继续重复上述过程,使用更新参数后的翻译模型$M_{x \rightarrow y}^{1}$$M_{y \rightarrow x}^{1}$得到更为准确的伪数据集$X'= \{ x^{(s)},y_{1}^{s} \}$$Y'= \{ x^{(t)},y_{1}^{t} \}$。从而,使得第二次迭代后的翻译模型$M_{x \rightarrow y}^{2}$$M_{y \rightarrow x}^{2}$取得更高的性能。
......@@ -346,20 +346,20 @@ g_{t}& = & \sigma (w^{T}s_{t}^{TM} + b)
\parinterval 对偶学习涉及两个任务,分别是原始任务和它的对偶任务。在机器翻译任务中,给定一个互译的句对$(\seq{x},\seq{y})$,原始任务学习一个条件概率$\funp{P}(\seq{y}|\seq{x})$将源语言句子$\seq{x}$翻译成目标语言句子$\seq{y}$;对偶任务同样学习一个条件概率$\funp{P}(\seq{x}|\seq{y})$将目标语言句子$\seq{y}$翻译成源语言句子$\seq{x}$。除了使用条件概率建模翻译问题,还可以使用联合分布$\funp{P}(\seq{x},\seq{y})$进行建模。根据条件概率定义,有:
\begin{eqnarray}
\funp{P}(\mathbi{x},\mathbi{y}) &=& \funp{P}(\mathbi{x})\funp{P}(\mathbi{y}|\mathbi{x}) \nonumber \\
&=& \funp{P}(\mathbi{y})\funp{P}(\mathbi{x}|\mathbi{y})
\funp{P}(\seq{x},\seq{y}) &=& \funp{P}(\seq{x})\funp{P}(\seq{y}|\seq{x}) \nonumber \\
&=& \funp{P}(\seq{y})\funp{P}(\seq{x}|\seq{y})
\label{eq:16-7-xc}
\end{eqnarray}
\parinterval 公式\ref{eq:16-7-xc}很自然地把两个方向的翻译模型$\funp{P}(\mathbi{y}|\mathbi{x})$$\funp{P}(\mathbi{x}|\mathbi{y})$以及两个语言模型$\funp{P}(\mathbi{x})$$\funp{P}(\mathbi{y})$联系起来:$\funp{P}(\mathbi{x})\funp{P}(\mathbi{y}|\mathbi{x})$应该与$\funp{P}(\mathbi{y})\funp{P}(\mathbi{x}|\mathbi{y})$接近,因为它们都表达了同一个联合分布$\funp{P}(\mathbi{x},\mathbi{y})$。因此,在构建训练两个方向的翻译模型的目标函数时,除了它们单独训练时各自使用的极大似然估计目标函数,可以额外增加一个目标项来鼓励两个方向的翻译模型:
\parinterval 公式\ref{eq:16-7-xc}很自然地把两个方向的翻译模型$\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}
\mathcal{L}_{\rm{dual}} & = & (\log{\funp{P}(\mathbi{x})} + \log{\funp{P}(\mathbi{y}|\mathbi{x})} - \log{\funp{P}(\mathbi{y})} - \log{\funp{P}(\mathbi{x}|\mathbi{y}))^{2}}
\mathcal{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-8-xc}
\end{eqnarray}
\parinterval 通过该正则化项,我们将互为对偶的两个任务放在一块学习,通过任务对偶性加强监督学习的过程,就是有监督对偶学习\upcite{DBLP:conf/icml/XiaQCBYL17,qin2020dual}。这里,$\funp{P}(\seq{x})$$\funp{P}(\seq{y})$这两个语言模型是预先训练好的,并不参与翻译模型的训练。可以看到,对于单独的一个模型来说,其目标函数增加了与另外一个方向的模型相关的项。这样的形式与L1/L2正则化非常类似({\red{引用正则化一节}}),因此可以把这个方法看作是一种任务特定的正则化的手段(由翻译任务本身的性质所启发而来)。有监督对偶学习实际上要优化下面这个损失函数:
\begin{eqnarray}
\mathcal{L} & = & \log{\funp{P}(\mathbi{y}|\mathbi{x})}+\log{\funp{P}(\mathbi{x}|\mathbi{y})}+\mathcal{L}_{\rm{dual}}
\mathcal{L} & = & \log{\funp{P}(\seq{y}|\seq{x})}+\log{\funp{P}(\seq{x}|\seq{y})}+\mathcal{L}_{\rm{dual}}
\label{eq:16-2-fk}
\end{eqnarray}
......@@ -386,21 +386,21 @@ g_{t}& = & \sigma (w^{T}s_{t}^{TM} + b)
\parinterval 从概率角度来看待这个问题,如果在有监督对偶学习对联合分布P(y|x)建模的基础上把y看作一个隐变量,那么可以得到边缘分布P(x),也就是关于x的语言模型:
\begin{eqnarray}
\funp{P}(\mathbi{x}) &=& \sum_{\mathbi{y}}\funp{P}(\mathbi{x},\mathbi{y}) \nonumber \\
&=& \sum_{\mathbi{y}}\funp{P}(\mathbi{x}|\mathbi{y})\funp{P}(\mathbi{y}|\mathbi{x})
\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})
\label{eq:16-9-xc}
\end{eqnarray}
\parinterval 公式\ref{eq:16-9-xc}假设$\funp{P}(\mathbi{x}|\mathbi{y})=\funp{P}(\mathbi{x}|\mathbi{x},\mathbi{y})$。这个假设显然是成立的,因为当知道一个句子的译文时,并不需要知道它的源文就可以把它翻译回去。如果直接优化(最大化)公式\ref{eq:16-9-xc}右侧,相当于对这个等式$\funp{P}(\mathbi{x}|\mathbi{y})$$\funp{P}(\mathbi{y}|\mathbi{x})$施加了{\small\sffamily\bfnew{循环一致性}}\index{循环一致性}(Circle Consistency)\index{Circle Consistency}的约束\upcite{DBLP:conf/iccv/ZhuPIE17},也就是对于一个句子$\mathbi{x}$,通过$\funp{P}(\mathbi{y}|\mathbi{x})$把它翻译成$\mathbi{y}$后,根据$\funp{P}(\mathbi{x}|\mathbi{y})$应该能重新翻译出$\mathbi{x}$,如图\ref{fig:16-10-xc}所示。公式\ref{eq:16-9-xc}给出了同时优化$\funp{P}(\mathbi{x}|\mathbi{y})$$\funp{P}(\mathbi{y}|\mathbi{x})$的一个目标函数形式。这个目标函数的一个额外的好处是它本质上是在学习一个由$\funp{P}(\mathbi{x}|\mathbi{y})$$\funp{P}(\mathbi{y}|\mathbi{x})$组成的语言模型$\funp{P}(\mathbi{x})$,而$\funp{P}(\mathbi{x})$的学习依赖于单语数据,这意味着这个目标函数可以很自然地直接使用大量单语数据来同时训练两个翻译模型。相同的结论可以推广到$\funp{P}(\mathbi{y})$\upcite{DBLP:conf/nips/HeXQWYLM16}
\parinterval 公式\ref{eq:16-9-xc}假设$\funp{P}(\seq{x}|\seq{y})=\funp{P}(\seq{x}|\seq{x},\seq{y})$。这个假设显然是成立的,因为当知道一个句子的译文时,并不需要知道它的源文就可以把它翻译回去。如果直接优化(最大化)公式\ref{eq:16-9-xc}右侧,相当于对这个等式$\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-10-xc}所示。公式\ref{eq:16-9-xc}给出了同时优化$\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 但是直接使用公式\ref{eq:16-9-xc}作为目标函数需要解决两个问题:
\begin{itemize}
\vspace{0.5em}
\item 计算公式\ref{eq:16-9-xc}要枚举所有可能的隐变量$\mathbi{y}$的取值,也就是所有可能产生的目标语句子,而这是不可能的,因此一般会通过平均多个随机产生的$\mathbi{y}$对应的损失来近似真正的目标函数值;
\item 计算公式\ref{eq:16-9-xc}要枚举所有可能的隐变量$\seq{y}$的取值,也就是所有可能产生的目标语句子,而这是不可能的,因此一般会通过平均多个随机产生的$\seq{y}$对应的损失来近似真正的目标函数值;
\vspace{0.5em}
\item 从公式\ref{eq:16-9-xc}可以看到,在$\funp{P}(\mathbi{x})$上计算完目标函数值后,得到的梯度首先传递给$\funp{P}(\mathbi{x}|\mathbi{y})$,然后通过$\funp{P}(\mathbi{x}|\mathbi{y})$传递给$\funp{P}(\mathbi{y}|\mathbi{x})$。由于$\funp{P}(\mathbi{x}|\mathbi{y})$的输入$\mathbi{y}$$\funp{P}(\mathbi{y}|\mathbi{x})$采样得到,而采样操作不可导,导致梯度的传播在$\funp{P}(\mathbi{y}|\mathbi{x})$的输出处断开了,因此$\funp{P}(\mathbi{y}|\mathbi{x})$接收不到任何梯度来进行更新。常见的解决方案是使用策略梯度\upcite{DBLP:conf/nips/SuttonMSM99}。策略梯度的基本思想如下:如果我们在执行某个动作之后,获得了一个不错的反馈,那么我们会调整策略来增加这个状态下执行该动作的概率;反之,如果采取某个动作后获得了一个负反馈,就需要调整策略来降低这个状态下执行该动作的概率。在算法的实现上,首先对两个翻译模型求梯度,然后在策略调整时选择将梯度加到模型上(获得正反馈)或者减去该梯度(获得负反馈)。
\item 从公式\ref{eq:16-9-xc}可以看到,在$\funp{P}(\seq{x})$上计算完目标函数值后,得到的梯度首先传递给$\funp{P}(\seq{x}|\seq{y})$,然后通过$\funp{P}(\seq{x}|\seq{y})$传递给$\funp{P}(\seq{y}|\seq{x})$。由于$\funp{P}(\seq{x}|\seq{y})$的输入$\seq{y}$$\funp{P}(\seq{y}|\seq{x})$采样得到,而采样操作不可导,导致梯度的传播在$\funp{P}(\seq{y}|\seq{x})$的输出处断开了,因此$\funp{P}(\seq{y}|\seq{x})$接收不到任何梯度来进行更新。常见的解决方案是使用策略梯度\upcite{DBLP:conf/nips/SuttonMSM99}。策略梯度的基本思想如下:如果我们在执行某个动作之后,获得了一个不错的反馈,那么我们会调整策略来增加这个状态下执行该动作的概率;反之,如果采取某个动作后获得了一个负反馈,就需要调整策略来降低这个状态下执行该动作的概率。在算法的实现上,首先对两个翻译模型求梯度,然后在策略调整时选择将梯度加到模型上(获得正反馈)或者减去该梯度(获得负反馈)。
\vspace{0.5em}
\end{itemize}
......@@ -434,23 +434,23 @@ g_{t}& = & \sigma (w^{T}s_{t}^{TM} + b)
\parinterval 基于枢轴语的方法很早就出现在基于统计机器翻译中。在基于短语的机器翻译中,已经有很多方法建立了源到枢轴和枢轴到目标的短语/单词级别特征,并基于这些特征开发了源语言到目标语言的系统\upcite{DBLP:conf/naacl/UtiyamaI07,DBLP:journals/mt/WuW07,Farsi2010somayeh,DBLP:conf/acl/ZahabiBK13,DBLP:conf/emnlp/ZhuHWZWZ14,DBLP:conf/acl/MiuraNSTN15},这些系统也已经广泛用于翻译稀缺资源语言对\upcite{DBLP:conf/acl/CohnL07,DBLP:journals/mt/WuW07,DBLP:conf/acl/WuW09}。由于基于枢轴语的方法与模型结构无关,因此该方法也快速适用于神经机器翻译,并且取得了不错的效果\upcite{DBLP:conf/emnlp/KimPPKN19,DBLP:journals/corr/ChengLYSX16}。比如,可以直接使用源到枢轴和枢轴到目标的两个神经机器翻译模型,之后分别用两个模型进行翻译,得到最终的结果\upcite{DBLP:conf/interspeech/KauersVFW02,de2006catalan}。在实现过程中,可以在枢轴语言中保留多个最佳翻译假设,以减少预测偏差\upcite{DBLP:conf/naacl/UtiyamaI07},并通过多系统融合改进最终翻译\upcite{DBLP:conf/ijcnlp/Costa-JussaHB11}
\parinterval 基于枢轴的方法可以被描述为如图\ref{fig:16-1-ll}所示的过程。这里,使用虚线表示具有双语平行语料库的语言对,并使用带有箭头的实线表示翻译方向,令$\mathbi{x}$$\mathbi{y}$$\mathbi{p}$分别表示源语言,目标语言和枢轴语言,对于输入源语言句子$\mathbi{x}$和目标语言句子$\mathbi{y}$,其翻译过程可以被建模为如下公式:
\parinterval 基于枢轴的方法可以被描述为如图\ref{fig:16-1-ll}所示的过程。这里,使用虚线表示具有双语平行语料库的语言对,并使用带有箭头的实线表示翻译方向,令$\seq{x}$$\seq{y}$$\seq{p}$分别表示源语言,目标语言和枢轴语言,对于输入源语言句子$\seq{x}$和目标语言句子$\seq{y}$,其翻译过程可以被建模为如下公式:
\begin{figure}[h]
\centering
\includegraphics[scale=1.0]{Chapter16/Figures/figure-pivot-based-translation-process.jpg}
\input{Chapter16/Figures/figure-pivot-based-translation-process}
\caption{基于枢轴语言的翻译过程}
\label{fig:16-1-ll}
\end{figure}
\begin{equation}
\funp{P}(\mathbi{y}|\mathbi{x}) = \sum_{\mathbi{p}}{\funp{P}(\mathbi{p}|\mathbi{x})\funp{P}(\mathbi{y}|\mathbi{p})}
\funp{P}(\seq{y}|\seq{x}) = \sum_{\seq{p}}{\funp{P}(\seq{p}|\seq{x})\funp{P}(\seq{y}|\seq{p})}
\label{eq:ll-1}
\end{equation}
\noindent 其中,$\mathbi{p}$表示一个枢轴语言句子, $\funp{P(\mathbi{y}|\mathbi{x})}$为从源语句子$\mathbi{x}$翻译到目标语句子$\mathbi{y}$的概率,$\funp{P}(\mathbi{p}|\mathbi{x})$为从源语言句子$\mathbi{x}$翻译到枢轴语言语句子$\mathbi{p}$的概率,$\funp{P}(\mathbi{y}|\mathbi{p})$为从枢轴语言句子$\mathbi{p}$到目标语言句子$\mathbi{y}$的概率。
\noindent 其中,$\seq{p}$表示一个枢轴语言句子, $\funp{P(\seq{y}|\seq{x})}$为从源语句子$\seq{x}$翻译到目标语句子$\seq{y}$的概率,$\funp{P}(\seq{p}|\seq{x})$为从源语言句子$\seq{x}$翻译到枢轴语言语句子$\seq{p}$的概率,$\funp{P}(\seq{y}|\seq{p})$为从枢轴语言句子$\seq{p}$到目标语言句子$\seq{y}$的概率。
\parinterval $\funp{P}(\mathbi{p}|\mathbi{x})$$\funp{P}(\mathbi{y}|\mathbi{p})$可以直接复用既有的模型和方法。不过,枚举所有的枢轴语言语句子$\mathbi{p}$是不可行的。因此一部分研究工作也探讨了如何选择有效的路径,从$\mathbi{x}$经过少量$\mathbi{p}$到达$\mathbi{y}$\upcite{DBLP:conf/naacl/PaulYSN09}
\parinterval $\funp{P}(\seq{p}|\seq{x})$$\funp{P}(\seq{y}|\seq{p})$可以直接复用既有的模型和方法。不过,枚举所有的枢轴语言语句子$\seq{p}$是不可行的。因此一部分研究工作也探讨了如何选择有效的路径,从$\seq{x}$经过少量$\seq{p}$到达$\seq{y}$\upcite{DBLP:conf/naacl/PaulYSN09}
\parinterval 虽然基于枢轴语的方法简单且易于实现,但该方法仍有一些不足。例如,它需要两次翻译过程,因此增加了翻译时间。而且在两次翻译中,翻译错误会进行累积从而产生错误传播问题,导致模型翻译准确性降低。此外,基于枢轴的语言仍然假设源语言和枢轴语言(或者目标语言和枢轴语言)之间存在一定规模的双语平行数据,但是这个假设在很多情况下并不成立。比如,对于一些资源极度稀缺的语言,其到英语或者汉语的双语数据仍然十分缺乏,这时使用基于枢轴的方法的效果往往也并不理想。虽然存在以上问题,但是基于枢轴的方法仍然受到工业界的青睐,很多在线翻译引擎也在大量使用这种方法进行多语言的翻译。
......@@ -460,23 +460,23 @@ g_{t}& = & \sigma (w^{T}s_{t}^{TM} + b)
\subsection{基于知识蒸馏的方法}
\parinterval 为了解决基于使用枢轴语言的问题,研究人员提出基于知识蒸馏的方法\upcite{DBLP:conf/acl/ChenLCL17,DBLP:conf/iclr/TanRHQZL19}。知识蒸馏是一种常用的模型压缩方法\upcite{Hinton2015Distilling},基于教师-学生框架,在第十三章已经进行了详细介绍。针对稀缺资源任务,基于教师-学生框架的方法基本思想如图\ref{fig:16-2-ll}所示。其中,虚线表示具有平行语料库的语言对,带有箭头的实线表示翻译方向。这里,将枢轴语言($\mathbi{p}$)到目标语言($\mathbi{y}$)的翻译模型$\funp{P}(\mathbi{y}|\mathbi{p})$当作教师模型,源语言($\mathbi{x}$)到目标语言($\mathbi{y}$)的翻译模型$\funp{P}(\mathbi{y}|\mathbi{x})$当作学生模型。然后,用教师模型来指导学生模型的训练,这个过程中学习的目标就是让$\funp{P}(\mathbi{y}|\mathbi{x})$尽可能地接近$\funp{P}(\mathbi{y}|\mathbi{p})$,这样学生模型就可以学习到源语言到目标语言的翻译知识。
\parinterval 为了解决基于使用枢轴语言的问题,研究人员提出基于知识蒸馏的方法\upcite{DBLP:conf/acl/ChenLCL17,DBLP:conf/iclr/TanRHQZL19}。知识蒸馏是一种常用的模型压缩方法\upcite{Hinton2015Distilling},基于教师-学生框架,在第十三章已经进行了详细介绍。针对稀缺资源任务,基于教师-学生框架的方法基本思想如图\ref{fig:16-2-ll}所示。其中,虚线表示具有平行语料库的语言对,带有箭头的实线表示翻译方向。这里,将枢轴语言($\seq{p}$)到目标语言($\seq{y}$)的翻译模型$\funp{P}(\seq{y}|\seq{p})$当作教师模型,源语言($\seq{x}$)到目标语言($\seq{y}$)的翻译模型$\funp{P}(\seq{y}|\seq{x})$当作学生模型。然后,用教师模型来指导学生模型的训练,这个过程中学习的目标就是让$\funp{P}(\seq{y}|\seq{x})$尽可能地接近$\funp{P}(\seq{y}|\seq{p})$,这样学生模型就可以学习到源语言到目标语言的翻译知识。
\begin{figure}[h]
\centering
\includegraphics[scale=1.0]{Chapter16/Figures/figure-knowledge-distillation-based-translation-process.jpg}
\input{Chapter16/Figures/figure-knowledge-distillation-based-translation-process}
\caption{基于知识蒸馏的翻译过程}
\label{fig:16-2-ll}
\end{figure}
\parinterval 需要注意的是,基于知识蒸馏的方法需要基于翻译对等假设,该假设为:如果源语言句子$\mathbi{x}$、枢轴语言句子$\mathbi{p}$和目标语言句子$\mathbi{y}$这三个句子互译,则从源语言句子$\mathbi{x}$生成目标语言句子$\mathbi{y}$的概率$\funp{P}(\mathbi{y}|\mathbi{x})$应接近与源语言句子$\mathbi{x}$对应的$p$的概率$\funp{P}(\mathbi{y}|\mathbi{p})$,即:
\parinterval 需要注意的是,基于知识蒸馏的方法需要基于翻译对等假设,该假设为:如果源语言句子$\seq{x}$、枢轴语言句子$\seq{p}$和目标语言句子$\seq{y}$这三个句子互译,则从源语言句子$\seq{x}$生成目标语言句子$\seq{y}$的概率$\funp{P}(\seq{y}|\seq{x})$应接近与源语言句子$\seq{x}$对应的$p$的概率$\funp{P}(\seq{y}|\seq{p})$,即:
\begin{equation}
\funp{P}(\mathbi{y}|\mathbi{x}) \approx \funp{P}(\mathbi{y}|\mathbi{p})
\funp{P}(\seq{y}|\seq{x}) \approx \funp{P}(\seq{y}|\seq{p})
\label{eq:ll-2}
\end{equation}
\parinterval 和基于枢轴语言的方法相比,基于教师-学生框架的方法无需训练源语言到枢轴语言的翻译模型,也就无需经历两次翻译过程,翻译效率有所提升,又避免了两次翻译所面临的错误传播问题。举个例子,假如图\ref{fig:16-2-ll}$\mathbi{x}$为源语言德语 “hallo”,$\mathbi{p}$为中间语言英语 “hello”,$\mathbi{y}$为目标语言法语“bonjour”,则德语“hallo”翻译为法语“bonjour”的概率应该与英语“hello”翻译为法语“bonjour”的概率相近。
\parinterval 和基于枢轴语言的方法相比,基于教师-学生框架的方法无需训练源语言到枢轴语言的翻译模型,也就无需经历两次翻译过程,翻译效率有所提升,又避免了两次翻译所面临的错误传播问题。举个例子,假如图\ref{fig:16-2-ll}$\seq{x}$为源语言德语 “hallo”,$\seq{p}$为中间语言英语 “hello”,$\seq{y}$为目标语言法语“bonjour”,则德语“hallo”翻译为法语“bonjour”的概率应该与英语“hello”翻译为法语“bonjour”的概率相近。
\parinterval 相较于基于枢轴语言的方法,基于知识蒸馏的方法无论在性能还是效率上都具有一定优势。但是,它仍然需要显性的使用枢轴语言进行桥接,因此仍然面临着“源语言$\to$枢轴语言$\to$目标语言”转换中信息丢失的问题。比如,当枢轴语言到目标语言翻译效果较差时,由于教师模型无法提供准确的指导,学生模型也无法取得很好的学习效果。
......@@ -494,7 +494,7 @@ g_{t}& = & \sigma (w^{T}s_{t}^{TM} + b)
\begin{figure}[h]
\centering
\includegraphics[scale=1.0]{Chapter16/Figures/figure-contrast-of-traditional-machine-learning&transfer-learning.jpg}
\input{Chapter16/Figures/figure-contrast-of-traditional-machine-learning&transfer-learning}
\caption{传统机器学习\&迁移学习对比}
\label{fig:16-3-ll}
\end{figure}
......@@ -511,7 +511,7 @@ g_{t}& = & \sigma (w^{T}s_{t}^{TM} + b)
\begin{figure}[h]
\centering
\includegraphics[scale=1.0]{Chapter16/Figures/figure-parameter-initialization-method-diagram.jpg}
\input{Chapter16/Figures/figure-parameter-initialization-method-diagram}
\caption{参数初始化方法图}
\label{fig:16-4-ll}
\end{figure}
......@@ -532,7 +532,7 @@ g_{t}& = & \sigma (w^{T}s_{t}^{TM} + b)
\begin{figure}[h]
\centering
\includegraphics[scale=1.0]{Chapter16/Figures/multi-language-single-model-system-diagram.jpg}
\input{Chapter16/Figures/figure-multi-language-single-model-system-diagram}
\caption{参数初始化方法图}
\label{fig:16-5-ll}
\end{figure}
......@@ -607,7 +607,7 @@ g_{t}& = & \sigma (w^{T}s_{t}^{TM} + b)
\begin{itemize}
\vspace{0.5em}
\item 对于图\ref{fig:16-2-lyf}(a)中的分布在不同空间中的两个单语词嵌入$\mathbi{X}$$\mathbi{Y}$,基于两者近似同构的假设,利用无监督匹配的方法来得到一个粗糙的线性映射$\mathbi{W}$,使得两个空间能大致对齐,结果如图\ref{fig:16-2-lyf}(b)所示。
\item 对于图\ref{fig:16-2-lyf}(a)中的分布在不同空间中的两个单语词嵌入$\mathbi{x}$$\mathbi{y}$,基于两者近似同构的假设,利用无监督匹配的方法来得到一个粗糙的线性映射$\mathbi{W}$,使得两个空间能大致对齐,结果如图\ref{fig:16-2-lyf}(b)所示。
\vspace{0.5em}
\item 在此共享空间中执行对齐算法从而归纳出一个种子词典,如图\ref{fig:16-2-lyf}(c)所示。
\vspace{0.5em}
......@@ -626,23 +626,23 @@ g_{t}& = & \sigma (w^{T}s_{t}^{TM} + b)
\begin{itemize}
\vspace{0.5em}
\item 基于GAN的方法\upcite{DBLP:conf/iclr/LampleCRDJ18,DBLP:conf/acl/ZhangLLS17,DBLP:conf/emnlp/XuYOW18,DBLP:conf/naacl/MohiuddinJ19}。在这个任务中,通过生成器来产生映射$\mathbi{W}$,鉴别器负责区分随机抽样的元素$\mathbi{W}\cdot \mathbi{X}$$\mathbi{Y}$,两者共同优化收敛后即可得到映射$\mathbi{W}$
\item 基于GAN的方法\upcite{DBLP:conf/iclr/LampleCRDJ18,DBLP:conf/acl/ZhangLLS17,DBLP:conf/emnlp/XuYOW18,DBLP:conf/naacl/MohiuddinJ19}。在这个任务中,通过生成器来产生映射$\mathbi{W}$,鉴别器负责区分随机抽样的元素$\mathbi{W}\cdot \seq{x}$$\seq{y}$,两者共同优化收敛后即可得到映射$\mathbi{W}$
\vspace{0.5em}
\item 基于Gromov-Wasserstein 的方法\upcite{DBLP:conf/emnlp/Alvarez-MelisJ18,DBLP:conf/lrec/GarneauGBDL20,DBLP:journals/corr/abs-1811-01124,DBLP:conf/emnlp/XuYOW18}。Wasserstein距离是度量空间中定义两个概率分布之间距离的函数。在这个任务中,它用来衡量不同语言中单词对之间的相似性,利用空间近似同构的信息可以定义出一些目标函数,之后通过优化该目标函数也可以得到映射$\mathbi{W}$
\vspace{0.5em}
\end{itemize}
\parinterval 在得到映射$\mathbi{W}$之后,对于$\mathbi{X}$中的任意一个单词$x_{i}$,通过$\mathbi{W}\cdot \mathbi{E}({x}_{i})$将其映射到空间$\mathbi{Y}$中($\mathbi{E}({x}_{i})$表示的是单词$x_{i}$的词嵌入向量),然后在$\mathbi{Y}$中找到该点的最近邻点$y_{j}$,于是$y_{j}$就是$x_{i}$的翻译词,重复该过程即可归纳出种子词典$D$,第一阶段结束。事实上,由于第一阶段缺乏监督信号,得到的种子词典$D$会包含大量的噪音,性能并不高,因此需要进行进一步的微调。
\parinterval 在得到映射$\mathbi{W}$之后,对于$\mathbi{x}$中的任意一个单词$x_{i}$,通过$\mathbi{W}\cdot \mathbi{E}({x}_{i})$将其映射到空间$\mathbi{y}$中($\mathbi{E}({x}_{i})$表示的是单词$x_{i}$的词嵌入向量),然后在$\mathbi{y}$中找到该点的最近邻点$y_{j}$,于是$y_{j}$就是$x_{i}$的翻译词,重复该过程即可归纳出种子词典$D$,第一阶段结束。事实上,由于第一阶段缺乏监督信号,得到的种子词典$D$会包含大量的噪音,性能并不高,因此需要进行进一步的微调。
\parinterval 微调的原理普遍基于普氏分析\upcite{DBLP:journals/corr/MikolovLS13}。假设现在有一个种子词典$D=\left\{x_{i}, y_{i}\right\}$其中${i \in\{1, n\}}$,和两个单语词嵌入$\mathbi{X}$$\mathbi{Y}$,那么就可以将$D$作为{\small\bfnew{映射锚点}}\index{映射锚点}(Anchor\index{Anchor})学习一个转移矩阵$\mathbi{W}$,使得$\mathbi{W}\cdot \mathbi{X}$$\mathbi{Y}$这两个空间尽可能相近,此外通过对$\mathbi{W}$施加正交约束可以显著提高能\upcite{DBLP:conf/naacl/XingWLL15},于是这个优化问题就转变成了{\small\bfnew{普鲁克问题}}\index{普鲁克问题}(Procrustes Problem\index{Procrustes Problem}\upcite{DBLP:conf/iclr/SmithTHH17},可以通过{\small\bfnew{奇异值分解}}\index{奇异值分解}(Singular Value Decomposition,SVD\index{Singular Value Decomposition,SVD})来获得近似解:
\parinterval 微调的原理普遍基于普氏分析\upcite{DBLP:journals/corr/MikolovLS13}。假设现在有一个种子词典$D=\left\{x_{i}, y_{i}\right\}$其中${i \in\{1, n\}}$,和两个单语词嵌入$\mathbi{x}$$\mathbi{y}$,那么就可以将$D$作为{\small\bfnew{映射锚点}}\index{映射锚点}(Anchor\index{Anchor})学习一个转移矩阵$\mathbi{W}$,使得$\mathbi{W}\cdot \mathbi{x}$$\mathbi{y}$这两个空间尽可能相近,此外通过对$\mathbi{W}$施加正交约束可以显著提高能\upcite{DBLP:conf/naacl/XingWLL15},于是这个优化问题就转变成了{\small\bfnew{普鲁克问题}}\index{普鲁克问题}(Procrustes Problem\index{Procrustes Problem}\upcite{DBLP:conf/iclr/SmithTHH17},可以通过{\small\bfnew{奇异值分解}}\index{奇异值分解}(Singular Value Decomposition,SVD\index{Singular Value Decomposition,SVD})来获得近似解:
\begin{eqnarray}
\mathbi{W}^{\star} & = &\underset{\mathbi{W} \in O_{d}(\mathbb{R})}{\operatorname{argmin}}\|\mathbi{W}\cdot \mathbi{X}'- \mathbi{Y}' \|_{\mathrm{F}}=\mathbi{U}\cdot \mathbi{V}^{\rm{T}} \\
\textrm{s.t.\ \ \ \ } \mathbi{U} \Sigma \mathbi{V}^{\rm{T}} &= &\operatorname{SVD}\left(\mathbi{Y}'\cdot \mathbi{X}'^{\rm{T}}\right)
\mathbi{W}^{\star} & = &\underset{\mathbi{W} \in O_{d}(\mathbb{R})}{\operatorname{argmin}}\|\mathbi{W}\cdot \mathbi{x}'- \mathbi{y}' \|_{\mathrm{F}}=\mathbi{U}\cdot \mathbi{V}^{\rm{T}} \\
\textrm{s.t.\ \ \ \ } \mathbi{U} \Sigma \mathbi{V}^{\rm{T}} &= &\operatorname{SVD}\left(\mathbi{y}'\cdot \mathbi{x}'^{\rm{T}}\right)
\label{eq:16-1}
\end{eqnarray}
\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{变分自编码器}}(Variational Autoencoders,VAEs)来捕获更深层次的语义信息并结合对抗训练的方法\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}
......@@ -691,7 +691,7 @@ g_{t}& = & \sigma (w^{T}s_{t}^{TM} + b)
\parinterval 尽管已经得到了短语的翻译,短语表的另外一个重要的组成部分,也就是短语对的得分(概率)无法直接由词典归纳方法直接给出,而这些得分在统计机器翻译模型中非常重要。在无监督词典归纳中,在推断词典的时候会为一对源语言单词和目标语言单词打分(词嵌入之间的相似度),然后根据打分来决定哪一个目标语言单词更有可能是当前源语言单词的翻译。在无监督短语归纳中,这样一个打分已经提供了对短语对质量的度量,因此经过适当的归一化处理后就可以得到短语对的得分:
\begin{eqnarray}
P(\mathbi{y}|\mathbi{x}) & = & \frac{\mathrm{cos}(\mathbi{x},\mathbi{y})/\tau}{\sum_{\mathbi{y}^{'}}\mathrm{cos}(\mathbi{x},\mathbi{y}^{'})\tau}
P(\mathbi{y}|\mathbi{x}) & = & \frac{\mathrm{cos}(\mathbi{x},\mathbi{y})/\tau}{\sum_{\seq{y}^{'}}\mathrm{cos}(\mathbi{x},\mathbi{y}^{'})\tau}
\label{eq:16-2}
\end{eqnarray}
......@@ -764,7 +764,7 @@ P(\mathbi{y}|\mathbi{x}) & = & \frac{\mathrm{cos}(\mathbi{x},\mathbi{y})/\tau}{\
\subsubsection{3. 更深层的融合}
\parinterval 为了获得更好的神经机器翻译模型,可以对训练流程和模型做更深度的整合。{\chapternine}已经介绍,神经机器翻译模型的训练包含两个阶段:初始化和优化,而无监督神经机器翻译的核心思路也是对应的两个阶段:无监督方法提供初始的监督信号和数据优化,因此可以考虑通过在模型的初始化阶段使用无监督方法提供初始的监督信号,然后优化过程不但优化模型的参数,还优化训练使用的数据,从而避免流水线带来的错误传播。其中初始的监督信号可以通过两种方法提供给模型,一种是直接使用无监督方法提供最初的伪双语数据来训练最初的翻译模型,另一种则是借助无监督方法来初始化模型,得到最初的翻译模型后直接使用初始化好的翻译模型产生伪双语数据来训练自己,如图\ref{fig:16-3}所示。图\ref{fig:16-3}a的一个简单实现是利用无监督词典归纳得到的词典对单语数据进行逐词的翻译,得到最初的伪双语数据,然后在这些数据上训练最初的翻译模型,最后不断地交替优化数据和模型,得到更好的翻译模型和质量更好的伪数据\upcite{DBLP:conf/iclr/LampleCDR18}。这样的做法通过不断优化训练用的双语数据,摆脱了无监督词典归纳在最初的伪双语数据中遗留下来的错误,同时也避免了使用无监督统计机器翻译模型的繁琐和代价。图\ref{fig:16-3}b的实现则依赖于具体的翻译模型初始化方法,我们将在下一节讨论翻译模型的不同初始化方法。
\parinterval 为了获得更好的神经机器翻译模型,可以对训练流程和模型做更深度的整合。{\chapternine}已经介绍,神经机器翻译模型的训练包含两个阶段:初始化和优化,而无监督神经机器翻译的核心思路也是对应的两个阶段:无监督方法提供初始的监督信号和数据优化,因此可以考虑通过在模型的初始化阶段使用无监督方法提供初始的监督信号,然后优化过程不但优化模型的参数,还优化训练使用的数据,从而避免流水线带来的错误传播。其中初始的监督信号可以通过两种方法提供给模型,一种是直接使用无监督方法提供最初的伪双语数据来训练最初的翻译模型,另一种则是借助无监督方法来初始化模型,得到最初的翻译模型后直接使用初始化好的翻译模型产生伪双语数据来训练自己,如图\ref{fig:16-3}所示。图\ref{fig:16-3}(a)的一个简单实现是利用无监督词典归纳得到的词典对单语数据进行逐词的翻译,得到最初的伪双语数据,然后在这些数据上训练最初的翻译模型,最后不断地交替优化数据和模型,得到更好的翻译模型和质量更好的伪数据\upcite{DBLP:conf/iclr/LampleCDR18}。这样的做法通过不断优化训练用的双语数据,摆脱了无监督词典归纳在最初的伪双语数据中遗留下来的错误,同时也避免了使用无监督统计机器翻译模型的繁琐和代价。图\ref{fig:16-3}(b)的实现则依赖于具体的翻译模型初始化方法,我们将在下一节讨论翻译模型的不同初始化方法。
\begin{figure}[h]
\centering
......@@ -811,7 +811,7 @@ P(\mathbi{y}|\mathbi{x}) & = & \frac{\mathrm{cos}(\mathbi{x},\mathbi{y})/\tau}{\
\vspace{0.5em}
\item {\small\bfnew{语言模型的使用}}。无监督神经机器翻译的一个重要部分就是来自语言模型的目标函数。因为翻译模型本质上是在完成文本生成任务,所以只有文本生成类型的语言模型建模方法才可以应用到无监督神经机器翻译里。比如,经典的给定前文预测下一词就是一个典型的自回归生成任务(见{\chaptertwo}),因此可以运用到无监督神经机器翻译里。但是,目前在预训练里流行的BERT等模型是掩码语言模型\upcite{devlin2019bert},就不能直接在无监督神经翻译里使用。
\parinterval 另外一个在无监督神经机器翻译中比较常见的语言模型目标函数则是{\small\bfnew{降噪自编码器}}\index{降噪自编码器}(Denoising Autoencoder\index{降噪自编码器})。它也是文本生成类型的语言模型建模方法。对于一个句子$\mathbi{x}$,首先使用一个噪声函数$\mathbi{x}^{'}=\mathrm{noise}(\mathbi{x})$ 来对$\mathbi{x}$注入噪声,产生一个质量较差的句子$\mathbi{x}^{'}$。然后,让模型学习如何从$\mathbi{x}^{'}$还原出$\mathbi{x}$。这样一个目标函数比预测下一词更贴近翻译任务的本质,因为它是一个序列到序列的映射,并且输入输出两个序列在语义上是等价的。我们之所以采用$\mathbi{x}^{'}$而不是$\mathbi{x}$自己来预测$\mathbi{x}^{'}$,是因为模型可以通过简单的复制输入作为输出来完成从$\mathbi{x}$预测$\mathbi{x}$的任务,并且在输入中注入噪声会让模型更加鲁棒,因为模型可以通过训练集数据学会如何利用句子中噪声以外的信息来处理其中噪声并得到正确的输出。通常来说,噪声函数$\mathrm{noise}$有三种形式,如表\ref{tab:16-1}所示。
\parinterval 另外一个在无监督神经机器翻译中比较常见的语言模型目标函数则是{\small\bfnew{降噪自编码器}}\index{降噪自编码器}(Denoising Autoencoder\index{降噪自编码器})。它也是文本生成类型的语言模型建模方法。对于一个句子$\seq{x}$,首先使用一个噪声函数$\seq{x}^{'}=\mathrm{noise}(\seq{x})$ 来对$\seq{x}$注入噪声,产生一个质量较差的句子$\seq{x}^{'}$。然后,让模型学习如何从$\seq{x}^{'}$还原出$\seq{x}$。这样一个目标函数比预测下一词更贴近翻译任务的本质,因为它是一个序列到序列的映射,并且输入输出两个序列在语义上是等价的。我们之所以采用$\seq{x}^{'}$而不是$\seq{x}$自己来预测$\seq{x}^{'}$,是因为模型可以通过简单的复制输入作为输出来完成从$\seq{x}$预测$\seq{x}$的任务,并且在输入中注入噪声会让模型更加鲁棒,因为模型可以通过训练集数据学会如何利用句子中噪声以外的信息来处理其中噪声并得到正确的输出。通常来说,噪声函数$\mathrm{noise}$有三种形式,如表\ref{tab:16-1}所示。
\begin{table}[h]
\centering
......@@ -1005,7 +1005,7 @@ P(\mathbi{y}|\mathbi{x}) & = & \frac{\mathrm{cos}(\mathbi{x},\mathbi{y})/\tau}{\
\parinterval 统计机器翻译时代基于模型结构的方法集中在提升词对齐模型、语言模型等子模型的领域适应性,从而提升统计机器翻译模型在特定领域的表现。而神经机器翻译模型是一个端到端的框架,因此对模型的调整往往体现在整体结构上。
\parinterval 在使用多领域数据时,神经机器翻译的结构无法有效地利用多领域语料库的信息多样性,混合多个相差较大的领域数据进行训练会使单个领域的翻译性能下降\upcite{DBLP:conf/eacl/NegriTFBF17}。为了解决这一问题,一个比较典型的做法是在使用多领域数据训练时,如图\ref{fig:16-2-wbh}所示,在神经机器翻译模型的编码器中添加一个判别器,使用判别器预测输入句子的领域\upcite{DBLP:conf/wmt/BritzLP17},具体的做法为:在编码器的顶部添加一个判别器网络,这个判别器使用源语言句子$x$的编码器表示$x'$作为输入,预测句子所属的领域标签$d$。为了使预测领域标签d的正确概率$\funp{P(d|H)}$最大,模型在训练过程中最小化如下损失函数$\funp{L}_{\rm{disc}}$
\parinterval 在使用多领域数据时,神经机器翻译的结构无法有效地利用多领域语料库的信息多样性,混合多个相差较大的领域数据进行训练会使单个领域的翻译性能下降\upcite{DBLP:conf/eacl/NegriTFBF17}。为了解决这一问题,一个比较典型的做法是在使用多领域数据训练时,如图\ref{fig:16-2-wbh}所示,在神经机器翻译模型的编码器中添加一个判别器,使用判别器预测输入句子的领域\upcite{DBLP:conf/wmt/BritzLP17},具体的做法为:在编码器的顶部添加一个判别器网络,这个判别器使用源语言句子$x$的编码器表示$\mathbi{x'}$作为输入,预测句子所属的领域标签$d$。为了使预测领域标签d的正确概率$\funp{P(d|H)}$最大,模型在训练过程中最小化如下损失函数$\funp{L}_{\rm{disc}}$
\begin{figure}[h]
\centering
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论