Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mtbookv2
概览
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
mtbookv2
Commits
680742e0
Commit
680742e0
authored
Dec 01, 2020
by
单韦乔
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
一二章图片label序号
parent
f009aeda
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
57 行增加
和
57 行删除
+57
-57
Chapter1/chapter1.tex
+26
-26
Chapter2/chapter2.tex
+31
-31
没有找到文件。
Chapter1/chapter1.tex
查看文件 @
680742e0
...
...
@@ -136,7 +136,7 @@
\centering
\includegraphics
[scale=0.65]
{
./Chapter1/Figures/figure-report.jpg
}
\caption
{
ALPAC报告
}
\label
{
fig:1-
5
}
\label
{
fig:1-
4
}
\end{figure}
%-------------------------------------------
...
...
@@ -178,7 +178,7 @@
\vspace
{
0.5em
}
\end{itemize}
\parinterval
今天,神经机器翻译已经成为新的范式,与统计机器翻译一同推动了机器翻译技术与应用产品的发展。比如,从世界上著名的机器翻译比赛WMT和CCMT中就可以看出这个趋势。如图
\ref
{
fig:1-
6
}
所示,其中左图是WMT
\
19国际机器翻译比赛的参赛队伍的截图,这些参赛队伍基本上都在使用深度学习完成机器翻译的建模。而在WMT
\
19各个项目夺冠系统中(
\ref
{
fig:1-6
}
右图),神经机器翻译也占据了主导地位。
\parinterval
今天,神经机器翻译已经成为新的范式,与统计机器翻译一同推动了机器翻译技术与应用产品的发展。比如,从世界上著名的机器翻译比赛WMT和CCMT中就可以看出这个趋势。如图
\ref
{
fig:1-
5
}
所示,其中左图是WMT
\
19国际机器翻译比赛的参赛队伍的截图,这些参赛队伍基本上都在使用深度学习完成机器翻译的建模。而在WMT
\
19各个项目夺冠系统中(
\ref
{
fig:1-5
}
右图),神经机器翻译也占据了主导地位。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -187,7 +187,7 @@
\includegraphics
[scale=0.3]
{
./Chapter1/Figures/figure-wmt-bestresults.jpg
}
\setlength
{
\belowcaptionskip
}{
-1.5em
}
\caption
{
WMT
\
19国际机器翻译大赛(左:WMT
\
19参赛队伍;右:WMT
\
19各项目的最好分数结果)
}
\label
{
fig:1-
6
}
\label
{
fig:1-
5
}
\end{figure}
%-------------------------------------------
...
...
@@ -202,7 +202,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\parinterval
机器翻译技术发展到今天已经过无数次迭代,技术范式也经过若干次更替,近些年机器翻译的应用也如雨后春笋相继浮现。今天的机器翻译的质量究竟如何呢?乐观地说,在很多特定的条件下,机器翻译的译文结果是非常不错的,甚至可以接近人工翻译的结果。然而,在开放式翻译任务中,机器翻译的结果还并不完美。更严格来说,机器翻译的质量远没有达到人们所期望的程度。对于有些人提到的“机器翻译代替人工翻译”也并不是事实。比如,在高精度同声传译任务中,机器翻译仍需要更多打磨;再比如,针对于小说的翻译,机器翻译还无法做到与人工翻译媲美;甚至有人尝试用机器翻译系统翻译中国古代诗词,这里更多的是娱乐的味道。但是毫无疑问的是,机器翻译可以帮助人类,甚至有朝一日可以代替一些低端的人工翻译工作。
\parinterval
图
\ref
{
fig:1-
7
}
展示了机器翻译和人工翻译质量的一个对比结果。在汉语到英语的新闻翻译任务中,如果对译文进行人工评价(五分制),那么机器翻译的译文得分为3.9分,人工译文得分为4.7分(人的翻译也不是完美的)。可见,在这个任务中机器翻译表现不错,但是与人还有一定差距。如果换一种方式评价,把人的译文作为参考答案,用机器翻译的译文与其进行比对(百分制),会发现机器翻译的得分只有47分。当然,这个结果并不是说机器翻译的译文质量很差,它更多的是表明机器翻译系统可以生成一些与人工翻译不同的译文,机器翻译也具有一定的创造性。这也类似于,很多围棋选手都想向AlphaGo学习,因为智能围棋系统也可以走出一些人类从未走过的妙招。
\parinterval
图
\ref
{
fig:1-
6
}
展示了机器翻译和人工翻译质量的一个对比结果。在汉语到英语的新闻翻译任务中,如果对译文进行人工评价(五分制),那么机器翻译的译文得分为3.9分,人工译文得分为4.7分(人的翻译也不是完美的)。可见,在这个任务中机器翻译表现不错,但是与人还有一定差距。如果换一种方式评价,把人的译文作为参考答案,用机器翻译的译文与其进行比对(百分制),会发现机器翻译的得分只有47分。当然,这个结果并不是说机器翻译的译文质量很差,它更多的是表明机器翻译系统可以生成一些与人工翻译不同的译文,机器翻译也具有一定的创造性。这也类似于,很多围棋选手都想向AlphaGo学习,因为智能围棋系统也可以走出一些人类从未走过的妙招。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -210,18 +210,18 @@
\input
{
./Chapter1/Figures/figure-results-zh-to-en-news-field-translation
}
\setlength
{
\belowcaptionskip
}{
-0.5em
}
\caption
{
机器翻译与人工翻译性能对比(汉英新闻领域翻译)
}
\label
{
fig:1-
7
}
\label
{
fig:1-
6
}
\end{figure}
%-------------------------------------------
\parinterval
图
\ref
{
fig:1-
8
}
展示了一个真实的汉语到英语翻译实例。对比发现,机器翻译与人工翻译还是存在差距的,特别是在翻译一些具有感情色彩的词语时,机器翻译的译文缺一些味道。那么,机器翻译一点用都没有吗?显然不是。实际上,如果考虑翻译速度与翻译代价,机器翻译的价值是无可比拟的。还是同一个例子,翻译一篇短文如果人工翻译需要30分钟甚至更长时间,那么机器翻译仅仅需要两秒,换种情况思考,如果有100万篇这样的文档,其人工翻译的成本根本无法想象,消耗的时间更是难以计算,而计算机集群仅仅需要一天,而且只有电力的消耗。
\parinterval
图
\ref
{
fig:1-
7
}
展示了一个真实的汉语到英语翻译实例。对比发现,机器翻译与人工翻译还是存在差距的,特别是在翻译一些具有感情色彩的词语时,机器翻译的译文缺一些味道。那么,机器翻译一点用都没有吗?显然不是。实际上,如果考虑翻译速度与翻译代价,机器翻译的价值是无可比拟的。还是同一个例子,翻译一篇短文如果人工翻译需要30分钟甚至更长时间,那么机器翻译仅仅需要两秒,换种情况思考,如果有100万篇这样的文档,其人工翻译的成本根本无法想象,消耗的时间更是难以计算,而计算机集群仅仅需要一天,而且只有电力的消耗。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter1/Figures/figure-comparison-mt-ht-1
}
\caption
{
机器翻译与人工翻译结果对比实例
}
\label
{
fig:1-
8
}
\label
{
fig:1-
7
}
\end{figure}
%-------------------------------------------
...
...
@@ -258,18 +258,18 @@
\parinterval
规则就像语言中的“If-then”语句,如果满足条件,则执行相应的语义动作。比如,可以将待翻译句子中的某个词,使用目标语言单词进行替换,但是这种替换并非随意的,而是在语言学知识的指导下进行的。
\parinterval
图
\ref
{
fig:1-
9
}
展示了一个使用转换法进行翻译的实例。这里,利用一个简单的汉译英规则库完成对句子“我对你感到满意”的翻译。当翻译“我”时,从规则库中找到规则1,该规则表示遇到单词“我”就翻译为“I”;类似地,也可以从规则库中找到规则4,该规则表示翻译调序,即将单词“you”放到“be satisfied with”后面。这种通过规则表示单词之间的对应关系也为统计机器翻译方法提供了思路。如统计机器翻译中,基于短语的翻译模型使用短语对对原文进行替换,详细描述可以参考
{
\chapterseven
}
。
\parinterval
图
\ref
{
fig:1-
8
}
展示了一个使用转换法进行翻译的实例。这里,利用一个简单的汉译英规则库完成对句子“我对你感到满意”的翻译。当翻译“我”时,从规则库中找到规则1,该规则表示遇到单词“我”就翻译为“I”;类似地,也可以从规则库中找到规则4,该规则表示翻译调序,即将单词“you”放到“be satisfied with”后面。这种通过规则表示单词之间的对应关系也为统计机器翻译方法提供了思路。如统计机器翻译中,基于短语的翻译模型使用短语对对原文进行替换,详细描述可以参考
{
\chapterseven
}
。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter1/Figures/figure-example-rbmt
}
\caption
{
基于规则的机器翻译的示例图(左:规则库;右:规则匹配结果)
}
\label
{
fig:1-
9
}
\label
{
fig:1-
8
}
\end{figure}
%-------------------------------------------
\parinterval
在上述例子中可以发现,规则不仅仅可以翻译句子之间单词的对应,如规则1,还可以表示句法甚至语法之间的对应,如规则6。因此基于规则的方法可以分成多个层次,如图
\ref
{
fig:1-
10
}
所示。图中不同的层次表示采用不同的知识来书写规则,进而完成机器翻译过程。对于翻译问题,可以构建不同层次的基于规则的机器翻译系统。这里包括四个层次,分别为:词汇转换、句法转换、语义转换和中间语言层。其中,上层可以继承下层的翻译知识,比如说句法转换层会利用词汇转换层知识。早期基于规则的方法属于词汇转换层。
\parinterval
在上述例子中可以发现,规则不仅仅可以翻译句子之间单词的对应,如规则1,还可以表示句法甚至语法之间的对应,如规则6。因此基于规则的方法可以分成多个层次,如图
\ref
{
fig:1-
9
}
所示。图中不同的层次表示采用不同的知识来书写规则,进而完成机器翻译过程。对于翻译问题,可以构建不同层次的基于规则的机器翻译系统。这里包括四个层次,分别为:词汇转换、句法转换、语义转换和中间语言层。其中,上层可以继承下层的翻译知识,比如说句法转换层会利用词汇转换层知识。早期基于规则的方法属于词汇转换层。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -277,7 +277,7 @@
\input
{
./Chapter1/Figures/figure-four-levels-of-rbmt
}
\caption
{
基于规则的机器翻译方法的四个层次
\upcite
{
冯志伟2004机器翻译研究
}}
\setlength
{
\belowcaptionskip
}{
-1.5em
}
\label
{
fig:1-
10
}
\label
{
fig:1-
9
}
\end{figure}
%-------------------------------------------
...
...
@@ -287,29 +287,29 @@
\subsection
{
转换法
}
\parinterval
通常一个典型的
{
\small\bfnew
{
基于转换规则的机器翻译
}}
\index
{
基于转换规则的机器翻译
}
(Transfer-based Translation)
\index
{
Transfer-based Translation
}
的过程可以被视为“独立分析-相关转换-独立生成”的过程
\upcite
{
parsing2009speech
}
。如图
\ref
{
fig:1-1
1
}
所示,这些过程可以分成六个步骤,其中每一个步骤都是通过相应的翻译规则来完成。比如,第一个步骤中需要构建源语词法分析规则,第二个步骤中需要构建源语句法分析规则,第三个和第四个步骤中需要构建转换规则,其中包括源语言-目标语言词汇和结构转换规则等等。
\parinterval
通常一个典型的
{
\small\bfnew
{
基于转换规则的机器翻译
}}
\index
{
基于转换规则的机器翻译
}
(Transfer-based Translation)
\index
{
Transfer-based Translation
}
的过程可以被视为“独立分析-相关转换-独立生成”的过程
\upcite
{
parsing2009speech
}
。如图
\ref
{
fig:1-1
0
}
所示,这些过程可以分成六个步骤,其中每一个步骤都是通过相应的翻译规则来完成。比如,第一个步骤中需要构建源语词法分析规则,第二个步骤中需要构建源语句法分析规则,第三个和第四个步骤中需要构建转换规则,其中包括源语言-目标语言词汇和结构转换规则等等。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter1/Figures/figure-process-of-rule-based-translation
}
\caption
{
基于转换规则的机器翻译过程
}
\label
{
fig:1-1
1
}
\label
{
fig:1-1
0
}
\end{figure}
%-------------------------------------------
\parinterval
转换法的目标就是使用规则定义的词法和句法,将源语言句子分解成为一个蕴含语言学标志的结构。如一个汉语句子“她把一束花放在桌上。”,经过词法和句法分析之后可以被表示成如图
\ref
{
fig:1-1
2
}
所示的结构,这个结构就是图
\ref
{
fig:1-11
}
中的源语言句子结构。这种使用语言学提取句子结构化表示,并使用某种规则匹配源语言结构和目标语言结构的方式也为
{
\chaptereight
}
将要介绍的基于语言学句法的模型提供了思路。
\parinterval
转换法的目标就是使用规则定义的词法和句法,将源语言句子分解成为一个蕴含语言学标志的结构。如一个汉语句子“她把一束花放在桌上。”,经过词法和句法分析之后可以被表示成如图
\ref
{
fig:1-1
1
}
所示的结构,这个结构就是图
\ref
{
fig:1-10
}
中的源语言句子结构。这种使用语言学提取句子结构化表示,并使用某种规则匹配源语言结构和目标语言结构的方式也为
{
\chaptereight
}
将要介绍的基于语言学句法的模型提供了思路。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter1/Figures/figure-example-of-source-structure
}
\caption
{
一个汉语句子的结构表示(句法树)
}
\label
{
fig:1-1
2
}
\label
{
fig:1-1
1
}
\end{figure}
%-------------------------------------------
\parinterval
在转换法中,翻译规则通常会分成两类:通用规则和个性规则。所谓通用的规则主要用于句法分析、语义分析、结构转换和句法生成等,是不具体依赖于某个源语言或者目标语言词汇而设计的翻译规则;个性规则通常以具体源语言词汇来做索引,比如图
\ref
{
fig:1-
9
}
中规则5就是针对主语是“I”的个性规则,它直接针对某个具体词汇进行分析和翻译。
\parinterval
在转换法中,翻译规则通常会分成两类:通用规则和个性规则。所谓通用的规则主要用于句法分析、语义分析、结构转换和句法生成等,是不具体依赖于某个源语言或者目标语言词汇而设计的翻译规则;个性规则通常以具体源语言词汇来做索引,比如图
\ref
{
fig:1-
8
}
中规则5就是针对主语是“I”的个性规则,它直接针对某个具体词汇进行分析和翻译。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -319,18 +319,18 @@
\parinterval
基于转换的方法可以通过词汇层、句法层和语义层完成从源语到目标语的转换过程,虽然采用了独立分析和独立生成两个子过程,但中间包含一个从源语到目标语的相关转换过程。这就会导致一个实际问题,假设需要实现
$
N
$
个语言之间互译的机器翻译系统,采用基于转换的方法,需要构建
$
N
(
N
-
1
)
$
个不同的机器翻译系统,这个构建代价是非常高的。为了解决这个问题,一种有效的解决方案是使用
{
\small\bfnew
{
基于中间语言的机器翻译
}}
\index
{
基于中间语言的机器翻译
}
(Interlingua-based Translation)
\index
{
Interlingua-based Translation
}
方法。
\parinterval
如图
\ref
{
fig:1-1
3
}
所示,基于中间语言方法的最大特点就是采用了一个称之为“中间语言”的知识表示结构,将“中间语言”作为独立源语言分析和独立目标语生成的桥梁,真正实现独立分析和独立生成。并且在基于中间语言的方法中不涉及“相关转换”这个过程,这一点与基于转换的方法有很大区别。
\parinterval
如图
\ref
{
fig:1-1
2
}
所示,基于中间语言方法的最大特点就是采用了一个称之为“中间语言”的知识表示结构,将“中间语言”作为独立源语言分析和独立目标语生成的桥梁,真正实现独立分析和独立生成。并且在基于中间语言的方法中不涉及“相关转换”这个过程,这一点与基于转换的方法有很大区别。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter1/Figures/figure-comparison-between-interlingua-based-and-transfer-based-translation
}
\caption
{
基于中间语言的方法(a)与基于转换的方法(b)
}
\label
{
fig:1-1
3
}
\label
{
fig:1-1
2
}
\end{figure}
%-------------------------------------------
\parinterval
从图
\ref
{
fig:1-
10
}
可以发现,中间语言(知识表示)处于最顶端,本质上是独立于源语言和目标语言的,这也是基于中间语言的方法可以将分析过程和生成过程分开的原因。
\parinterval
从图
\ref
{
fig:1-
9
}
可以发现,中间语言(知识表示)处于最顶端,本质上是独立于源语言和目标语言的,这也是基于中间语言的方法可以将分析过程和生成过程分开的原因。
\parinterval
虽然基于中间语言的方法有上述优点,但如何定义中间语言是一个关键问题。严格上说,所谓中间语言本身是一种知识表示结构,承载着源语言句子的分析结果,应该包含和体现尽可能多的源语言知识。如果中间语言的表示能力不强,会导致源语言句子信息丢失,这自然会影响目标语生成结果。
...
...
@@ -356,7 +356,7 @@
\vspace
{
0.5em
}
\end{itemize}
\parinterval
通过图
\ref
{
fig:1-
9
}
中规则的翻译实例中可以看出,规则的使用和人类进行翻译时所使用的思想非常类似,可以说基于规则的方法实际上在试图描述人类进行翻译的思维过程。虽然直接模仿人类的翻译方式对翻译问题建模是合理的,但是这一定程度上也暴露了基于规则的方法的弱点。基于规则的机器翻译方法中,人工书写翻译规则的主观因素重,有时与客观事实有一定差距。并且人工书写翻译规则的难度大,代价非常高,这也成为了后来基于数据驱动的机器翻译方法主要改进的方向。
\parinterval
通过图
\ref
{
fig:1-
8
}
中规则的翻译实例中可以看出,规则的使用和人类进行翻译时所使用的思想非常类似,可以说基于规则的方法实际上在试图描述人类进行翻译的思维过程。虽然直接模仿人类的翻译方式对翻译问题建模是合理的,但是这一定程度上也暴露了基于规则的方法的弱点。基于规则的机器翻译方法中,人工书写翻译规则的主观因素重,有时与客观事实有一定差距。并且人工书写翻译规则的难度大,代价非常高,这也成为了后来基于数据驱动的机器翻译方法主要改进的方向。
%----------------------------------------------------------------------------------------
% NEW SECTION
...
...
@@ -375,14 +375,14 @@
\parinterval
在实际使用上,
\ref
{
section-1.4
}
章提到的基于规则的方法更多地被使用在受限翻译场景中,比如受限词汇集的翻译。针对基于规则的方法存在的问题,基于实例的机器翻译于上世纪80年代中期被提出
\upcite
{
nagao1984framework
}
。该方法的基本思想是在双语句库中找到与待翻译句子相似的实例,之后对实例的译文进行修改,如对译文进行替换、增加、删除等一系列操作,从而得到最终译文。这个过程可以类比人类学习并运用语言的过程:人会先学习一些翻译实例或者模板,当遇到新的句子时,会用以前的实例和模板作对比,之后得到新的句子的翻译结果。这也是一种举一反三的思想。
\parinterval
图
\ref
{
fig:1-1
4
}
展示了一个基于实例的机器翻译过程。它利用简单的翻译实例库与翻译词典完成对句子“我对你感到满意”的翻译。首先,使用待翻译句子的源语言端在翻译实例库中进行比较,根据相似度大小找到相似的实例“我对他感到高兴”。然后,标记实例中不匹配的部分,即“你”和“他”,“满意”和“高兴”。再查询翻译词典得到词“你”和“满意”所对应的翻译结果“you”和“satisfied”,用这两个词分别替换实例中的“him”和“happy”,从而得到最终译文。
\parinterval
图
\ref
{
fig:1-1
3
}
展示了一个基于实例的机器翻译过程。它利用简单的翻译实例库与翻译词典完成对句子“我对你感到满意”的翻译。首先,使用待翻译句子的源语言端在翻译实例库中进行比较,根据相似度大小找到相似的实例“我对他感到高兴”。然后,标记实例中不匹配的部分,即“你”和“他”,“满意”和“高兴”。再查询翻译词典得到词“你”和“满意”所对应的翻译结果“you”和“satisfied”,用这两个词分别替换实例中的“him”和“happy”,从而得到最终译文。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter1/Figures/figure-zh-sentences-into-en-sentences
}
\caption
{
基于实例的机器翻译的示例图(左:实例库;右:翻译结果)
}
\label
{
fig:1-1
4
}
\label
{
fig:1-1
3
}
\end{figure}
%-------------------------------------------
...
...
@@ -406,14 +406,14 @@
\parinterval
统计机器翻译兴起于上世纪90年代
\upcite
{
brown1990statistical,gale1993a
}
,它利用统计模型从单/双语语料中自动学习翻译知识。具体来说,可以使用单语语料学习语言模型,使用双语平行语料学习翻译模型,并使用这些统计模型完成对翻译过程的建模。整个过程不需要人工编写规则,也不需要从实例中构建翻译模板。无论是词还是短语,甚至是句法结构,统计机器翻译系统都可以自动学习。人更多的是定义翻译所需的特征和基本翻译单元的形式,而翻译知识都保存在模型的参数中。
\parinterval
图
\ref
{
fig:1-1
5
}
展示了一个统计机器翻译系统运行的简单实例。整个系统需要两个模型:翻译模型和语言模型。其中,翻译模型从双语平行语料中学习翻译知识,得到短语表,短语表包含了各种词汇的翻译及其概率,这样可以度量源语言和目标语言片段之间互为翻译的可能性大小;语言模型从单语语料中学习目标语的词序列生成规律,来衡量目标语言译文的流畅性。最后,将这两种模型联合使用,通过翻译引擎来搜索尽可能多的翻译结果,并计算不同翻译结果的可能性大小,最后将概率最大的译文作为最终结果输出。这个过程并没有显性地使用人工翻译规则和模板,译文的生成仅仅依赖翻译模型和语言模型中的统计参数。
\parinterval
图
\ref
{
fig:1-1
4
}
展示了一个统计机器翻译系统运行的简单实例。整个系统需要两个模型:翻译模型和语言模型。其中,翻译模型从双语平行语料中学习翻译知识,得到短语表,短语表包含了各种词汇的翻译及其概率,这样可以度量源语言和目标语言片段之间互为翻译的可能性大小;语言模型从单语语料中学习目标语的词序列生成规律,来衡量目标语言译文的流畅性。最后,将这两种模型联合使用,通过翻译引擎来搜索尽可能多的翻译结果,并计算不同翻译结果的可能性大小,最后将概率最大的译文作为最终结果输出。这个过程并没有显性地使用人工翻译规则和模板,译文的生成仅仅依赖翻译模型和语言模型中的统计参数。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter1/Figures/figure-example-smt
}
\caption
{
统计机器翻译的示例图(左:语料资源;中:翻译模型与语言模型;右:翻译假设与翻译引擎)
}
\label
{
fig:1-1
5
}
\label
{
fig:1-1
4
}
\end{figure}
%-------------------------------------------
...
...
@@ -427,14 +427,14 @@
\parinterval
随着机器学习技术的发展,基于深度学习的神经机器翻译逐渐兴起。自2014年开始,它在短短几年内已经在大部分任务上取得了明显的优势
\upcite
{
NIPS2014
_
5346,bahdanau2014neural,vaswani2017attention,DBLP:journals/corr/GehringAGYD17,DBLP:journals/corr/LuongPM15
}
。在神经机器翻译中,词串被表示成实数向量,即分布式向量表示。这样,翻译过程并不是在离散化的单词和短语上进行,而是在实数向量空间上计算。因此与之前的技术相比,它在词序列表示的方式上有着本质的改变。通常,机器翻译可以被看作一个序列到另一个序列的转化。在神经机器翻译中,序列到序列的转化过程可以由
{
\small\bfnew
{
编码器-解码器
}}
\index
{
编码器-解码器
}
(Encoder-Decoder)
\index
{
Encoder-Decoder
}
框架实现。其中,编码器把源语言序列进行编码,并提取源语言中的信息进行分布式表示,之后解码器再把这种信息转换为另一种语言的表达。
\parinterval
图
\ref
{
fig:1-1
6
}
展示了一个神经机器翻译的实例。首先,通过编码器,源语言序列“我对你感到满意”经过多层神经网络编码生成一个向量表示,即图中的向量(0.2,-1,6,5,0.7,-2)。再将该向量作为输入送到解码器中,解码器把这个向量解码成目标语言序列。注意,目标语言序列的生成是逐词进行的(虽然图中展示的是解码器一次生成了整个序列,但是在具体实现时是由左至右逐个单词地生成目标语译文),产生某个词的时候依赖之前生成的目标语言的历史信息,直到产生句子结束符为止。
\parinterval
图
\ref
{
fig:1-1
5
}
展示了一个神经机器翻译的实例。首先,通过编码器,源语言序列“我对你感到满意”经过多层神经网络编码生成一个向量表示,即图中的向量(0.2,-1,6,5,0.7,-2)。再将该向量作为输入送到解码器中,解码器把这个向量解码成目标语言序列。注意,目标语言序列的生成是逐词进行的(虽然图中展示的是解码器一次生成了整个序列,但是在具体实现时是由左至右逐个单词地生成目标语译文),产生某个词的时候依赖之前生成的目标语言的历史信息,直到产生句子结束符为止。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter1/Figures/figure-example-nmt
}
\caption
{
神经机器翻译的示例图(左:编码器-解码器网络;右:编码器示例网络)
}
\label
{
fig:1-1
6
}
\label
{
fig:1-1
5
}
\end{figure}
%-------------------------------------------
...
...
Chapter2/chapter2.tex
查看文件 @
680742e0
...
...
@@ -240,14 +240,14 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\label
{
eq:2-13
}
\end{eqnarray}
\noindent
其中,
$
x
$
是
$
X
$
的一个取值,
$
\funp
{
P
}
(
x
)
$
表示
$
x
$
发生的概率。自信息用来衡量单一事件发生时所包含的信息多少,当底数为e时,单位为nats,其中1nats是通过观察概率为
$
1
/
\textrm
{
e
}$
的事件而获得的信息量;当底数为2时,单位为bits或shannons。
$
\funp
{
I
}
(
x
)
$
和
$
\funp
{
P
}
(
x
)
$
的函数关系如图
\ref
{
fig:2-
4
}
所示。
\noindent
其中,
$
x
$
是
$
X
$
的一个取值,
$
\funp
{
P
}
(
x
)
$
表示
$
x
$
发生的概率。自信息用来衡量单一事件发生时所包含的信息多少,当底数为e时,单位为nats,其中1nats是通过观察概率为
$
1
/
\textrm
{
e
}$
的事件而获得的信息量;当底数为2时,单位为bits或shannons。
$
\funp
{
I
}
(
x
)
$
和
$
\funp
{
P
}
(
x
)
$
的函数关系如图
\ref
{
fig:2-
3
}
所示。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-self-information-function
}
\caption
{
自信息函数
$
\funp
{
I
}
(
x
)
$
关于
$
\funp
{
P
}
(
x
)
$
的曲线
}
\label
{
fig:2-
4
}
\label
{
fig:2-
3
}
\end{figure}
%-------------------------------------------
...
...
@@ -304,7 +304,7 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\sectionnewpage
\section
{
掷骰子游戏
}
\parinterval
在阐述统计建模方法前,先看一个有趣的实例(图
\ref
{
fig:2-
5
}
)。掷骰子,一个生活中比较常见的游戏,掷一个骰子,玩家猜一个数字,猜中就算赢。按照常识来说,随便选一个数字,获胜的概率是一样的,即所有选择的获胜概率都是
$
1
/
6
$
。因此这个游戏玩家很难获胜,除非运气很好。假设进行一次游戏,玩家随意选了一个数字,比如是1。当投掷30次骰子(如图
\ref
{
fig:2-5
}
),发现运气不错,命中7次,好于预期(
$
7
/
30
>
1
/
6
$
)。
\parinterval
在阐述统计建模方法前,先看一个有趣的实例(图
\ref
{
fig:2-
4
}
)。掷骰子,一个生活中比较常见的游戏,掷一个骰子,玩家猜一个数字,猜中就算赢。按照常识来说,随便选一个数字,获胜的概率是一样的,即所有选择的获胜概率都是
$
1
/
6
$
。因此这个游戏玩家很难获胜,除非运气很好。假设进行一次游戏,玩家随意选了一个数字,比如是1。当投掷30次骰子(如图
\ref
{
fig:2-4
}
),发现运气不错,命中7次,好于预期(
$
7
/
30
>
1
/
6
$
)。
\vspace
{
-0.5em
}
%----------------------------------------------
...
...
@@ -313,7 +313,7 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\input
{
./Chapter2/Figures/figure-the-dice-game
}
%\setlength{\belowcaptionskip}{-0.5cm}
\caption
{
骰子结果
}
\label
{
fig:2-
5
}
\label
{
fig:2-
4
}
\end{figure}
%-------------------------------------------
...
...
@@ -343,25 +343,25 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\parinterval
当
$
X
$
足够大时,
$
X
_
i
/
X
$
可以无限逼近
$
\funp
{
P
}
(
i
)
$
的真实值,因此可以通过大量的实验推算出掷骰子各个面的概率的准确估计值。
\parinterval
回归到原始的问题,如果在正式开始游戏前,预先掷骰子30次,得到如图
\ref
{
fig:2-
6
}
的结果。
\parinterval
回归到原始的问题,如果在正式开始游戏前,预先掷骰子30次,得到如图
\ref
{
fig:2-
5
}
的结果。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-the-dice-game2
}
\caption
{
实验性投掷骰子的结果
}
\label
{
fig:2-
6
}
\label
{
fig:2-
5
}
\end{figure}
%-------------------------------------------
\parinterval
此时,可以注意到,这是一个有倾向性的模型(图
\ref
{
fig:2-
7
}
):在这样的预先实验基础上,可以知道这个骰子是不均匀的,如果用这个骰子玩掷骰子游戏,选择数字4获胜的可能性是最大的。
\parinterval
此时,可以注意到,这是一个有倾向性的模型(图
\ref
{
fig:2-
6
}
):在这样的预先实验基础上,可以知道这个骰子是不均匀的,如果用这个骰子玩掷骰子游戏,选择数字4获胜的可能性是最大的。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-the-dice-game-model
}
\caption
{
投骰子模型
}
\label
{
fig:2-
7
}
\label
{
fig:2-
6
}
\end{figure}
%-------------------------------------------
...
...
@@ -377,7 +377,7 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\vspace
{
0.5em
}
\end{itemize}
\parinterval
如果投掷这个新的骰子,可能会得到图
\ref
{
fig:2-
8
}
这样的结果。如果把这些数字换成汉语中的词,比如:
\parinterval
如果投掷这个新的骰子,可能会得到图
\ref
{
fig:2-
7
}
这样的结果。如果把这些数字换成汉语中的词,比如:
\vspace
{
0.5em
}
\parinterval
88
\;
=
\;
这
...
...
@@ -389,14 +389,14 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\parinterval
\ldots
\vspace
{
0.5em
}
\parinterval
就可以得到图
\ref
{
fig:2-
9
}
所示的结果。于是,可以假设有一个不均匀的多面骰子,每个面都对应一个单词。在获取一些文本数据后,可以统计每个单词出现的次数,进而利用极大似然估计推算出每个单词在语料库中出现的概率的估计值。图
\ref
{
fig:2-10
}
给出了一个实例
\parinterval
就可以得到图
\ref
{
fig:2-
8
}
所示的结果。于是,可以假设有一个不均匀的多面骰子,每个面都对应一个单词。在获取一些文本数据后,可以统计每个单词出现的次数,进而利用极大似然估计推算出每个单词在语料库中出现的概率的估计值。图
\ref
{
fig:2-9
}
给出了一个实例
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-full-probability-word-segmentation-1
}
\caption
{
投掷一个很多面骰子的结果
}
\label
{
fig:2-
8
}
\label
{
fig:2-
7
}
\end{figure}
%-------------------------------------------
...
...
@@ -406,7 +406,7 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\input
{
./Chapter2/Figures/figure-full-probability-word-segmentation-2
}
\setlength
{
\belowcaptionskip
}{
-0.2cm
}
\caption
{
掷骰子游戏中把数字换成汉字后的结果
}
\label
{
fig:2-
9
}
\label
{
fig:2-
8
}
\end{figure}
%-------------------------------------------
...
...
@@ -415,7 +415,7 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\centering
\input
{
./Chapter2/Figures/figure-full-probability-word-segmentation-3
}
\caption
{
单词概率的估计结果
}
\label
{
fig:2-
10
}
\label
{
fig:2-
9
}
\end{figure}
%-------------------------------------------
...
...
@@ -544,14 +544,14 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\label
{
eq:2-26
}
\end{eqnarray}
\parinterval
显然,这个结果是不合理的。因为即使语料中没有 “确实”和“现在”两个词连续出现,这种搭配也是客观存在的。这时简单地用极大似然估计得到概率却是0,导致整个句子出现的概率为0。 更常见的问题是那些根本没有出现在词表中的词,称为
{
\small\sffamily\bfseries
{
未登录词
}}
\index
{
未登录词
}
(Out-of-vocabulary Word,OOV Word)
\index
{
Out-of-vocabulary Word
}
,比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0概率。图
\ref
{
fig:2-1
1
}
展示了一个真实语料库中词语出现频次的分布,可以看到绝大多数词都是低频词。
\parinterval
显然,这个结果是不合理的。因为即使语料中没有 “确实”和“现在”两个词连续出现,这种搭配也是客观存在的。这时简单地用极大似然估计得到概率却是0,导致整个句子出现的概率为0。 更常见的问题是那些根本没有出现在词表中的词,称为
{
\small\sffamily\bfseries
{
未登录词
}}
\index
{
未登录词
}
(Out-of-vocabulary Word,OOV Word)
\index
{
Out-of-vocabulary Word
}
,比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0概率。图
\ref
{
fig:2-1
0
}
展示了一个真实语料库中词语出现频次的分布,可以看到绝大多数词都是低频词。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-word-frequency-distribution
}
\caption
{
词汇出现频次的分布
}
\label
{
fig:2-1
1
}
\label
{
fig:2-1
0
}
\end{figure}
%---------------------------
...
...
@@ -576,14 +576,14 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
\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-1
2
}
给出了在平滑之前和平滑之后的概率分布。
\parinterval
举一个例子。假设在一个英语文档中随机采样一些单词(词表大小
$
|V|
=
20
$
),各个单词出现的次数为:“look”出现4次,“people”出现3次,“am”出现2次,“what”出现1次,“want”出现1次,“do”出现1次。图
\ref
{
fig:2-1
1
}
给出了在平滑之前和平滑之后的概率分布。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-no-smoothing
&
smoothed-probability-distributions
}
\caption
{
无平滑和有平滑的概率分布
}
\label
{
fig:2-1
2
}
\label
{
fig:2-1
1
}
\end{figure}
%-------------------------------------------
...
...
@@ -816,14 +816,14 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\parinterval
在序列生成任务中,最简单的策略就是对词表中的词汇进行任意组合,通过这种枚举的方式得到全部可能的序列。但是,很多时候并生成序列的长度是无法预先知道的。比如,机器翻译中目标语序列的长度是任意的。那么怎样判断一个序列何时完成了生成过程呢?这里借用现代人类书写中文和英文的过程:句子的生成首先从一片空白开始,然后从左到右逐词生成,除了第一个单词,所有单词的生成都依赖于前面已经生成的单词。为了方便计算机实现,通常定义单词序列从一个特殊的符号<sos>后开始生成。同样地,一个单词序列的结束也用一个特殊的符号<eos>来表示。
\parinterval
对于一个序列
$
<
$
sos
$
>
$
\
I
\
agree
\
$
<
$
eos
$
>
$
,图
\ref
{
fig:2-1
3
}
展示语言模型视角下该序列的生成过程。该过程通过在序列的末尾不断附加词表中的单词来逐渐扩展序列,直到这段序列结束。这种生成单词序列的过程被称作
{
\small\bfnew
{
自左向右生成
}}
\index
{
自左向右生成
}
(Left-to-Right Generation)
\index
{
Left-to-Right Generation
}
。注意,这种序列生成策略与
$
n
$
-gram的思想天然契合,因为
$
n
$
-gram语言模型中,每个词的生成概率依赖前面(左侧)若干词,因此
$
n
$
-gram语言模型也是一种自左向右的计算模型。
\parinterval
对于一个序列
$
<
$
sos
$
>
$
\
I
\
agree
\
$
<
$
eos
$
>
$
,图
\ref
{
fig:2-1
2
}
展示语言模型视角下该序列的生成过程。该过程通过在序列的末尾不断附加词表中的单词来逐渐扩展序列,直到这段序列结束。这种生成单词序列的过程被称作
{
\small\bfnew
{
自左向右生成
}}
\index
{
自左向右生成
}
(Left-to-Right Generation)
\index
{
Left-to-Right Generation
}
。注意,这种序列生成策略与
$
n
$
-gram的思想天然契合,因为
$
n
$
-gram语言模型中,每个词的生成概率依赖前面(左侧)若干词,因此
$
n
$
-gram语言模型也是一种自左向右的计算模型。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-sequence-generation-process
}
\caption
{
序列生成过程
}
\label
{
fig:2-1
3
}
\label
{
fig:2-1
2
}
\end{figure}
%-------------------------------------------
...
...
@@ -876,14 +876,14 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
}
\end{table}
%------------------------------------------------------
\parinterval
那么是否有比枚举策略更高效的方法呢?答案是肯定的。一种直观的方法是将搜索的过程表示成树型结构,称为解空间树。它包含了搜索过程中可生成的全部序列。该树的根节点恒为<sos>,代表序列均从<sos> 开始。该树结构中非叶子节点的兄弟节点有
$
|V|
+
1
$
个,由词表和结束符号<eos>构成。从图
\ref
{
fig:2-1
4
}
可以看到,对于一个最大长度为4的序列的搜索过程,生成某个单词序列的过程实际上就是访问解空间树中从根节点<sos> 开始一直到叶子节点<eos>结束的某条路径,而这条的路径上节点按顺序组成了一段独特的单词序列。此时对所有可能单词序列的枚举就变成了对解空间树的遍历。并且枚举的过程与语言模型打分的过程也是一致的,每枚举一个词
$
i
$
也就是在上图选择
$
w
_
i
$
一列的一个节点,语言模型就可以为当前的树节点
$
w
_
i
$
给出一个分值,即
$
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)
$
。对于
$
n
$
-gram语言模型,这个分值可以表示为
$
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)=
\funp
{
P
}
(
w
_
i | w
_{
i
-
n
+
1
}
\ldots
w
_{
i
-
1
}
)
$
\parinterval
那么是否有比枚举策略更高效的方法呢?答案是肯定的。一种直观的方法是将搜索的过程表示成树型结构,称为解空间树。它包含了搜索过程中可生成的全部序列。该树的根节点恒为<sos>,代表序列均从<sos> 开始。该树结构中非叶子节点的兄弟节点有
$
|V|
+
1
$
个,由词表和结束符号<eos>构成。从图
\ref
{
fig:2-1
3
}
可以看到,对于一个最大长度为4的序列的搜索过程,生成某个单词序列的过程实际上就是访问解空间树中从根节点<sos> 开始一直到叶子节点<eos>结束的某条路径,而这条的路径上节点按顺序组成了一段独特的单词序列。此时对所有可能单词序列的枚举就变成了对解空间树的遍历。并且枚举的过程与语言模型打分的过程也是一致的,每枚举一个词
$
i
$
也就是在上图选择
$
w
_
i
$
一列的一个节点,语言模型就可以为当前的树节点
$
w
_
i
$
给出一个分值,即
$
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)
$
。对于
$
n
$
-gram语言模型,这个分值可以表示为
$
\funp
{
P
}
(
w
_
i | w
_
1
w
_
2
\ldots
w
_{
i
-
1
}
)=
\funp
{
P
}
(
w
_
i | w
_{
i
-
n
+
1
}
\ldots
w
_{
i
-
1
}
)
$
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-solution-space-tree-of-enumeration-search
}
\caption
{
对有限长序列进行枚举搜索时的解空间树
}
\label
{
fig:2-1
4
}
\label
{
fig:2-1
3
}
\end{figure}
%-------------------------------------------
...
...
@@ -894,7 +894,7 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\label
{
eq:2-43
}
\end{eqnarray}
\parinterval
通常,
$
\textrm
{
score
}
(
\cdot
)
$
也被称作
{
\small\bfnew
{
模型得分
}}
\index
{
模型得分
}
(Model Score
\index
{
Model Score
}
)。如图
\ref
{
fig:2-1
5
}
所示,可知红线所示单词序列“<sos>
\
I
\
agree
\
<eos>”的模型得分为:
\parinterval
通常,
$
\textrm
{
score
}
(
\cdot
)
$
也被称作
{
\small\bfnew
{
模型得分
}}
\index
{
模型得分
}
(Model Score
\index
{
Model Score
}
)。如图
\ref
{
fig:2-1
4
}
所示,可知红线所示单词序列“<sos>
\
I
\
agree
\
<eos>”的模型得分为:
\begin{eqnarray}
&&
\textrm
{
score(<sos>
\
I
\
agree
\
<eos>)
}
\nonumber
\\
&
=
&
\log
\funp
{
P
}
(
\textrm
{
<sos>
}
) +
\log
\funp
{
P
}
(
\textrm
{
I
}
|
\textrm
{
<sos>
}
) +
\log
\funp
{
P
}
(
\textrm
{
agree
}
|
\textrm
{
<sos>
\
I
}
) +
\log
\funp
{
P
}
(
\textrm
{
<sos>
}
|
\textrm
{
<sos>
\
I
\
agree
}
)
\nonumber
\\
...
...
@@ -908,7 +908,7 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\centering
\input
{
./Chapter2/Figures/figure-score-solution-space-tree-by-lm
}
\caption
{
通过语言模型对解空间树打分
}
\label
{
fig:2-1
5
}
\label
{
fig:2-1
4
}
\end{figure}
%-------------------------------------------
...
...
@@ -930,25 +930,25 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\parinterval
在解空间树中,在每次对一个节点进行扩展的时候,可以借助语言模型计算当前节点的权重。因此很自然的一个想法是:使用权重信息可以帮助系统更快地找到合适的解。
\parinterval
在深度优先搜索中,每次总是先挑选一个单词,等枚举完当前单词全部子节点构成的序列后,才会选择下一个兄弟节点继续进行搜索。但是在挑选过程中先枚举词表中的哪个词是未定义的,也就是先选择哪个兄弟节点进行搜索是随机的。既然最终目标是寻找权重之和最大的路径,那么可以优先挑选分数较高的单词进行枚举。如图
\ref
{
fig:2-1
6
}
所示,红色线表示了第一次搜索的路径。在路径长度有限的情况下,权重和最大的路径上每个节点的权重也会比较大,先尝试分数较大的单词可以让系统更快地找到最优解,这是对深度优先搜索的一个自然的扩展。
\parinterval
在深度优先搜索中,每次总是先挑选一个单词,等枚举完当前单词全部子节点构成的序列后,才会选择下一个兄弟节点继续进行搜索。但是在挑选过程中先枚举词表中的哪个词是未定义的,也就是先选择哪个兄弟节点进行搜索是随机的。既然最终目标是寻找权重之和最大的路径,那么可以优先挑选分数较高的单词进行枚举。如图
\ref
{
fig:2-1
5
}
所示,红色线表示了第一次搜索的路径。在路径长度有限的情况下,权重和最大的路径上每个节点的权重也会比较大,先尝试分数较大的单词可以让系统更快地找到最优解,这是对深度优先搜索的一个自然的扩展。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-example-of-dfs-extension-method
}
\caption
{
深度优先搜索扩展方法实例
}
\label
{
fig:2-1
6
}
\label
{
fig:2-1
5
}
\end{figure}
%-------------------------------------------
\parinterval
类似的思想也可以应用于宽度优先搜索,由于宽度优先搜索每次都选择了所有的单词,因此简单使用节点的权重来选择单词是不可行的。重新回顾宽度优先搜索的过程:它维护了一个未结束单词序列的集合,每次扩展单词序列后根据长度往集合里面加入单词序列。而搜索问题关心的是单词序列的得分而非其长度。因此可以在搜索过程中维护未结束的单词序列集合里每个单词序列的得分,然后优先扩展该集合中得分最高的单词序列,使得扩展过程中未结束的单词序列集合包含的单词序列分数逐渐变高。如图
\ref
{
fig:2-1
7
}
所示,由于“<sos>
\
I”在图右侧的5条路径中分数最高,因此下一步将要扩展
$
w
_
2
$
一列“I”节点后的全部后继。图中绿色节点表示下一步将要扩展的节点。普通宽度优先搜索中,扩展后生成的单词序列长度相同,但是分数却参差不齐。而改造后的宽度优先搜索则不同,它会优先生成得分较高的单词序列,这种宽度优先搜索也叫做
{
\small\bfnew
{
一致代价搜索
}}
\index
{
一致代价搜索
}
(Uniform-cost Search)
\index
{
Uniform-cost Search
}
\upcite
{
DBLP:journals/ai/SabharwalS11
}
。
\parinterval
类似的思想也可以应用于宽度优先搜索,由于宽度优先搜索每次都选择了所有的单词,因此简单使用节点的权重来选择单词是不可行的。重新回顾宽度优先搜索的过程:它维护了一个未结束单词序列的集合,每次扩展单词序列后根据长度往集合里面加入单词序列。而搜索问题关心的是单词序列的得分而非其长度。因此可以在搜索过程中维护未结束的单词序列集合里每个单词序列的得分,然后优先扩展该集合中得分最高的单词序列,使得扩展过程中未结束的单词序列集合包含的单词序列分数逐渐变高。如图
\ref
{
fig:2-1
6
}
所示,由于“<sos>
\
I”在图右侧的5条路径中分数最高,因此下一步将要扩展
$
w
_
2
$
一列“I”节点后的全部后继。图中绿色节点表示下一步将要扩展的节点。普通宽度优先搜索中,扩展后生成的单词序列长度相同,但是分数却参差不齐。而改造后的宽度优先搜索则不同,它会优先生成得分较高的单词序列,这种宽度优先搜索也叫做
{
\small\bfnew
{
一致代价搜索
}}
\index
{
一致代价搜索
}
(Uniform-cost Search)
\index
{
Uniform-cost Search
}
\upcite
{
DBLP:journals/ai/SabharwalS11
}
。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-example-of-uniform-cost-search
}
\caption
{
一致代价搜索实例
}
\label
{
fig:2-1
7
}
\label
{
fig:2-1
6
}
\end{figure}
%-------------------------------------------
...
...
@@ -988,14 +988,14 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\parinterval
{
\small\bfnew
{
贪婪搜索
}}
\index
{
贪婪搜索
}
(Greedy Search)
\index
{
Greedy Search
}
基于一种思想:当一个问题可以拆分为多个子问题时,如果一直选择子问题的最优解就能得到原问题的最优解,那么就可以不必遍历原始的解空间,而是使用这种“贪婪”的策略进行搜索。基于这种思想,它每次都优先挑选得分最高的词进行扩展,这一点与改进过的深度优先搜索类似。但是它们的区别在于,贪婪搜索在搜索到一个完整的序列,也就是搜索到<eos>即停止,而改进的深度优先搜索会遍历整个解空间。因此贪婪搜索非常高效,其时间和空间复杂度仅为
$
O
(
m
)
$
,这里
$
m
$
为单词序列的长度。
\parinterval
由于贪婪搜索并没有遍历整个解空间,所以该方法不保证一定能找到最优解。比如对于如图
\ref
{
fig:2-1
8
}
所示的一个搜索结构,贪婪搜索将选择红线所示的序列,该序列的最终得分是-1.7。但是,对比图
\ref
{
fig:2-16
}
可以发现,在另一条路径上有得分更高的序列“<sos>
\
I
\
agree
\
<eos>”,它的得分为-1.5。此时贪婪搜索并没有找到最优解,由于贪婪搜索选择的单词是当前步骤得分最高的,但是最后生成的单词序列的得分取决于它未生成部分的得分。因此当得分最高的单词的子树中未生成部分的得分远远小于其他子树时,贪婪搜索提供的解的质量会非常差。同样的问题可以出现在使用贪婪搜索的任意时刻。但是,即使是这样,凭借其简单的思想以及在真实问题上的效果,贪婪搜索在很多场景中仍然得到了深入应用。
\parinterval
由于贪婪搜索并没有遍历整个解空间,所以该方法不保证一定能找到最优解。比如对于如图
\ref
{
fig:2-1
7
}
所示的一个搜索结构,贪婪搜索将选择红线所示的序列,该序列的最终得分是-1.7。但是,对比图
\ref
{
fig:2-15
}
可以发现,在另一条路径上有得分更高的序列“<sos>
\
I
\
agree
\
<eos>”,它的得分为-1.5。此时贪婪搜索并没有找到最优解,由于贪婪搜索选择的单词是当前步骤得分最高的,但是最后生成的单词序列的得分取决于它未生成部分的得分。因此当得分最高的单词的子树中未生成部分的得分远远小于其他子树时,贪婪搜索提供的解的质量会非常差。同样的问题可以出现在使用贪婪搜索的任意时刻。但是,即使是这样,凭借其简单的思想以及在真实问题上的效果,贪婪搜索在很多场景中仍然得到了深入应用。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-example-of-greedy-search
}
\caption
{
贪婪搜索实例
}
\label
{
fig:2-1
8
}
\label
{
fig:2-1
7
}
\end{figure}
%-------------------------------------------
...
...
@@ -1007,14 +1007,14 @@ c(\cdot) & \textrm{当计算最高阶模型时} \\
\parinterval
贪婪搜索会产生质量比较差的解是由于当前单词的错误选择造成的。既然每次只挑选一个单词可能会产生错误,那么可以通过同时考虑更多候选单词来缓解这个问题,也就是对于一个位置,可以同时将其扩展到若干个节点。这样就扩大了搜索的范围,进而使得优质解被找到的概率增大。
\parinterval
常见的做法是每一次生成新单词的时候都挑选得分最高的前
$
B
$
个单词,然后扩展这
$
B
$
个单词的
$
T
$
个孩子节点,得到
$
BT
$
条新路径,最后保留其中得分最高的
$
B
$
条路径。从另外一个角度理解,它相当于比贪婪搜索看到了更多的路径,因而它更有可能找到好的解。这个方法通常被称为
{
\small\bfnew
{
束搜索
}}
\index
{
束搜索
}
(Beam Search)
\index
{
Beam Search
}
。图
\ref
{
fig:2-1
9
}
展示了一个束大小为3的例子,其中束大小代表每次选择单词时保留的词数。比起贪婪搜索,束搜索在实际表现中非常优秀,它的时间、空间复杂度仅为贪婪搜索的常数倍,也就是
$
O
(
Bm
)
$
。
\parinterval
常见的做法是每一次生成新单词的时候都挑选得分最高的前
$
B
$
个单词,然后扩展这
$
B
$
个单词的
$
T
$
个孩子节点,得到
$
BT
$
条新路径,最后保留其中得分最高的
$
B
$
条路径。从另外一个角度理解,它相当于比贪婪搜索看到了更多的路径,因而它更有可能找到好的解。这个方法通常被称为
{
\small\bfnew
{
束搜索
}}
\index
{
束搜索
}
(Beam Search)
\index
{
Beam Search
}
。图
\ref
{
fig:2-1
8
}
展示了一个束大小为3的例子,其中束大小代表每次选择单词时保留的词数。比起贪婪搜索,束搜索在实际表现中非常优秀,它的时间、空间复杂度仅为贪婪搜索的常数倍,也就是
$
O
(
Bm
)
$
。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter2/Figures/figure-example-of-beam-search
}
\caption
{
束搜索实例
}
\label
{
fig:2-1
9
}
\label
{
fig:2-1
8
}
\end{figure}
%-------------------------------------------
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论