Commit 8750f30c by xiaotong

wording (sec 15)

parent 62423e8d
......@@ -32,7 +32,7 @@
%----------------------------------------------------------------------------------------
\sectionnewpage
\section{基于自注意力机制的改进}
\section{注意力机制的改进}
\parinterval 注意力机制是神经机器翻译成功的关键,因此对相关模型的结构进行优化是十分重要的研究方向。以Transformer为例,由于使用自注意力机制,该模型展现出高并行计算与全局建模的能力,这也使得该模型目前在机器翻译、语言建模等自然语言处理任务上表现十分突出。后续研究人员在Transformer的基础上衍生出许多改进工作。例如,在处理长文本序列时(假设文本长度为$N$),由于自注意力模型的时间复杂度为$O(N^2)$,在$N$过大时翻译速度很低。同时在机器翻译领域,尽管在Transformer模型的输入中引入了绝对位置编码表示,现有的自注意力机制仍然无法显著捕获局部窗口下不同位置之间的关系。此外一部分研究人员将多头-自注意力网络机制中的多头思想进一步扩展,采用多分支结构对不同空间特征进行提取,之后对特征进行融合。针对以上问题,本节将介绍注意力机制的优化策略,并重点讨论了自注意力模型的若干改进方法。
......@@ -44,7 +44,7 @@
\parinterval 使用循环神经网络进行序列建模时,每一个时刻的计算都依赖于上一时刻的隐层状态。这种模式天然具有一定的时序性,且具有{\small\bfnew{归纳偏置}}\index{归纳偏置}(Inductive Bias)\index{Inductive Bias}的特性\upcite{DBLP:journals/corr/abs-1806-01261}。但是在使用Transformer模型对词序列进行建模时,由于自注意力网络直接对当前单词与序列中全部单词进行建模,因此忽略了单词之间的位置关系,缺少了类似于循环或卷积神经网络中局部窗口内的依赖关系。虽然,为了区分单词之间的位置关系,Transformer中引入了正余弦函数作为绝对位置编码(见{\chaptertwelve}),但是该方法仍然无法显著区分局部依赖与长距离依赖。这里,局部依赖指代当前位置的词与局部的相邻词之间的联系。
\parinterval 针对上述问题,研究人员设计了“相对位置”编码,对原有的“绝对位置”编码进行补充,强化了局部依赖\upcite{Dai2019TransformerXLAL,Shaw2018SelfAttentionWR}。此外,由于模型中每一层均存在自注意力机制计算,因此模型捕获位置信息的能力也逐渐减弱,这种现象在深层网络建模中尤为明显。而利用相对位置编码也有效地强化了深层神经网络中局部位置的表示,并显著地提升模型性能\upcite{li2020shallow}
\parinterval 针对上述问题,研究人员设计了“相对位置”编码,对原有的“绝对位置”编码进行补充,强化了局部依赖\upcite{Dai2019TransformerXLAL,Shaw2018SelfAttentionWR}。此外,由于模型中每一层均存在自注意力机制计算,因此模型捕获位置信息的能力也逐渐减弱,这种现象在深层网络建模中尤为明显。而利用相对位置编码也有效地强化了深层神经网络中局部位置的表示,并显著地提升模型性能\upcite{li2020shallow}
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
......@@ -90,7 +90,7 @@
\textrm{clip}(x,k) &=& \max(-k,\min(k,x)) \label{eq:15-9}
\end{eqnarray}
\noindent 其中$\mathbi{w}^K$$\mathbi{w}^V$是模型中可学习的参数矩阵,$\mathbi{w}^{K}_{i},\mathbi{w}^{V}_{i}\in \mathbb{R}^{d_k}$$\textrm{clip}$表示截断操作。可以发现$\mathbi{a}^K$$\mathbi{a}^V$是根据输入数据对\mathbi{w}进行查找得到的相对位置表示,这里通过预先设定的最大相对位置$k$,强化模型对当前词为中心的左右各$k$个词的注意力计算。因此,最终的窗口大小为$2k + 1$。对于边缘位置窗口大小不足$2k$的单词,采用了裁剪的机制,即只对有效的临近词进行建模。此时,注意力模型的计算可以调整为公式\ref{eq:15-4}
\noindent 其中$\mathbi{w}^K$$\mathbi{w}^V$是模型中可学习的参数矩阵,$\mathbi{w}^{K}_{i},\mathbi{w}^{V}_{i}\in \mathbb{R}^{d_k}$$\textrm{clip}$表示截断操作。可以发现$\mathbi{a}^K$$\mathbi{a}^V$是根据输入数据对\mathbi{w}进行查找得到的相对位置表示,这里通过预先设定的最大相对位置$k$,强化模型对当前词为中心的左右各$k$个词的注意力计算。因此,最终的窗口大小为$2k + 1$ 对于边缘位置窗口大小不足$2k$的单词,采用了裁剪的机制,即只对有效的临近词进行建模。此时,注意力模型的计算可以调整为公式\ref{eq:15-4}
\begin{eqnarray}
\mathbi{z}_{i} &=& \sum_{j=1}^m \alpha_{ij}(\mathbi{x}_j \mathbi{W}_V + \mathbi{a}_{ij}^V)
\label{eq:15-4}
......@@ -837,7 +837,7 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\sectionnewpage
\section{基于句法的神经机器翻译模型}
\parinterval 在统计机器翻译时代,使用句法信息是一种非常有效的机器翻译建模手段(见{\chaptereight})。由于句法是人类运用语言的高级抽象结果,使用句法信息(如句法树)可以非常有效地帮助机器翻译系统捕捉句子的结构。将这种知识引入到机器翻译中,能使得翻译系统在译文语法正确性以及流畅度等方面获得进一步的提升,同时也可以消除译文中的歧义,进而得到更准确的译文。在神经机器翻译中,虽然标准的框架大多基于词串,但是引入句法树等结构仍然很有潜力\upcite{DBLP:conf/acl/LiXTZZZ17}。具体来说,由于神经机器翻译模型缺少对句子结构的理解,会导致一些明显的翻译问题:
\parinterval 在统计机器翻译时代,使用句法信息是一种非常有效的机器翻译建模手段(见{\chaptereight})。由于句法是人类运用语言的高级抽象结果,使用句法信息(如句法树)可以帮助机器翻译系统对句子结构进行建模。 将这种结构信息引入到机器翻译中,能使得翻译系统在译文语法正确性以及流畅度等方面获得进一步的提升,同时也可以消除翻译中的歧义。在神经机器翻译中,大多数框架均基于词串进行翻译建模,但是在神经机器翻译模型中引入句法树等结构仍然很有潜力\upcite{DBLP:conf/acl/LiXTZZZ17}。具体来说,由于神经机器翻译模型缺少对句子结构的理解,会导致一些明显的翻译问题:
\begin{itemize}
\vspace{0.5em}
......@@ -855,15 +855,15 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\vspace{0.5em}
\end{itemize}
\parinterval 显然,神经机器翻译系统并没有按照合理的句法结构生成译文。也就是说,模型并没有理解句子的结构\upcite{DBLP:conf/acl/LiXTZZZ17}。甚至对于一些语言差异很大的语言对,会出现将介词短语翻译成一个词的情况。虽然可以通过很多手段对上述问题进行求解,但是使用句法树是最直接的一种解决问题的方法\upcite{DBLP:conf/acl/EriguchiHT16}
\parinterval 显然,神经机器翻译系统并没有按照合理的句法结构生成译文。也就是说,模型并没有理解句子的结构\upcite{DBLP:conf/acl/LiXTZZZ17}。甚至对于一些语言差异很大的语言对,会出现将介词短语翻译成一个词的情况。虽然可以通过很多手段对上述问题进行求解,但是使用句法树是最直接的解决问题的方法\upcite{DBLP:conf/acl/EriguchiHT16}
\parinterval 那么在神经机器翻译中,如何将这种离散化的树结构融入到基于分布式表示的翻译模型中呢?有以下两种策略:
\begin{itemize}
\vspace{0.5em}
\item 将句法树结构加入到编码器,使得编码器更加充分地表示源语言句子。
\item 将句法信息加入到编码器,使得编码器更加充分地表示源语言句子。
\vspace{0.5em}
\item 将句法树结构加入到解码器,使得翻译模型能生成更符合句法的译文。
\item 将句法信息加入到解码器,使得翻译模型能生成更符合句法的译文。
\vspace{0.5em}
\end{itemize}
......@@ -873,7 +873,7 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\subsection{编码端使用句法信息}
\parinterval 编码器中使用句法信息有两种思路,一种是在解码器中显性使用树结构进行建模,另一种是把句法信息作为特征输入到传统的序列编码器中。这两种思路与统计机器翻译中基于句法树结构的模型和基于句法特征的模型十分相似(见{\chaptereight})。
\parinterval 编码器中使用句法信息有两种思路,一种思路是在编码器中显性使用树结构进行建模,另一种思路是把句法信息作为特征输入到传统的序列编码器中。这两种思路与统计机器翻译中基于句法树结构的模型和基于句法特征的模型十分相似(见{\chaptereight})。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
......@@ -881,13 +881,13 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\subsubsection{1. 基于句法树结构的编码}
\parinterval 在编码端使用树结构的一种思路是将源语言句子编码成一个二叉树结构\footnote[6]{所有句法树都可以通过二叉化转化为二叉树(见{\chaptereight})。},树节点的信息是由左子树和右子树变换而来,如下所示:
\parinterval 一种简单的方法是将源语言句子编码成一个二叉树结构\footnote[6]{所有句法树都可以通过二叉化方法转化为二叉树(见{\chaptereight})。},树节点的信息是由左子树和右子树变换而来,如下所示:
\begin{eqnarray}
\mathbi{h}_p &=& f_\textrm{tree}(\mathbi{h}_l,\mathbi{h}_r)
\label{eq:15-50}
\end{eqnarray}
\noindent 其中,$\mathbi{h}_l$$\mathbi{h}_r$分别代表了左孩子节点和右孩子节点的隐藏状态,通过一个非线性函数$f_\textrm{tree}$得到父节点的隐藏状态$\mathbi{h}_p$。图\ref{fig:15-20}展示了一个基于树结构的循环神经网络编码器\upcite{DBLP:conf/acl/EriguchiHT16}。这些编码器由下自上组成了一个树型结构,这种树结构的具体连接形式由句法分析决定。其中$\{\mathbi{h}_1,\mathbi{h}_2,\ldots,\mathbi{h}_n\}$是输入序列所对应的循环神经单元,$\{\mathbi{h}_{n+1},\mathbi{h}_{n+2},\ldots,\mathbi{h}_{2n-1}\}$对应着树中的节点,它的输出由其左右子节点通过公式\eqref{eq:15-50}计算得到。对于注意力模型,图中所有的节点都会参与上下文向量的计算,因此仅需要对{\chapterten}所描述的计算方式稍加修改,如下:
\noindent 其中,$\mathbi{h}_l$$\mathbi{h}_r$分别代表了左孩子节点和右孩子节点的神经网络输出(隐层状态),通过一个非线性函数$f_\textrm{tree}(\cdot,\cdot)$得到父节点的状态$\mathbi{h}_p$。 图\ref{fig:15-20} 展示了一个基于树结构的循环神经网络编码器\upcite{DBLP:conf/acl/EriguchiHT16}。这些编码器由下自上组成了一个树型结构,这种树结构的具体连接形式由句法分析决定。其中$\{\mathbi{h}_1,\mathbi{h}_2,\ldots,\mathbi{h}_n\}$是输入序列所对应的循环神经单元(绿色部分),$\{\mathbi{h}_{n+1},\mathbi{h}_{n+2},\ldots,\mathbi{h}_{2n-1}\}$对应着树中的节点(红色部分),它的输出由其左右子节点通过公式\eqref{eq:15-50}计算得到。对于注意力模型,图中所有的节点都会参与上下文向量的计算,因此仅需要对{\chapterten}所描述的计算方式稍加修改,如下:
\begin{eqnarray}
\mathbi{C}_j &=& \sum_{i=1}^{n}\alpha_{i,j}\mathbi{h}_i + \sum_{i=n+1}^{2n-1}\alpha_{i,j}\mathbi{h}_i
......@@ -903,19 +903,19 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\end{figure}
%-------------------------------------------s
\noindent 其中,$\mathbi{C}_j$代表生成第$j$个目标语言单词所需的源语言信息。这样做的好处是编码器更容易将一个短语结构表示成一个单元,进而在解码器中映射成一个整体。比如,对于英语句子:
\noindent 其中,$\mathbi{C}_j$代表生成第$j$个目标语言单词所需的源语言上下文表示。这样做的好处是编码器更容易将一个短语结构表示成一个单元,进而在解码器中映射成一个整体。比如,对于英语句子:
\begin{equation}
\textrm{“ I am having a cup of green tea. ”} \nonumber
\end{equation}
\noindent 可以翻译成:
\begin{equation}
\textrm{“私は緑茶を飲んでいます。”} \nonumber
\textrm{“私は緑茶を飲んでいます。”} {\color{red} 日语单词没有切分???可以问一下张妍}\nonumber
\end{equation}
\parinterval 在标准的英文与日文互译过程中,英文短语“a cup of green tea”只会被翻译为“緑茶”一个词。在加入句法树后,“a cup of green tea”会作为树中一个节点,这样可以更容易把英文短语作为一个整体进行翻译。
\parinterval 在标准的英语到日语的翻译中,英语短语“a cup of green tea”只会被翻译为“緑茶”一词。在加入句法树后,“a cup of green tea”会作为树中一个节点,这样可以更容易把英语短语作为一个整体进行翻译。
\parinterval 只是,这种自底向上的树结构表示方法也存在问题:每个树节点的状态并不能包含树中其它位置的信息。也就是说,从每个节点上看,其表示结果没有很好的利用上下文。因此,可以同时使用自下而上和自上而下的信息传递方式进行句法树的表示\upcite{Yang2017TowardsBH,DBLP:conf/acl/ChenHCC17},这样增加了树中每个节点对其覆盖的子树以及周围上下文的建模能力。如图\ref{fig:15-21}所示,$\mathbi{h}^\textrm{up}$$\mathbi{h}^\textrm{down}$分别代表向上传输节点和向下传输节点的状态,虚线框代表了$\mathbi{h}^\textrm{up}$$\mathbi{h}^\textrm{down}$会拼接到一起,并作为这个节点的整体表示参与注意力模型的计算
\parinterval 只是,这种自底向上的树结构表示方法也存在问题:每个树节点的状态并不能包含树中其它位置的信息。也就是说,从每个节点上看,其表示结果没有很好的利用句法树中的上下文信息。因此,可以同时使用自下而上和自上而下的信息传递方式进行句法树的表示\upcite{Yang2017TowardsBH,DBLP:conf/acl/ChenHCC17},这样增加了树中每个节点对其覆盖的子树以及周围上下文的建模能力。如图\ref{fig:15-21} 所示,$\mathbi{h}^\textrm{up}$$\mathbi{h}^\textrm{down}$分别代表向上传输节点和向下传输节点的状态,虚线框代表了$\mathbi{h}^\textrm{up}$$\mathbi{h}^\textrm{down}$会拼接到一起,并作为这个节点的整体表示参与注意力模型的计算。显然,自下而上的传递,可以保证句子的浅层信息(如短距离词汇搭配)被传递给上层节点,而自上而下的传递,可以保证句子上层结构的抽象被有效的传递给下层节点。这样,每个节点就同时含有浅层和深层句子表示的信息
%----------------------------------------------
\begin{figure}[htp]
......@@ -932,26 +932,26 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\subsubsection{2. 基于句法特征的编码}
\parinterval 不同于直接对树结构进行编码,另一种方法是将单词、句法信息等信息直接转换为特征向量拼接到一起,作为机器翻译系统的输入\upcite{DBLP:conf/wmt/SennrichH16}。这种方法的优点在于,句法信息可以无缝融入到现有神经机器翻译框架,对系统结构的修改很小。以基于循环神经网络的翻译模型为例,对于输入序列的$i$个单词,可以用如下方式计算$i$时刻的表示结果:
\parinterval 不同于直接对树结构进行编码,另一种方法是将单词、句法信息等信息直接转换为特征向量拼接到一起,作为机器翻译系统的输入\upcite{DBLP:conf/wmt/SennrichH16}。这种方法的优点在于,句法信息可以无缝融入到现有神经机器翻译框架,对系统结构的修改很小。以基于循环神经网络的翻译模型为例,可以用如下方式计算输入序列第$i$个位置的表示结果:
\begin{eqnarray}
\mathbi{h}_i &=& \textrm{tanh}(\mathbi{W}(\|_{k=1}^{F}\mathbi{E}_h x_{ik}) + \mathbi{U}\mathbi{h}_{i-1})
\mathbi{h}_i &=& \textrm{tanh}(\mathbi{W}(\|_{k=1}^{F}\mathbi{E}_k x_{ik}) + \mathbi{U}\mathbi{h}_{i-1})
\label{eq:15-52}
\end{eqnarray}
\noindent 其中,$\mathbi{W}$是转换矩阵,$\mathbi{U}$是权重矩阵,$F$代表了特征的数量;而$\mathbi{E}$是一个特征矩阵,它包含了不同种类特征的数量,$x_{ik}$ 代表了第$i$ 个词在第$k$ 种特征中所表达的值,$\|$操作为拼接操作。公式\eqref{eq:15-52}将从共$F$个特征向量连接成固定大小的向量,作为编码端的输入。这种方法可以很容易地融合如词根、子词、形态、词性以及依存标签等特征
\noindent 其中,$\mathbi{W}$$\mathbi{U}$是线性变换矩阵,$F$代表了特征的数量;而$\mathbi{E}_k$是一个特征嵌入矩阵,它记录了第$k$个特征不同取值对应的分布式表示;$x_{ik}$ 代表了第$i$ 个词在第$k$ 个特征上的取值,于是$\mathbi{E}_k x_{ik}$就得到所激活特征的嵌入结果。$\|$操作为拼接操作,它将所有特征的嵌入结果拼接为一个向量。这种方法十分灵活,可以很容易地融合不同句法特征,例如,词根、子词、形态、词性以及依存关系等
\parinterval 另一种方式是将句法信息的表示转化为基于序列的编码,之后与原始的词串融合。这样做的好处在于,并不需要使用基于树结构的编码器,句法信息仍然可以使用基于序列的编码器。而句法信息可以在对句法树的序列化表示中学习得到。如图\ref{fig:15-22}(a) 所示,对于英语句子“I love dogs”,可以得到如图\ref{fig:15-22}(a) 所示的句法树。这里,使用$w_i$ 表示第$i$ 个单词,如图\ref{fig:15-22}(b) 所示。通过对句法树进行先序遍历,可以得到句法树节点的序列$\{l_1,l_2,...,l_T\}$,其中$T$表示句法树中节点的个数,$l_j$表示树中的第$j$个节点的标签,如图\ref{fig:15-22}(c)所示。
\parinterval 另一种方式是将句法信息的表示转化为基于序列的编码,之后与原始的词串融合。这样做的好处在于,并不需要使用基于树结构的编码器,而是直接复用基于序列的编码器即可。而句法信息可以在对句法树的序列化表示中学习得到。如图\ref{fig:15-22}(a) 所示,对于英语句子“I love dogs”,可以得到如图\ref{fig:15-22}(a) 所示的句法树。这里,使用$w_i$ 表示第$i$ 个单词,如图\ref{fig:15-22}(b) 所示。通过对句法树进行先序遍历,可以得到句法树节点的序列$\{l_1,l_2,...,l_T\}$,其中$T$表示句法树中节点的个数,$l_j$表示树中的第$j$个节点,如图\ref{fig:15-22}(c)所示。
%----------------------------------------------
\begin{figure}[htp]
\centering
\includegraphics[scale=0.5]{./Chapter15/Figures/figure-parsing-tree-of-a-sentence.png}
\caption{一个句子的句法树、词序列、词性标记序列}
\caption{一个句子的句法树、词序列、句法树节点序列({\color{red} 图里面说句法树就行,不要说句法解析树,全书一致!}}
\label{fig:15-22}
\end{figure}
%-------------------------------------------
\parinterval 此时,可以使用单词祖先节点及路径信息与原始的词信息构造出新的融合表示${\mathbi{h}'}_i$,并使用这种新的表示计算上下文向量$\mathbi{C}$,即
\parinterval 在对句法树结构进行序列化的基础上,可以用句法树节点与原始的词信息构造出新的融合表示${\mathbi{h}'}_i$,并使用这种新的表示计算上下文向量,如下
\begin{eqnarray}
\mathbi{C}_j &=& \sum_{i=1}^m \alpha_{i,j} {\mathbi{h}'}_i
\label{eq:15-53}
......@@ -961,9 +961,9 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\begin{itemize}
\vspace{0.5em}
\item 平行结构。利用两个编码端构成平行结构,分别对源语言单词和线性化的句法树进行建模,之后在句法树节点序列中寻找每个单词的父节点(或者祖先),将这个单词和它的父节点的状态相融合,得到新的表示。如图\ref{fig:15-23}(a)所示,图中$\mathbi{h}_{w_i}$为词$w_i$在单词序列中的状态,$\mathbi{h}_{l_j}$为树节点$l_j$在句法表示(序列)中的隐藏状态。如果单词$w_i$是节点$l_j$ 在句法树中的子节点,则将$\mathbi{h}_{w_i}$$\mathbi{h}_{l_j}$向量拼接到一起作为这个词的新表示${\mathbi{h}'}_i$
\item 平行结构。利用两个编码端分别对源语言单词序列和线性化的句法树进行建模,之后在句法树节点序列中寻找每个单词的父节点(或者祖先节点),将这个单词和它的父节点(或者祖先节点)的状态相融合,得到新的表示。如图\ref{fig:15-23}(a)所示,图中$\mathbi{h}_{w_i}$为词$w_i$在单词序列中的状态,$\mathbi{h}_{l_j}$为树节点$l_j$在句法节点序列中的状态。如果单词$w_i$是节点$l_j$ 在句法树中的子节点,则将$\mathbi{h}_{w_i}$$\mathbi{h}_{l_j}$向量拼接到一起作为这个词的新表示${\mathbi{h}'}_i$
\vspace{0.5em}
\item 分层结构。将句法表示结果与源语言单词的词嵌入向量进行融合,如图\ref{fig:15-23}(b)所示,其中$\mathbi{e}_{w_i}$为第$i$个词的词嵌入。类似地,如果$w_i$词语是节点$l_j$在句法树中的子节点,则将$\mathbi{e}_{w_i}$$\mathbi{h}_{l_j}$向量拼接到一起作为原始模型的输入,这样${\mathbi{h}'}_i$直接参与注意力计算。与平行结构不同,分层结构可以把句法信息加到词级别,而平行结构是对词语信息进行抽取之后再加入句法信息。注意,分层结构和平行结构的区别在于,分层结构最终还是使用了一个编码器,句法信息只是与词嵌入进行融合,因此最终的结构和原始的模型是一致的;平行结构相当于使用了两个编码器,因此单词和句法信息的融合是在两个编码的输出上进行的;
\item 分层结构。将句法表示结果与源语言单词的词嵌入向量进行融合,如图\ref{fig:15-23}(b)所示,其中$\mathbi{e}_{w_i}$为第$i$个词的词嵌入。类似地,如果$w_i$词语是节点$l_j$在句法树中的子节点,则将$\mathbi{e}_{w_i}$$\mathbi{h}_{l_j}$向量拼接到一起作为原始模型的输入,这样${\mathbi{h}'}_i$直接参与注意力计算。注意,分层结构和平行结构的区别在于,分层结构最终还是使用了一个编码器,句法信息只是与词嵌入进行融合,因此最终的结构和原始的模型是一致的;平行结构相当于使用了两个编码器,因此单词和句法信息的融合是在两个编码的输出上进行的;
\vspace{0.5em}
\item 混合结构。首先对图\ref{fig:15-22}(a)中句法树进行先序遍历,将句法标记和源语言单词融合到同一个序列中,得到如图\ref{fig:15-23}(c)所示序列。之后使用传统的序列编码器对这个序列进行编码,然后使用序列中源语言单词所对应的状态参与注意力模型的计算。有趣的是,相比于前两种方法,这种方法参数量少而且也十分有效\upcite{DBLP:conf/acl/LiXTZZZ17}
\vspace{0.5em}
......@@ -980,7 +980,7 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\end{figure}
%-------------------------------------------
\parinterval 需要注意的是,句法分析的错误会在很大程度上影响源语言句子的表示结果。如果获得的句法信息不够准确,可能会对翻译系统带来负面的作用。此外,也有研究发现基于词串的神经机器翻译模型本身就能学习到一些源语言的句法信息\upcite{DBLP:conf/emnlp/ShiPK16},这表明了神经机器翻译模型也有一定的归纳句子结构的能力。除了循环神经网络结构,也有研究人员也探索了如何在Transformer中引入树结构信息。比如,可以在计算自注意力分布的时候,将词与词之间的依存变换成距离表示作为额外的语法信息融入到注意力模型中\upcite{DBLP:conf/acl/BugliarelloO20}
\parinterval 需要注意的是,句法分析的错误会在很大程度上影响源语言句子的表示结果。如果获得的句法信息不够准确,可能会对翻译系统带来负面的作用。此外,也有研究发现基于词串的神经机器翻译模型本身就能学习到一些源语言的句法信息\upcite{DBLP:conf/emnlp/ShiPK16},这表明了神经机器翻译模型也有一定的归纳句子结构的能力。除了循环神经网络结构,也有研究人员也探索了如何在Transformer中引入树结构信息。比如,可以将词与词之间的依存距离作为额外的语法信息融入到注意力模型中\upcite{DBLP:conf/acl/BugliarelloO20}
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -988,7 +988,7 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\subsection{解码端使用句法信息}\label{subsec-15.3.2}
\parinterval 不同于在编码器中使用树结构,解码器直接生成树结构是较为复杂的工作。因此,想要在解码器中使用句法信息,一种最直接的方式是将目标语言句法树结构进行线性化,这样目标语言句子就变成了一个含有句法标记和单词的混合序列(见{\chaptereight}。这样,神经机器翻译系统不需要进行修改,直接使用句法树序列化的结果进行训练和推断\upcite{Aharoni2017TowardsSN}。图\ref{fig:15-24}展示了一个目标语言句法树经过线性化后的结果。
\parinterval 不同于在编码器中使用树结构,解码器直接生成树结构是较为复杂的工作。因此,想要在解码器中使用句法信息,一种最直接的方式是将目标语言句法树结构进行线性化,这样目标语言句子就变成了一个含有句法标记和单词的混合序列。这样,神经机器翻译系统不需要进行修改,直接使用句法树序列化的结果进行训练和推断\upcite{Aharoni2017TowardsSN}。图\ref{fig:15-24}展示了一个目标语言句法树经过线性化后的结果。
%----------------------------------------------
\begin{figure}[htp]
......@@ -1001,22 +1001,20 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\parinterval 不过,直接使用序列化的句法树也会带来新的问题。比如,在推断时,生成的译文序列可能根本不对应合法的句法树。此时,需要额外的模块对结果进行修正或者调整,以得到合理的译文。
\parinterval 另一种方法是直接在目标语言端使用句法树进行建模。与源语言句法树的建模不同,目标语言句法树的生成伴随着译文的生成,因此无法像源语言端一样将整个句法树一次输入。这样译文生成问题本质上就变成了目标语言树结构的生成,从这个角度说,这个过程与统计机器翻译中串到树的模型是类似的(见{\chaptereight})。树结构的生成有很多种策略,基本的思想均是根据已经生成的局部结构预测新的局部结构,并将这些局部结构拼装成更大的结构,直到得到完整的句法树结构\upcite{DBLP:conf/iclr/Alvarez-MelisJ17}
\parinterval 另一种方法是直接在目标语言端使用句法树进行建模。与源语言句法树的建模不同,目标语言句法树的生成伴随着译文的生成,因此无法像源语言端一样将整个句法树一起处理。这样译文生成问题本质上就变成了目标语言树结构的生成,从这个角度说,这个过程与统计机器翻译中串到树的模型是类似的(见{\chaptereight})。树结构的生成有很多种策略,基本的思想均是根据已经生成的局部结构预测新的局部结构,并将这些局部结构拼装成更大的结构,直到得到完整的句法树结构\upcite{DBLP:conf/iclr/Alvarez-MelisJ17}
\parinterval 实现目标语言句法树生成的一种手段是将形式文法扩展到神经网络模型。这样,可以使用形式文法描述句法树的生成过程(见{\chapterthree}),同时利用分布式表示来进行建模和学习。比如,可以使用基于循环神经网络的文法描述方法,把句法分析过程看作是一个循环神经网络的执行过程\upcite{DBLP:conf/naacl/DyerKBS16}。此外,也可以从多任务学习出发,用多个解码端共同完成目标语言句子的生成\upcite{DBLP:journals/corr/LuongLSVK15}。图\ref{fig:15-25}展示了由一个编码器(汉语)和多个解码器组成的序列生成模型。其中不同解码器分别负责不同的任务:第一个用于预测翻译结果,即翻译任务;第二个用于预测句法结构;第三个用于重新生成源语言序列,进行自编码。其设计思想是各个任务之间能够相互辅助,使得编码器的表示能包含更多的信息,进而让多个任务都获得性能提升。这种方法也可以使用在多个编码器上,其思想是类似的。
\parinterval 实现目标语言句法树生成的一种手段是将形式文法扩展,以适应分布式表示学习框架。这样,可以使用形式文法描述句法树的生成过程(见{\chapterthree}),同时利用分布式表示来进行建模和学习。比如,可以使用基于循环神经网络的文法描述方法,把句法分析过程看作是一个循环神经网络的执行过程\upcite{DBLP:conf/naacl/DyerKBS16}。此外,也可以从多任务学习出发,用多个解码端共同完成目标语言句子的生成\upcite{DBLP:journals/corr/LuongLSVK15}。图\ref{fig:15-25}展示了由一个编码器(汉语)和多个解码器组成的序列生成模型。其中不同解码器分别负责不同的任务:第一个用于预测翻译结果,即翻译任务;第二个用于预测句法结构;第三个用于重新生成源语言序列,进行自编码。其设计思想是各个任务之间能够相互辅助,使得编码器的表示能包含更多的信息,进而让多个任务都获得性能提升。这种方法也可以使用在多个编码器上,其思想是类似的。
%----------------------------------------------
\begin{figure}[htp]
\centering
\input{./Chapter15/Figures/figure-multi-task-structure}
\caption{多任务结构}
\caption{融合句法信息的多任务学习}
\label{fig:15-25}
\end{figure}
%-------------------------------------------
\parinterval 针对上述方法,也有以下问题:紧密的融合词串和句法结构的方法是否优于多任务学习的方法?以及,目标语言句法信息的引入是否真的帮助到了机器翻译?\upcite{DBLP:conf/wmt/NadejdeRSDJKB17}。 为了回答这些问题,研究人员尝试利用{\small\bfnew{CCG}}\index{CCG}(Combinatory Categorial Grammar)\index{Combinatory Categorial Grammar}中的supertags 作为句法信息,并发现CCG标签与句子进行融合更加有效。
\parinterval 虽然,融合树结构和目标语言词串的方法有其优越性,但是这种方法会导致目标语言端的序列过长,导致模型难以训练。为了缓解这个问题,可以使用两个模型(如循环神经网络),一个生成句子,另一个生成树结构\upcite{DBLP:conf/acl/WuZYLZ17,DBLP:journals/corr/abs-1808-09374}。以生成目标语言依存树为例,生成依存树的模型仍然是一个移进-规约序列的生成模型,称为动作模型。另一个模型负责预测目标语言词序列,成为词预测模型。它只有在第一个模型进行进操作的时候才会预测一下词,同时会将当前词的状态作为信息送入到第一个模型中。整个过程如图\ref{fig:15-26}所示,这里使用循环神经网络构建了动作模型和词预测模型。$\mathbi{h}_i^\textrm{action}$ 表示动作模型的隐藏层状态,$\mathbi{h}_i^\textrm{word}$表示词预测模型的隐藏层状态。动作模型会结合词预测模型的状态预测出“移位”,“左规约”,“右规约”三种动作,只有当动作模型预测出“移位”操作时,词预测模型才会预测下一时刻的词语;而动作模型预测“左规约”和“右规约”相当于完成了依存关系的预测(依存树见图\ref{fig:15-26}右侧)。最后词预测模型预测出结束符号<eos> 时,整个过程结束。
\parinterval 虽然,融合树结构和目标语言词串的方法有其优越性,但是这种方法会导致目标语言端的序列过长,模型难以训练。为了缓解这个问题,可以使用两个模型(如循环神经网络),一个生成句子,另一个生成树结构\upcite{DBLP:conf/acl/WuZYLZ17,DBLP:journals/corr/abs-1808-09374}。以生成目标语言依存树为例,生成依存树的模型仍然是一个移进-规约序列的生成模型,称为动作模型。另一个模型负责预测目标语言词序列,称为词预测模型。它只有在第一个模型进行进操作的时候才会预测一下词,同时会将当前词的状态送入到第一个模型中。整个过程如图\ref{fig:15-26}所示,这里使用循环神经网络构建了动作模型和词预测模型。$\mathbi{h}_i^\textrm{action}$ 表示动作模型的隐藏层状态,$\mathbi{h}_i^\textrm{word}$表示词预测模型的隐藏层状态。动作模型会结合词预测模型的状态预测出“移位”,“左规约”,“右规约”三种动作,只有当动作模型预测出“移位”操作时,词预测模型才会预测下一时刻的词语;而动作模型预测“左规约”和“右规约”相当于完成了依存关系的预测(依存树见图\ref{fig:15-26}右侧)。最后词预测模型预测出结束符号<eos> 时,整个过程结束。
%----------------------------------------------
\begin{figure}[htp]
......@@ -1027,7 +1025,7 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\end{figure}
%-------------------------------------------
\parinterval 相较于在编码端融入句法信息,在解码端融入句法信息更为困难。由于树结构与单词的生成是一个相互影响的过程,如果先生成树结构,再根据树得到译文单词串,那么一旦树结构有误,翻译结果就会有问题。在统计机器翻译中,句法信息究竟应该使用到什么程度已经有一些讨论\upcite{Tong2016Syntactic}。而在神经机器翻译中,如何更有效地引入树结构信息以及如何平衡树结构信息与词串的作用还有待确认。如前文所述,基于词串的神经机器翻译模型已经能够捕捉到一些句法结构信息,虽然有些信息是不容易通过人的先验知识进行解释的。这时,使用人工总结的句法结构来约束或者强化翻译模型,是否可以补充模型无法学到的信息,还是需要进一步研究。
\parinterval 相较于在编码端融入句法信息,在解码端融入句法信息更为困难。由于树结构与单词的生成是一个相互影响的过程,如果先生成树结构,再根据树得到译文单词串,那么一旦树结构有误,翻译结果就会有问题。在统计机器翻译中,句法信息究竟应该使用到什么程度已经有一些讨论\upcite{Tong2016Syntactic}{\color{red} 引用:What Can Syntax-Based MT Learn from Phrase-Based MT?}。而在神经机器翻译中,如何更有效地引入树结构信息以及如何平衡树结构信息与词串的作用还有待确认。如前文所述,基于词串的神经机器翻译模型已经能够捕捉到一些句法结构信息,虽然有些信息是不容易通过人的先验知识进行解释的。这时,使用人工总结的句法结构来约束或者强化翻译模型,是否可以补充模型无法学到的信息,还是需要进一步研究。
%----------------------------------------------------------------------------------------
% NEW SECTION
......@@ -1115,7 +1113,7 @@ lr &=& d_{model}^{-0.5}\cdot step\_num^{-0.5}
\begin{itemize}
\vspace{0.5em}
\item 整体框架:如图\ref{fig:15-30}所示,在不同任务下,不同结构往往会有不同的建模能力,类似的结构在结构空间中相对集中。因此在搜索空间的设计中,根据不同的任务特点,整体框架会选择在该任务上已经得到验证的经验性结构以更快速地定位到更有潜力的搜索空间。对于包括机器翻译在内的自然语言处理任务而言,一般会更倾向于使用循环神经网络或基于自注意力机制的Transformer模型附近的结构空间作为搜索空间\upcite{DBLP:conf/icml/SoLL19,DBLP:conf/iclr/ZophL17,DBLP:conf/iclr/LiuSY19}
\item 整体框架:如图\ref{fig:15-30}所示,在不同任务下,不同结构往往会有不同的建模能力,类似的结构在结构空间中相对集中。因此在搜索空间的设计中,根据不同的任务特点,整体框架会选择在该任务上已经得到验证的经验性结构以更快速地定位到更有潜力的搜索空间。对于包括机器翻译在内的自然语言处理任务而言,一般会更倾向于使用循环神经网络或基于自注意力机制的Transformer模型附近的结构空间作为搜索空间\upcite{DBLP:conf/icml/SoLL19,DBLP:conf/iclr/ZophL17,DBLP:conf/iclr/LiuSY19}
\vspace{0.5em}
\item 内部结构:对于内部结构的设计需要考虑到搜索过程中的最小搜索单元,以及搜索单元之间的连接方式。最小搜索单元指的是在结构搜索过程中可被选择的最小独立计算单元,在不同搜索空间的设计中,最小搜索单元的颗粒度各有不同,较小的搜索粒度主要包括如矩阵乘法、张量缩放等基本数学运算\upcite{DBLP:journals/corr/abs-2003-03384},更大粒度的搜索单元包括常见的激活函数以及一些局部结构,如ReLU、注意力机制等\upcite{DBLP:conf/acl/LiHZXJXZLL20,Chollet2017XceptionDL,DBLP:journals/taslp/FanTXQLL20}。不过,对于搜索颗粒度的问题,目前还缺乏有效的方法针对不同任务进行自动优化。
\vspace{0.5em}
......@@ -1240,12 +1238,18 @@ f(x) &=& x \cdot \delta(\beta x) \\
\sectionnewpage
\section{小结及深入阅读}
\parinterval 神经网络结构的设计一直是研究热点。本章节介绍了基于Transformer模型的结构优化工作,其中涉及了基于注意力机制的改进,网络连接优化,基于树结构的模型,以及神经网络结构的自动搜索。依靠自注意力机制的高并行化的计算特性,以及其全局建模能力,Transformer模型在各项自然语言处理任务中取得了优异的成绩。因此,该模型常被用来当作各项任务的基线模型。Transformer模型能够取得如此傲人的成绩,一定程度上受益于多头自注意力机制。多头机制可以让模型从更多维度的空间中提取相应的特征,与多分支思想有异曲同工之妙。研究人员针对编码端的多头进行分析,发现部分头在神经网络的学习过程中扮演至关重要的角色,并且蕴含语言学解释\upcite{DBLP:journals/corr/abs-1905-09418}。而另一部分头本身则不具备实质性的解释,可以通过剪枝的方式去除神经网络的冗余。然而在Transformer模型中,并不是头数越多,模型的性能就越强。{\red 一个有趣的发现是,在训练过程中利用多头,在推断过程中可以去除大部分头,性能没有明显变化,但却能够提高在CPU等串行计算单元的计算效率(有点绕)}\upcite{Michel2019AreSH}
\parinterval 模型结构优化一直是机器翻译研究的重要方向。一方面,对于通用框架(如注意力机制)的结构改良可以服务于多种自然语言处理任务,另一方面,针对机器翻译的问题设计相适应的模型结构也是极具价值的。本章节重点介绍了神经机器翻译中结构优化的几种方法,内容涉及注意力机制的改进、深层神经网络的构建、句法结构的使用以及自动结构搜索等几个方面。此外,还有若干问题值得关注:
\parinterval 为了进一步提高Transformer的性能,可以利用正则化训练手段,在训练过程中增大不同头之间的差异\upcite{DBLP:conf/emnlp/LiTYLZ18}。也可以通过多尺度的思想,对输入的特征进行分级表示,并引入短语的信息\upcite{DBLP:conf/emnlp/HaoWSZT19}。此外,在对自注意力网络中的注意力权重分布进行修改时,同样可以根据不同的缩放比例对序列中的实词与虚词进行区分\upcite{DBLP:conf/emnlp/Lin0RLS18}。除了上述基于编码端-解码端的建模范式,还可以定义隐变量模型来捕获句子中潜在的语义信息\upcite{Su2018VariationalRN,DBLP:conf/acl/SetiawanSNP20},或直接对源语言和目标语言进行联合的抽象表示\upcite{Li2020NeuralMT}
\begin{itemize}
\parinterval Transformer的优越性能得益于自注意力机制与前馈神经网络的子层设计,同时残差连接\upcite{DBLP:journals/corr/HeZRS15}{\red (引用再确认)}与层正则化\upcite{Ba2016LayerN}的引入让网络的训练变得更加稳定。此外,Transformer在训练过程中使用多种dropout来缓解过拟合问题\upcite{JMLR:v15:srivastava14a},同时在计算交叉熵损失时,也可以使用{\small\bfnew{标签平滑}}\index{标签平滑}(Label Smoothing)\index{Label Smoothing}来提高模型的泛化能力\upcite{Szegedy_2016_CVPR}。有研究人员综合了上述的技术并提出了RNMT模型\upcite{Chen2018TheBO},即利用循环神经网络作为编码器和解码器,搭配上残差连接、层正则化、多头自注意力以及标签平滑等机制,构建了一个新模型。该模型能够取得与Transformer相媲美的性能,这也侧面反映了Transformer模型恰似一件艺术品,各个组件共同作用,缺一不可。
\vspace{0.5em}
\item 多头注意力机制是近些年神经机器翻译中常用的结构。多头机制可以让模型从更多维度提取特征,也反应了一种多分支建模的思想。研究人员针对Transformer编码器的多头机制进行了分析,发现部分头在神经网络的学习过程中扮演至关重要的角色,并且蕴含语言学解释\upcite{DBLP:journals/corr/abs-1905-09418}。 而另一部分头本身则不具备很好的解释,对模型的帮助也不大,因此可以被剪枝掉。而且并不是头数越多,模型的性能就越强。{\red 一个有趣的发现是,如果在训练过程中使用多头机制,而在推断过程中去除大部分头,模型性能没有明显变化,而且能够提高在CPU上的执行效率(有点绕)}\upcite{Michel2019AreSH}
\parinterval 针对处理长文本数据时面临的复杂度较高的问题,一种比较直接的方式是优化自注意力机制,将复杂度减少到$O(N)$,其中$N$代表输入序列的长度。例如采用基于滑动窗口的局部注意力的Longformer模型\upcite{DBLP:journals/corr/abs-2004-05150},基于正向的正价随机特征的Performer\upcite{DBLP:journals/corr/abs-2006-04768},应用低秩分解重新设计注意力计算的Linformer\upcite{DBLP:journals/corr/abs-2009-14794},应用星型拓扑排序的Star-Transformer模型\upcite{DBLP:conf/naacl/GuoQLSXZ19}
\vspace{0.5em}
\item 此外,也可以利用正则化手段,在训练过程中增大不同头之间的差异\upcite{DBLP:conf/emnlp/LiTYLZ18}。也可以引入多尺度的思想,对输入的特征进行分级表示,并引入短语的信息\upcite{DBLP:conf/emnlp/HaoWSZT19}。还可以通过对注意力权重进行调整,实现对序列中的实词与虚词进行区分\upcite{DBLP:conf/emnlp/Lin0RLS18}。 除了上述基于编码端-解码端的建模范式,还可以定义隐变量模型来捕获句子中潜在的语义信息\upcite{Su2018VariationalRN,DBLP:conf/acl/SetiawanSNP20},或直接对源语言和目标语言序列进行联合表示\upcite{Li2020NeuralMT}
\parinterval 结构搜索技术是模型结构优化的一种方法,在近些年得到了愈加广泛的关注。其中搜索策略是衔接搜索空间和评价方法的关键步骤,在整个结构搜索方法中扮演着非常重要的角色,不同类型的搜索策略也决定了搜索过程能够在怎样的搜索空间中进行,以及性能评估如何帮助完成搜索等。除前文详细介绍的基于进化算法、强化学习以及基于梯度的方法外,基于贝叶斯优化以及随机搜索的方式同样能够有效地对搜索空间进行探索。贝叶斯优化的方式已经在超参数优化领域中取得一定成绩,而对于结构搜索任务来说,也有相关研究人员尝试使用基于树的模型来对模型结构以及超参数进行协同优化\upcite{DBLP:conf/nips/BergstraBBK11,DBLP:conf/lion/HutterHL11,DBLP:conf/icml/BergstraYC13,DBLP:conf/ijcai/DomhanSH15,DBLP:conf/icml/MendozaKFSH16,DBLP:journals/corr/abs-1807-06906}。随机搜索的方法在很多工作中被作为基线,这种方式在搜索空间中随机对搜索单元进行选择及操作,最终通过组合或进化等方式找到适用于当前任务的模型结构\upcite{li2020automated,DBLP:conf/cvpr/BenderLCCCKL20,DBLP:conf/uai/LiT19}。对于结构搜索任务来说如何提升目前搜索策略的稳定性\upcite{DBLP:conf/iccv/ChenXW019,DBLP:conf/icml/ChenH20,DBLP:conf/iclr/XuX0CQ0X20},如何在更大的搜索空间\upcite{DBLP:conf/iclr/XieZLL19,DBLP:conf/acl/LiHZXJXZLL20,DBLP:conf/iclr/CaiZH19}、如何在更多的任务中进行搜索\upcite{DBLP:conf/emnlp/JiangHXZZ19,DBLP:conf/icml/SoLL19}等等,已经成为结构搜索方法中亟待解决的重要问题。
\vspace{0.5em}
\item Transformer等模型处理超长序列也是较为困难的。一种比较直接的解决办法是优化自注意力机制,降低模型计算复杂度。例如,采用基于滑动窗口的局部注意力的Longformer 模型\upcite{DBLP:journals/corr/abs-2004-05150}、基于随机特征的Performer\upcite{DBLP:journals/corr/abs-2006-04768}、使用低秩分解的Linformer\upcite{DBLP:journals/corr/abs-2009-14794}、应用星型拓扑排序的Star-Transformer\upcite{DBLP:conf/naacl/GuoQLSXZ19}
\vspace{0.5em}
\end{itemize}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论