Commit fc76f27b by 孟霞

合并分支 'master' 到 'mengxia'

Master

查看合并请求 !1123
parents 1af5374f 2dbdd00f
......@@ -17,7 +17,7 @@
\node [anchor=north west] (rule4part2) at ([yshift=0.5em]rule4.south west) {\textbf{\hspace{0.95em} then} 调序[动词 + 对象]};
\node [anchor=north west] (rule5) at ([yshift=0.1em]rule4part2.south west) {\textbf{5: If} 译文主语是\ I};
\node [anchor=north west] (rule5part2) at ([yshift=0.5em]rule5.south west) {\textbf{\hspace{0.95em} then} be动词为\ am/was};
\node [anchor=north west] (rule6) at ([yshift=0.1em]rule5part2.south west) {\textbf{6: If} 源语是主谓结构};
\node [anchor=north west] (rule6) at ([yshift=0.1em]rule5part2.south west) {\textbf{6: If} 源语是主谓结构};
\node [anchor=north west] (rule6part2) at ([yshift=0.5em]rule6.south west) {\textbf{\hspace{0.95em} then} 译文为主谓结构};
\node [anchor=south west] (rulebaselabel) at (rule1.north west) {{\color{ublue} 资源:规则库}};
}
......
......@@ -267,7 +267,7 @@
\end{figure}
%-------------------------------------------
\parinterval\ref{fig:1-8}展示了一个使用转换法进行翻译的实例。这里,利用一个简单的汉译英规则库完成对句子“我对你感到满意”的翻译。当翻译“我”时,从规则库中找到规则1,该规则表示遇到单词“我”就翻译为“I”;类似地,也可以从规则库中找到规则4,该规则表示翻译调序,即将单词“you”放到“be satisfied with”后面。这种通过规则表示单词之间对应关系的方式,也为统计机器翻译方法提供了思路。如统计机器翻译中,基于短语的翻译模型使用短语对对原文进行替换,详细描述可以参考{\chapterseven}
\parinterval\ref{fig:1-8}展示了一个使用转换法进行翻译的实例。这里,利用一个简单的汉译英规则库完成对句子“我对你感到满意”的翻译。当翻译“我”时,从规则库中找到规则1,该规则表示遇到单词“我”就翻译为“I”;类似地,也可以从规则库中找到规则4,该规则表示翻译调序,即将单词“you”放到“be satisfied with”后面。这种通过规则表示单词之间对应关系的方式,也为统计机器翻译方法提供了思路。如统计机器翻译中,基于短语的翻译模型使用短语对对源语言进行替换,详细描述可以参考{\chapterseven}
\parinterval 在上述例子中可以发现,规则不仅仅可以翻译句子之间单词的对应,如规则1,还可以表示句法甚至语法之间的对应,如规则6。因此基于规则的方法可以分成多个层次,如图\ref{fig:1-9}所示。图中不同的层次表示采用不同的知识来书写规则,进而完成机器翻译过程。对于翻译问题,可以构建不同层次的基于规则的机器翻译系统。这里包括四个层次,分别为:词汇转换、句法转换、语义转换和中间语言层。其中,上层可以继承下层的翻译知识,比如说句法转换层会利用词汇转换层知识。早期基于规则的方法属于词汇转换层。
......
......@@ -541,7 +541,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm
\hat{\mathbi{c}}_t & = & \textrm{Tanh} ([\mathbi{h}_{t-1},\mathbi{x}_{t}] \mathbi{W}_c + \mathbi{b}_c ) \label{eq:10-8}
\end{eqnarray}
之后,用$\mathbi{i}_t$点乘$\hat{\mathbi{c}}_t$,得到当前需要记忆的信息,记为$\mathbi{i}_t \odot \hat{\mathbi{c}}_t$。接下来需要更新旧的信息$\mathbi{c}_{t-1}$,得到新的记忆信息$\mathbi{c}_t$,更新的操作如图\ref{fig:10-11}(c)红色线部分所示,“$\bigoplus$”表示相加。具体规则是通过遗忘门选择忘记一部分上文信息$\mathbi{f}_t$,通过输入门计算新增的信息$\mathbi{i}_t \odot \hat{\mathbi{c}}_t$,然后根据“$\bigotimes$”门与“$\bigoplus$”门进行相应的乘法和加法计算,如公式\eqref{eq:10-9}
之后,用$\mathbi{i}_t$点乘$\hat{\mathbi{c}}_t$,得到当前需要记忆的信息,记为$\mathbi{i}_t \odot \hat{\mathbi{c}}_t$。接下来需要更新旧的信息$\mathbi{c}_{t-1}$,得到新的记忆信息$\mathbi{c}_t$,更新的操作如图\ref{fig:10-11}(c)红色线部分所示,“$\bigoplus$”表示相加。具体规则是通过遗忘门选择忘记一部分上文信息$\mathbi{f}_t \odot \mathbi{c}_{t-1} $,通过输入门计算新增的信息$\mathbi{i}_t \odot \hat{\mathbi{c}}_t$,然后根据“$\bigotimes$”门与“$\bigoplus$”门进行相应的乘法和加法计算,如公式\eqref{eq:10-9}
\begin{eqnarray}
\mathbi{c}_t &=& \mathbi{f}_t \odot \mathbi{c}_{t-1} + \mathbi{i}_t \odot \hat{\mathbi{c}_t}
\label{eq:10-9}
......@@ -573,7 +573,7 @@ $\funp{P}({y_j | \mathbi{s}_{j-1} ,y_{j-1},\mathbi{C}})$由Softmax实现,Softm
\subsection{门控循环单元}
\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$,同时使用了更少的门控单元,大大提升了计算效率。
\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]
......
......@@ -87,7 +87,7 @@
\parinterval 在卷积计算中,不同深度下卷积核不同但是执行操作相同,这里以二维卷积核为例展示具体卷积计算。若设输入矩阵为$\mathbi{x}$,输出矩阵为$\mathbi{y}$,卷积滑动步幅为$\textrm{stride}$,卷积核为$\mathbi{w}$,且$\mathbi{w} \in \mathbb{R}^{Q \times U} $,那么卷积计算过程如下:
\begin{eqnarray}
\mathbi{y}_{i,j} &=& \sum \sum ( \mathbi{x}_{[j\times \textrm{stride}:j\times \textrm{stride}+U-1,i\times \textrm{stride}:i\times \textrm{stride}+Q-1]} \odot \mathbi{w} )
\mathbi{y}_{i,j} &=& \sum \sum ( \mathbi{x}_{[i\times \textrm{stride}:i\times \textrm{stride}+Q-1,j\times \textrm{stride}:j\times \textrm{stride}+U-1]} \odot \mathbi{w} )
\label{eq:11-1}
\end{eqnarray}
......
......@@ -24,8 +24,8 @@
%\draw [->,dotted,very thick] ([xshift=0em,yshift=0em]n1.east) .. controls ([xshift=3em,yshift=-1em]n1.-90) and ([xshift=-3em,yshift=-1em]n2.-90) .. (n2.west);
\node[anchor=west,inner sep=0mm] (n3) at ([xshift=4.1em,yshift=1em]n1.east) {$Q_1,Q_2,\ldots,Q_J$};
\node[anchor=west,inner sep=0mm] (n4) at ([xshift=4.9em,yshift=-1em]n1.east) {$\tilde{{y}}_1,\tilde{{y}}_2,\ldots,\tilde{{y}}_J$};
\node[anchor=west,inner sep=0mm] (n3) at ([xshift=4.1em,yshift=1.2em]n1.east) {$Q_1,Q_2,\ldots,Q_J$};
\node[anchor=west,inner sep=0mm] (n4) at ([xshift=4.9em,yshift=-1.2em]n1.east) {$\tilde{{y}}_1,\tilde{{y}}_2,\ldots,\tilde{{y}}_J$};
\draw [->,thick] ([xshift=-0.1em,yshift=0.6em]n2.west) -- ([xshift=0.1em,yshift=0.6em]n1.east);
\draw [->,thick] ([xshift=0.1em,yshift=-0.6em]n1.east) -- ([xshift=-0.1em,yshift=-0.6em]n2.west);
......
......@@ -41,7 +41,6 @@
% NEW SECTION
%----------------------------------------------------------------------------------------
\sectionnewpage
\section{开放词表}
\parinterval 对于神经机器翻译而言,研究人员通常希望使用更大的词表完成模型训练。因为大词表可以覆盖更多的语言现象,使模型对不同的语言现象有更强的区分能力。但是,人类的语言表达方式是十分多样的,这也体现在单词的构成上,甚至人们都无法想象数据中存在的不同单词的数量。比如,在WMT、CCMT等评测数据上,英语词表大小都会在100万以上。如果不加限制,机器翻译的词表将会很“大”。这也会导致模型参数量变大,模型训练变得极为困难。更严重的问题是,测试数据中的一些单词根本就没有在训练数据中出现过,这时会出现未登录词翻译问题(即OOV问题),即系统无法对未见单词进行翻译。在神经机器翻译中,通常会考虑使用更小的翻译单元来缓解数据稀疏问题。
......@@ -707,7 +706,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\seq{y}} | \seq{x})
\label{eq:13-24}
\end{eqnarray}
这样的损失函数最直接的好处是,知识蒸馏的流程会非常简单。因为只需要利用教师模型将训练数据(源语言)翻译一遍,之后把它的输出替换为训练数据的目标语言部分。之后,利用新得到的双语数据训练学生模型即可。图\ref{fig:13-12}对比了词级和序列级知识蒸馏方法。
这样的损失函数最直接的好处是,知识蒸馏的流程会非常简单。因为只需要利用教师模型将训练数据(源语言)翻译一遍,之后把它的输出作为训练数据的目标语言部分构造出新的双语数据。之后,利用新得到的双语数据训练学生模型即可。图\ref{fig:13-12}对比了词级和序列级知识蒸馏方法。
\vspace{0.5em}
\end{itemize}
......
......@@ -105,15 +105,15 @@
\node [rectangle,inner sep=0.3em,rounded corners=5pt,very thick,dotted,draw=ublue,minimum height=1.4em,minimum width=7em] [fit = (l2) (sa2) (res4) (l5) (set2)] (b3) {};
\end{pgfonlayer}
\node [inputnode,anchor=north west] (input1) at ([yshift=-1.6em,xshift=-0.5em]sa1.south west) {\tiny{Embedding}};
\node [inputnode,anchor=north west] (input1) at ([yshift=-1.6em,xshift=-0.5em]sa1.south west) {\tiny{$\textbf{Embedding}$}};
\node [] (add) at ([yshift=-2.2em,xshift=3.5em]sa1.south west) {$+$};
\node [posnode,anchor=north east] (pos1) at ([yshift=-1.6em,xshift=1.5em]sa1.south east) {\tiny{Absolute Position}};
\node [posnode,anchor=north east] (pos1) at ([yshift=-1.6em,xshift=1.5em]sa1.south east) {\tiny{$\textbf{Absolute Position}$}};
\node [anchor=north] (wi) at ([yshift=-0.5em]pos1.south) {\scriptsize{词序信息}};
\node [posnode,anchor=west,font=\tiny,align=center] (pos2) at ([yshift=0em,xshift=1em]pos1.east) {Relative \\ Position 1};
\node [posnode,anchor=west,font=\tiny,align=center] (pos2) at ([yshift=0em,xshift=1em]pos1.east) {$\textbf{Relative}$ \\ $\textbf{Position 1}$};
\node [posnode,anchor=west,font=\tiny,align=center,minimum width=1em] (pos3) at ([yshift=0em,xshift=1em]pos2.east) {$\cdots$};
\node [posnode,anchor=west,font=\tiny,align=center] (pos4) at ([yshift=0em,xshift=1em]pos3.east) {Relative \\ Position $n$};
\node [posnode,anchor=west,font=\tiny,align=center] (pos4) at ([yshift=0em,xshift=1em]pos3.east) {$\textbf{Relative}$ \\ $\textbf{Position n}$};
\draw [->] (wi.north) -- (pos1.south);
\draw [->] (add.north) -- (sa1.south);
......
......@@ -31,7 +31,6 @@
% NEW SECTION
%----------------------------------------------------------------------------------------
\sectionnewpage
\section{注意力机制的改进}
\parinterval 注意力机制是神经机器翻译成功的关键。以Transformer模型为例,由于使用了自注意力机制,该模型展现出较高的训练并行性,同时在机器翻译、语言建模等任务上,该模型也取得了很好的表现。但是Transformer模型仍存在许多亟待解决的问题,例如,在处理长文本序列时(假设文本长度为$N$),自注意力机制的时间复杂度为$O(N^2)$,当$N$过大时翻译速度很低。此外,尽管Transformer模型的输入中包含了绝对位置编码表示,但是现有的自注意力机制仍然无法显性捕获局部窗口下不同位置之间的关系。而且注意力机制也需要更多样的手段进行特征提取,例如,采用多头或者多分支结构对不同空间特征进行提取。针对以上问题,本节将介绍注意力机制的优化策略,并重点讨论Transformer模型的若干改进方法。
......@@ -183,7 +182,7 @@ A_{ij}^{\rm rel} &=& \underbrace{\mathbi{E}_{x_i}\mathbi{W}_Q\mathbi{W}_{K}^{\te
\noindent 具体的形式如下:
\begin{eqnarray}
\mathbi{e}_{ij} &=& \frac{(\mathbi{x}_i \mathbi{W}_Q){(\mathbi{x}_j \mathbi{W}_K)}^{\textrm{T}}}{\sqrt{d_k}} + G_{ij}
e_{ij} &=& \frac{(\mathbi{x}_i \mathbi{W}_Q){(\mathbi{x}_j \mathbi{W}_K)}^{\textrm{T}}}{\sqrt{d_k}} + G_{ij}
\label{eq:15-15}
\end{eqnarray}
......@@ -222,7 +221,7 @@ v_i &=& \mathbi{I}_d^{\textrm{T}}\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\noindent 于是,在计算第$i$个词对第$j$个词的相关系数时,通过超参数$\omega$控制实际的感受野为$j-\omega,\ldots,j+\omega$,注意力计算中$\mathbi{e}_{ij}$的计算方式与公式\eqref{eq:15-6}相同,权重$\alpha_{ij}$的具体计算公式为:
\begin{eqnarray}
\alpha_{ij} &=& \frac{\exp (\mathbi{e}_{ij})}{\sum_{k=j-\omega}^{j+\omega}\exp (\mathbi{e}_{ik})}
\alpha_{ij} &=& \frac{\exp (e_{ij})}{\sum_{k=j-\omega}^{j+\omega}\exp (e_{ik})}
\label{eq:15-20}
\end{eqnarray}
......@@ -688,9 +687,9 @@ v_i &=& \mathbi{I}_d^{\textrm{T}}\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\vspace{0.5em}
\item 类似于标准的Transformer初始化方式,使用Xavier初始化方式来初始化除了词嵌入以外的所有参数矩阵。词嵌入矩阵服从$\mathbb{N}(0,d^{-\frac{1}{2}})$的高斯分布,其中$d$代表词嵌入的维度。
\vspace{0.5em}
\item 对编码器中部分自注意力机制的参数矩阵以及前馈神经网络的参数矩阵进行缩放因子为$0.67 {L}^{-\frac{1}{4}}$的缩放,$L$为编码器层数。
\item 对编码器中部分自注意力机制的参数矩阵以及前馈神经网络的参数矩阵进行缩放因子为$0.67 {L}^{-\frac{1}{4}}$的缩放,对编码器中词嵌入的参数矩阵进行缩放因子为$(9 {L})^{-\frac{1}{4}}$的缩放,其中$L$为编码器的层数。
\vspace{0.5em}
\item 对解码器中部分注意力机制的参数矩阵、前馈神经网络的参数矩阵以及前馈神经网络的嵌入式输入进行缩放因子为$(9 {M})^{-\frac{1}{4}}$的缩放,其中$M$为解码器层数。
\item 对解码器中部分注意力机制的参数矩阵、前馈神经网络的参数矩阵以及解码器词嵌入的参数矩阵进行缩放因子为$(9 {M})^{-\frac{1}{4}}$的缩放,其中$M$为解码器的层数。
\vspace{0.5em}
\end{itemize}
......@@ -704,7 +703,7 @@ v_i &=& \mathbi{I}_d^{\textrm{T}}\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\parinterval 也有研究发现Post-Norm结构在训练过程中过度依赖残差支路,在训练初期很容易发生参数梯度方差过大的现象\upcite{DBLP:conf/emnlp/LiuLGCH20}。经过分析发现,虽然底层神经网络发生梯度消失是导致训练不稳定的重要因素,但并不是唯一因素。例如,标准Transformer模型中梯度消失的原因在于使用了Post-Norm结构的解码器。尽管通过调整模型结构解决了梯度消失问题,但是模型训练不稳定的问题仍然没有被很好地解决。研究人员观测到Post-Norm结构在训练过程中过于依赖残差支路,而Pre-Norm结构在训练过程中逐渐呈现出对残差支路的依赖性,这更易于网络的训练。进一步,从参数更新的角度出发,Pre-Norm由于参数的改变导致网络输出变化的方差经推导后可以表示为$O(\log L)$,而Post-Norm对应的方差为$O(L)$。因此,可以尝试减小Post-Norm中由于参数更新导致的输出的方差值,从而达到稳定训练的目的。针对该问题,可以采用两阶段的初始化方法。这里,可以重新定义子层之间的残差连接如下:
\begin{eqnarray}
\mathbi{x}_{l+1} &=& \mathbi{x}_l \cdot {\bm \omega_{l+1}} + F_{l+1}(\mathbi{x}_l)
\mathbi{x}_{l+1} &=& \mathbi{x}_l \odot {\bm \omega_{l+1}} + F_{l+1}(\mathbi{x}_l)
\label{eq:15-47}
\end{eqnarray}
......
......@@ -122,7 +122,7 @@
\vspace{-1em}
\parinterval 语音识别目前广泛使用基于Transformer的模型结构(见{\chaptertwelve}),如图\ref{fig:17-5}所示。可以看出,相比文本翻译,语音识别模型结构上唯一的区别在于编码器的输入为声学特征,以及编码器底层会使用额外的卷积层来减小输入序列的长度。这是由于语音对应的特征序列过长,在计算注意力模型的时候,会占用大量的内存和显存,并增加训练时间。因此,一个常用的做法是在语音特征上进行两层步长为2的卷积操作,从而将输入序列的长度缩小为之前的1/4。通过使用大量的语音-标注平行数据对模型进行训练,可以得到高质量的语音识别模型。
\parinterval 为了降低语音识别的错误对下游系统的影响,通常也会用词格来取代One-best语音识别结果。除此之外,另一种思路是通过一个后处理模型修正识别结果中的错误,再送给文本翻译模型进行翻译。也可以进一步对文本做{\small\bfnew{顺滑}}\index{顺滑}(Disfluency Detection\index{Disfluency Detection})处理,使得送给翻译系统的文本更加干净、流畅,比如除去一些导致停顿的语气词。这一做法在工业界得到了广泛应用,但由于每个模型只能串行地计算,也会带来额外的计算代价以及运算时间。第三种思路是训练更加健壮的文本翻译模型,使其可以处理输入中存在的噪声或误差\upcite{DBLP:conf/acl/LiuTMCZ18}
\parinterval 为了降低语音识别的错误对下游系统的影响,通常也会用词格来取代One-best语音识别结果。除此之外,另一种思路是通过一个后处理模型修正识别结果中的错误,再送给文本翻译模型进行翻译。也可以进一步对文本做{\small\bfnew{顺滑}}\index{顺滑}(Disfluency Detection\index{Disfluency Detection})处理,使得送给翻译系统的文本更加干净、流畅,比如除去一些表示停顿的语气词。这一做法在工业界得到了广泛应用,但由于每个模型只能串行地计算,也会带来额外的计算代价以及运算时间。第三种思路是训练更加健壮的文本翻译模型,使其可以处理输入中存在的噪声或误差\upcite{DBLP:conf/acl/LiuTMCZ18}
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......
......@@ -4,7 +4,7 @@
width=13cm,
height=5.5cm,
xlabel={WikiText-103上的词表},
ylabel={词汇出现总次数},
ylabel={单词出现总次数},
xlabel style={xshift=4.2cm,yshift=0.4cm,font=\footnotesize},
ylabel style={rotate=-90,yshift=2.8cm,xshift=1.2cm,font=\footnotesize},
xticklabel style={opacity=0},
......
......@@ -32,7 +32,6 @@
% NEW SECTION
%----------------------------------------------------------------------------------------
\sectionnewpage
\section{概率论基础}
\parinterval 为了便于后续内容的介绍,首先对本书中使用的概率和统计学概念进行简要说明。
......
......@@ -138,7 +138,7 @@ IBM模型由Peter F. Brown等人于上世纪九十年代初提出\upcite{DBLP:jo
\parinterval 对于第二个问题,尽管机器能够找到很多译文选择路径,但它并不知道哪些路径是好的。说地再直白一些,简单地枚举路径实际上就是一个体力活,没有太多的智能。因此计算机还需要再聪明一些,运用它的能够“掌握”的知识判断翻译结果的好与坏。这一步是最具挑战的,当然也有很多思路来解决这个问题。在统计机器翻译中,这个问题被定义为:设计一种统计模型,它可以给每个译文一个可能性,而这个可能性越高表明译文越接近人工翻译。
\parinterval 如图\ref{fig:5-4}所示,每个单词翻译候选的侧黑色框里的数字就是单词的翻译概率,使用这些单词的翻译概率,可以得到整句译文的概率(用符号$\funp{P}$表示)。这样,就用概率化的模型描述了每个翻译候选的可能性。基于这些翻译候选的可能性,机器翻译系统可以对所有的翻译路径进行打分,比如,图\ref{fig:5-4}中第一条路径的分数为0.042,第二条是0.006,以此类推。最后,系统可以选择分数最高的路径作为源语言句子的最终译文。
\parinterval 如图\ref{fig:5-4}所示,每个单词翻译候选的侧黑色框里的数字就是单词的翻译概率,使用这些单词的翻译概率,可以得到整句译文的概率(用符号$\funp{P}$表示)。这样,就用概率化的模型描述了每个翻译候选的可能性。基于这些翻译候选的可能性,机器翻译系统可以对所有的翻译路径进行打分,比如,图\ref{fig:5-4}中第一条路径的分数为0.042,第二条是0.006,以此类推。最后,系统可以选择分数最高的路径作为源语言句子的最终译文。
%----------------------------------------------
\begin{figure}[htp]
......@@ -348,7 +348,7 @@ $\seq{t}^{[2]}$ = So\; ,\; what\; is\; human\; \underline{translation}\; ?
\parinterval 首先引入一个非常重要的概念\ \dash \ {\small\sffamily\bfseries{词对齐}}\index{词对齐}(Word Alignment)\index{Word Alignment},它是统计机器翻译中最核心的概念之一。词对齐描述了平行句对中单词之间的对应关系,它体现了一种观点:本质上句子之间的对应是由单词之间的对应表示的。当然,这个观点在神经机器翻译或者其他模型中可能会有不同的理解,但是翻译句子的过程中考虑词级的对应关系是符合人类对语言的认知的。
\parinterval\ref{fig:5-7} 展示了一个汉英互译句对$\seq{s}$$\seq{t}$及其词对齐关系,单词的右下标数字表示了该词在句中的位置,而虚线表示的是句子$\seq{s}$$\seq{t}$中的词对齐关系。比如,“满意”的右下标数字5表示在句子$\seq{s}$中处于第5个位置,“satisfied”的右下标数字3表示在句子$\seq{t}$中处于第3个位置,“满意”和“satisfied”之间的虚线表示两个单词之间是对齐的。为方便描述,用二元组$(j,i)$ 来描述词对齐,它表示源语言句子的第$j$个单词对应目标语言句子的第$i$个单词,即单词$s_j$$t_i$对应。通常,也会把$(j,i)$称作一条{\small\sffamily\bfseries{词对齐连接}}\index{词对齐连接}(Word Alignment Link\index{Word Alignment Link})。图\ref{fig:5-7} 中共有5 条虚线,表示有5组单词之间的词对齐连接。可以把这些词对齐连接构成的集合作为词对齐的一种表示,记为$A$,即$A={\{(1,1),(2,4),(3,5),(4,2)(5,3)}\}$
\parinterval\ref{fig:5-7} 展示了一个汉英互译句对$\seq{s}$$\seq{t}$及其词对齐关系,单词的右下标数字表示了该词在句中的位置,而虚线表示的是句子$\seq{s}$$\seq{t}$中的词对齐关系。比如,“满意”的右下标数字5表示在句子$\seq{s}$中处于第5个位置,“satisfied”的右下标数字3表示在句子$\seq{t}$中处于第3个位置,“满意”和“satisfied”之间的虚线表示两个单词之间是对齐的。为方便描述,用二元组$(j,i)$ 来描述词对齐,它表示源语言句子的第$j$个单词对应目标语言句子的第$i$个单词,即单词$s_j$$t_i$对应。通常,也会把$(j,i)$称作一条{\small\sffamily\bfseries{词对齐连接}}\index{词对齐连接}(Word Alignment Link\index{Word Alignment Link})。图\ref{fig:5-7} 中共有5 条虚线,表示有5组单词之间的词对齐连接。可以把这些词对齐连接构成的集合作为词对齐的一种表示,记为$A$,即$A={\{(1,1),(2,4),(3,5),(4,2),(5,3)}\}$
%----------------------------------------------
\begin{figure}[htp]
......@@ -503,7 +503,7 @@ g(\seq{s},\seq{t}) & \equiv & \prod_{j,i \in \widehat{A}}{\funp{P}(s_j,t_i)} \ti
\parinterval\ref{sec:simple-mt-example}节中,我们实现了一个简单的基于词的统计机器翻译模型,内容涉及建模、训练和解码。但是,还有很多问题还没有进行深入讨论,比如,如何处理空翻译?如何对调序问题进行建模?如何用更严密的数学模型描述翻译过程?如何对更加复杂的统计模型进行训练?等等。针对以上问题,本节将系统地介绍IBM统计机器翻译模型。作为经典的机器翻译模型,对IBM模型的学习将有助于对自然语言处理问题建立系统化建模思想,特别是对问题的数学描述方法将会成为理解本书后续内容的基础工具。
\parinterval 首先,重新思考一下人类进行翻译的过程。对于给定的源语$\seq{s}$,人不会像计算机一样尝试很多的可能,而是快速准确地翻译出一个或者少数几个正确的译文。在人看来,除了正确的译文外,其他的翻译都是不正确的,或者说除了少数的译文人甚至都不会考虑太多其他的可能性。但是,在统计机器翻译的世界里,没有译文是不可能的。换句话说,对于源语言句子$\seq{s}$,所有目标语词串$\seq{t}$都是可能的译文,只是可能性大小不同。这个思想可以通过统计模型实现:每对$(\seq{s},\seq{t})$都有一个概率值$\funp{P}(\seq{t}|\seq{s})$来描述$\seq{s}$翻译为$\seq{t}$ 的好与坏(图\ref{fig:5-12})。
\parinterval 首先,重新思考一下人类进行翻译的过程。对于给定的源语言句子$\seq{s}$,人不会像计算机一样尝试很多的可能,而是快速准确地翻译出一个或者少数几个正确的译文。在人看来,除了正确的译文外,其他的翻译都是不正确的,或者说除了少数的译文人甚至都不会考虑太多其他的可能性。但是,在统计机器翻译的世界里,没有译文是不可能的。换句话说,对于源语言句子$\seq{s}$,所有目标语词串$\seq{t}$都是可能的译文,只是可能性大小不同。这个思想可以通过统计模型实现:每对$(\seq{s},\seq{t})$都有一个概率值$\funp{P}(\seq{t}|\seq{s})$来描述$\seq{s}$翻译为$\seq{t}$ 的好与坏(图\ref{fig:5-12})。
%----------------------------------------------
\begin{figure}[htp]
......
......@@ -5,7 +5,7 @@
\tikzstyle{cand} = [draw,inner sep=4pt,line width=1pt,align=center,drop shadow,minimum height =1.6em,minimum width=4.2em,fill=green!30]
\tikzstyle{ref} = [draw,inner sep=4pt,line width=1pt,align=center,drop shadow,minimum height =1.6em,minimum width=4.2em,fill=red!30]
\node[align=center,minimum width=2.4em,minimum height=1.6em,minimum width=6em] (n11) at (0,0){源语};
\node[align=center,minimum width=2.4em,minimum height=1.6em,minimum width=6em] (n11) at (0,0){源语};
\node[cand,anchor=west] (n12) at ([xshift=0.0em]n11.east){};
\node[cand,anchor=west] (n13) at ([xshift=1em]n12.east){};
\node[cand,anchor=west] (n14) at ([xshift=1em]n13.east){};
......@@ -30,7 +30,7 @@
\tikzstyle{cand} = [draw,inner sep=4pt,line width=1pt,align=center,drop shadow,minimum height =1.6em,minimum width=4.2em,fill=green!30]
\tikzstyle{ref} = [draw,inner sep=4pt,line width=1pt,align=center,drop shadow,minimum height =1.6em,minimum width=4.2em,fill=red!30]
\node[align=center,minimum width=2.4em,minimum height=1.6em,minimum width=6em] (n11) at (0,0){源语};
\node[align=center,minimum width=2.4em,minimum height=1.6em,minimum width=6em] (n11) at (0,0){源语};
\node[cand,anchor=west] (n12) at ([xshift=0.0em]n11.east){};
\node[cand,anchor=west] (n13) at ([xshift=1em]n12.east){};
\node[cand,anchor=west] (n14) at ([xshift=1em]n13.east){};
......
......@@ -27,7 +27,7 @@
\node [anchor=north west,inner sep=1pt,fill=black] (tl13) at (t13.north west) {\tiny{{\color{white} \textbf{1}}}};
{
\node [anchor=north west,inner sep=2pt,fill=red!20,minimum height=1.6em,minimum width=6.55em] (t14) at ([yshift=-0.8em]t13.south west) {I'm \quad \quad};
\node [anchor=north west,inner sep=2pt,fill=red!20,minimum height=1.6em,minimum width=6.55em] (t14) at ([yshift=-1.0em]t13.south west) {I'm \quad \quad};
\node [anchor=north west,inner sep=2pt,fill=red!20,minimum height=1.6em,minimum width=6.55em] (t15) at ([yshift=-0.8em]t14.south west) {I \quad \quad};
\node [anchor=north west,inner sep=1pt,fill=black] (tl14) at (t14.north west) {\tiny{{\color{white} \textbf{1-2}}}};
\node [anchor=north west,inner sep=1pt,fill=black] (tl15) at (t15.north west) {\tiny{{\color{white} \textbf{1-2}}}};
......@@ -45,6 +45,7 @@
\node [anchor=north west,inner sep=2pt,fill=green!20,minimum height=1.6em,minimum width=6.55em] (t25) at ([yshift=-0.8em]t24.south west) {with you};
\node [anchor=north west,inner sep=1pt,fill=black] (tl24) at (t24.north west) {\tiny{{\color{white} \textbf{2-3}}}};
\node [anchor=north west,inner sep=1pt,fill=black] (tl25) at (t25.north west) {\tiny{{\color{white} \textbf{2-3}}}};
\node [anchor=north](tb25) at ([yshift=-0.6em]t25.south){...};
}
\node [anchor=north,inner sep=2pt,fill=blue!20,minimum height=1.6em,minimum width=2.5em] (t31) at ([yshift=-1em]s3.south) {you};
......@@ -67,6 +68,7 @@
\node [anchor=north west,inner sep=2pt,fill=red!20,minimum height=1.6em,minimum width=9.00em] (t44) at ([yshift=-0.8em]t43.south west) {satisfactory};
\node [anchor=north west,inner sep=1pt,fill=black] (tl43) at (t43.north west) {\tiny{{\color{white} \textbf{4-5}}}};
\node [anchor=north west,inner sep=1pt,fill=black] (tl44) at (t44.north west) {\tiny{{\color{white} \textbf{4-5}}}};
\node [anchor=north](tb44) at ([yshift=-0.6em]t44.south){...};
}
\node [anchor=north,inner sep=2pt,fill=purple!20,minimum height=1.6em,minimum width=4.5em] (t51) at ([yshift=-1em]s5.south) {satisfy};
......@@ -126,7 +128,7 @@
\begin{scope}
\draw[decorate,thick,decoration={brace,amplitude=5pt,mirror}] ([yshift=0em,xshift=-0.5em]t11.north west) -- ([xshift=-0.5em]t13.south west) node [pos=0.5,left,xshift=1.0em,yshift=0.0em,text width=5em,align=left] (label2) {\footnotesize{\textbf{单词翻译}}};
\draw[decorate,thick,decoration={brace,amplitude=5pt,mirror}] ([yshift=0em,xshift=-0.5em]t11.north west) -- ([yshift=-0.6em,xshift=-0.5em]t13.south west) node [pos=0.5,left,xshift=1.0em,yshift=0.0em,text width=5em,align=left] (label2) {\footnotesize{\textbf{单词翻译}}};
{
\draw [->,ultra thick,red,line width=2pt,opacity=0.7] ([xshift=-0.5em,yshift=-0.62em]t13.west) -- ([xshift=0.8em,yshift=-0.62em]t13.east) -- ([xshift=-0.2em,yshift=-0.62em]t22.west) -- ([xshift=0.8em,yshift=-0.62em]t22.east) -- ([xshift=-0.2em,yshift=-0.62em]t31.west) -- ([xshift=0.8em,yshift=-0.62em]t31.east) -- ([xshift=-0.2em,yshift=-0.62em]t41.west) -- ([xshift=0.8em,yshift=-0.62em]t41.east) -- ([xshift=-0.2em,yshift=-0.62em]t52.west) -- ([xshift=1.2em,yshift=-0.62em]t52.east);
......@@ -139,16 +141,16 @@
}
{
\draw[decorate,thick,decoration={brace,amplitude=5pt,mirror}] ([yshift=-0.2em,xshift=-0.5em]t13.south west) -- ([yshift=-6.3em,xshift=-0.5em]t13.south west) node [pos=0.5,left,xshift=1.0em,yshift=0.0em,text width=5em,align=left] (label3) {\footnotesize{\textbf{短语翻译}}};
\draw[decorate,thick,decoration={brace,amplitude=5pt,mirror}] ([yshift=0em,xshift=-0.5em]t14.north west) -- ([yshift=-8.8em,xshift=-0.5em]t14.north west) node [pos=0.5,left,xshift=1.0em,yshift=0.0em,text width=5em,align=left] (label3) {\footnotesize{\textbf{短语翻译}}};
}
{
\node [anchor=north west] (wtranslabel) at ([yshift=-5em]t15.south west) {\scriptsize{翻译路径(仅包含单词)}};
\node [anchor=north west] (wtranslabel) at ([xshift=-0.3em,yshift=-5.5em]t15.south west) {\scriptsize{翻译路径(仅包含单词)}};
\draw [->,ultra thick,red,line width=1.5pt,opacity=0.7] ([xshift=0.2em]wtranslabel.east) -- ([xshift=1.2em]wtranslabel.east);
}
{
\node [anchor=north west] (ptranslabel) at ([yshift=-6.5em]t15.south west) {\scriptsize{翻译路径(含有短语)}};
\node [anchor=north west] (ptranslabel) at ([xshift=-0.3em,yshift=-7.0em]t15.south west) {\scriptsize{翻译路径(含有短语)}};
\draw [->,ultra thick,ublue,line width=1.5pt,opacity=0.7] ([xshift=0.95em]ptranslabel.east) -- ([xshift=1.95em]ptranslabel.east);
}
......
......@@ -754,7 +754,7 @@ dr & = & {\rm{start}}_i-{\rm{end}}_{i-1}-1
\parinterval 解码的目的是根据模型以及输入,找到模型得分最高的推导,即:
\begin{eqnarray}
\hat{d} = \arg\max_{d}\ \ \textrm{score}(d,\seq{t},\seq{s})
\hat{d} = \arg\max_{d}\ \textrm{score}(d,\seq{t},\seq{s})
\label{eq:7-21}
\end{eqnarray}
......
......@@ -519,7 +519,7 @@ span\textrm{[0,4]}&=&\textrm{“猫} \quad \textrm{喜欢} \quad \textrm{吃} \q
\vspace{0.5em}
\item 把层次短语文法转化为乔姆斯基范式,这样可以直接使用原始的CKY方法进行分析;
\vspace{0.5em}
\item 对CKY方法进行改造。解码的核心任务要知道每个跨度是否能匹配规则的源语言部分。实际上,层次短语模型的文法是一种特殊的文法。这种文法规则的源语言部分最多包含两个变量,而且变量不能连续。这样的规则会对应一种特定类型的模版,比如,对于包含两个变量的规则,它的源语言部分形如$\alpha_0 \funp{X}_1 \alpha_1 \funp{X}_2 \alpha_2$。其中,$\alpha_0$$\alpha_1$$\alpha_2$表示终结符串,$\funp{X}_1$$\funp{X}_2$是变量。显然,如果$\alpha_0$$\alpha_1$$\alpha_2$确定下来那么$\funp{X}_1$$\funp{X}_2$的位置也就确定了下来。因此,对于每一个词串,都可以很容易的生成这种模版,进而完成匹配。而$\funp{X}_1$$\funp{X}_2$和原始CKY中匹配二叉规则本质上是一样的。由于这种方法并不需要对CKY方法进行过多调整,因此层次短语系统中广泛使用这种改造的CKY方法进行解码。
\item 对CKY方法进行改造。解码的核心任务要知道每个跨度是否能匹配规则的源语言部分。实际上,层次短语模型的文法是一种特殊的文法。这种文法规则的源语言部分最多包含两个变量,而且变量不能连续。这样的规则会对应一种特定类型的模版,比如,对于包含两个变量的规则,它的源语言部分形如$\alpha_0 \funp{X}_1 \alpha_1 \funp{X}_2 \alpha_2$。其中,$\alpha_0$$\alpha_1$$\alpha_2$表示终结符串,$\funp{X}_1$$\funp{X}_2$是变量。显然,如果$\alpha_0$$\alpha_1$$\alpha_2$确定下来那么$\funp{X}_1$$\funp{X}_2$的位置也就确定了下来。因此,对于每一个词串,都可以很容易的生成这种模版,进而完成匹配。而$\funp{X}_1$$\funp{X}_2$和原始CKY中匹配二叉规则本质上是一样的。由于这种方法并不需要对CKY方法进行过多调整,因此层次短语系统中广泛使用这种改造的CKY方法进行解码。
\vspace{0.5em}
\end{itemize}
......@@ -1411,7 +1411,7 @@ r_9: \quad \textrm{IP(}\textrm{NN}_1\ \textrm{VP}_2) \rightarrow \textrm{S(}\tex
\vspace{-1.0em}
\parinterval 对于规则“$\textrm{VP} \rightarrow \textrm{VV}\ \textrm{NP}$”,超边的头指向VP,超边的尾表示规则右部的两个变量VV和NP。规则“$\textrm{NP} \rightarrow \textrm{NN}\ \textrm{NP}$”也可以进行类似的解释。
\parinterval 不难发现,超图提供了一种非常紧凑的数据结构来表示多个推导,因为不同推导之间可以共享节点。如果把图\ref{fig:8-37}中的蓝色和红色部分看作是两个推导,那么它们就共享了同一个节点NN[1,2],其中NN是句法标记,[1,2]是跨度。能够想象,简单枚举一个句子所有的推导几乎是不可能的,但是用超图的方式却可以很有效地对指数级数量的推导进行表示。另一方面,超图上的运算常常被看作是一种基于半环的代数系统,而且人们发现许多句法分析和机器翻译问题本质上都是{\small\bfnew{半环分析}}\index{半环分析}(Semi-ring Parsing)\index{Semi-ring Parsing}。不过,由于篇幅有限,这里不会对半环等结构展开讨论。感兴趣的读者可以查阅相关文献\upcite{goodman1999semiring,eisner2002parameter}
\parinterval 不难发现,超图提供了一种非常紧凑的数据结构来表示多个推导,因为不同推导之间可以共享节点。如果把图\ref{fig:8-37}中的绿色和红色部分看作是两个推导,那么它们就共享了同一个节点NP[1,2],其中NP是句法标记,[1,2]是跨度。能够想象,简单枚举一个句子所有的推导几乎是不可能的,但是用超图的方式却可以很有效地对指数级数量的推导进行表示。另一方面,超图上的运算常常被看作是一种基于半环的代数系统,而且人们发现许多句法分析和机器翻译问题本质上都是{\small\bfnew{半环分析}}\index{半环分析}(Semi-ring Parsing)\index{Semi-ring Parsing}。不过,由于篇幅有限,这里不会对半环等结构展开讨论。感兴趣的读者可以查阅相关文献\upcite{goodman1999semiring,eisner2002parameter}
\parinterval 从句法分析的角度看,超图最大程度地复用了局部的分析结果,使得分析可以“结构化”。比如,有两个推导:
\begin{eqnarray}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论