Commit 2a437587 by 孟霞

合并分支 'master' 到 'mengxia'

Master

查看合并请求 !1042
parents a5c32063 f66afcf2
......@@ -12,10 +12,11 @@
{\footnotesize
\node [anchor=north west] (example1) at (0,0) {\textbf{1:} 源=什么\ 时候\ 开始};
\node [anchor=north west] (example1part2) at ([yshift=0.5em]example1.south west) {\hspace{1em} 译=\ When will it start};
\node [anchor=north west] (example2) at ([yshift=0.1em]example1part2.south west) {\textbf{2:} 源=我\ \ \ 感到\ 高兴};
\node [anchor=north west] (example2part2) at ([yshift=0.5em]example2.south west) {\hspace{1em} 译=\ I am happy with him};
\node [anchor=north west] (example2) at ([yshift=0.1em]example1part2.south west) {\textbf{2:} 源=我\ \ \ 感到\ 失望};
\node [anchor=north west] (example2part2) at ([yshift=0.5em]example2.south west) {\hspace{1em} 译=\ I am disappointed with him};
\node [anchor=north west] (example3) at ([yshift=0.1em]example2part2.south west) {\hspace{1em} ...};
\node [anchor=south west] (examplebaselabel) at (example1.north west) {{\color{ublue} 资源1:翻译实例库}};
\node [anchor=north east,opacity=0] (empty) at ([yshift=-5em]example2part2.south east) {examplebaselab};
}
}
......@@ -40,7 +41,7 @@
\begin{pgfonlayer}{background}
{
\node[rectangle,draw=ublue, thick,inner sep=0mm] [fit = (entry1) (entry2) (entry3) (entry4) (dictionarylabel)] {};
\node[rectangle,draw=ublue, thick,inner sep=0mm] [fit = (entry1) (entry2) (entry3) (entry4) (dictionarylabel) (empty)] {};
}
\end{pgfonlayer}
......@@ -49,20 +50,20 @@
\begin{scope}[xshift=2.3in]
{\footnotesize
\node [anchor=north west,inner sep=1mm] (w1) at (0,1.7em) {};
\node [anchor=north west,inner sep=1mm] (w2) at ([xshift=0.3em]w1.north east) {};
\node [anchor=north west,inner sep=1mm] (w3) at ([xshift=0.3em]w2.north east) {};
\node [anchor=north west,inner sep=1mm] (w4) at ([xshift=0.3em]w3.north east) {感到};
\node [anchor=north west,inner sep=1mm] (w5) at ([xshift=0.3em]w4.north east) {满意};
\node [anchor=north west,inner sep=1mm] (w2) at ([xshift=1.05em]w1.north east) {};
\node [anchor=north west,inner sep=1mm] (w3) at ([xshift=1.05em]w2.north east) {};
\node [anchor=north west,inner sep=1mm] (w4) at ([xshift=1.05em]w3.north east) {感到};
\node [anchor=north west,inner sep=1mm] (w5) at ([xshift=1.05em]w4.north east) {满意};
}
\end{scope}
\begin{scope}[xshift=2.3in,yshift=-0.2in]
{\footnotesize
\node [anchor=north west,inner sep=1mm] (c1) at (0,0) {};
\node [anchor=north west,inner sep=1mm] (c2) at ([xshift=0.3em]c1.north east) {};
\node [anchor=north west,inner sep=1mm] (c3) at ([xshift=0.3em]c2.north east) {};
\node [anchor=north west,inner sep=1mm] (c4) at ([xshift=0.3em]c3.north east) {感到};
\node [anchor=north west,inner sep=1mm] (c5) at ([xshift=0.3em]c4.north east) {高兴};
\node [anchor=north west,inner sep=1mm] (c2) at ([xshift=1.05em]c1.north east) {};
\node [anchor=north west,inner sep=1mm] (c3) at ([xshift=1.05em]c2.north east) {};
\node [anchor=north west,inner sep=1mm] (c4) at ([xshift=1.05em]c3.north east) {感到};
\node [anchor=north west,inner sep=1mm] (c5) at ([xshift=1.05em]c4.north east) {失望};
}
\end{scope}
......@@ -70,7 +71,7 @@
{\footnotesize
\node [anchor=west,inner sep=1mm] (e1) at (0,0) {I};
\node [anchor=west,inner sep=1mm] (e2) at ([xshift=0.3em]e1.east) {am};
\node [anchor=west,inner sep=1mm] (e3) at ([xshift=0.3em]e2.east) {happy};
\node [anchor=west,inner sep=1mm] (e3) at ([xshift=0.3em]e2.east) {disappointed};
\node [anchor=west,inner sep=1mm] (e4) at ([xshift=0.3em]e3.east) {with};
\node [anchor=west,inner sep=1mm] (e5) at ([xshift=0.3em]e4.east) {him};
}
......@@ -94,16 +95,16 @@
{
\draw[double,->,thick,ublue] (e3.south)--([yshift=-1.2em]e3.south) node[pos=0.5,right,xshift=0.2em,yshift=0.2em] (step1) {\color{red}{\tiny{用“你”替换“他”}}};
\draw[->,dotted,thick,red] ([xshift=-0.1em]entry2.east)..controls +(east:4) and +(west:4)..([yshift=-0.6em,xshift=-0.5em]e3.south) ;
\draw[->,dotted,thick,red] ([xshift=0.2em]entry2.east)..controls +(east:4) and +(west:4)..([yshift=-0.6em,xshift=-0.5em]e3.south) ;
}
\begin{scope}[xshift=2.3in,yshift=-0.9in]
{\footnotesize
\node [anchor=north west,inner sep=1mm] (c1) at (0,0) {};
\node [anchor=north west,inner sep=1mm] (c2) at ([xshift=0.3em]c1.north east) {};
\node [anchor=north west,inner sep=1mm] (c3) at ([xshift=0.3em]c2.north east) {\footnotesize{{\color{ublue}}}};
\node [anchor=north west,inner sep=1mm] (c4) at ([xshift=0.3em]c3.north east) {感到};
\node [anchor=north west,inner sep=1mm] (c5) at ([xshift=0.3em]c4.north east) {高兴};
\node [anchor=north west,inner sep=1mm] (c2) at ([xshift=1.05em]c1.north east) {};
\node [anchor=north west,inner sep=1mm] (c3) at ([xshift=1.05em]c2.north east) {\footnotesize{{\color{ublue}}}};
\node [anchor=north west,inner sep=1mm] (c4) at ([xshift=1.05em]c3.north east) {感到};
\node [anchor=north west,inner sep=1mm] (c5) at ([xshift=1.05em]c4.north east) {失望};
}
\end{scope}
......@@ -111,7 +112,7 @@
{\footnotesize
\node [anchor=west,inner sep=1mm] (e1) at (0,0) {I};
\node [anchor=west,inner sep=1mm] (e2) at ([xshift=0.3em]e1.east) {am};
\node [anchor=west,inner sep=1mm] (e3) at ([xshift=0.3em]e2.east) {happy};
\node [anchor=west,inner sep=1mm] (e3) at ([xshift=0.3em]e2.east) {disappointed};
\node [anchor=west,inner sep=1mm] (e4) at ([xshift=0.3em]e3.east) {with};
\node [anchor=west,inner sep=1mm] (e5) at ([xshift=0.3em,yshift=-0.2em]e4.east) {\textbf{{\color{ublue} you}}};
}
......@@ -122,28 +123,28 @@
}
{
\draw[double,->,thick,ublue] (e3.south)--([yshift=-1.2em]e3.south) node[pos=0.5,right,xshift=0.2em,yshift=0.2em] (step1) {\color{red}{\tiny{用“满意”替换“高兴}}};
\draw[double,->,thick,ublue] (e3.south)--([yshift=-1.2em]e3.south) node[pos=0.5,right,xshift=0.2em,yshift=0.2em] (step1) {\color{red}{\tiny{用“满意”替换“失望}}};
\draw[->,dotted,thick,red] ([xshift=-1.2em,yshift=-0.6em]entry3.north east)..controls +(east:2) and +(west:3)..([yshift=-0.6em,xshift=-0.5em]e3.south) ;
\draw[->,dotted,thick,red] ([xshift=0.2em,yshift=-0em]entry3.east)..controls +(east:2) and +(west:3)..([yshift=-0.6em,xshift=-0.5em]e3.south) ;
}
\begin{scope}[xshift=2.3in,yshift=-1.6in]
{\footnotesize
\node [anchor=north west,inner sep=1mm] (c1) at (0,0) {};
\node [anchor=north west,inner sep=1mm] (c2) at ([xshift=0.3em]c1.north east) {};
\node [anchor=north west,inner sep=1mm] (c3) at ([xshift=0.3em]c2.north east) {};
\node [anchor=north west,inner sep=1mm] (c4) at ([xshift=0.3em]c3.north east) {感到};
\node [anchor=north west,inner sep=1mm] (c5) at ([xshift=0.3em]c4.north east) {\footnotesize{{\color{ublue} 满意}}};
\node [anchor=north west,inner sep=1mm] (c2) at ([xshift=1.05em]c1.north east) {};
\node [anchor=north west,inner sep=1mm] (c3) at ([xshift=1.05em]c2.north east) {};
\node [anchor=north west,inner sep=1mm] (c4) at ([xshift=1.05em]c3.north east) {感到};
\node [anchor=north west,inner sep=1mm] (c5) at ([xshift=1.05em]c4.north east) {\footnotesize{{\color{ublue} 满意}}};
}
\end{scope}
\begin{scope}[xshift=2.3in,yshift=-2.0in]
{\footnotesize
\node [anchor=west,inner sep=1mm] (e1) at (0,0) {I};
\node [anchor=west,inner sep=1mm] (e2) at ([xshift=0.3em]e1.east) {am};
\node [anchor=west,inner sep=1mm] (e3) at ([xshift=0.3em]e2.east) {\textbf{{\color{ublue} satisfied}}};
\node [anchor=west,inner sep=1mm] (e4) at ([xshift=0.3em]e3.east) {with};
\node [anchor=west,inner sep=1mm] (e5) at ([xshift=0.3em,yshift=-0.2em]e4.east) {you};
\node [anchor=west,inner sep=1mm] (e2) at ([xshift=0.7em]e1.east) {am};
\node [anchor=west,inner sep=1mm] (e3) at ([xshift=0.7em]e2.east) {\textbf{{\color{ublue} satisfied}}};
\node [anchor=west,inner sep=1mm] (e4) at ([xshift=0.7em]e3.east) {with};
\node [anchor=west,inner sep=1mm] (e5) at ([xshift=0.7em,yshift=-0.2em]e4.east) {you};
}
\end{scope}
......
......@@ -82,7 +82,7 @@
\draw [->,thick] ([yshift=3em]s6.north) -- ([yshift=4em]s6.north) -- ([yshift=4em]t1.north) node [pos=0.5,fill=green!30,inner sep=2pt] (c1) {\scriptsize{表示$\mathbi{C}_1$}} -- ([yshift=3em]t1.north) ;
\draw [->,thick] ([yshift=3em]s5.north) -- ([yshift=5.3em]s5.north) -- ([yshift=5.3em]t2.north) node [pos=0.5,fill=green!30,inner sep=2pt] (c2) {\scriptsize{表示$\mathbi{C}_2$}} -- ([yshift=3em]t2.north) ;
\draw [->,thick] ([yshift=3.5em]s3.north) -- ([yshift=6.6em]s3.north) -- ([yshift=6.6em]t4.north) node [pos=0.5,fill=green!30,inner sep=2pt] (c3) {\scriptsize{表示$\mathbi{C}_i$}} -- ([yshift=3.5em]t4.north) ;
\draw [->,thick] ([yshift=3.5em]s3.north) -- ([yshift=6.6em]s3.north) -- ([yshift=6.6em]t4.north) node [pos=0.5,fill=green!30,inner sep=2pt] (c3) {\scriptsize{表示$\mathbi{C}_j$}} -- ([yshift=3.5em]t4.north) ;
\node [anchor=north] (smore) at ([yshift=3.5em]s3.north) {...};
\node [anchor=north] (tmore) at ([yshift=3.5em]t4.north) {...};
......
......@@ -133,9 +133,9 @@
\draw[->,standard] ([yshift=-0.3em]sa2.south) -- ([xshift=-4em,yshift=-0.3em]sa2.south) -- ([xshift=-4em,yshift=2em]sa2.south) -- ([xshift=-3.5em,yshift=2em]sa2.south);
\draw[->,standard] ([yshift=0.2em]res3.north) -- ([xshift=-4em,yshift=0.2em]res3.north) -- ([xshift=-4em,yshift=2.5em]res3.north) -- ([xshift=-3.5em,yshift=2.5em]res3.north);
\draw[->,standard] ([xshift=0em]wi.east) -- ([xshift=3.2em,yshift=0em]wi.east) -- ([xshift=-0em,yshift=0em]pos2.south);
\draw[->,standard] ([xshift=0em]wi.east) -- ([xshift=6.7em,yshift=0em]wi.east) -- ([xshift=-0em,yshift=0em]pos3.south);
\draw[->,standard] ([xshift=0em]wi.east) -- ([xshift=10.2em,yshift=0em]wi.east) -- ([xshift=-0em,yshift=0em]pos4.south);
\draw[->,standard] ([xshift=0em]wi.east) -- ([xshift=3.25em,yshift=0em]wi.east) -- ([xshift=-0em,yshift=0em]pos2.south);
\draw[->,standard] ([xshift=0em]wi.east) -- ([xshift=6.78em,yshift=0em]wi.east) -- ([xshift=-0em,yshift=0em]pos3.south);
\draw[->,standard] ([xshift=0em]wi.east) -- ([xshift=10.3em,yshift=0em]wi.east) -- ([xshift=-0em,yshift=0em]pos4.south);
\draw[->,standard] ([xshift=0em]pos2.north) -- ([xshift=0em,yshift=2.1em]pos2.north) -- ([xshift=-0em,yshift=0em]sa1.east);
\draw[->,standard] ([xshift=0em]pos3.north) -- ([xshift=0em,yshift=9.6em]pos3.north) -- ([xshift=-0em,yshift=0em]dot1.east);
\draw[->,standard] ([xshift=0em]pos4.north) -- ([xshift=0em,yshift=12.3em]pos4.north) -- ([xshift=-0em,yshift=0em]sa2.east);
......
......@@ -89,7 +89,7 @@
\label{eq:15-6}
\end{eqnarray}
\noindent 其中,$d_k$为模型中隐层的维度\footnote[3]{在多头注意力中,$d_k$为经过多头分割后每个头的维度。}$\mathbi{e}_{ij}$实际上就是$\mathbi{Q}$$\mathbi{K}$的向量积缩放后的一个结果。
\noindent 其中,$d_k$为模型中隐层的维度\footnote[3]{在多头注意力中,$d_k$为经过多头分割后每个头的维度。}$\mathbi{e}_{ij}$实际上就是$\mathbi{Q}$$\mathbi{K}$的向量积缩放后的一个结果。
\parinterval 基于上述描述,相对位置模型可以按如下方式实现:
......@@ -355,7 +355,7 @@ v_i &=& \mathbi{I}_d^{\textrm{T}}\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\begin{itemize}
\vspace{0.5em}
\item Reformer模型在计算Key和Value时使用相同的线性映射,共享Key和Value的值\upcite{Kitaev2020ReformerTE},降低了自注意力机制的复杂度。进一步,Reformer引入了一种{\small\bfnew{局部敏感哈希注意力机制}}\index{局部敏感哈希注意力机制}(Locality Sensitive Hashing Attention\index{Locality Sensitive Hashing Attention},LSH Attention),其提高效率的方式和固定模式中的局部建模一致,减少注意力机制的计算范围。对于每一个Query,通过局部哈希敏感机制找出和其较为相关的Key,并进行注意力的计算。其基本思路就是距离相近的向量以较大的概率被哈希分配到一个桶内,距离较远的向量被分配到一个桶内的概率则较低。此外,Reformer中还采用了一种{\small\bfnew{可逆残差网络结构}}\index{可逆残差网络结构}(The Reversible Residual Network)\index{The Reversible Residual Network}和分块计算前馈神经网络层的机制,即将前馈层的隐层维度拆分为多个块并独立的进行计算,最后进行拼接操作,得到前馈层的输出,这种方式大幅度减少了内存(显存)占用。
\item Reformer模型在计算Key和Value时使用相同的线性映射,共享Key和Value的值\upcite{Kitaev2020ReformerTE},降低了自注意力机制的复杂度。进一步,Reformer引入了一种{\small\bfnew{局部敏感哈希注意力机制}}\index{局部敏感哈希注意力机制}(Locality Sensitive Hashing Attention\index{Locality Sensitive Hashing Attention},LSH Attention),其提高效率的方式和固定模式中的局部建模一致,减少注意力机制的计算范围。对于每一个Query,通过局部哈希敏感机制找出和其较为相关的Key,并进行注意力的计算。其基本思路就是距离相近的向量以较大的概率被哈希分配到一个桶内,距离较远的向量被分配到一个桶内的概率则较低。此外,Reformer中还采用了一种{\small\bfnew{可逆残差网络结构}}\index{可逆残差网络结构}(The Reversible Residual Network)\index{The Reversible Residual Network}和分块计算前馈神经网络层的机制,即将前馈层的隐层维度拆分为多个块并独立的进行计算,最后进行拼接操作,得到前馈层的输出,这种方式大幅度减少了内存(显存)占用。
\vspace{0.5em}
\item Routing Transformer通过聚类算法对序列中的不同单元进行分组,分别在组内进行自注意力机制的计算\upcite{DBLP:journals/corr/abs-2003-05997}。该方法是将Query和Key映射到聚类矩阵$\mathbi{S}$
......@@ -506,7 +506,7 @@ v_i &=& \mathbi{I}_d^{\textrm{T}}\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
\label{eq:15-33}
\end{eqnarray}
\noindent 其中,$[\mathbi{h}^1,\ldots,\mathbi{h}^L]$是输入矩阵,$\mathbi{o}$是输出矩阵,$\mathbi{W}_1 \in \mathbb{R}^{d_{\textrm{model}} \times d_{\rm a}}$$\mathbi{W}_2 \in \mathbb{R}^{d_{\rm a}\times n_{\rm hop}}$$d_{\rm a}$表示前馈神经网络隐层大小,$n_{\rm hop}$表示跳数。 之后使用Softmax 函数计算不同层沿相同维度上的归一化结果$\mathbi{u}_l$
\noindent 其中,$[\mathbi{h}^1,\ldots,\mathbi{h}^L]$是输入矩阵,$\mathbi{o}$是输出矩阵,$\mathbi{W}_1 \in \mathbb{R}^{d_{\textrm{model}} \times d_{\rm a}}$$\mathbi{W}_2 \in \mathbb{R}^{d_{\rm a}\times n_{\rm hop}}$$d_{\rm a}$表示前馈神经网络隐层大小,$n_{\rm hop}$表示跳数。 之后使用Softmax 函数计算不同层沿相同维度上的归一化结果$\mathbi{u}_l$
\begin{eqnarray}
\mathbi{u}_l &=& \frac{\textrm{exp}(\mathbi{o}_l)}{\sum_{i=1}^L{\textrm{exp}(\mathbi{o}_i)}}
\label{eq:15-34}
......@@ -688,9 +688,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}}$的缩放,$L$为编码器层数。
\vspace{0.5em}
\item 对解码器中全部注意力机制的参数矩阵以及前馈神经网络中所有参数矩阵进行缩放因子为$(9 {M})^{-\frac{1}{4}}$的缩放,其中$M$为解码器层数。
\item 对解码器中部分注意力机制的参数矩阵、前馈神经网络的参数矩阵以及前馈前馈神经网络的嵌入式输入进行缩放因子为$(9 {M})^{-\frac{1}{4}}$的缩放,其中$M$为解码器层数。
\vspace{0.5em}
\end{itemize}
......@@ -799,7 +799,7 @@ v_i &=& \mathbi{I}_d^{\textrm{T}}\textrm{Tanh}(\mathbi{W}_d\mathbi{Q}_i)
lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num \cdot warmup\_steps^{-0.5}
\label{eq:15-49}
\end{eqnarray}
\noindent 这里,$step\_num$表示参数更新的次数,$warmup\_step$表示预热的更新次数,$d_{\textrm{model}}$表示Transformer模型的隐层大小,$lr$是学习率。
\noindent 这里,$step\_num$表示参数更新的次数,$warmup\_step$表示预热的更新次数,$d_{\textrm{model}}$表示Transformer模型的隐层大小,$lr$是学习率。
\vspace{0.5em}
\item 在之后的训练过程中,每当增加模型深度时,学习率都会重置到峰值,之后进行相应的衰减:
\begin{eqnarray}
......@@ -914,7 +914,7 @@ lr &=& d_{\textrm{model}}^{-0.5}\cdot step\_num^{-0.5}
\label{eq:15-53}
\end{eqnarray}
\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,\ldots,\mathbi{h}_m\}$是输入序列所对应的循环神经单元(绿色部分),$\{\mathbi{h}_{m+1},\ldots,\mathbi{h}_{2m-1}\}$对应着树中的节点(红色部分),它的输出由其左右子节点通过公式\eqref{eq:15-53}计算得到。对于注意力模型,图中所有的节点都会参与上下文向量的计算,因此仅需要对{\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,\ldots,\mathbi{h}_m\}$是输入序列所对应的循环神经单元(绿色部分),$\{\mathbi{h}_{m+1},\ldots,\mathbi{h}_{2m-1}\}$对应着树中的节点(红色部分),它的输出由其左右子节点通过公式\eqref{eq:15-53}计算得到。对于注意力模型,图中所有的节点都会参与上下文向量的计算,因此仅需要对{\chapterten}所描述的计算方式稍加修改,如下:
\begin{eqnarray}
\mathbi{C}_j &=& \sum_{i=1}^{m}\alpha_{i,j}\mathbi{h}_i + \sum_{i=m+1}^{2m-1}\alpha_{i,j}\mathbi{h}_i
\label{eq:15-54}
......
......@@ -579,7 +579,7 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\label{eq:2-27}
\end{eqnarray}
\noindent 其中,$V$表示词表,$|V|$为词表中单词的个数,$w$为词表中的一个词,c表示统计单词或短语出现的次数。有时候,加法平滑方法会将$\theta$取1,这时称之为加一平滑或是拉普拉斯平滑。这种方法比较容易理解,也比较简单,因此也往往被用于对系统的快速原型中
\noindent 其中,$V$表示词表,$|V|$为词表中单词的个数,$w$为词表中的一个词,c表示统计单词或短语出现的次数。有时候,加法平滑方法会将$\theta$取1,这时称之为加一平滑或是拉普拉斯平滑。这种方法比较容易理解,也比较简单,因此常被用于对系统的快速实现上
\parinterval 举一个例子。假设在一个英语文档中随机采样一些单词(词表大小$|V|=20$),各个单词出现的次数为:“look”出现4次,“people”出现3次,“am”出现2次,“what”出现1次,“want”出现1次,“do”出现1次。图\ref{fig:2-11} 给出了在平滑之前和平滑之后的概率分布。
......@@ -803,7 +803,7 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\parinterval 从词序列建模的角度看,这两类预测问题本质上是一样的。因为,它们都在使用语言模型对词序列进行概率评估。但是,从实现上看,词序列的生成问题更难。因为,它不仅要对所有可能的词序列进行打分,同时要“找到”最好的词序列。由于潜在的词序列不计其数,因此这个“找”最优词序列的过程并不简单。
\parinterval 实际上,生成最优词序列的问题也是自然语言处理中的一大类问题\ \dash\ {\small\bfnew{序列生成}}\index{序列生成}(Sequence Generation)\index{Sequence Generation}。机器翻译就是一个非常典型的序列生成问题:在机器翻译任务中,需要根据源语言词序列生成与之相对应的目标语言词序列。但是语言模型本身并不能“制造”单词序列的。因此,严格地说,序列生成问题的本质并非让语言模型凭空“生成”序列,而是使用语言模型在所有候选的单词序列中“找出”最佳序列。这个过程对应着经典的{\small\bfnew{搜索问题}}\index{搜索问题}(Search Problem)\index{Search Problem}。下面将着重介绍序列生成背后的建模方法,以及在序列生成里常用的搜索技术。
\parinterval 实际上,生成最优词序列的问题也是自然语言处理中的一大类问题\ \dash\ {\small\bfnew{序列生成}}\index{序列生成}(Sequence Generation)\index{Sequence Generation}。机器翻译就是一个非常典型的序列生成任务:在机器翻译任务中,需要根据源语言词序列生成与之相对应的目标语言词序列。但是语言模型本身并不能“制造”单词序列的。因此,严格地说,序列生成任务的本质并非让语言模型凭空“生成”序列,而是使用语言模型在所有候选的单词序列中“找出”最佳序列。这个过程对应着经典的{\small\bfnew{搜索问题}}\index{搜索问题}(Search Problem)\index{Search Problem}。下面将着重介绍序列生成任务背后的建模方法,以及在序列生成任务里常用的搜索技术。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -811,7 +811,7 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\subsection{搜索问题的建模}
\parinterval 基于语言模型的序列生成问题可以被定义为:在无数任意排列的单词序列中找到概率最高的序列。这里单词序列$w = w_1 w_2 \ldots w_m$的语言模型得分$\funp{P}(w)$度量了这个序列的合理性和流畅性。在序列生成任务中,基于语言模型的搜索问题可以被描述为:
\parinterval 基于语言模型的序列生成任务可以被定义为:在无数任意排列的单词序列中找到概率最高的序列。这里单词序列$w = w_1 w_2 \ldots w_m$的语言模型得分$\funp{P}(w)$度量了这个序列的合理性和流畅性。在序列生成任务中,基于语言模型的搜索问题可以被描述为:
\begin{eqnarray}
\hat{w} = \argmax_{w \in \chi}\funp{P}(w)
\label{eq:2-42}
......@@ -832,7 +832,7 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\end{figure}
%-------------------------------------------
\parinterval 在这种序列生成方式的基础上,实现搜索通常有两种方法\ \dash\ 深度优先遍历和宽度优先遍历\upcite{DBLP:books/mg/CormenLR89}。在深度优先遍历中,每次从词表中可重复地选择一个单词,然后从左至右地生成序列,直到<eos>被选择,此时一个完整的单词序列被生成出来。然后从<eos>回退到上一个单词,选择之前词表中未被选择到的候选单词代替<eos>,并继续挑选下一个单词直到<eos>被选到,如果上一个单词的所有可能都被枚举过,那么回退到上上一个单词继续枚举,直到回退到<sos>,这时候枚举结束。在宽度优先遍历中,每次不是只选择一个单词,而是枚举所有单词。
\parinterval 在这种序列生成策略的基础上,实现搜索通常有两种方法\ \dash\ 深度优先遍历和宽度优先遍历\upcite{DBLP:books/mg/CormenLR89}。在深度优先遍历中,每次从词表中选择一个单词(可重复),然后从左至右地生成序列,直到<eos>被选择,此时一个完整的单词序列被生成出来。然后从<eos>回退到上一个单词,选择之前词表中未被选择到的候选单词代替<eos>,并继续挑选下一个单词直到<eos>被选到,如果上一个单词的所有可能都被枚举过,那么回退到上上一个单词继续枚举,直到回退到<sos>,这时候枚举结束。在宽度优先遍历中,每次不是只选择一个单词,而是枚举所有单词。
\parinterval 有一个简单的例子。假设词表只含两个单词$\{a, b\}$,从<sos>开始枚举所有候选,有三种可能:
\begin{eqnarray}
......@@ -916,7 +916,7 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\end{figure}
%-------------------------------------------
\parinterval 这样,语言模型的打分与解空间树的遍历就融合在一起了。于是,序列生成的问题可以被重新描述为:寻找所有单词序列组成的解空间树中权重总和最大的一条路径。在这个定义下,前面提到的两种枚举词序列的方法就是经典的{\small\bfnew{深度优先搜索}}\index{深度优先搜索}(Depth-first Search)\index{Depth-first Search}{\small\bfnew{宽度优先搜索}}\index{宽度优先搜索}(Breadth-first Search)\index{Breadth-first Search}的雏形\upcite{even2011graph,tarjan1972depth}。在后面的内容中,从遍历解空间树的角度出发,可以对这些原始的搜索策略的效率进行优化。
\parinterval 这样,语言模型的打分与解空间树的遍历就融合在一起了。于是,序列生成任务可以被重新描述为:寻找所有单词序列组成的解空间树中权重总和最大的一条路径。在这个定义下,前面提到的两种枚举词序列的方法就是经典的{\small\bfnew{深度优先搜索}}\index{深度优先搜索}(Depth-first Search)\index{Depth-first Search}{\small\bfnew{宽度优先搜索}}\index{宽度优先搜索}(Breadth-first Search)\index{Breadth-first Search}的雏形\upcite{even2011graph,tarjan1972depth}。在后面的内容中,从遍历解空间树的角度出发,可以对这些原始的搜索策略的效率进行优化。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......
......@@ -255,7 +255,7 @@
\parinterval 通常把$d(j|i,m,l)$称为扭曲度函数。这里$\funp{P}(\varphi_i|\varphi_1^{i-1},\seq{t})={\funp{P}(\varphi_i|t_i)}$${\funp{P}(\pi_{ik}=j|\pi_{i1}^{k-1},}$ $\pi_{1}^{i-1},\tau_0^l,\varphi_0^l,\seq{t})=d(j|i,m,l)$仅对$1 \le i \le l$成立。这样就完成了图\ref{fig:6-7}中第1、3和4部分的建模。
\parinterval 对于$i=0$的情况需要单独进行考虑。实际上,$t_0$只是一个虚拟的单词。它要对应$\seq{s}$中原本为空对齐的单词。这里假设:要等其他非空对应单词都被生成(放置)后,才考虑这些空对齐单词的生成(放置)。即非空对单词都被生成后,在那些还有空的位置上放置这些空对的源语言单词。此外,在任何的空位置上放置空对的源语言单词都是等概率的,即放置空对齐源语言单词服从均匀分布。这样在已经放置了$k$个空对齐源语言单词的时候,应该还有$\varphi_0-k$个空位置。如果第$j$个源语言位置为空,那么
\parinterval 对于$i=0$的情况需要单独进行考虑。实际上,$t_0$只是一个虚拟的单词。它要对应$\seq{s}$中原本为空对齐的单词。这里假设:要等其他非空对齐单词都被生成(放置)后,才考虑这些空对齐单词的生成(放置)。即非空对齐单词都被生成后,在那些还有空的位置上放置这些空对齐的源语言单词。此外,在任何空位置上放置空对齐的源语言单词都是等概率的,即放置空对齐源语言单词服从均匀分布。这样在已经放置了$k$个空对齐源语言单词的时候,应该还有$\varphi_0-k$个空位置。如果第$j$个源语言位置为空,那么
\begin{eqnarray}
\funp{P}(\pi_{0k}=j|\pi_{01}^{k-1},\pi_1^l,\tau_0^l,\varphi_0^l,\seq{t}) & = & \frac{1}{\varphi_0-k}
......@@ -353,7 +353,7 @@ p_0+p_1 & = & 1 \label{eq:6-21}
\subsection{ IBM 模型5}
\parinterval 模型3和模型4并不是“准确”的模型。这两个模型会把一部分概率分配给一些根本就不存在的句子。这个问题被称作IBM模型3和模型4的{\small\bfnew{缺陷}}\index{缺陷}(Deficiency)\index{Deficiency}。说得具体一些,模型3和模型4 中并没有这样的约束:如果已经放置了某个源语言单词的位置不能再放置其他单词,也就是说句子的任何位置只能放置一个词,不能多也不能少。由于缺乏这个约束,模型3和模型4中在所有合法的词对齐上概率和不等于1。 这部分缺失的概率被分配到其他不合法的词对齐上。举例来说,如图\ref{fig:6-9}所示,“吃/早饭”和“have breakfast”之间的合法词对齐用直线表示 。但是在模型3和模型4中, 它们的概率和为$0.9<1$。 损失掉的概率被分配到像a5和a6这样的对齐上了(红色)。虽然IBM模型并不支持一对多的对齐,但是模型3和模型4把概率分配给这些“ 不合法”的词对齐上,因此也就产生所谓的缺陷。
\parinterval 模型3和模型4并不是“准确”的模型。这两个模型会把一部分概率分配给一些根本就不存在的句子。这个问题被称作IBM模型3和模型4的{\small\bfnew{缺陷}}\index{缺陷}(Deficiency)\index{Deficiency}。说得具体一些,模型3和模型4 中并没有这样的约束:已经放置了某个源语言单词的位置不能再放置其他单词,也就是说句子的任何位置只能放置一个词,不能多也不能少。由于缺乏这个约束,模型3和模型4中在所有合法的词对齐上概率和不等于1。 这部分缺失的概率被分配到其他不合法的词对齐上。举例来说,如图\ref{fig:6-9}所示,“吃/早饭”和“have breakfast”之间的合法词对齐用直线表示 。但是在模型3和模型4中, 它们的概率和为$0.9<1$。 损失掉的概率被分配到像a5和a6这样的对齐上了(红色)。虽然IBM模型并不支持一对多的对齐,但是模型3和模型4把概率分配给这些“ 不合法”的词对齐上,因此也就产生所谓的缺陷。
%----------------------------------------------
\begin{figure}[htp]
......@@ -364,7 +364,7 @@ p_0+p_1 & = & 1 \label{eq:6-21}
\end{figure}
%----------------------------------------------
\parinterval 为了解决这个问题,模型5在模型中增加了额外的约束。基本想法是,在放置一个源语言单词的时候检查这个位置是否已经放置了单词,如果可以则把这个放置过程赋予一定的概率,否则把它作为不可能事件。基于这个想法,就需要在逐个放置源语言单词的时候判断源语言句子的哪些位置为空。这里引入一个变量$v(j, {\tau_1}^{[i]-1}, \tau_{[i]1}^{k-1})$,它表示在放置$\tau_{[i]k}$之前($\tau_1^{[i]-1}$$\tau_{[i]1}^{k-1}$已经被放置完了),从源语言句子的第一个位置到位置$j$(包含$j$)为止还有多少个空位置。这里,把这个变量简写为$v_j$。于是,对于$[i]$所对应的源语言单词列表($\tau_{[i]}$)中的第一个单词($\tau_{[i]1}$),有:
\parinterval 为了解决这个问题,模型5在模型中增加了额外的约束。基本想法是,在放置一个源语言单词的时候检查这个位置是否已经放置了单词,如果没有放置单词,则把这个放置过程赋予一定的概率,否则把它作为不可能事件。基于这个想法,就需要在逐个放置源语言单词的时候判断源语言句子的哪些位置为空。这里引入一个变量$v(j, {\tau_1}^{[i]-1}, \tau_{[i]1}^{k-1})$,它表示在放置$\tau_{[i]k}$之前($\tau_1^{[i]-1}$$\tau_{[i]1}^{k-1}$已经被放置完了),从源语言句子的第一个位置到位置$j$(包含$j$)为止还有多少个空位置。这里,把这个变量简写为$v_j$。于是,对于$[i]$所对应的源语言单词列表($\tau_{[i]}$)中的第一个单词($\tau_{[i]1}$),有:
\begin{eqnarray}
\funp{P}(\pi_{[i]1} = j | \pi_1^{[i]-1}, \tau_0^l, \varphi_0^l, \seq{t}) & = & d_1(v_j|B(s_j), v_{\odot_{i-1}}, v_m-(\varphi_{[i]}-1)) \cdot \nonumber \\
& & (1-\delta(v_j,v_{j-1}))
......
......@@ -481,7 +481,7 @@ d & = & {(\bar{s}_{\bar{a}_1},\bar{t}_1)} \circ {(\bar{s}_{\bar{a}_2},\bar{t}_2)
\parinterval 给定一个双语句对$(\seq{s},\seq{t})$$c(\bar{s})$表示短语$\bar{s}$$\seq{s}$中出现的次数,$c(\bar{s},\bar{t})$表示双语短语$(\bar{s},\bar{t})$$(\seq{s},\seq{t})$中被抽取出来的次数。对于一个包含多个句子的语料库,$c(\bar{s})$$c(\bar{s},\bar{t})$可以按句子进行累加。类似的,也可以用同样的方法,计算$\bar{t}$$\bar{s}$的翻译概率,即$\funp{P}(\bar{s}|\bar{t})$。一般会同时使用$\funp{P}(\bar{t}|\bar{s})$$\funp{P}(\bar{s}|\bar{t})$度量一个双语短语的好与坏。
\parinterval 当遇到低频短语时,短语翻译概率的估计可能会不准确。例如,短语$\bar{s}$$\bar{t}$在语料中只出现了一次,且在一个句子中共现,那么$\bar{s}$$\bar{t}$的翻译概率为$\funp{P}(\bar{t}|\bar{s})=1$,这显然是不合理的,因为$\bar{s}$$\bar{t}$的出现完全可能是偶然事件。既然直接度量双语短语的好坏会面临数据稀疏问题,一个自然的想法就是把短语拆解成单词,利用双语短语中单词翻译的好坏间接度量双语短语的好坏。为了达到这个目的,可以使用{\small\bfnew{词汇化翻译概率}}\index{词汇化翻译概率}(Lexical Translation Probability)\index{Lexical Translation Probability}。前面借助词对齐信息完成了双语短语的抽取,因此,词对齐信息本身就包含了短语内部单词之间的对应关系。因此同样可以借助词对齐来计算词汇翻译概率,公式如下:
\parinterval 当遇到低频短语时,短语翻译概率的估计可能会不准确。例如,短语$\bar{s}$$\bar{t}$在语料中只出现了一次,且在一个句子中共现,那么$\bar{s}$$\bar{t}$的翻译概率为$\funp{P}(\bar{t}|\bar{s})=1$,这显然是不合理的,因为$\bar{s}$$\bar{t}$的出现完全可能是偶然事件。既然直接度量双语短语的好坏会面临数据稀疏问题,一个自然的想法就是把短语拆解成单词,利用双语短语中单词翻译的好坏间接度量双语短语的好坏。为了达到这个目的,可以使用{\small\bfnew{词汇化翻译概率}}\index{词汇化翻译概率}(Lexical Translation Probability)\index{Lexical Translation Probability}。前面借助词对齐信息完成了双语短语的抽取,可以看出,词对齐信息本身就包含了短语内部单词之间的对应关系。因此同样可以借助词对齐来计算词汇翻译概率,公式如下:
\begin{eqnarray}
\funp{P}_{\textrm{lex}}(\bar{t}|\bar{s}) & = & \prod_{j=1}^{|\bar{s}|} \frac{1}{|\{j|a(j,i) = 1\}|} \sum_{\forall(j,i):a(j,i) = 1} \sigma (t_i|s_j)
\label{eq:7-14}
......
......@@ -53,7 +53,7 @@
{
\node [anchor=west,minimum height=12pt,fill=red!20] (inputseg1) at (inputlabel.east) {$_1$ };
\node [anchor=west,minimum height=12pt,fill=blue!20] (inputseg2) at ([xshift=0.2em]inputseg1.east) {学校$_2$ 球队$_3$ 首次$_4$ 夺得$_5$ 中国$_6$ 大学生$_7$ 篮球$_8$ 联赛$_9$ 冠军$_{10}$};
\node [anchor=west,minimum height=12pt,fill=red!20] (inputseg3) at ([xshift=0.2em]inputseg2.east) {$_{15}$};
\node [anchor=west,minimum height=12pt,fill=red!20] (inputseg3) at ([xshift=0.2em]inputseg2.east) {$_{11}$};
\path [draw,->,dashed] (inputseg1.north) .. controls +(north:0.2) and +(south:0.3) .. ([xshift=1em]synhifstpart1.south);
\path [draw,->,dashed] (inputseg3.north) .. controls +(north:0.2) and +(south:0.6) .. ([xshift=1em]synhifstpart1.south);
......
......@@ -44,7 +44,7 @@
\end{figure}
%-------------------------------------------
\parinterval 当然,可以使用平滑算法对长短语的概率进行估计,但是使用过长的短语在实际系统研发中仍然不现实。图\ref{fig:8-1}展示了一个汉语到英语的翻译实例。源语言的两个短语(蓝色和红色高亮)在目标语言中产生了调序。但是,这两个短语在源语言句子中横跨11个单词。如果直接使用这11个单词构成的短语进行翻译,显然会有非常严重的数据稀疏问题,因为很难期望在训练数据中见到一模一样的短语。
\parinterval 当然,可以使用平滑算法对长短语的概率进行估计,但是使用过长的短语在实际系统研发中仍然不现实。图\ref{fig:8-1}展示了一个汉语到英语的翻译实例。源语言的两个短语(蓝色和红色高亮)在目标语言中产生了调序。但是,这两个短语在源语言句子中横跨8个单词。如果直接使用这8个单词构成的短语进行翻译,显然会有非常严重的数据稀疏问题,因为很难期望在训练数据中见到一模一样的短语。
\parinterval 仅使用连续词串不能处理所有的翻译问题,其根本原因在于句子的表层串很难描述片段之间大范围的依赖。一个新的思路是使用句子的层次结构信息进行建模。{\chapterthree}已经介绍了句法分析基础。对于每个句子,都可以用句法树描述它的结构。
......@@ -68,7 +68,7 @@
\end{figure}
%-------------------------------------------
\parinterval 句法树结构可以赋予机器翻译对语言进一步抽象的能力,这样,可以不需要使用连续词串,而是通过句法结构来对大范围的译文生成和调序进行建模。图\ref{fig:8-3}是一个在翻译中融入源语言(汉语)句法信息的实例。这个例子中,介词短语“在 $...$ 后”包含12个单词,因此,使用短语很难涵盖这样的片段。这时,系统会把“在 $...$ 后”错误地翻译为“In $...$”。通过句法树,可以知道“在 $...$ 后”对应着一个完整的子树结构PP(介词短语)。因此也很容易知道介词短语中“在 $...$ 后”是一个模板(红色),而“在”和“后”之间的部分构成从句部分(蓝色)。最终得到正确的译文“After $...$”。
\parinterval 句法树结构可以赋予机器翻译对语言进一步抽象的能力,这样,可以不需要使用连续词串,而是通过句法结构来对大范围的译文生成和调序进行建模。图\ref{fig:8-3}是一个在翻译中融入源语言(汉语)句法信息的实例。这个例子中,介词短语“在 $...$ 后”包含11个单词,因此,使用短语很难涵盖这样的片段。这时,系统会把“在 $...$ 后”错误地翻译为“In $...$”。通过句法树,可以知道“在 $...$ 后”对应着一个完整的子树结构PP(介词短语)。因此也很容易知道介词短语中“在 $...$ 后”是一个模板(红色),而“在”和“后”之间的部分构成从句部分(蓝色)。最终得到正确的译文“After $...$”。
\parinterval 使用句法信息在机器翻译中并不新鲜。在基于规则和模板的翻译模型中,就大量使用了句法等结构信息。只是由于早期句法分析技术不成熟,系统的整体效果并不突出。在数据驱动的方法中,句法可以很好地融合在统计建模中。通过概率化的句法设计,可以对翻译过程进行很好的描述。
......@@ -1494,7 +1494,7 @@ d_1 & = & {d'} \circ {r_5}
}\end{table}
%-------------------------------------------
\parinterval 这里需要注意的是,不论是基于串的解码还是基于树的解码都是使用句法模型的方法,在翻译过程中都会生成翻译推导和树结构。二者的本质区别在于,基于树的解码把句法树作为显性的输入,而基于串的解码把句法树看作是翻译过程中的隐含变量。图\ref{fig:8-40}进一步解释了这个观点。
\parinterval 这里需要注意的是,不论是基于串的解码还是基于树的解码都是使用句法模型的方法,在翻译过程中都会生成翻译推导和树结构。二者的本质区别在于,基于树的解码把句法树作为显输入,而基于串的解码把句法树看作是翻译过程中的隐含变量。图\ref{fig:8-40}进一步解释了这个观点。
%----------------------------------------------
\begin{figure}[htp]
......
......@@ -99,7 +99,7 @@
\vspace{0.5em}
其中,第一部分是本书的基础知识部分,包含统计建模、语言分析、机器翻译评价等。在第一章对机器翻译的历史及现状进行介绍之后,第二章通过语言建模任务将统计建模的思想阐述出来,同时这部分内容也会作为后续机器翻译模型及方法的基础。第三章重点介绍机器翻译所涉及的词法和法分析方法,旨在为后续相关概念的使用进行铺垫,同时进一步展示统计建模思想在相关问题上的应用。第四章相对独立,系统地介绍了机器翻译结果的评价方法,这部分内容也是机器翻译建模及系统设计所需的前置知识。
其中,第一部分是本书的基础知识部分,包含统计建模、语言分析、机器翻译评价等。在第一章对机器翻译的历史及现状进行介绍之后,第二章通过语言建模任务将统计建模的思想阐述出来,同时这部分内容也会作为后续机器翻译模型及方法的基础。第三章重点介绍机器翻译所涉及的词法和法分析方法,旨在为后续相关概念的使用进行铺垫,同时进一步展示统计建模思想在相关问题上的应用。第四章相对独立,系统地介绍了机器翻译结果的评价方法,这部分内容也是机器翻译建模及系统设计所需的前置知识。
本书的第二部分主要介绍统计机器翻译的基本模型。第五章是整个机器翻译建模的基础。第六章进一步对扭曲度和产出率两个概念进行介绍,同时给出相关的翻译模型,这些模型在后续章节的内容中都有涉及。第七章和第八章分别介绍了基于短语和句法的模型。它们都是统计机器翻译的经典模型,其思想也构成了机器翻译成长过程中最精华的部分。
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论