Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
Toy-MT-Introduction
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
NiuTrans
Toy-MT-Introduction
Commits
869ed6cd
Commit
869ed6cd
authored
May 23, 2020
by
孟霞
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'master' 到 'mengxia'
Master 查看合并请求
!248
parents
a65c53fd
5fffa8cc
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
58 行增加
和
35 行删除
+58
-35
Book/Chapter4/chapter4.tex
+52
-29
Book/Chapter6/Chapter6.tex
+6
-6
没有找到文件。
Book/Chapter4/chapter4.tex
查看文件 @
869ed6cd
...
...
@@ -979,7 +979,7 @@ dr = start_i-end_{i-1}-1
\langle
\ \textrm
{
X
}_
1
\ \text
{
的
}
\ \textrm
{
X
}_
2,
\quad
\textrm
{
X
}_
2
\ \textrm
{
that
}
\ \textrm
{
have
}
\ \textrm
{
X
}_
1
\ \rangle\quad\ \nonumber
\end{eqnarray}
\parinterval
使用上面这种变量替换的方式,就可以得到一个完整句子的翻译。
这个过程如图
\ref
{
fig:4-32
}
所示。其中,左右相连接的方框表示翻译模版的源语言和目标语言部分。可以看到,模版中两种语言中的变量会被同步替换,替换的内容可以是其他模版生成的结果。这也就对应了一种层次结构,或者说互译的句对可以被双语的层次结构同步生成出来。
\parinterval
使用上面这种变量替换的方式,就可以得到一个完整句子的翻译。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -990,6 +990,8 @@ dr = start_i-end_{i-1}-1
\end{figure}
%-------------------------------------------
\parinterval
这个过程如图
\ref
{
fig:4-32
}
所示。其中,左右相连接的方框表示翻译模版的源语言和目标语言部分。可以看到,模版中两种语言中的变量会被同步替换,替换的内容可以是其他模版生成的结果。这也就对应了一种层次结构,或者说互译的句对可以被双语的层次结构同步生成出来。
\parinterval
实际上,在翻译中使用这样的模版就构成了层次短语模型的基本思想。下面就一起看看如何对翻译模版进行建模,以及如何自动学习并使用这些模版。
%----------------------------------------------------------------------------------------
...
...
@@ -1381,12 +1383,8 @@ span\textrm{[0,4]}&=&\textrm{``猫} \quad \textrm{喜欢} \quad \textrm{吃} \qu
\parinterval
在层次短语系统中,会进一步对搜索空间剪枝。简言之,此时并不需要对所有
$
n
{
m
}^
2
$
种组合进行遍历,而是只考虑其中的一部分组合。这种方法也被称作
{
\small\bfnew
{
立方剪枝
}}
\index
{
立方剪枝
}
(Cube Pruning)
\index
{
Cube Pruning
}
。所谓`` 立方''是指组合译文时的三个维度:规则的目标语端、第一个变量所对应的翻译候选、第二个变量所对应的翻译候选。立方剪枝假设所有的译文候选都经过排序,比如,按照短语翻译概率排序。这样,每个译文都对应一个坐标,比如,
$
(
i,j,k
)
$
就表示第
$
i
$
个规则目标语端、第二个变量的第
$
j
$
个翻译候选、第三个变量的第
$
k
$
个翻译候选的组合。于是,可以把每种组合看作是一个三维空间中的一个点。在立方剪枝中,开始的时候会看到
$
(
0
,
0
,
0
)
$
这个翻译假设,并把这个翻译假设放入一个优先队列中。之后每次从这个优先队里中弹出最好的结果,之后沿着三个维度分别将坐标加1,比如,如果优先队列弹出
$
(
i,j,k
)
$
,则会生成
$
(
i
+
1
,j,k
)
$
、
$
(
i,j
+
1
,k
)
$
和
$
(
i,j,k
+
1
)
$
这三个新的翻译假设。之后,计算出它们的模型得分,并压入优先队列。这个过程不断被执行,直到达到终止条件,比如,扩展次数达到一个上限。
\parinterval
图
\ref
{
fig:4-40
}
展示了立方剪枝的过程(规则只含有一个变量的情况)。可以看到,每个步骤中,算法只会扩展当前最好结果周围的两个点(对应两个维度,横轴对应变量被替换的内容,纵轴对应规则的目标语端)。
\parinterval
理论上,立方剪枝最多访问
$
n
{
m
}^
2
$
个点。但是在实践中发现,如果终止条件设计的合理,搜索的代价基本上与
$
m
$
或者
$
n
$
呈线性关系。因此,立方剪枝可以大大提高解码速度。立方剪枝实际上是一种启发性的搜索方法。它把搜索空间表示为一个三维空间。它假设:如果空间中某个点的模型得分较高,那么它``周围''的点的得分也很可能较高。这也是对模型得分沿着空间中不同维度具有连续性的一种假设。这种方法也大量的使用在句法分析中,并取得了很好的效果。
\\
%----------------------------------------------
\begin{figure}
[
t
]
\begin{figure}
[
htp
]
\centering
\input
{
./Chapter4/Figures/execution-of-cube-pruning
}
\caption
{
立方剪枝执行过程(行表示规则,列表示变量可替换的内容)
}
...
...
@@ -1394,6 +1392,10 @@ span\textrm{[0,4]}&=&\textrm{``猫} \quad \textrm{喜欢} \quad \textrm{吃} \qu
\end{figure}
%-------------------------------------------
\parinterval
图
\ref
{
fig:4-40
}
展示了立方剪枝的过程(规则只含有一个变量的情况)。可以看到,每个步骤中,算法只会扩展当前最好结果周围的两个点(对应两个维度,横轴对应变量被替换的内容,纵轴对应规则的目标语端)。
\parinterval
理论上,立方剪枝最多访问
$
n
{
m
}^
2
$
个点。但是在实践中发现,如果终止条件设计的合理,搜索的代价基本上与
$
m
$
或者
$
n
$
呈线性关系。因此,立方剪枝可以大大提高解码速度。立方剪枝实际上是一种启发性的搜索方法。它把搜索空间表示为一个三维空间。它假设:如果空间中某个点的模型得分较高,那么它``周围''的点的得分也很可能较高。这也是对模型得分沿着空间中不同维度具有连续性的一种假设。这种方法也大量的使用在句法分析中,并取得了很好的效果。
\\
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
...
...
@@ -1460,7 +1462,7 @@ span\textrm{[0,4]}&=&\textrm{``猫} \quad \textrm{喜欢} \quad \textrm{吃} \qu
\parinterval
可以说基于句法的翻译模型贯穿了现代统计机器翻译的发展历程。从概念上讲,不管是层次短语模型,还是语言学句法模型都是基于句法的模型。基于句法的机器翻译模型种类繁多,这里先对相关概念进行简要介绍,以避免后续论述中产生歧义。表
\ref
{
tab:4-2
}
给出了基于句法的机器翻译中涉及的一些概念。
%----------------------------------------------
\begin{table}
[h
b
p]
{
\begin{table}
[h
t
p]
{
\begin{center}
\caption
{
基于句法的机器翻译中常用概念
}
\label
{
tab:4-2
}
...
...
@@ -1483,8 +1485,17 @@ span\textrm{[0,4]}&=&\textrm{``猫} \quad \textrm{喜欢} \quad \textrm{吃} \qu
\rule
{
0pt
}{
15pt
}
基于句法
&
使用语言学句法
\\
\rule
{
0pt
}{
15pt
}
基于树
&
(源语言)使用树结构(大多指句法树)
\\
\rule
{
0pt
}{
15pt
}
基于串
&
(源语言)使用词串,比如串到树翻译系统的解码器一般
\\
&
都是基于串的解码方法
\\
\rule
{
0pt
}{
15pt
}
基于森林
&
(源语言)使用句法森林,这里森林只是对多个句法树的一
\\
&
都是基于串的解码方法
\end{tabular}
}
\end{center}
}
\end{table}
\begin{table}
[htp]
{
\begin{center}
{
\begin{tabular}
{
p
{
6.5em
}
| l
}
术语
&
说明
\\
\hline
\rule
{
0pt
}{
15pt
}
基于森林
&
(源语言)使用句法森林,这里森林只是对多个句法树的一
\\
&
种压缩表示
\\
\rule
{
0pt
}{
15pt
}
词汇化规则
&
含有终结符的规则
\\
\rule
{
0pt
}{
15pt
}
非词汇规则
&
不含有终结符的规则
\\
...
...
@@ -1676,7 +1687,9 @@ r_9: \quad \textrm{IP(}\textrm{NN}_1\ \textrm{VP}_2) \rightarrow \textrm{S(}\tex
&
&
\ \ \textrm
{
S(NP(DT(the) NNS(imports))
}
\ \textrm
{
VP(VBP
}^{
[6]
}
\ \textrm
{
ADVP(RB(drastically)
}
\ \textrm
{
VBN
}^{
[5]
}
)))
\ \rangle
\nonumber
\\
&
\xrightarrow
[r_4]
{
\textrm
{
VV
}^{
[5]
}
\Leftrightarrow
\textrm
{
VBN
}^{
[5]
}}
&
\langle\ \textrm
{
IP(NN(进口)
}
\ \textrm
{
VP(AD(大幅度)
}
\ \textrm
{
VP(VV(减少)
}
\ \textrm
{
AS
}^{
[6]
}
))),
\hspace
{
10em
}
\nonumber
\\
&
&
\ \ \textrm
{
S(NP(DT(the) NNS(imports))
}
\ \textrm
{
VP(VBP
}^{
[6]
}
\ \nonumber
\\
&
&
\ \ \textrm
{
ADVP(RB(drastically)
}
\ \textrm
{
VBN(fallen)
}
)))
\ \rangle
\nonumber
\\
&
&
\ \ \textrm
{
ADVP(RB(drastically)
}
\ \textrm
{
VBN(fallen)
}
)))
\ \rangle
\nonumber
\end{eqnarray}
\begin{eqnarray}
&
\xrightarrow
[r_6]
{
\textrm
{
AS
}^{
[6]
}
\Leftrightarrow
\textrm
{
VBP
}^{
[6]
}}
&
\langle\ \textrm
{
IP(NN(进口)
}
\ \textrm
{
VP(AD(大幅度)
}
\ \textrm
{
VP(VV(减少)
}
\ \textrm
{
AS(了)
}
))),
\nonumber
\\
&
&
\ \ \textrm
{
S(NP(DT(the) NNS(imports))
}
\ \textrm
{
VP(VBP(have)
}
\ \nonumber
\\
&
&
\ \ \textrm
{
ADVP(RB(drastically)
}
\ \textrm
{
VBN(fallen)
}
)))
\ \rangle
\hspace
{
15em
}
\nonumber
...
...
@@ -1920,8 +1933,6 @@ r_9: \quad \textrm{IP(}\textrm{NN}_1\ \textrm{VP}_2) \rightarrow \textrm{S(}\tex
\parinterval
最小规则是句法翻译模型中最小的翻译单元。但是,在翻译复杂句子的时候,往往需要更大范围的上下文信息,比如,本节开始图
\ref
{
fig:4-42
}
中的例子,需要一条规则同时处理多个变量的调序,而这种规则很可能不是最小规则。为了得到``更大''的规则,一种方法是对最小规则进行组合。得到的规则称为composed-
$
m
$
规则,其中
$
m
$
表示这个规则是由
$
m
$
条最小规则组合而成。
\parinterval
规则的组合非常简单。只需要在得到最小规则之后,对相邻的规则进行拼装。也就是说,如果某个树片段的根节点出现在另一个树片段的叶子节点处,就可以把它们组合成更大的树片段。图
\ref
{
fig:4-56
}
给了规则组合的实例。其中,规则1、5、6、7可以组合成一条composed-4规则,这个规则可以进行非常复杂的调序。
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -1933,6 +1944,8 @@ r_9: \quad \textrm{IP(}\textrm{NN}_1\ \textrm{VP}_2) \rightarrow \textrm{S(}\tex
\end{figure}
%-------------------------------------------
\parinterval
规则的组合非常简单。只需要在得到最小规则之后,对相邻的规则进行拼装。也就是说,如果某个树片段的根节点出现在另一个树片段的叶子节点处,就可以把它们组合成更大的树片段。图
\ref
{
fig:4-56
}
给了规则组合的实例。其中,规则1、5、6、7可以组合成一条composed-4规则,这个规则可以进行非常复杂的调序。
\parinterval
在真实系统开发中,组合规则一般会带来明显的性能提升。不过随着组合规则数量的增加,规则集也会膨胀。因此往往需要在翻译性能和文法大小之间找到一种平衡。
%----------------------------------------------------------------------------------------
...
...
@@ -1943,6 +1956,15 @@ r_9: \quad \textrm{IP(}\textrm{NN}_1\ \textrm{VP}_2) \rightarrow \textrm{S(}\tex
\parinterval
组合规则固然有效,但并不是所有组合规则都非常好用。比如,在机器翻译中已经发现,如果一个规则含有连续词串(短语),这种规则往往会比较可靠。但是由于句法树结构复杂,获取这样的规则可能会需要很多次规则的组合,规则抽取的效率很低。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter4/Figures/tree-segment-corresponding-to-phrase
}
\caption
{
短语(红色)所对应的树片段(绿色)
}
\label
{
fig:4-57
}
\end{figure}
%-------------------------------------------
\parinterval
针对这个问题,一种解决办法是直接从词串出发进行规则抽取。这种方法被称为SPMT方法
\cite
{
marcu2006spmt:
}
。它的思想是:对于任意一个与词对齐兼容的短语,可以找到包含它的``最小''翻译规则,即SPMT规则。如图
\ref
{
fig:4-57
}
所示,可以得到短语翻译:
\begin{eqnarray}
\textrm
{
对
}
\ \textrm
{
形式
}
\rightarrow
\textrm
{
about
}
\ \textrm
{
the
}
\ \textrm
{
situation
}
\nonumber
...
...
@@ -1955,15 +1977,6 @@ r_9: \quad \textrm{IP(}\textrm{NN}_1\ \textrm{VP}_2) \rightarrow \textrm{S(}\tex
\parinterval
而这条规则需要组合三条最小规则才能得到,但是在SPMT中可以直接得到。相比规则组合的方法,SPMT方法可以更有效的抽取包含短语的规则。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter4/Figures/tree-segment-corresponding-to-phrase
}
\caption
{
短语(红色)所对应的树片段(绿色)
}
\label
{
fig:4-57
}
\end{figure}
%-------------------------------------------
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
...
...
@@ -2069,8 +2082,6 @@ r_9: \quad \textrm{IP(}\textrm{NN}_1\ \textrm{VP}_2) \rightarrow \textrm{S(}\tex
\parinterval
同词对齐一样,节点对齐也会存在错误,这样就不可避免的造成规则抽取的错误。既然单一的对齐中含有错误,那能否让系统看到更多样的对齐结果,进而提高正确规则被抽取到的几率呢?答案是肯定的。实际上,在基于短语的模型中就有基于多个词对齐(如
$
n
$
-best词对齐)进行规则抽取的方法,这种方法可以在一定程度上提高短语的召回率。在树到树规则抽取中也可以使用多个节点对齐结果进行规则抽取。但是,简单使用多个对齐结果会使系统运行代价线性增长,而且即使是
$
n
$
-best对齐,也无法保证涵盖到正确的对齐结果。对于这个问题,另一种思路是使用对齐矩阵进行规则的``软''抽取。
\parinterval
所谓对齐矩阵,是描述两个句法树节点之间对应强度的数据结构。矩阵的每个单元中都是一个0到1之间的数字。规则抽取时,可以认为所有节点之间都存在对齐,这样可以抽取出很多
$
n
$
-best对齐中无法覆盖的规则。图
\ref
{
fig:4-63
}
展示了一个用对齐矩阵的进行规则抽取的实例。其中矩阵1(Matrix 1)表示的标准的1-best节点对齐,矩阵2(Matrix 2)表示的是一种概率化的对齐矩阵。可以看到使用矩阵2可以抽取到更多样的规则。另外,值得注意的是,基于对齐矩阵的方法也同样适用于短语和层次短语规则的抽取。关于对齐矩阵的生成可以参考相关论文的内容
\cite
{
xiao2013unsupervised,liu2009weighted,sun2010exploring,sun2010discriminative
}
。
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -2080,6 +2091,8 @@ r_9: \quad \textrm{IP(}\textrm{NN}_1\ \textrm{VP}_2) \rightarrow \textrm{S(}\tex
\end{figure}
%-------------------------------------------
\parinterval
所谓对齐矩阵,是描述两个句法树节点之间对应强度的数据结构。矩阵的每个单元中都是一个0到1之间的数字。规则抽取时,可以认为所有节点之间都存在对齐,这样可以抽取出很多
$
n
$
-best对齐中无法覆盖的规则。图
\ref
{
fig:4-63
}
展示了一个用对齐矩阵的进行规则抽取的实例。其中矩阵1(Matrix 1)表示的标准的1-best节点对齐,矩阵2(Matrix 2)表示的是一种概率化的对齐矩阵。可以看到使用矩阵2可以抽取到更多样的规则。另外,值得注意的是,基于对齐矩阵的方法也同样适用于短语和层次短语规则的抽取。关于对齐矩阵的生成可以参考相关论文的内容
\cite
{
xiao2013unsupervised,liu2009weighted,sun2010exploring,sun2010discriminative
}
。
\parinterval
此外,在基于句法的规则抽取中,一般会对规则进行一些限制,以避免规则数量过大,系统无法处理。比如,可以限制树片段的深度、变量个数、规则组合的次数等等。这些限制往往需要根据具体任务进行设计和调整。
%----------------------------------------------------------------------------------------
...
...
@@ -2214,8 +2227,6 @@ d_1 = {d'} \circ {r_5}
\parinterval
如图
\ref
{
fig:4-65
}
所示,覆盖相同跨度的节点会被放入同一个Chart Cell,但是不同句法标记的节点会被看作是不同的项(Item)。这种组织方式建立了一个索引,通过索引可以很容易的访问同一个跨度下的所有推导。比如,如果采用自下而上的分析,可以从小跨度的Chart Cell开始,构建推导,并填写Chart Cell。这个过程中,可以访问之前的Chart Cell来获得所需的局部推导(类似于前面提到的
$
d'
$
)。该过程重复执行,直到处理完最大跨度的Chart Cell。而最后一个Chart Cell就保存了完整推导的根节点。通过回溯的方式,能够把所有推导都生成出来。
\parinterval
基于句法的机器翻译仍然可以使用超图进行翻译推导的表示。和句法分析一样,超图的每条边可以对应一个基于树结构的文法,超边的头代表文法的左部,超边的尾代表规则中变量所对应的超图中的节点
\footnote
[10]
{
也可以把每个终结符看作是一个节点,这样一个超边的尾就对应规则的树片段中所有的叶子。
}
。图
\ref
{
fig:4-66
}
给出了一个使用超图来表示机器翻译推导的实例。可以看到,超图的结构是按源语言组织的,但是每个规则(超边)会包含目标语言的信息。由于同步翻译文法可以确保规则的源语言端和目标语言端都覆盖连续的词串,因此超图中的每个节点都对应一个源语言跨度,同时对应一个目标语的连续译文。这样,每个节点实际上代表了一个局部的翻译结果。
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -2225,6 +2236,8 @@ d_1 = {d'} \circ {r_5}
\end{figure}
%-------------------------------------------
\parinterval
基于句法的机器翻译仍然可以使用超图进行翻译推导的表示。和句法分析一样,超图的每条边可以对应一个基于树结构的文法,超边的头代表文法的左部,超边的尾代表规则中变量所对应的超图中的节点
\footnote
[10]
{
也可以把每个终结符看作是一个节点,这样一个超边的尾就对应规则的树片段中所有的叶子。
}
。图
\ref
{
fig:4-66
}
给出了一个使用超图来表示机器翻译推导的实例。可以看到,超图的结构是按源语言组织的,但是每个规则(超边)会包含目标语言的信息。由于同步翻译文法可以确保规则的源语言端和目标语言端都覆盖连续的词串,因此超图中的每个节点都对应一个源语言跨度,同时对应一个目标语的连续译文。这样,每个节点实际上代表了一个局部的翻译结果。
\parinterval
不过,机器翻译与句法分析也有不同之处。最主要的区别在于机器翻译使用了语言模型作为一个特征,比如
$
n
$
-gram语言模型。因为语言模型并不是上下文无关的,因此机器翻译中计算最优推导的方法和句法分析会有不同。常用的方法是,直接在每个Chart Cell中融合语言模型的分数,保留前
$
k
$
个结果;或者,在构建超图时不计算语言模型得分,等到构建完整个超图之后对最好的若干个推导用语言模型重新排序;再或者,将译文和语言模型都转化为加权有限状态自动机,之后直接对两个自动机做
{
\small\bfnew
{
组合
}}
\index
{
组合
}
(Composition)
\index
{
Composition
}
得到新的自动机,最后得到融合语言模型得分的译文表示。
\parinterval
基于超图的推导表示方法有着很广泛的应用。比如,
\ref
{
section-4.3
}
节介绍的层次短语系统也可以使用超图进行建模,因为它也使用了同步文法。从这个角度说,基于层次短语的模型和基于语言学句法的模型本质上是一样的。它们的主要区别在于规则中的句法标记和抽取规则的方法不同。
...
...
@@ -2243,8 +2256,6 @@ d_1 = {d'} \circ {r_5}
\parinterval
这也是一种标准的
{
\small\bfnew
{
基于串的解码
}}
\index
{
基于串的解码
}
(String-based Decoding)
\index
{
String-based Decoding
}
,即通过句法模型对输入的源语言句子进行翻译得到译文串。不过,搜索所有的推导会导致巨大的解码空间。对于树到串和树到树翻译来说,源语言句法树是可见的,因此可以使用另一种解码方法
\ \dash
\
{
\small\bfnew
{
基于树的解码
}}
\index
{
基于树的解码
}
(Tree-based Decoding)
\index
{
Tree-based Decoding
}
,即把输入的源语句法树翻译为目标语串。
\parinterval
表
\ref
{
tab:4-4
}
对比了基于串和基于树的解码方法。可以看到,基于树的解码只考虑了与源语言句法树兼容的推导,因此搜索空间更小,解码速度会更快。
%----------------------------------------------
\begin{table}
[htp]
{
\begin{center}
...
...
@@ -2255,7 +2266,17 @@ d_1 = {d'} \circ {r_5}
对比
&
基于树的解码
&
基于串的解码
\\
\hline
\rule
{
0pt
}{
15pt
}
解码方法
&
$
\hat
{
d
}
=
\arg\max
_{
d
\in
D
_{
\textrm
{
tree
}}}
\textrm
{
score
}
(
d
)
$
&
$
\hat
{
d
}
=
\arg\max
_{
d
\in
D
}
\textrm
{
score
}
(
d
)
$
\\
\rule
{
0pt
}{
15pt
}
搜索空间
&
与输入的源语句法树兼容的推导
$
D
_{
\textrm
{
tree
}}$
&
所有的推导
$
D
$
\\
\rule
{
0pt
}{
15pt
}
搜索空间
&
与输入的源语句法树兼容的推导
$
D
_{
\textrm
{
tree
}}$
&
所有的推导
$
D
$
\end{tabular}
}
\end{center}
}
\end{table}
\begin{table}
[htp]
{
\begin{center}
{
\begin{tabular}
{
l | p
{
16.5em
}
l
}
对比
&
基于树的解码
&
基于串的解码
\\
\hline
\rule
{
0pt
}{
15pt
}
适用模型
&
树到串、树到树
&
所有的句法模型
\\
\rule
{
0pt
}{
15pt
}
解码算法
&
Chart解码
&
CKY + 规则二叉化
\\
\rule
{
0pt
}{
15pt
}
速度
&
快
&
一般较慢
...
...
@@ -2265,6 +2286,8 @@ d_1 = {d'} \circ {r_5}
}
\end{table}
%-------------------------------------------
\parinterval
表
\ref
{
tab:4-4
}
对比了基于串和基于树的解码方法。可以看到,基于树的解码只考虑了与源语言句法树兼容的推导,因此搜索空间更小,解码速度会更快。
\parinterval
这里需要注意的是,不论是基于串的解码还是基于树的解码都是使用句法模型的方法,在翻译过程中都会生成翻译推导和树结构。二者的本质区别在于,基于树的解码把句法树作为显性的输入,而基于串的解码把句法树看作是翻译过程中的隐含变量。图
\ref
{
fig:4-67
}
进一步解释了这个观点。
%----------------------------------------------
...
...
@@ -2296,7 +2319,7 @@ d_1 = {d'} \circ {r_5}
\parinterval
这个过程如图
\ref
{
fig:4-68
}
所示,可以看到,不同的Chart Cell对应不同跨度,每个Chart Cell会保存相应的句法标记(还有译文的信息)。
%----------------------------------------------
\begin{figure}
[
htp
]
\begin{figure}
[
t
]
\centering
\input
{
./Chapter4/Figures/content-of-chart-in-tree-based-decoding
}
\caption
{
基于树的解码中Chart的内容
}
...
...
Book/Chapter6/Chapter6.tex
查看文件 @
869ed6cd
...
...
@@ -78,17 +78,17 @@
\parinterval
不过,以上这些工作大多都是在系统的局部模块中使用人工神经网络和深度学习方法。与之不同的是,神经机器翻译是用人工神经网络完成整个翻译过程的建模,这样做的一个好处是,整个系统可以进行端到端学习,无需引入对任何翻译的隐含结构假设。这种利用端到端学习对机器翻译进行神经网络建模的方式也就成为了现在大家所熟知的神经机器翻译。这里简单列出部分代表性的工作:
\begin{itemize}
\vspace
{
0.
5
em
}
\vspace
{
0.
3
em
}
\item
早在2013年,牛津大学的Nal Kalchbrenner和Phil Blunsom提出了一个基于编码器-解码器结构的新模型
\cite
{
kalchbrenner-blunsom-2013-recurrent
}
。该模型用卷积神经网络(CNN)将源语言编码成实数向量,之后用循环神经网络(RNN)将连续向量转换成目标语言。这使得模型不需要进行词对齐、特征提取等工作,就能够自动学习源语言的信息。这也是一种端到端学习的方法。不过,这项工作的实现较复杂,而且方法存在梯度消失/爆炸等问题
\cite
{
HochreiterThe,BENGIO1994Learning
}
,因此并没有成为后来神经机器翻译的基础框架。
\vspace
{
0.
5
em
}
\vspace
{
0.
3
em
}
\item
2014年,谷歌的Ilya Sutskever等人提出了序列到序列(seq2seq)学习的方法,同时将长短记忆结构(LSTM)引入到神经机器翻译中,这个方法解决了梯度爆炸/消失的问题,并且通过遗忘门的设计让网络选择性地记忆信息,缓解了序列中长距离依赖的问题
\cite
{
NIPS2014
_
5346
}
。但是该模型在进行编码的过程中,将不同长度的源语言句子压缩成了一个固定长度的向量,句子越长,损失的信息越多,同时该模型无法对输入和输出序列之间的对齐进行建模,因此并不能有效的保证翻译质量。
\vspace
{
0.
5
em
}
\vspace
{
0.
3
em
}
\item
同年Dzmitry Bahdanau等人首次将注意力机制(Attention Mechanism)应用到机器翻译领域,在机器翻译任务上对翻译和局部翻译单元之间的对应关系同时建模
\cite
{
bahdanau2014neural
}
。Bahdanau等人工作的意义在于,使用了更加有效的模型来表示源语言的信息,同时使用注意力机制对两种语言不同部分之间的相互联系进行建模。这种方法可以有效地处理长句子的翻译,而且注意力的中间结果具有一定的可解释性
\footnote
{
比如,目标语言和源语言句子不同单词之间的注意力强度能够在一定程度上反应单词之间的互译程度。
}
。然而相比于前人的神经机器翻译模型,注意力模型也引入了额外的成本,计算量较大。
\vspace
{
0.
5
em
}
\vspace
{
0.
3
em
}
\item
2016年谷歌发布了基于多层循环神经网络方法的GNMT系统。该系统集成了当时的神经机器翻译技术,并进行了诸多的改进。它的性能显著优于基于短语的机器翻译系统
\cite
{
Wu2016GooglesNM
}
,引起了研究者的广泛关注。在之后不到一年的时间里,Facebook采用卷积神经网络(CNN)研发了新的神经机器翻译系统
\cite
{
DBLP:journals/corr/GehringAGYD17
}
,实现了比基于循环神经网络(RNN)系统更高的翻译水平,并大幅提升翻译速度。
\vspace
{
0.
5
em
}
\vspace
{
0.
3
em
}
\item
2017年,谷歌的Ashish Vaswani等人提出了新的翻译模型Transformer。其完全抛弃了CNN、RNN等结构,仅仅通过自注意力机制(Self-Attentiion)和前向神经网络,不需要使用序列对齐的循环框架就展示出强大的性能,并且巧妙的解决了翻译中长距离依赖问题
\cite
{
NIPS2017
_
7181
}
。Transformer是第一个完全基于注意力机制搭建的模型,不仅训练速度更快,在翻译任务上也获得了更好的结果,一跃成为目前最主流的神经机器翻译框架。
\vspace
{
0.
5
em
}
\vspace
{
0.
3
em
}
\end{itemize}
\parinterval
神经机器翻译的工作远不止以上这些内容,实际上全面介绍所有神经机器翻译的方法也是非常有挑战的工作。感兴趣的读者可以参考一篇关于神经机器翻译的综述文章
\ \dash\
Neural Machine Translation: A Review
\cite
{
StahlbergNeural
}
。本章会对神经机器翻译的典型方法进行细致的介绍。
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论