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
39c10780
Commit
39c10780
authored
May 21, 2020
by
单韦乔
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'shanweiqiao' 到 'caorunzhe'
第四章不切分排版 查看合并请求
!240
parents
77ed72ca
c7a49943
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
39 行增加
和
26 行删除
+39
-26
Book/Chapter4/chapter4.tex
+39
-26
没有找到文件。
Book/Chapter4/chapter4.tex
查看文件 @
39c10780
...
...
@@ -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
%----------------------------------------------------------------------------------------
...
...
@@ -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}
...
...
@@ -2265,6 +2276,8 @@ d_1 = {d'} \circ {r_5}
}
\end{table}
%-------------------------------------------
\parinterval
表
\ref
{
tab:4-4
}
对比了基于串和基于树的解码方法。可以看到,基于树的解码只考虑了与源语言句法树兼容的推导,因此搜索空间更小,解码速度会更快。
\parinterval
这里需要注意的是,不论是基于串的解码还是基于树的解码都是使用句法模型的方法,在翻译过程中都会生成翻译推导和树结构。二者的本质区别在于,基于树的解码把句法树作为显性的输入,而基于串的解码把句法树看作是翻译过程中的隐含变量。图
\ref
{
fig:4-67
}
进一步解释了这个观点。
%----------------------------------------------
...
...
@@ -2296,7 +2309,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的内容
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论