Commit 21e6f56d by 曹润柘

合并分支 'caorunzhe' 到 'master'

Caorunzhe

查看合并请求 !753
parents 59266612 278d0e31
...@@ -507,7 +507,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm ...@@ -507,7 +507,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm
\subsection{长短时记忆网络} \subsection{长短时记忆网络}
\label{sec:lstm-cell} \label{sec:lstm-cell}
\parinterval RNN结构使得当前时刻循环单元的状态包含了之前时间步的状态信息。但是这种对历史信息的记忆并不是无损的,随着序列变长,RNN的记忆信息的损失越来越严重。在很多长序列处理任务中(如长文本生成)都观测到了类似现象。对于这个问题,研究者们提出了{\small\bfnew{长短时记忆}}\index{长短时记忆}(Long Short-term Memory)\index{Long Short-term Memory,LSTM}模型,也就是常说的LSTM模型\upcite{HochreiterLong} \parinterval RNN结构使得当前时刻循环单元的状态包含了之前时间步的状态信息。但是这种对历史信息的记忆并不是无损的,随着序列变长,RNN的记忆信息的损失越来越严重。在很多长序列处理任务中(如长文本生成)都观测到了类似现象。对于这个问题,研究者们提出了{\small\bfnew{长短时记忆}}\index{长短时记忆}(Long Short-term Memory)\index{Long Short-term Memory}模型,也就是常说的LSTM模型\upcite{HochreiterLong}
\parinterval LSTM模型是RNN模型的一种改进。相比RNN仅传递前一时刻的状态$\mathbi{h}_{t-1}$,LSTM会同时传递两部分信息:状态信息$\mathbi{h}_{t-1}$和记忆信息$\mathbi{c}_{t-1}$。这里,$\mathbi{c}_{t-1}$是新引入的变量,它也是循环单元的一部分,用于显性地记录需要记录的历史内容,$\mathbi{h}_{t-1}$$\mathbi{c}_{t-1}$在循环单元中会相互作用。LSTM通过“门”单元来动态地选择遗忘多少以前的信息和记忆多少当前的信息。LSTM中所使用的门单元结构如图\ref{fig:10-11}所示,包括遗忘门,输入门和输出门。图中$\sigma$代表Sigmoid函数,它将函数输入映射为0-1范围内的实数,用来充当门控信号。 \parinterval LSTM模型是RNN模型的一种改进。相比RNN仅传递前一时刻的状态$\mathbi{h}_{t-1}$,LSTM会同时传递两部分信息:状态信息$\mathbi{h}_{t-1}$和记忆信息$\mathbi{c}_{t-1}$。这里,$\mathbi{c}_{t-1}$是新引入的变量,它也是循环单元的一部分,用于显性地记录需要记录的历史内容,$\mathbi{h}_{t-1}$$\mathbi{c}_{t-1}$在循环单元中会相互作用。LSTM通过“门”单元来动态地选择遗忘多少以前的信息和记忆多少当前的信息。LSTM中所使用的门单元结构如图\ref{fig:10-11}所示,包括遗忘门,输入门和输出门。图中$\sigma$代表Sigmoid函数,它将函数输入映射为0-1范围内的实数,用来充当门控信号。
...@@ -573,7 +573,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm ...@@ -573,7 +573,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm
\subsection{门控循环单元} \subsection{门控循环单元}
\parinterval LSTM 通过门控单元控制传递状态,忘记不重要的信息,记住必要的历史信息,在长序列上取得了很好的效果,但是其进行了许多门信号的计算,较为繁琐。{\small\bfnew{门循环单元}}\index{门循环单元}(Gated Recurrent Unit,GRU)\index{Gated Recurrent Unit,GRU}作为一个LSTM的变种,继承了LSTM中利用门控单元控制信息传递的思想,并对LSTM进行了简化\upcite{Cho2014Learning}。它把循环单元状态$\mathbi{h}_t$和记忆$\mathbi{c}_t$合并成一个状态$\mathbi{h}_t$,同时使用了更少的门控单元,大大提升了计算效率。 \parinterval LSTM 通过门控单元控制传递状态,忘记不重要的信息,记住必要的历史信息,在长序列上取得了很好的效果,但是其进行了许多门信号的计算,较为繁琐。{\small\bfnew{门循环单元}}\index{门循环单元}(Gated Recurrent Unit,GRU)\index{Gated Recurrent Unit}作为一个LSTM的变种,继承了LSTM中利用门控单元控制信息传递的思想,并对LSTM进行了简化\upcite{Cho2014Learning}。它把循环单元状态$\mathbi{h}_t$和记忆$\mathbi{c}_t$合并成一个状态$\mathbi{h}_t$,同时使用了更少的门控单元,大大提升了计算效率。
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
\section{卷积神经网络} \section{卷积神经网络}
\parinterval {\small\bfnew{卷积神经网络}}\index{卷积神经网络}(Convolutional Neural Network,CNN)\index{Convolutional Neural Network,CNN} 是一种前馈神经网络,由若干的卷积层与池化层组成。早期,卷积神经网络被应用在语音识别任务上\upcite{Waibel1989PhonemeRU},之后在图像处理领域取得了很好的效果\upcite{LeCun1989BackpropagationAT,726791}。近年来,卷积神经网络已经成为语音、自然语言处理、图像处理任务的基础框架\upcite{DBLP:conf/icassp/ZhangCJ17,DBLP:conf/icassp/DengAY13,Kalchbrenner2014ACN,Kim2014ConvolutionalNN,DBLP:journals/corr/HeZRS15,DBLP:conf/cvpr/HuangLMW17,Girshick2015FastR,He2020MaskR}。在自然语言处理领域,卷积神经网络已经得到广泛应用,在文本分类\upcite{Kalchbrenner2014ACN,Kim2014ConvolutionalNN,Ma2015DependencybasedCN}、情感分析\upcite{Santos2014DeepCN,}、语言建模\upcite{DBLP:conf/acl/WangLLJL15,Dauphin2017LanguageMW}、机器翻译\upcite{devlin-etal-2014-fast,kalchbrenner-blunsom-2013-recurrent,Gehring2017ACE,DBLP:journals/corr/GehringAGYD17,Kaiser2018DepthwiseSC,Wu2019PayLA}等任务中取得不错的成绩。 \parinterval {\small\bfnew{卷积神经网络}}\index{卷积神经网络}(Convolutional Neural Network,CNN)\index{Convolutional Neural Network} 是一种前馈神经网络,由若干的卷积层与池化层组成。早期,卷积神经网络被应用在语音识别任务上\upcite{Waibel1989PhonemeRU},之后在图像处理领域取得了很好的效果\upcite{LeCun1989BackpropagationAT,726791}。近年来,卷积神经网络已经成为语音、自然语言处理、图像处理任务的基础框架\upcite{DBLP:conf/icassp/ZhangCJ17,DBLP:conf/icassp/DengAY13,Kalchbrenner2014ACN,Kim2014ConvolutionalNN,DBLP:journals/corr/HeZRS15,DBLP:conf/cvpr/HuangLMW17,Girshick2015FastR,He2020MaskR}。在自然语言处理领域,卷积神经网络已经得到广泛应用,在文本分类\upcite{Kalchbrenner2014ACN,Kim2014ConvolutionalNN,Ma2015DependencybasedCN}、情感分析\upcite{Santos2014DeepCN,}、语言建模\upcite{DBLP:conf/acl/WangLLJL15,Dauphin2017LanguageMW}、机器翻译\upcite{devlin-etal-2014-fast,kalchbrenner-blunsom-2013-recurrent,Gehring2017ACE,DBLP:journals/corr/GehringAGYD17,Kaiser2018DepthwiseSC,Wu2019PayLA}等任务中取得不错的成绩。
\parinterval\ref{fig:11-1}展示了全连接层和卷积层的结构对比,可以看到在全连接层中,模型考虑了所有的输入,层输出中的每一个元素都依赖于所有输入。这种全连接层适用于大多数任务,但是当处理图像这种网格数据的时候,规模过大的数据会导致模型参数量过大,难以处理。其次,在一些网格数据中,通常具有局部不变性的特征,比如图像中不同位置的相同物体,语言序列中相同的$n$-gram等。而全连接网络很难提取这些局部不变性特征。为此,一些研究人员提出使用卷积层来替换全连接层\upcite{DBLP:conf/eccv/LiuAESRFB16,DBLP:journals/pami/RenHG017} \parinterval\ref{fig:11-1}展示了全连接层和卷积层的结构对比,可以看到在全连接层中,模型考虑了所有的输入,层输出中的每一个元素都依赖于所有输入。这种全连接层适用于大多数任务,但是当处理图像这种网格数据的时候,规模过大的数据会导致模型参数量过大,难以处理。其次,在一些网格数据中,通常具有局部不变性的特征,比如图像中不同位置的相同物体,语言序列中相同的$n$-gram等。而全连接网络很难提取这些局部不变性特征。为此,一些研究人员提出使用卷积层来替换全连接层\upcite{DBLP:conf/eccv/LiuAESRFB16,DBLP:journals/pami/RenHG017}
...@@ -242,7 +242,7 @@ ...@@ -242,7 +242,7 @@
\begin{itemize} \begin{itemize}
\item {\small\bfnew{位置编码}}\index{位置编码}(Position Embedding)\index{Position Embedding}:图中绿色背景框表示源语言端词嵌入部分。相比于基于循环神经网络的翻译模型中的词嵌入,该模型还引入了位置编码,帮助模型获得词位置信息。位置编码具体实现在图\ref{fig:11-12}中没有显示,详见\ref{sec:11.2.1}节。 \item {\small\bfnew{位置编码}}\index{位置编码}(Position Embedding)\index{Position Embedding}:图中绿色背景框表示源语言端词嵌入部分。相比于基于循环神经网络的翻译模型中的词嵌入,该模型还引入了位置编码,帮助模型获得词位置信息。位置编码具体实现在图\ref{fig:11-12}中没有显示,详见\ref{sec:11.2.1}节。
\item {\small\bfnew{卷积层}}{\small\bfnew{门控线性单元}}(Gated Linear Units, GLU\index{Gated Linear Units, GLU}):黄色背景框是卷积模块,这里使用门控线性单元作为非线性函数,之前的研究工作\upcite{Dauphin2017LanguageMW} 表明这种非线性函数更适合于序列建模任务。图中为了简化,只展示了一层卷积,但在实际中为了更好地捕获句子信息,通常使用多层卷积的叠加。 \item {\small\bfnew{卷积层}}{\small\bfnew{门控线性单元}}(Gated Linear Units, GLU\index{Gated Linear Units}):黄色背景框是卷积模块,这里使用门控线性单元作为非线性函数,之前的研究工作\upcite{Dauphin2017LanguageMW} 表明这种非线性函数更适合于序列建模任务。图中为了简化,只展示了一层卷积,但在实际中为了更好地捕获句子信息,通常使用多层卷积的叠加。
\item {\small\bfnew{残差连接}}\index{残差连接}(Residual Connection)\index{Residual Connection}:源语言端和目标语言端的卷积层网络之间,都存在一个从输入到输出的额外连接,即跳接\upcite{DBLP:journals/corr/HeZRS15}。该连接方式确保每个隐层输出都能包含输入序列中的更多信息,同时能够有效提高深层网络的信息传递效率(该部分在图\ref{fig:11-12}中没有显示,具体结构详见\ref{sec:11.2.3}节)。 \item {\small\bfnew{残差连接}}\index{残差连接}(Residual Connection)\index{Residual Connection}:源语言端和目标语言端的卷积层网络之间,都存在一个从输入到输出的额外连接,即跳接\upcite{DBLP:journals/corr/HeZRS15}。该连接方式确保每个隐层输出都能包含输入序列中的更多信息,同时能够有效提高深层网络的信息传递效率(该部分在图\ref{fig:11-12}中没有显示,具体结构详见\ref{sec:11.2.3}节)。
...@@ -418,7 +418,7 @@ ...@@ -418,7 +418,7 @@
\parinterval ConvS2S模型应用了很多工程方面的调整,主要包括: \parinterval ConvS2S模型应用了很多工程方面的调整,主要包括:
\begin{itemize} \begin{itemize}
\vspace{0.5em} \vspace{0.5em}
\item ConvS2S模型使用了{\small\bfnew{Nesterov加速梯度下降法}} \index{Nesterov加速梯度下降法}(Nesterov Accelerated Gradient,NAG)\index{Nesterov Accelerated Gradient,NAG},动量累计的系数设置为0.99,当梯度范数超过0.1时重新进行规范化\upcite{Sutskever2013OnTI} \item ConvS2S模型使用了{\small\bfnew{Nesterov加速梯度下降法}} \index{Nesterov加速梯度下降法}(Nesterov Accelerated Gradient,NAG)\index{Nesterov Accelerated Gradient},动量累计的系数设置为0.99,当梯度范数超过0.1时重新进行规范化\upcite{Sutskever2013OnTI}
\vspace{0.5em} \vspace{0.5em}
\item ConvS2S模型中设置学习率为0.25,每当模型在校验集上的困惑度不再下降时,便在每轮的训练后将学习率降低一个数量级,直至学习率小于一定的阈值(如0.0004)。 \item ConvS2S模型中设置学习率为0.25,每当模型在校验集上的困惑度不再下降时,便在每轮的训练后将学习率降低一个数量级,直至学习率小于一定的阈值(如0.0004)。
......
\tikzstyle{yy} = [circle,minimum height=1cm,text centered,draw=black,thick,drop shadow={shadow xshift=0.3em,yshift=0.8em},fill=white] \begin{tikzpicture}
\begin{tikzpicture}[node distance = 0,scale = 1] \tikzstyle{decoder} = [rectangle,thick,rounded corners,minimum width=5cm,minimum height=0.6cm,text centered,draw=black!70,fill=blue!15]
\begin{scope}[xshift=0.2in]
\tikzstyle{every node}=[scale=1] \begin{scope}
\node (y1)[yy]{\large$y_1$}; \node (aa)[decoder] at (0,0) {};
\node (y2)[yy,right of = y1,xshift=1.5cm]{\large$y_2$}; \node (y2b)[anchor=south] at ([yshift=-2.5em]aa.south) {$y_2$};
\node (y3)[yy,right of = y2,xshift=1.5cm]{\large$y_3$}; \node (label)[anchor=south] at ([yshift=-1.8em]y2b.south) {\small{(a) 自回归解码}};
\node (y4)[yy,right of = y3,xshift=1.5cm]{\large$y_4$}; \node (y1b)[anchor=east] at ([xshift=-2.5em]y2b.east) {$y_1$};
\node (y5)[yy,right of = y4,xshift=1.5cm]{\large$y_5$}; \node (sos)[anchor=east] at ([xshift=-4.3em]y2b.east) {\small{<sos>}};
\node (y6)[yy,right of = y5,xshift=1.5cm]{\large$y_6$}; \node (y3b)[anchor=west] at ([xshift=2.5em]y2b.west) {$y_3$};
\node [anchor=north,font=\scriptsize] (labela) at ([xshift=1.8em,yshift=-2em]y3.south) {(a) 自回归模型}; \node (y4b)[anchor=west] at ([xshift=5em]y2b.west) {$y_4$};
\draw[->,thick] (y1.north) .. controls ([yshift=1.5em]y1.north) and ([yshift=1.5em]y3.north).. (y3.north); \node (y3a)[anchor=north] at ([yshift=2.5em]aa.north) {$y_3$};
\draw[->,thick] (y1.north) .. controls ([yshift=2em]y1.north) and ([yshift=2em]y4.north).. (y4.north); \node (y2a)[anchor=east] at ([xshift=-2.5em]y3a.east) {$y_2$};
\draw[->,thick] (y1.south) .. controls ([yshift=-1.5em]y1.south) and ([yshift=-1.5em]y5.south).. (y5.south); \node (y1a)[anchor=east] at ([xshift=-5em]y3a.east) {$y_1$};
\draw[->,thick] (y1.south) .. controls ([yshift=-2em]y1.south) and ([yshift=-2em]y6.south).. (y6.south); \node (y4a)[anchor=west] at ([xshift=2.5em]y3a.west) {$y_4$};
\node (eos)[anchor=west] at ([xshift=4.3em]y3a.west) {\small{<eos>}};
\draw[->,thick] (y2.north) .. controls ([yshift=1.5em]y2.north) and ([yshift=1.5em]y4.north).. (y4.north);
\draw[->,thick] (y2.south) .. controls ([yshift=-1.5em]y2.south) and ([yshift=-1.6em]y5.south).. (y5.south); \draw [->,very thick,dotted] ([xshift=-0.3em]y1a.east) .. controls +(east:0.5) and +(west:0.5) ..([xshift=0.3em]y1b.west);
\draw[->,thick] (y2.south) .. controls ([yshift=-2em]y2.south) and ([yshift=-2em]y6.south).. (y6.south); \draw [->,very thick,dotted] ([xshift=-0.3em]y2a.east) .. controls +(east:0.5) and +(west:0.5) ..([xshift=0.3em]y2b.west);
\draw [->,very thick,dotted] ([xshift=-0.3em]y3a.east) .. controls +(east:0.5) and +(west:0.5) ..([xshift=0.3em]y3b.west);
\draw [->,very thick,dotted] ([xshift=-0.3em]y4a.east) .. controls +(east:0.5) and +(west:0.5) ..([xshift=0.3em]y4b.west);
\draw[->,thick] (y3.south) .. controls ([yshift=-1.5em]y3.south) and ([yshift=-1.5em]y5.south).. (y5.south);
\draw[->,thick] (y3.south) .. controls ([yshift=-2em]y3.south) and ([yshift=-2em]y6.south).. (y6.south); \node (autodecoder)[decoder] at (0,0) {自回归编码器};
\draw[->,thick] (y4.south) .. controls ([yshift=-1.5em]y4.south) and ([yshift=-1.5em]y6.south).. (y6.south); \draw [->,thick]([yshift=0em]y1b.north) to ([yshift=1.15em]y1b.north);
\draw [->,thick]([yshift=0em]y2b.north) to ([yshift=1.15em]y2b.north);
\draw[->,red,very thick](y1.east)to(y2.west); \draw [->,thick]([yshift=0em]y3b.north) to ([yshift=1.15em]y3b.north);
\draw[->,red,very thick](y2.east)to(y3.west); \draw [->,thick]([yshift=0em]y4b.north) to ([yshift=1.15em]y4b.north);
\draw[->,red,very thick](y3.east)to(y4.west); \draw [->,thick]([yshift=0em]sos.north) to ([yshift=1.15em]sos.north);
\draw[->,red,very thick](y4.east)to(y5.west);
\draw[->,red,very thick](y5.east)to(y6.west); \draw [->,thick]([yshift=-1.15em]y1a.south) to (y1a.south);
\draw [->,thick]([yshift=-1.15em]y2a.south) to (y2a.south);
\draw [->,thick]([yshift=-1.15em]y3a.south) to (y3a.south);
\draw [->,thick]([yshift=-1.15em]y4a.south) to (y4a.south);
\draw [->,thick]([yshift=-1.15em]eos.south) to (eos.south);
\end{scope} \end{scope}
\begin{scope}[yshift=-1.45in] \begin{scope}[yshift=-1.55in]
\tikzstyle{rec} = [rectangle,minimum width=2.8cm,minimum height=1.5cm,text centered,draw=black,dashed] \node (aa) [decoder] at (0,0) {};
\tikzstyle{every node}=[scale=1] \node (y1y2b)[rectangle,anchor=south,inner sep=0.25em,densely dashed,draw] at ([yshift=-2.6em]aa.south) {$y_1\;y_2$};
\node (y1)[yy]{\large$y_1$}; \node (label)[anchor=south] at ([yshift=-2.1em]y1y2b.south) {\small{(b) 半自回归解码}};
\node (y2)[yy,right of = y1,xshift=1.5cm]{\large$y_2$}; \node (sos)[anchor=east] at ([xshift=-4.55em]y1y2b.east) {\small{<sos>}};
\node (y3)[yy,right of = y2,xshift=2cm]{\large$y_3$}; \node (y3y4b)[rectangle,anchor=west,inner sep=0.25em,densely dashed,draw] at ([xshift=4.7em]y1y2b.west) {$y_3\;y_4$};
\node (y4)[yy,right of = y3,xshift=1.5cm]{\large$y_4$};
\node (y5)[yy,right of = y4,xshift=2cm]{\large$y_5$}; \node (y3y4a)[rectangle,anchor=north,inner sep=0.25em,densely dashed,draw] at ([yshift=2.6em]aa.north) {$y_3\;y_4$};
\node (y6)[yy,right of = y5,xshift=1.5cm]{\large$y_6$}; \node (y1y2a)[rectangle,anchor=west,inner sep=0.25em,densely dashed,draw] at ([xshift=-4.7em]y3y4a.west) {$y_1\;y_2$};
\node (rec1)[rec,right of = y1,xshift=0.75cm]{}; \node (eos)[anchor=east] at ([xshift=4.7em]y3y4a.east) {\small{<eos>}};
\node (rec2)[rec,right of = y3,xshift=0.75cm]{};
\node (rec3)[rec,right of = y5,xshift=0.75cm]{}; \draw [->,very thick,dotted] ([xshift=-0em]y1y2a.east) .. controls +(east:0.5) and +(west:0.5) ..([xshift=0em]y1y2b.west);
\node [anchor=north,font=\scriptsize] (labelb) at ([xshift=2.2em,yshift=-1em]y3.south) {(b) 半自回归模型}; \draw [->,very thick,dotted] ([xshift=-0em]y3y4a.east) .. controls +(east:0.5) and +(west:0.5) ..([xshift=0em]y3y4b.west);
\draw[->,red,very thick](rec1.east)to(rec2.west); \node (autodecoder)[decoder] at (0,0) {半自回归编码器};
\draw[->,red,very thick](rec2.east)to(rec3.west);
\draw [->,thick]([yshift=0.05em]sos.north) to ([yshift=1.38em]sos.north);
\draw[->,thick] (rec1.north) .. controls ([yshift=2.5em]rec1.north) and ([yshift=2.5em]rec3.north).. (rec3.north); \draw [->,thick]([yshift=0em]y1y2b.north) to ([yshift=1.38em]y1y2b.north);
\draw [->,thick]([yshift=0em]y3y4b.north) to ([yshift=1.38em]y3y4b.north);
\draw [->,thick]([yshift=-1.5em]y1y2a.south) to ([yshift=-0.02em]y1y2a.south);
\draw [->,thick]([yshift=-1.5em]y3y4a.south) to ([yshift=-0.02em]y3y4a.south);
\draw [->,thick]([yshift=-1.5em]eos.south) to ([yshift=-0.05em]eos.south);
\end{scope} \end{scope}
\begin{scope}[xshift=0.3in,yshift=-2.35in]
\tikzstyle{every node}=[scale=1] \begin{scope}[yshift=-3.1in]
\node (y1)[yy]{\large$y_1$}; \node (aa) [decoder]at (0,0) {非自回归模型};
\node (y2)[yy,right of = y1,xshift=1.5cm]{\large$y_2$}; \node (y2b)[anchor=south] at ([xshift=-1.5em,yshift=-2.5em]aa.south) {$y_2$};
\node (y3)[yy,right of = y2,xshift=1.5cm]{\large$y_3$}; \node (label)[anchor=south] at ([yshift=-4.3em]aa.south) {\small{(c) 非自回归解码}};
\node (y4)[yy,right of = y3,xshift=1.5cm]{\large$y_4$}; \node (y1b)[anchor=east] at ([xshift=-3em]y2b.east) {$y_1$};
\node (y5)[yy,right of = y4,xshift=1.5cm]{\large$y_5$}; \node (y3b)[anchor=west] at ([xshift=3em]y2b.west) {$y_3$};
\node (y6)[yy,right of = y5,xshift=1.5cm]{\large$y_6$}; \node (y4b)[anchor=west] at ([xshift=6em]y2b.west) {$y_4$};
\node [anchor=north,font=\scriptsize] (labelc) at ([xshift=1.5em,yshift=-0.5em]y3.south) {(c) 非自回归模型};
\node (y2a)[anchor=north] at ([xshift=-1.5em,yshift=2.5em]aa.north) {$y_2$};
\node (y1a)[anchor=east] at ([xshift=-3em]y2a.east) {$y_1$};
\node (y3a)[anchor=west] at ([xshift=3em]y2a.west) {$y_3$};
\node (y4a)[anchor=west] at ([xshift=6em]y2a.west) {$y_4$};
\draw [->,thick]([yshift=0em]y1b.north) to ([yshift=1.15em]y1b.north);
\draw [->,thick]([yshift=0em]y2b.north) to ([yshift=1.15em]y2b.north);
\draw [->,thick]([yshift=0em]y3b.north) to ([yshift=1.15em]y3b.north);
\draw [->,thick]([yshift=0em]y4b.north) to ([yshift=1.15em]y4b.north);
\draw [->,thick]([yshift=-1.15em]y1a.south) to (y1a.south);
\draw [->,thick]([yshift=-1.15em]y2a.south) to (y2a.south);
\draw [->,thick]([yshift=-1.15em]y3a.south) to (y3a.south);
\draw [->,thick]([yshift=-1.15em]y4a.south) to (y4a.south);
\end{scope} \end{scope}
\end{tikzpicture} \end{tikzpicture}
\ No newline at end of file
\definecolor{Melon}{rgb}{0.99, 0.74, 0.71} \begin{tikzpicture}
\definecolor{Goldenrod}{rgb}{0.85, 0.65, 0.13} \tikzstyle{encoder} = [rectangle,thick,rounded corners,minimum width=1.9cm,minimum height=1.2cm,text centered,draw=black!70,fill=red!25]
\definecolor{Cerulean}{rgb}{0, 0.48, 0.65} \tikzstyle{autodecoder} = [rectangle,thick,rounded corners,minimum width=3cm,minimum height=1.2cm,text centered,draw=black!70,fill=blue!15]
\definecolor{Gray}{rgb}{0.5, 0.5, 0.5} \tikzstyle{nonautodecoder} = [rectangle,thick,rounded corners,minimum width=3.4cm,minimum height=1.2cm,text centered,draw=black!70,fill=blue!15]
\definecolor{aliceblue}{rgb}{0.94, 0.97, 1.0}
\tikzstyle{emb} = [rectangle,very thick,rounded corners,minimum width=3cm,minimum height=0.85cm,text centered,draw=black!70,fill=red!15] \node (encoder)[encoder] at (0,0) {编码器};
\tikzstyle{sa} = [rectangle,very thick,rounded corners,minimum width=3cm,minimum height=1cm,text centered,draw=black!70,fill=yellow!20] \node (text_left)[anchor=south] at ([yshift=-3em]encoder.south) {\footnotesize{\ \ 熟睡}};
\tikzstyle{edsa} = [rectangle,very thick,rounded corners,minimum width=3cm,minimum height=1.5cm,text centered,align=center,draw=black!70,fill=yellow!20] \node (autodecoder)[autodecoder,right of=encoder,xshift=6em ] {自回归解码器};
\tikzstyle{an} = [rectangle,very thick,rounded corners,minimum width=3.5cm,minimum height=0.7cm,text centered,draw=black!70,fill=aliceblue] \node (text_mid1)[anchor=north] at ([yshift=3em]autodecoder.north) {\scriptsize{NP1\ VP3\ <eos>}};
\tikzstyle{ff} = [rectangle,very thick,rounded corners,minimum width=3cm,minimum height=1cm,text centered,align=center,draw=black!70,fill=orange!20] \node (text_mid2)[anchor=south] at ([yshift=-3em]autodecoder.south) {\scriptsize{<sos>\ NP1\ VP3}};
\tikzstyle{linear} = [rectangle,very thick,rounded corners,minimum width=3cm,minimum height=0.7cm,text centered,draw=black!70,fill=green!20] \node (nonautodecoder)[nonautodecoder,right of=autodecoder,xshift=10.5em ] {非自回归解码器};
\tikzstyle{softmax} = [rectangle,very thick,rounded corners,minimum width=3cm,minimum height=0.7cm,text centered,draw=black!70,fill=blue!20] \node (text_right1)[anchor=north] at ([yshift=3em]nonautodecoder.north) {\scriptsize{NP1\;Cats\;VP3\;sleep\;a\;lot}};
\begin{tikzpicture}[node distance = 0,scale = 0.7] \node (text_right2)[anchor=south] at ([yshift=-3em]nonautodecoder.south) {\scriptsize{NP1\;<Mask>\;VP3\;<Mask>\;<Mask>\;<Mask>}};
\tikzstyle{every node}=[scale=0.7]
%left
\node(left_Emb)[emb]{\footnotesize{\textbf{Input Embedding}}}; \draw[->,thick] ([yshift=0.1em]text_left.north) to (encoder.south);
\node(left_cir)[circle,very thick,minimum width=0.5cm,draw=black!70,above of = left_Emb,yshift=1.1cm]{}; \draw[->,thick] ([yshift=0.1em]text_mid2.north) to (autodecoder.south);
\draw[-,very thick,draw=black!70]([xshift=0.03cm]left_cir.west)--([xshift=-0.03cm]left_cir.east); \draw[->,thick] (autodecoder.north) to ([yshift=-0.1em]text_mid1.south);
\draw[-,very thick,draw=black!70]([yshift=-0.03cm]left_cir.north)--([yshift=0.03cm]left_cir.south); \draw[->,thick] ([yshift=0.1em]text_right2.north) to (nonautodecoder.south);
\node(left_cir2)[circle,very thick,minimum width=0.5cm,draw=black!70,left of = left_cir,xshift=-1.5cm]{}; \draw[->,thick] (nonautodecoder.north) to ([yshift=-0.1em]text_right1.south);
\draw[very thick,draw=black!70]([xshift=0.04cm]left_cir2.west)sin([xshift=0.14cm,yshift=0.08cm]left_cir2.west)cos([xshift=0.25cm]left_cir2.west)sin([xshift=0.36cm,yshift=-0.08cm]left_cir2.west)cos([xshift=-0.03cm]left_cir2.east); \draw[->,thick] (text_mid1.east) -- ([xshift=2.1em]text_mid1.east) -- ([xshift=-1.2em]text_right2.west)-- (text_right2.west);
\draw [->,very thick,draw=black!70](left_cir2.east)--(left_cir.west); \draw[-,thick] (encoder.north) to ([yshift=0.8em]encoder.north);
\node(left_Self)[sa,above of = left_cir,yshift=1.6cm]{\textbf{Self-Attention}}; \draw[-,thick,dashed] ([yshift=0.8em]encoder.north) -- ([xshift=-7em,yshift=0.8em]nonautodecoder.north) -- ([xshift=-2.5em]nonautodecoder.west);
\node(left_Add_bottom)[an,above of = left_Self,yshift=1.1cm]{\textbf{Add \& LayerNorm}}; \draw[->,thick]([xshift=-2.5em]nonautodecoder.west) to (nonautodecoder.west);
\node(left_Feed)[ff,above of = left_Add_bottom,yshift=1.2cm]{\textbf{Feed Forward}\\\textbf{Network}};
\node(left_Add_top)[an,above of = left_Feed,yshift=1.1cm]{\textbf{Add \& LayerNorm}};
\node(left_text_bottom)[below of = left_Emb,xshift=0cm,yshift=-1.2cm,scale=1]{\small\sffamily\bfseries{\quad\quad 我的\quad}};
\draw [->,very thick,draw=black!70]([yshift=-0.5cm]left_Emb.south)--(left_Emb.south);
\draw [->,very thick,draw=black!70](left_Emb.north)--(left_cir.south);
\draw [->,very thick,draw=black!70](left_cir.north)--(left_Self.south);
\draw [->,very thick,draw=black!70](left_Self.north)--(left_Add_bottom.south);
\draw [->,very thick,draw=black!70](left_Add_bottom.north)--(left_Feed.south);
\draw [->,very thick,draw=black!70](left_Feed.north)--(left_Add_top.south);
\draw [->,very thick,draw=black!70]([yshift=0.35cm]left_cir.north)--([xshift=-2.27cm,yshift=0.35cm]left_cir.north)--([xshift=-0.5cm]left_Add_bottom.west)--(left_Add_bottom.west);
\draw [->,very thick,draw=black!70]([yshift=0.1cm]left_Add_bottom.north)--([xshift=-2.27cm,yshift=0.1cm]left_Add_bottom.north)--([xshift=-0.5cm]left_Add_top.west)--(left_Add_top.west);
\draw[->,very thick,draw=black!70,in=250,out=0] ([yshift=0.5cm]left_cir.north)to([xshift=0.9cm]left_Self.south);
\draw[->,very thick,draw=black!70,in=290,out=180] ([yshift=0.5cm]left_cir.north)to([xshift=-0.9cm]left_Self.south);
%middle
\node(Emb)[emb,right of = left_Emb,xshift=5cm]{\footnotesize{\textbf{Parser Embedding}}};
\node(cir)[circle,very thick,draw=black!70,minimum width=0.5cm,above of = Emb,yshift=1.1cm]{};
\draw[-,very thick,draw=black!70]([xshift=0.03cm]cir.west)--([xshift=-0.03cm]cir.east);
\draw[-,very thick,draw=black!70]([yshift=-0.03cm]cir.north)--([yshift=0.03cm]cir.south);
\node(cir2)[circle,very thick,minimum width=0.5cm,draw=black!70,right of = cir,xshift=1.5cm]{};
\draw[very thick,draw=black!70]([xshift=0.04cm]cir2.west)sin([xshift=0.14cm,yshift=0.08cm]cir2.west)cos([xshift=0.25cm]cir2.west)sin([xshift=0.36cm,yshift=-0.08cm]cir2.west)cos([xshift=-0.03cm]cir2.east);
\node(Self)[sa,above of = cir,yshift=1.6cm]{\textbf{Self-Attention}};
\node(Add_bottom)[an,above of = Self,yshift=1.1cm]{\textbf{Add \& LayerNorm}};
\node(ED_Self)[edsa,above of = Add_bottom,yshift=1.8cm]{\textbf{Encoder-Decoder}\\ \textbf{Attention}};
\node(Add_mid)[an,above of = ED_Self,yshift=1.35cm]{\textbf{Add \& LayerNorm}};
\node(Feed)[ff,above of = Add_mid,yshift=1.2cm]{\textbf{Feed Forward}\\ \textbf{Network}};
\node(Add_top)[an,above of = Feed,yshift=1.1cm]{\textbf{Add \& LayerNorm}};
\node(Linear)[linear,above of = Add_top,yshift=1.3cm]{\textbf{Linear}};
\node(Softmax)[softmax,above of = Linear,yshift=1cm]{\textbf{Softmax}};
\node(text_bottom)[below of = Emb,xshift=0.2cm,yshift=-1.2cm,scale=0.9]{\textbf{VP1\ \ VP3\ \ <eos>}};
\node(text_top)[above of = Softmax,xshift=0.2cm,yshift=1.2cm,scale=0.9]{\textbf{VP1\ \ VP3\ \ <eos>}};
\draw [->,very thick,draw=black!70]([yshift=-0.5cm]Emb.south)--(Emb.south);
\draw [->,very thick,draw=black!70]([xshift=0.9cm,yshift=-0.5cm]Emb.south)--([xshift=0.9cm]Emb.south);
\draw [->,very thick,draw=black!70]([xshift=-0.9cm,yshift=-0.5cm]Emb.south)--([xshift=-0.9cm]Emb.south);
\draw [->,very thick,draw=black!70](Emb.north)--(cir.south);
\draw [->,very thick,draw=black!70](cir.north)--(Self.south);
\draw [->,very thick,draw=black!70](cir2.west)--(cir.east);
\draw[->,very thick,draw=black!70,in=250,out=0] ([yshift=0.5cm]cir.north)to([xshift=0.9cm]Self.south);
\draw[->,very thick,draw=black!70,in=290,out=180] ([yshift=0.5cm]cir.north)to([xshift=-0.9cm]Self.south);
\draw [->,very thick,draw=black!70](Self.north)--(Add_bottom.south);
\draw [->,very thick,draw=black!70](ED_Self.north)--(Add_mid.south);
\draw [->,very thick,draw=black!70](Add_mid.north)--(Feed.south);
\draw [->,very thick,draw=black!70](Feed.north)--(Add_top.south);
\draw [->,very thick,draw=black!70](Add_top.north)--(Linear.south);
\draw [->,very thick,draw=black!70](Linear.north)--(Softmax.south);
\draw [->,very thick,draw=black!70](Softmax.north)--([yshift=0.5cm]Softmax.north);
\draw [->,very thick,draw=black!70]([yshift=0.35cm]cir.north)--([xshift=2.27cm,yshift=0.35cm]cir.north)--([xshift=0.5cm]Add_bottom.east)--(Add_bottom.east);
\draw [->,very thick,draw=black!70]([yshift=0.1cm]Add_mid.north)--([xshift=2.27cm,yshift=0.1cm]Add_mid.north)--([xshift=0.5cm]Add_top.east)--(Add_top.east);
\draw [->,very thick,draw=black!70](left_Add_top.north)--([yshift=0.6cm]left_Add_top.north)--([xshift=2.27cm,yshift=0.6cm]left_Add_top.north)--([xshift=2.27cm,yshift=-2cm]left_Add_top.north)--([xshift=5cm,yshift=-2cm]left_Add_top.north)--(ED_Self.south);
\draw [->,very thick,draw=black!70]([xshift=0.9cm,yshift=-0.45cm]ED_Self.south)--([xshift=0.9cm]ED_Self.south);
\draw [->,very thick,draw=black!70]([xshift=-0.9cm,yshift=-0.35cm]ED_Self.south)--([xshift=-0.9cm]ED_Self.south);
\draw [->,very thick,draw=black!70](Add_bottom.north)--([yshift=0.2cm]Add_bottom.north)--([xshift=2.27cm,yshift=0.2cm]Add_bottom.north)--([xshift=0.5cm]Add_mid.east)--(Add_mid.east);
%right
\node(right_Emb)[emb,right of = Emb,xshift=5.5cm]{\footnotesize{\textbf{Parser Embedding}}};
\node(right_cir)[circle,very thick,minimum width=0.5cm,draw=black!70,above of = right_Emb,yshift=1.1cm]{};
\draw[-,very thick,draw=black!70]([xshift=0.03cm]right_cir.west)--([xshift=-0.03cm]right_cir.east);
\draw[-,very thick,draw=black!70]([yshift=-0.03cm]right_cir.north)--([yshift=0.03cm]right_cir.south);
\node(right_cir2)[circle,very thick,minimum width=0.5cm,draw=black!70,right of = right_cir,xshift=1.5cm]{};
\draw[very thick,draw=black!70]([xshift=0.04cm]right_cir2.west)sin([xshift=0.14cm,yshift=0.08cm]right_cir2.west)cos([xshift=0.25cm]right_cir2.west)sin([xshift=0.36cm,yshift=-0.08cm]right_cir2.west)cos([xshift=-0.03cm]right_cir2.east);
\node(right_Self)[sa,above of = right_cir,yshift=1.6cm]{\textbf{Self-Attention}};
\node(right_Add_bottom)[an,above of = right_Self,yshift=1.1cm]{\textbf{Add \& LayerNorm}};
\node(right_ED_Self)[edsa,above of = right_Add_bottom,yshift=1.8cm]{\textbf{Encoder-Decoder}\\\textbf{Attention}};
\node(right_Add_mid)[an,above of = right_ED_Self,yshift=1.35cm]{\textbf{Add \& LayerNorm}};
\node(right_Feed)[ff,above of = right_Add_mid,yshift=1.2cm]{\textbf{Feed Forward}\\\textbf{Network}};
\node(right_Add_top)[an,above of = right_Feed,yshift=1.1cm]{\textbf{Add \& LayerNorm}};
\node(right_Linear)[linear,above of = right_Add_top,yshift=1.3cm]{\textbf{Linear}};
\node(right_Softmax)[softmax,above of = right_Linear,yshift=1cm]{\textbf{Softmax}};
\node(right_text_bottom)[below of = right_Emb,xshift=1.2cm,yshift=-1.2cm,scale=0.8]{\textbf{VP1 <Mask> VP3 <Mask> <Mask> <Mask>}};
\node(right_text_top)[above of = right_Softmax,xshift=0cm,yshift=1.2cm,scale=0.9]{\textbf{VP1 I VP3 love my dog}};
\draw [->,very thick,draw=black!70]([yshift=-0.5cm]right_Emb.south)--(right_Emb.south);
\draw [->,very thick,draw=black!70](right_Emb.north)--(right_cir.south);
\draw [->,very thick,draw=black!70](right_cir.north)--(right_Self.south);
\draw [->,very thick,draw=black!70](right_cir2.west)--(right_cir.east);
\draw[->,very thick,draw=black!70,in=250,out=0] ([yshift=0.5cm]right_cir.north)to([xshift=0.9cm]right_Self.south);
\draw[->,very thick,draw=black!70,in=290,out=180] ([yshift=0.5cm]right_cir.north)to([xshift=-0.9cm]right_Self.south);
\draw [->,very thick,draw=black!70](right_Self.north)--(right_Add_bottom.south);
\draw [->,very thick,draw=black!70](right_ED_Self.north)--(right_Add_mid.south);
\draw [->,very thick,draw=black!70](right_Add_mid.north)--(right_Feed.south);
\draw [->,very thick,draw=black!70](right_Feed.north)--(right_Add_top.south);
\draw [->,very thick,draw=black!70](right_Add_top.north)--(right_Linear.south);
\draw [->,very thick,draw=black!70](right_Linear.north)--(right_Softmax.south);
\draw [->,very thick,draw=black!70](right_Softmax.north)--([yshift=0.5cm]right_Softmax.north);
\draw [->,very thick,draw=black!70]([yshift=0.35cm]right_cir.north)--([xshift=2.27cm,yshift=0.35cm]right_cir.north)--([xshift=0.5cm]right_Add_bottom.east)--(right_Add_bottom.east);
\draw [->,very thick,draw=black!70]([yshift=0.1cm]right_Add_mid.north)--([xshift=2.27cm,yshift=0.1cm]right_Add_mid.north)--([xshift=0.5cm]right_Add_top.east)--(right_Add_top.east);
\draw [->,very thick,draw=black!70]([xshift=0.9cm,yshift=-0.45cm]right_ED_Self.south)--([xshift=0.9cm]right_ED_Self.south);
\draw [->,very thick,draw=black!70]([xshift=-0.9cm,yshift=-0.35cm]right_ED_Self.south)--([xshift=-0.9cm]right_ED_Self.south);
\draw [-,very thick,dashed,draw=black!70]([xshift=2.2cm,yshift=0.6cm]left_Add_top.north)--([xshift=2.2cm,yshift=3.5cm]left_Add_top.north)--([xshift=8cm,yshift=3.5cm]left_Add_top.north)--([xshift=8cm,yshift=-2cm]left_Add_top.north);
\draw [->,very thick,draw=black!70](right_Add_bottom.north)--([yshift=0.2cm]right_Add_bottom.north)--([xshift=2.27cm,yshift=0.2cm]right_Add_bottom.north)--([xshift=0.5cm]right_Add_mid.east)--(right_Add_mid.east);
\draw [->,very thick,draw=black!70]([xshift=8cm,yshift=-2cm]left_Add_top.north)--([yshift=0.3cm]right_Add_bottom.north)--(right_ED_Self.south);
\draw [->,very thick,draw=black!70](Softmax.east)--([xshift=1.2cm]Softmax.east)--([xshift=1.2cm,yshift=-12.75cm]Softmax.east)--([xshift=2cm,yshift=-12.75cm]Softmax.east);
%module
\node(left_module)[rectangle,very thick,rounded corners,minimum width=4.5cm,minimum height=5.3cm,text centered,draw=black!70,above of = left_Emb,xshift=-0.25cm,yshift=4.1cm]{};
\node(module)[rectangle,very thick,rounded corners,minimum width=4.5cm,minimum height=8.4cm,text centered,draw=black!70,above of = Emb,xshift=0.25cm,yshift=5.65cm]{};
\node(right_module)[rectangle,very thick,rounded corners,minimum width=4.5cm,minimum height=8.4cm,text centered,draw=black!70,above of = right_Emb,xshift=0.25cm,yshift=5.65cm]{};
\node(N)[right of = right_ED_Self,xshift=3cm,yshift=-3.7cm,scale=1.3]{\textbf{$N\times$}};
\node(left_N)[left of = left_Feed,xshift=-3cm,yshift=-3cm,scale=1.3]{\textbf{$N\times$}};
\node(M)[left of = ED_Self,xshift=-2.5cm,yshift=-3.7cm,scale=1.3]{\textbf{$M\times$}};
\end{tikzpicture} \end{tikzpicture}
\ No newline at end of file
...@@ -257,7 +257,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -257,7 +257,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 一种解决问题的思路是从训练和推断的行为和目标不一致的角度切入。比如,为了解决曝光偏置问题\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}。从这个角度说,上述问题的成因也较为复杂,因此需要同时考虑模型错误和搜索错误。
...@@ -541,7 +541,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4} ...@@ -541,7 +541,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\end{figure} \end{figure}
%---------------------------------------------- %----------------------------------------------
\parinterval 还有一种做法引入了轻量级的自回归{\small\sffamily\bfseries{调序}}\index{调序}(Reordering\index{Reordering}模块\upcite{Ran2019GuidingNN}。为了解决非自回归模型解码搜索空间过大的问题,可以使用调序技术在相对较少的翻译候选上进行自回归模型的计算。如图\ref{fig:14-22}所示,该方法对源语言句子进行重新排列转换成由源语言单词组成但位于目标语言结构中的伪译文,然后将伪译文进一步转换成目标语言以获得最终的翻译。其中,这个调序模块可以是一个轻量自回归模型,例如,一层的循环神经网络。 \parinterval 还有一种做法引入了轻量级的自回归调序模块\upcite{Ran2019GuidingNN}。为了解决非自回归模型解码搜索空间过大的问题,可以使用调序技术在相对较少的翻译候选上进行自回归模型的计算。如图\ref{fig:14-22}所示,该方法对源语言句子进行重新排列转换成由源语言单词组成但位于目标语言结构中的伪译文,然后将伪译文进一步转换成目标语言以获得最终的翻译。其中,这个调序模块可以是一个轻量自回归模型,例如,一层的循环神经网络。
%---------------------------------------------------------------------- %----------------------------------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
......
...@@ -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 大多数情况下,目标语言端语言模型的使用可以提高译文的流畅度。不过,它并不会增加翻译结果对源语言句子表达的充分性,即源语言句子的信息是否被充分体现到了译文中。也有一些研究发现,神经机器翻译过于关注译文的流畅度,但是充分性的问题没有得到很好考虑,比如,神经机器翻译系统的结果中经常出现漏译等问题。也有一些研究人员提出控制翻译充分性的方法,让译文在流畅度和充分性之间达到平衡\upcite{DBLP:conf/acl/TuLLLL16,li-etal-2018-simple,DBLP:journals/tacl/TuLLLL17}
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
% NEW SUB-SUB-SECTION % NEW SUB-SUB-SECTION
......
...@@ -472,7 +472,7 @@ ...@@ -472,7 +472,7 @@
\subsection{什么是篇章级翻译} \subsection{什么是篇章级翻译}
\parinterval “篇章”在这里指一系列连续的段落或句子所构成的整体,其中各个句子间从形式和内容上都具有一定的连贯性和一致性\upcite{jurafsky2000speech}。这些联系主要体现在{\small\sffamily\bfseries{衔接}}\index{衔接}(Cohesion \index{Cohesion})以及{\small\sffamily\bfseries{连贯}}\index{连贯}(Coherence \index{Coherence}两个方面。其中衔接体现在显性的语言成分和结构上,包括篇章中句子间的语法和词汇的联系,而连贯体现在各个句子之间的逻辑和语义的联系上。因此,篇章级翻译的目的就是要将这些上下文之间的联系考虑在内,从而生成比句子级翻译更连贯和准确的翻译结果(如实例\ref{eg:17-1})。但是由于不同语言的特性多种多样,上下文信息在篇章级翻译中的作用也不尽相同。比如在德语中名词是分词性的,因此在代词翻译的过程中需要根据其先行词的词性进行区分,而这种现象在其它不区分词性的语言中是不存在的。这意味着篇章级翻译在不同的语种中可能对应多种不同的上下文现象。 \parinterval “篇章”在这里指一系列连续的段落或句子所构成的整体,其中各个句子间从形式和内容上都具有一定的连贯性和一致性\upcite{jurafsky2000speech}。这些联系主要体现在{\small\sffamily\bfseries{衔接}}\index{衔接}(Cohesion \index{Cohesion})以及连贯两个方面。其中衔接体现在显性的语言成分和结构上,包括篇章中句子间的语法和词汇的联系,而连贯体现在各个句子之间的逻辑和语义的联系上。因此,篇章级翻译的目的就是要将这些上下文之间的联系考虑在内,从而生成比句子级翻译更连贯和准确的翻译结果(如实例\ref{eg:17-1})。但是由于不同语言的特性多种多样,上下文信息在篇章级翻译中的作用也不尽相同。比如在德语中名词是分词性的,因此在代词翻译的过程中需要根据其先行词的词性进行区分,而这种现象在其它不区分词性的语言中是不存在的。这意味着篇章级翻译在不同的语种中可能对应多种不同的上下文现象。
\begin{example} \begin{example}
上下文句子:我上周针对这个问题做出解释并咨询了他的意见。 上下文句子:我上周针对这个问题做出解释并咨询了他的意见。
......
...@@ -106,7 +106,7 @@ ...@@ -106,7 +106,7 @@
\section{交互式机器翻译} \section{交互式机器翻译}
\parinterval 机器翻译的结果会存在错误,因此很多时候需要人工的修改才能被使用。例如,在{\small\bfnew 译后编辑}\index{译后编辑}(Post-editing)\index{Post-editing}中,译员对机器翻译的译文进行修改,最终使译文达到要求。但是,译后编辑的成本仍然很高,因为它需要译员阅读机器翻译的结果,同时做出修改的动作。有时候,由于译文修改的内容较为复杂,译后编辑的时间甚至比人工直接翻译源语言句子的时间都长。因此在机器翻译应用中,需要更高效的方式调整机器翻译的结果,使其达到可用。比如,可以使用质量评估方法(见{\chapterfour}),选择模型置信度较高的译文进行译后编辑,对置信度低的译文直接进行人工翻译。而另一种思路是,让人的行为直接影响机器翻译生成译文的过程,让人和机器翻译系统进行交互,在不断的修正中生成更好的译文。这种方法也被称作{\small\bfnew 交互式机器翻译}\index{交互式机器翻译}(Interactive Machine Translation,,IMT)\index{Interactive Machine Translation,,IMT} \parinterval 机器翻译的结果会存在错误,因此很多时候需要人工的修改才能被使用。例如,在{\small\bfnew 译后编辑}\index{译后编辑}(Post-editing)\index{Post-editing}中,译员对机器翻译的译文进行修改,最终使译文达到要求。但是,译后编辑的成本仍然很高,因为它需要译员阅读机器翻译的结果,同时做出修改的动作。有时候,由于译文修改的内容较为复杂,译后编辑的时间甚至比人工直接翻译源语言句子的时间都长。因此在机器翻译应用中,需要更高效的方式调整机器翻译的结果,使其达到可用。比如,可以使用质量评估方法(见{\chapterfour}),选择模型置信度较高的译文进行译后编辑,对置信度低的译文直接进行人工翻译。而另一种思路是,让人的行为直接影响机器翻译生成译文的过程,让人和机器翻译系统进行交互,在不断的修正中生成更好的译文。这种方法也被称作{\small\bfnew 交互式机器翻译}\index{交互式机器翻译}(Interactive Machine Translation,IMT)\index{Interactive Machine Translation}
\parinterval 交互式机器翻译的大致流程如下:机器翻译系统根据用户输入的源语言句子预测出可能的译文交给用户,然后用户在现有翻译的基础上进行接受、修改或者删除等操作,然后翻译系统根据用户的反馈信息再次生成比前一次更好的翻译并提交给用户。以此循环,直到得到最终的译文。 \parinterval 交互式机器翻译的大致流程如下:机器翻译系统根据用户输入的源语言句子预测出可能的译文交给用户,然后用户在现有翻译的基础上进行接受、修改或者删除等操作,然后翻译系统根据用户的反馈信息再次生成比前一次更好的翻译并提交给用户。以此循环,直到得到最终的译文。
......
...@@ -519,7 +519,7 @@ His house is on the south bank of the river. ...@@ -519,7 +519,7 @@ His house is on the south bank of the river.
\parinterval {\small\bfnew{词嵌入}}\index{词嵌入}(Word Embedding\index{Word Embedding})技术是近些年自然语言处理中的重要成果,其思想是把每个单词映射为多维实数空间中的一个点(具体表现为一个实数向量),这种技术也被称作单词的{\small\bfnew{分布式表示}}\index{分布式表示}(Distributed Representation\index{Distributed Representation})。在这项技术中,单词之间的关系可以通过空间的几何性质进行刻画,意义相近的单词之间的欧式距离也十分相近(单词分布式表示的具体内容,将在书的{\chapternine} 详细介绍,在此不再赘述)。 \parinterval {\small\bfnew{词嵌入}}\index{词嵌入}(Word Embedding\index{Word Embedding})技术是近些年自然语言处理中的重要成果,其思想是把每个单词映射为多维实数空间中的一个点(具体表现为一个实数向量),这种技术也被称作单词的{\small\bfnew{分布式表示}}\index{分布式表示}(Distributed Representation\index{Distributed Representation})。在这项技术中,单词之间的关系可以通过空间的几何性质进行刻画,意义相近的单词之间的欧式距离也十分相近(单词分布式表示的具体内容,将在书的{\chapternine} 详细介绍,在此不再赘述)。
\parinterval 受词嵌入技术的启发,研究人员尝试借助参考答案和机器译文的分布式表示来进行译文质量评价,为译文质量评价提供了新思路。在自然语言的上下文中,表示是与每个单词、句子或文档相关联的数学对象。这个对象通常是一个向量,其中每个元素的值在某种程度上描述了相关单词、句子或文档的语义或句法属性。基于这个想法,研究人员提出了{\small\sffamily\bfseries{分布式表示评价度量}}\index{分布式表示评价度量}(Distributed Representations Evaluation Metrics,DREEM)\index{Distributed Representations Evaluation Metrics}\upcite{DBLP:conf/acl/ChenG15}。这种方法将单词或句子的分布式表示映射到连续的低维空间,发现在该空间中,具有相似句法和语义属性的单词彼此接近,类似的结论也出现在相关工作中,如参考文献\cite{bengio2003a,DBLP:conf/emnlp/SocherPHNM11,DBLP:conf/emnlp/SocherPWCMNP13}所示。而这个特点可以被应用到译文质量评估中。 \parinterval 受词嵌入技术的启发,研究人员尝试借助参考答案和机器译文的分布式表示来进行译文质量评价,为译文质量评价提供了新思路。在自然语言的上下文中,表示是与每个单词、句子或文档相关联的数学对象。这个对象通常是一个向量,其中每个元素的值在某种程度上描述了相关单词、句子或文档的语义或句法属性。基于这个想法,研究人员提出了{\small\sffamily\bfseries{分布式表示评价度量}}\index{分布式表示评价度量}(Distributed Representations Evaluation Metrics,DREEM)\index{DREEM}\upcite{DBLP:conf/acl/ChenG15}。这种方法将单词或句子的分布式表示映射到连续的低维空间,发现在该空间中,具有相似句法和语义属性的单词彼此接近,类似的结论也出现在相关工作中,如参考文献\cite{bengio2003a,DBLP:conf/emnlp/SocherPHNM11,DBLP:conf/emnlp/SocherPWCMNP13}所示。而这个特点可以被应用到译文质量评估中。
\parinterval 在DREEM中,分布式表示的选取是一个十分关键的问题,理想的情况下,分布式表示应该涵盖句子在词汇、句法、语法、语义、依存关系等各个方面的信息。目前常见的分布式表示方式如表\ref{tab:4-2}所示。除此之外,还可以通过词袋模型、循环神经网络等将词向量表示转换为句子向量表示。 \parinterval 在DREEM中,分布式表示的选取是一个十分关键的问题,理想的情况下,分布式表示应该涵盖句子在词汇、句法、语法、语义、依存关系等各个方面的信息。目前常见的分布式表示方式如表\ref{tab:4-2}所示。除此之外,还可以通过词袋模型、循环神经网络等将词向量表示转换为句子向量表示。
......
...@@ -1884,7 +1884,7 @@ z_t&=&\gamma z_{t-1}+(1-\gamma) \frac{\partial J}{\partial {\theta}_t} \cdot \f ...@@ -1884,7 +1884,7 @@ z_t&=&\gamma z_{t-1}+(1-\gamma) \frac{\partial J}{\partial {\theta}_t} \cdot \f
\subsubsection{1. 模型结构} \subsubsection{1. 模型结构}
\parinterval 最具代表性的神经语言模型是{\small\sffamily\bfseries{前馈神经网络语言模型}}\index{前馈神经网络语言模型}(Feed-forward Neural Network Language Model\index{Feed-forward Neural Network Language Model},简称FNNLM)。这种语言模型的目标是用神经网络计算$ \funp{P}(w_m|w_{m-n+1}\dots w_{m-1}) $,之后将多个$n$-gram的概率相乘得到整个序列的概率\upcite{bengio2003a} \parinterval 最具代表性的神经语言模型是{\small\sffamily\bfseries{前馈神经网络语言模型}}\index{前馈神经网络语言模型}(Feed-forward Neural Network Language Model,FNNLM\index{FNNLM})。这种语言模型的目标是用神经网络计算$ \funp{P}(w_m|w_{m-n+1}\dots w_{m-1}) $,之后将多个$n$-gram的概率相乘得到整个序列的概率\upcite{bengio2003a}
%---------------------------------------------- %----------------------------------------------
\begin{figure}[htp] \begin{figure}[htp]
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
与所有从事机器翻译研究的人一样,笔者也梦想着有朝一日机器翻译能够完全实现。这个想法可以追溯到1980年,姚天顺教授和王宝库教授创立了东北大学自然语言处理实验室,把机器翻译作为毕生为之奋斗的目标。这也影响了包括笔者在内的许多人。虽然,那时的机器翻译技术并不先进,研究条件也异常艰苦,但是实现机器翻译的梦想从未改变。 与所有从事机器翻译研究的人一样,笔者也梦想着有朝一日机器翻译能够完全实现。这个想法可以追溯到1980年,姚天顺教授和王宝库教授创立了东北大学自然语言处理实验室,把机器翻译作为毕生为之奋斗的目标。这也影响了包括笔者在内的许多人。虽然,那时的机器翻译技术并不先进,研究条件也异常艰苦,但是实现机器翻译的梦想从未改变。
步入二十一世纪后,统计学习方法的兴起给机器翻译带来了全新的思路,同时也带来了巨大的技术进步。笔者有幸经历了那个年代,目睹了机器翻译的成长。同时,也加入到机器翻译研究的浪潮中。从2007年开始研发NiuTrans开源系统,到2012年正式进行机器翻译产业化,并创立小牛翻译,笔者不断地被机器翻译所取得的进步所感动。那时,笔者就曾经思考过将机器翻译的模型和方法进行总结,形成资料供人阅读。虽然粗略写过一些文字,但是未成体系,只是在相关的教学环节中进行使用,供实验室同学闲暇时参考阅读。 步入二十一世纪后,统计学习方法的兴起给机器翻译带来了全新的思路,同时也带来了巨大的技术进步。笔者有幸经历了那个时代,同时也加入到机器翻译研究的浪潮中,从2007年开始研发NiuTrans开源系统,到2012年正式进行机器翻译产业化,并创立小牛翻译,笔者目睹了机器翻译的成长,并且不断地被机器翻译取得的进步所感动。那时,笔者就曾经思考过将机器翻译的模型和方法进行总结,形成资料供人阅读。虽然粗略写过一些文字,但是未成体系,只是在相关的教学环节中进行使用,供实验室同学闲暇时参考阅读。
但是机器翻译领域进展之快是无法预见的。2016年之后,随着深度学习方法在机器翻译中的进一步应用,机器翻译迎来了前所未有的大好机遇。新的技术方法层出不穷,机器翻译系统也得到了广泛应用。这时,笔者心里又涌现出将机器翻译的技术内容编撰成书的想法。这种强烈的念头使得笔者完成了本书的第一个版本(包含七章),并开源供人广泛阅读。承蒙同行们厚爱,得到了很多反馈,包括一些批评意见。这些使得笔者可以更加全面地梳理思路。 但是机器翻译领域进展之快是无法预见的。2016年之后,随着深度学习方法在机器翻译中的进一步应用,机器翻译迎来了前所未有的大好机遇。新的技术方法层出不穷,机器翻译系统也得到了广泛应用。这时,笔者心里又涌现出将机器翻译的技术内容编撰成书的想法。这种强烈的念头使得笔者完成了本书的第一个版本(包含七章),并开源供人广泛阅读。承蒙同行们厚爱,得到了很多反馈,包括一些批评意见。这些使得笔者可以更加全面地梳理思路。
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
\vspace{0.5em} \vspace{0.5em}
本书全面回顾了近三十年内机器翻译的技术发展历程,并围绕{\sffamily\bfseries 机器翻译的建模}这一主题对机器翻译的技术方法进行了全面介绍。在写作中,笔者力求用朴实的语言和简洁的实例阐述机器翻译的基本模型,同时对相关的技术前沿进行讨论。其中也会涉及大量的实践经验,包括许多机器翻译系统开发的细节。从这个角度来说,本书不单单是一本理论书籍,它还结合了机器翻译的应用,给读者提供了很多机器翻译技术落地的具体思路。 本书全面回顾了近三十年内机器翻译的技术发展历程,并围绕{\sffamily\bfseries 机器翻译的建模和深度学习方法}这两个主题对机器翻译的技术方法进行了全面介绍。在写作中,笔者力求用朴实的语言和简洁的实例阐述机器翻译的基本模型,同时对相关的技术前沿进行讨论。其中也会涉及大量的实践经验,包括许多机器翻译系统开发的细节。从这个角度来说,本书不单单是一本理论书籍,它还结合了机器翻译的应用,给读者提供了很多机器翻译技术落地的具体思路。
本书可以供计算机相关专业高年级本科生及研究生学习之用,也可以作为自然语言处理领域,特别是机器翻译方向相关研究人员的参考资料。此外,本书各章的主题都十分明确,内容也相对集中。因此,读者也可将每章作为某一专题的学习资料。 本书可以供计算机相关专业高年级本科生及研究生学习之用,也可以作为自然语言处理领域,特别是机器翻译方向相关研究人员的参考资料。此外,本书各章的主题都十分明确,内容也相对集中。因此,读者也可将每章作为某一专题的学习资料。
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论