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
2337729a
Commit
2337729a
authored
May 12, 2020
by
曹润柘
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'caorunzhe' 到 'master'
Caorunzhe 查看合并请求
!163
parents
ece9ca21
b1cfea49
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
128 行增加
和
102 行删除
+128
-102
Book/Chapter2/chapter2.tex
+61
-49
Book/Chapter3/Chapter3.tex
+67
-53
没有找到文件。
Book/Chapter2/chapter2.tex
查看文件 @
2337729a
...
...
@@ -22,7 +22,7 @@
\parinterval
语言分析部分将以汉语为例介绍词法和句法分析的基本概念。它们都是自然语言处理中的经典问题,而且在机器翻译中也会经常被使用。同样,本章会介绍这两个任务的定义和求解问题的思路。
\parinterval
语言建模是机器翻译中最常用的一种技术,它主要用于句子的生成和流畅度评价。本章会以传统统计语言模型为例,对语言建模的相关概念进行介绍。但是,这里并不深入探讨语言模型技术,在后面的章节中还会单独对神经网络语言模型等前沿技术进行讨论。
\parinterval
语言建模是机器翻译中最常用的一种技术,它主要用于句子的生成和流畅度评价。本章会以传统统计语言模型为例,对语言建模的相关概念进行介绍。但是,这里并不深入探讨语言模型技术,在后面的章节中还会单独对神经网络语言模型等前沿技术进行讨论。
\\
\\
\\
%----------------------------------------------------------------------------------------
% NEW SECTION
...
...
@@ -97,8 +97,6 @@
\parinterval
在实际问题中,往往需要得到随机变量的概率值。但是,真实的概率值可能是无法准确知道的,这时就需要对概率进行
{
\small\sffamily\bfseries
{
估计
}}
\index
{
估计
}
,得到的结果是概率的
{
\small\sffamily\bfseries
{
估计值
}}
\index
{
估计值
}
(Estimate)
\index
{
Estimate
}
。在概率论中,一个很简单的方法是利用相对频度作为概率的估计值。如果
$
\{
x
_
1
,x
_
2
,
\dots
,x
_
n
\}
$
是一个试验的样本空间,在相同情况下重复试验
$
N
$
次,观察到样本
$
x
_
i
(
1
\leq
{
i
}
\leq
{
n
}
)
$
的次数为
$
n
(
x
_
i
)
$
,那么
$
x
_
i
$
在这
$
N
$
次试验中的相对频率是
$
\frac
{
n
(
x
_
i
)
}{
N
}$
。当
$
N
$
越来越大时,相对概率也就越来越接近真实概率
$
\textrm
{
P
}
(
x
_
i
)
$
,即
$
\lim
_{
N
\to
\infty
}
\frac
{
n
(
x
_
i
)
}{
N
}
=
\textrm
{
P
}
(
x
_
i
)
$
。 实际上,很多概率模型都等同于相对频度估计,比如,对于一个服从多项式分布的变量的极大似然估计就可以用相对频度估计实现。
\parinterval
概率函数是用函数形式给出离散变量每个取值发生的概率,其实就是将变量的概率分布转化为数学表达形式。如果把
$
A
$
看做一个离散变量,
$
a
$
看做变量
$
A
$
的一个取值,那么
$
\textrm
{
P
}
(
A
)
$
被称作变量
$
A
$
的概率函数,
$
\textrm
{
P
}
(
A
=
a
)
$
被称作
$
A
=
a
$
的概率值,简记为
$
\textrm
{
P
}
(
a
)
$
。例如,在相同条件下掷一个骰子50次,用
$
A
$
表示投骰子出现的点数这个离散变量,
$
a
_
i
$
表示点数的取值,
$
\textrm
{
P
}_
i
$
表示
$
A
=
a
_
i
$
的概率值。下表为
$
A
$
的概率分布,给出了
$
A
$
的所有取值及其概率。
%--------------------------------------------------------------------
\begin{table}
[htp]
\centering
...
...
@@ -112,15 +110,9 @@
\end{table}
%--------------------------------------------------------------------
\parinterval
除此之外,概率函数
$
\textrm
{
P
}
(
\cdot
)
$
还具有非负性、归一性等特点,非负性是指,所有的概率函数
$
\textrm
{
P
}
(
\cdot
)
$
都必须是大于等于0的数值,概率函数中不可能出现负数:
$
\forall
{
x
}
,
\textrm
{
P
}{
(
x
)
}
\geq
{
0
}$
。归一性,又称规范性,简单的说就是所有可能发生的事件的概率总和为1,即
$
\sum
_{
x
}
\textrm
{
P
}{
(
x
)
}
=
{
1
}$
。
\parinterval
对于离散变量
$
A
$
,
$
\textrm
{
P
}
(
A
=
a
)
$
是个确定的值,可以表示事件
$
A
=
a
$
的可能性大小;而对于连续变量,求在某个定点处的概率是无意义的,只能求其落在某个取值区间内的概率。因此,用
{
\small\sffamily\bfseries
{
概率分布函数
}}
\index
{
概率分布函数
}$
F
(
x
)
$
和
{
\small\sffamily\bfseries
{
概率密度函数
}}
\index
{
概率密度函数
}$
f
(
x
)
$
来统一描述随机变量取值的分布情况(如图
\ref
{
fig:2-3
}
)。概率分布函数
$
F
(
x
)
$
表示取值小于某个值的概率,是概率的累加(或积分)形式。假设
$
A
$
是一个随机变量,
$
a
$
是任意实数,将函数
$
F
(
a
)=
\textrm
{
P
}
\{
A
\leq
a
\}
$
,
$
-
\infty
<a<
\infty
$
定义为
$
A
$
的分布函数。通过分布函数,可以清晰地表示任何随机变量的概率。
\parinterval
概率函数是用函数形式给出离散变量每个取值发生的概率,其实就是将变量的概率分布转化为数学表达形式。如果把
$
A
$
看做一个离散变量,
$
a
$
看做变量
$
A
$
的一个取值,那么
$
\textrm
{
P
}
(
A
)
$
被称作变量
$
A
$
的概率函数,
$
\textrm
{
P
}
(
A
=
a
)
$
被称作
$
A
=
a
$
的概率值,简记为
$
\textrm
{
P
}
(
a
)
$
。例如,在相同条件下掷一个骰子50次,用
$
A
$
表示投骰子出现的点数这个离散变量,
$
a
_
i
$
表示点数的取值,
$
\textrm
{
P
}_
i
$
表示
$
A
=
a
_
i
$
的概率值。表
\ref
{
tab:2-1
}
为
$
A
$
的概率分布,给出了
$
A
$
的所有取值及其概率。
\parinterval
概率密度函数反映了变量在某个区间内的概率变化快慢,概率密度函数的值是概率的变化率,该连续变量的概率也就是对概率密度函数求积分得到的结果。设
$
f
(
x
)
\geq
0
$
是连续变量
$
X
$
的概率密度函数,
$
X
$
的分布函数就可以用如下公式定义:
\begin{eqnarray}
F(X)=
\int
_{
-
\infty
}^
x f(x)dx
\label
{
eq:2-1
}
\end{eqnarray}
\parinterval
除此之外,概率函数
$
\textrm
{
P
}
(
\cdot
)
$
还具有非负性、归一性等特点,非负性是指,所有的概率函数
$
\textrm
{
P
}
(
\cdot
)
$
都必须是大于等于0的数值,概率函数中不可能出现负数:
$
\forall
{
x
}
,
\textrm
{
P
}{
(
x
)
}
\geq
{
0
}$
。归一性,又称规范性,简单的说就是所有可能发生的事件的概率总和为1,即
$
\sum
_{
x
}
\textrm
{
P
}{
(
x
)
}
=
{
1
}$
。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -130,6 +122,16 @@ F(X)=\int_{-\infty}^x f(x)dx
\label
{
fig:2-3
}
\end{figure}
%-------------------------------------------
\vspace
{
-1em
}
\parinterval
对于离散变量
$
A
$
,
$
\textrm
{
P
}
(
A
=
a
)
$
是个确定的值,可以表示事件
$
A
=
a
$
的可能性大小;而对于连续变量,求在某个定点处的概率是无意义的,只能求其落在某个取值区间内的概率。因此,用
{
\small\sffamily\bfseries
{
概率分布函数
}}
\index
{
概率分布函数
}$
F
(
x
)
$
和
{
\small\sffamily\bfseries
{
概率密度函数
}}
\index
{
概率密度函数
}$
f
(
x
)
$
来统一描述随机变量取值的分布情况(如图
\ref
{
fig:2-3
}
)。概率分布函数
$
F
(
x
)
$
表示取值小于某个值的概率,是概率的累加(或积分)形式。假设
$
A
$
是一个随机变量,
$
a
$
是任意实数,将函数
$
F
(
a
)=
\textrm
{
P
}
\{
A
\leq
a
\}
$
,
$
-
\infty
<a<
\infty
$
定义为
$
A
$
的分布函数。通过分布函数,可以清晰地表示任何随机变量的概率。
\parinterval
概率密度函数反映了变量在某个区间内的概率变化快慢,概率密度函数的值是概率的变化率,该连续变量的概率也就是对概率密度函数求积分得到的结果。设
$
f
(
x
)
\geq
0
$
是连续变量
$
X
$
的概率密度函数,
$
X
$
的分布函数就可以用如下公式定义:
\begin{eqnarray}
F(X)=
\int
_{
-
\infty
}^
x f(x)dx
\label
{
eq:2-1
}
\end{eqnarray}
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -178,7 +180,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\label
{
fig:2-4
}
\end{figure}
%-------------------------------------------
\vspace
{
-1.3em
}
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
...
...
@@ -199,7 +201,15 @@ F(X)=\int_{-\infty}^x f(x)dx
\end{eqnarray}
\parinterval
下面的例子有助于更好的理解链式法则,如图
\ref
{
fig:2-5
}
所示,
$
A
$
、
$
B
$
、
$
C
$
、
$
D
$
、
\\
$
E
$
分别代表五个事件,其中,
$
A
$
只和
$
B
$
有关,
$
C
$
只和
$
B
$
、
$
D
$
有关,
$
E
$
只和
$
C
$
有关,
$
B
$
和
$
D
$
不依赖其他任何事件。则
$
\textrm
{
P
}
(
A,B,C,D,E
)
$
的表达式如下式:
\begin{eqnarray}
&
&
\textrm
{
P
}
(A,B,C,D,E)
\nonumber
\\
&
=
&
\textrm
{
P
}
(E
\mid
A,B,C,D)
\cdot
\textrm
{
P
}
(A,B,C,D)
\nonumber
\\
&
=
&
\textrm
{
P
}
(E
\mid
A,B,C,D)
\cdot
\textrm
{
P
}
(D
\mid
A,B,C)
\cdot
\textrm
{
P
}
(A,B,C)
\nonumber
\\
&
=
&
\textrm
{
P
}
(E
\mid
A,B,C,D)
\cdot
\textrm
{
P
}
(D
\mid
A,B,C)
\cdot
\textrm
{
P
}
(C
\mid
A,B)
\cdot
\textrm
{
P
}
(A,B)
\nonumber
\\
&
=
&
\textrm
{
P
}
(E
\mid
A,B,C,D)
\cdot
\textrm
{
P
}
(D
\mid
A,B,C)
\cdot
\textrm
{
P
}
(C
\mid
A,B)
\cdot
\textrm
{
P
}
(B
\mid
A)
\cdot
\textrm
{
P
}
(A)
\label
{
eq:2-7
}
\end{eqnarray}
\vspace
{
-2em
}
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -209,15 +219,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\label
{
fig:2-5
}
\end{figure}
%-------------------------------------------
\begin{eqnarray}
&
&
\textrm
{
P
}
(A,B,C,D,E)
\nonumber
\\
&
=
&
\textrm
{
P
}
(E
\mid
A,B,C,D)
\cdot
\textrm
{
P
}
(A,B,C,D)
\nonumber
\\
&
=
&
\textrm
{
P
}
(E
\mid
A,B,C,D)
\cdot
\textrm
{
P
}
(D
\mid
A,B,C)
\cdot
\textrm
{
P
}
(A,B,C)
\nonumber
\\
&
=
&
\textrm
{
P
}
(E
\mid
A,B,C,D)
\cdot
\textrm
{
P
}
(D
\mid
A,B,C)
\cdot
\textrm
{
P
}
(C
\mid
A,B)
\cdot
\textrm
{
P
}
(A,B)
\nonumber
\\
&
=
&
\textrm
{
P
}
(E
\mid
A,B,C,D)
\cdot
\textrm
{
P
}
(D
\mid
A,B,C)
\cdot
\textrm
{
P
}
(C
\mid
A,B)
\cdot
\textrm
{
P
}
(B
\mid
A)
\cdot
\textrm
{
P
}
(A)
\label
{
eq:2-7
}
\end{eqnarray}
\vspace
{
2.5em
}
\parinterval
根据图
\ref
{
fig:2-5
}
易知
$
E
$
只和
$
C
$
有关,所以
$
\textrm
{
P
}
(
E
\mid
A,B,C,D
)=
\textrm
{
P
}
(
E
\mid
C
)
$
;
$
D
$
不依赖于其他事件,所以
$
\textrm
{
P
}
(
D
\mid
A,B,C
)=
\textrm
{
P
}
(
D
)
$
;
$
C
$
只和
$
B
$
、
$
D
$
有关,所以
$
\textrm
{
P
}
(
C
\mid
A,B
)=
\textrm
{
P
}
(
C
\mid
B
)
$
;
$
B
$
不依赖于其他事件,所以
$
\textrm
{
P
}
(
B
\mid
A
)=
\textrm
{
P
}
(
B
)
$
。最终化简可得:
\begin{eqnarray}
...
...
@@ -259,6 +261,7 @@ F(X)=\int_{-\infty}^x f(x)dx
&
=
&{
0.36
}
\label
{
eq:2-10
}
\end{eqnarray}
\vspace
{
-2em
}
\parinterval
{
\small\sffamily\bfseries
{
贝叶斯法则
}}
\index
{
贝叶斯法则
}
(Bayes' rule)
\index
{
Bayes' rule
}
是概率论中的一个经典公式,通常用于已知
$
\textrm
{
P
}
(
A
\mid
B
)
$
求
$
\textrm
{
P
}
(
B
\mid
A
)
$
。可以表述为:设
$
\{
B
_
1
,...,B
_
n
\}
$
是
$
S
$
的一个划分,
$
A
$
为事件,则对于
$
i
=
1
,...,n
$
,有如下公式
\begin{eqnarray}
...
...
@@ -273,8 +276,9 @@ F(X)=\int_{-\infty}^x f(x)dx
&
=
&
\frac
{
\textrm
{
P
}
(A
\mid
B)
\textrm
{
P
}
(B)
}
{
\textrm
{
P
}
(A
\mid
B)
\textrm
{
P
}
(B)+
\textrm
{
P
}
(A
\mid
\bar
{
B
}
)
\textrm
{
P
}
(
\bar
{
B
}
)
}
\label
{
eq:2-12
}
\end{eqnarray}
\vspace
{
-1.5em
}
\parinterval
贝叶斯公式常用于根据已知的结果来推断使之发生的各因素的可能性。
\parinterval
贝叶斯公式常用于根据已知的结果来推断使之发生的各因素的可能性。
\\
\\
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -315,6 +319,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\label
{
fig:2-6
}
\end{figure}
%-------------------------------------------
\vspace
{
0.5em
}
\parinterval
自信息处理的是变量单一取值的情况。若量化整个概率分布中的不确定性或信息量,可以用信息熵,记为
$
\textrm
{
H
}
(
x
)
$
。其公式如下:
\begin{eqnarray}
...
...
@@ -345,7 +350,6 @@ F(X)=\int_{-\infty}^x f(x)dx
\item
非负性,即
$
\textrm
{
D
}_{
\textrm
{
KL
}}
(
\textrm
{
P
}
\parallel
\textrm
{
Q
}
)
\ge
0
$
,等号成立条件是
$
\textrm
{
P
}$
和
$
\textrm
{
Q
}$
相等。
\vspace
{
0.5em
}
\item
不对称性,即
$
\textrm
{
D
}_{
\textrm
{
KL
}}
(
\textrm
{
P
}
\parallel
\textrm
{
Q
}
)
\neq
\textrm
{
D
}_{
\textrm
{
KL
}}
(
\textrm
{
Q
}
\parallel
\textrm
{
P
}
)
$
,所以
$
\textrm
{
KL
}$
距离并不是常用的欧式空间中的距离。为了消除这种不确定性,有时也会使用
$
\textrm
{
D
}_{
\textrm
{
KL
}}
(
\textrm
{
P
}
\parallel
\textrm
{
Q
}
)+
\textrm
{
D
}_{
\textrm
{
KL
}}
(
\textrm
{
Q
}
\parallel
\textrm
{
P
}
)
$
作为度量两个分布差异性的函数。
\vspace
{
0.5em
}
\end{itemize}
%----------------------------------------------------------------------------------------
...
...
@@ -437,6 +441,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\parinterval
但是,基于词典的分词方法很``硬''。这是因为自然语言非常灵活,经常出现歧义,用词典定义的合法单词之间有重叠的交叉型歧义就很难解决。图
\ref
{
fig:2-9
}
就给出了上面例子中的交叉型歧义,从词典中查看,``实现''和``现在''都是合法的单词,但是在句子中二者有重叠,因此词典无法告诉我们哪个结果是正确的。
\setlength
{
\belowcaptionskip
}{
-0.5em
}
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -468,7 +473,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\begin{itemize}
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
训练
}}
\index
{
训练
}
(Training)
\index
{
Training
}
。利用标注数据,对统计模型的参数进行学习。
\item
{
\small\bfnew
{
训练
}}
\index
{
训练
}
(Training)
\index
{
Training
}
。利用标注数据,对统计模型的参数进行学习。
\\
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
推断
}}
\index
{
推断
}
(Inference)
\index
{
Inference
}
。利用学习到的模型和参数,对新的句子进行切分。
\vspace
{
0.5em
}
...
...
@@ -485,7 +490,6 @@ F(X)=\int_{-\infty}^x f(x)dx
%-------------------------------------------
\parinterval
图
\ref
{
fig:2-10
}
给出了一个基于统计建模的汉语分词实例。左侧是标注数据,其中每个句子是已经经过人工标注的分词结果(单词用斜杠分开)。之后,建立一个统计模型,记为
$
\textrm
{
P
}
(
\cdot
)
$
。模型通过在标注数据上的学习来对问题进行描述,即学习
$
\textrm
{
P
}
(
\cdot
)
$
。最后,对于新的未分词的句子,使用模型
$
\textrm
{
P
}
(
\cdot
)
$
对每个可能的切分方式进行概率估计,之后选择概率最高的切分结果输出。
\vspace
{
-0.5em
}
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -494,7 +498,6 @@ F(X)=\int_{-\infty}^x f(x)dx
\subsubsection
{
掷骰子游戏
}
\parinterval
上述过程的核心在于从数据中学习一种对分词现象的统计描述,即学习函数
$
\textrm
{
P
}
(
\cdot
)
$
。如何让计算机利用分词好的数据学习到分词的知识呢?可以先看一个有趣的实例(图
\ref
{
fig:2-11
}
),用生活中比较常见的掷骰子来说,掷一个骰子,玩家猜一个数字,猜中就算赢,按照一般的常识,随便选一个数字,获胜的概率是一样的,即所有选择的获胜概率仅是
$
1
/
6
$
。因此这个游戏玩家很难获胜,除非运气很好。假设进行一次游戏,玩家随便选了一个数字,比如是1,投掷30骰子,得到命中
$
7
/
30
>
1
/
6
$
,还不错。
\vspace
{
-0.5em
}
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -506,7 +509,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\end{figure}
%-------------------------------------------
\vspace
{
-
0.5em
}
\vspace
{
0.5em
}
\parinterval
似乎玩家的胜利只能来源于运气。不过,请注意,这里的假设``随便选一个数字''本身就是一个概率模型,它对骰子的六个面的出现做了均匀分布假设。
\begin{eqnarray}
\textrm
{
P(``1'')
}
=
\textrm
{
P(``2'')
}
=...=
\textrm
{
P(``5'')
}
=
\textrm
{
P(``6'')
}
=1/6
...
...
@@ -514,7 +517,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\end{eqnarray}
\vspace
{
-0.5em
}
\parinterval
但是这个游戏没有人规定骰子是均匀的(有些被坑了的感觉)。但是如果骰子的六个面不均匀呢?我们可以用一种更加``聪明''的方式定义一种新的模型,即定义骰子的每一个面都以一定的概率出现,而不是相同的概率。描述如
下:
\parinterval
但是这个游戏没有人规定骰子是均匀的(有些被坑了的感觉)。但是如果骰子的六个面不均匀呢?我们可以用一种更加``聪明''的方式定义一种新的模型,即定义骰子的每一个面都以一定的概率出现,而不是相同的概率。描述如
公式
\ref
{
eq:2-18
}
,这里,
$
\theta
_
1
\sim
\theta
_
5
$
可以被看作是模型的参数,因此这个模型的自由度是5。对于这样的模型,参数确定了,模型也就确定了。
\begin{eqnarray}
\textrm
{
P(``1'')
}
&
=
&
\theta
_
1
\nonumber
\\
\textrm
{
P(``2'')
}
&
=
&
\theta
_
2
\nonumber
\\
...
...
@@ -525,7 +528,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\label
{
eq:2-18
}
\end{eqnarray}
\
noindent
这里,
$
\theta
_
1
\sim
\theta
_
5
$
可以被看作是模型的参数,因此这个模型的自由度是5。对于这样的模型,参数确定了,模型也就确定了。
但是,新的问题来了,在定义骰子每个面的概率后,如何求出具体的值呢?一种常用的方法是,从大量实例中学习模型参数,这个方法也是常说的
{
\small\bfnew
{
参数估计
}}
\index
{
参数估计
}
(Parameter Estimation)
\index
{
Parameter Estimation
}
。可以将这个不均匀的骰子先实验性的掷很多次,这可以被看作是独立同分布的若干次采样,比如
$
X
$
次,发现``1'' 出现
$
X
_
1
$
次,``2'' 出现
$
X
_
2
$
次,以此类推,得到了各个面出现的次数。假设掷骰子中每个面出现的概率符合多项式分布,通过简单的概率论知识可以知道每个面出现概率的极大似然估计为:
\
parinterval
但是,新的问题来了,在定义骰子每个面的概率后,如何求出具体的值呢?一种常用的方法是,从大量实例中学习模型参数,这个方法也是常说的
{
\small\bfnew
{
参数估计
}}
\index
{
参数估计
}
(Parameter Estimation)
\index
{
Parameter Estimation
}
。可以将这个不均匀的骰子先实验性的掷很多次,这可以被看作是独立同分布的若干次采样,比如
$
X
$
次,发现``1'' 出现
$
X
_
1
$
次,``2'' 出现
$
X
_
2
$
次,以此类推,得到了各个面出现的次数。假设掷骰子中每个面出现的概率符合多项式分布,通过简单的概率论知识可以知道每个面出现概率的极大似然估计为:
\begin{eqnarray}
\textrm
{
P(``i'')
}
=
\frac
{
X
_
i
}{
X
}
\label
{
eq:2-19
}
...
...
@@ -542,8 +545,11 @@ F(X)=\int_{-\infty}^x f(x)dx
\end{figure}
%-------------------------------------------
\vspace
{
0.5em
}
\parinterval
于是,我们看到了一个有倾向性的模型(图
\ref
{
fig:2-13
}
):在这样的预先实验基础上,可以知道如果再次玩掷骰子游戏的话,选则数字``4''获胜的可能性是最大的。
\parinterval
通过上面这个掷骰子的游戏,可以得到一个道理:
{
\small\sffamily\bfseries
{
上帝是不公平的
}}
。因为在``公平''的世界中,没有任何一个模型可以学到有价值的事情。从机器学习的角度来看,所谓的``不公平''实际上这是客观事物中蕴含的一种
{
\small\sffamily\bfseries
{
偏置
}}
\index
{
偏置
}
(Bias)
\index
{
Bias
}
,也就是很多事情天然就有对某些情况有倾向。而图像处理、自然语言处理等问题中绝大多数都存在着偏置。比如,我们翻译一个英文单词的时候,它最可能的翻译结果往往就是那几个词。设计统计模型的目的正是要学习这种偏置,之后利用这种偏置对新的问题做出足够好的决策。
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -552,8 +558,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\label
{
fig:2-13
}
\end{figure}
%-------------------------------------------
\parinterval
通过上面这个掷骰子的游戏,可以得到一个道理:
{
\small\sffamily\bfseries
{
上帝是不公平的
}}
。因为在``公平''的世界中,没有任何一个模型可以学到有价值的事情。从机器学习的角度来看,所谓的``不公平''实际上这是客观事物中蕴含的一种
{
\small\sffamily\bfseries
{
偏置
}}
\index
{
偏置
}
(Bias)
\index
{
Bias
}
,也就是很多事情天然就有对某些情况有倾向。而图像处理、自然语言处理等问题中绝大多数都存在着偏置。比如,我们翻译一个英文单词的时候,它最可能的翻译结果往往就是那几个词。设计统计模型的目的正是要学习这种偏置,之后利用这种偏置对新的问题做出足够好的决策。
\vspace
{
-0.5em
}
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -622,7 +627,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\label
{
eq:2-20
}
\end{eqnarray}
}
\vspace
{
0.5em
}
\parinterval
以``确实现在数据很多''这个实例来说,如果把这句话按照``确实/现在/数据/很/多''这样的方式进行切分,这个句子切分的概率P(``确实/现在/数据/很/多'')可以通过每个词出现概率相乘的方式进行计算。
\begin{eqnarray}
...
...
@@ -635,6 +640,10 @@ F(X)=\int_{-\infty}^x f(x)dx
这个假设也是自然语言处理中1-gram语言模型假设,即当前词的生成与任何历史都无关。当然,独立性假设并不能完美描述客观世界的问题,但是它大大化简了问题的复杂度。
\parinterval
最后再整体看一下分词系统的学习和使用过程。如图
\ref
{
fig:2-17
}
所示,我们利用大量人工标注好的分词数据,通过统计学习方法获得一个统计模型
$
\textrm
{
P
}
(
\cdot
)
$
,给定任意分词结果
$
W
=
w
_
1
w
_
2
...w
_
m
$
,都能通过
$
\textrm
{
P
}
(
W
)=
\textrm
{
P
}
(
w
_
1
)
\cdot
\textrm
{
P
}
(
w
_
2
)
\cdot
...
\cdot
\textrm
{
P
}
(
w
_
m
)
$
计算这种切分的概率值。
\parinterval
经过充分训练的统计模型
$
\textrm
{
P
}
(
\cdot
)
$
就是得到的分词模型。对于输入的新句子
$
S
$
,通过这个模型找到最佳的分词结果
$
W
^
*
$
输出。假设输入句子
$
S
$
是``确实现在数据很多'',可以通过列举获得不同切分方式的概率,其中概率最高的切分方式,就是系统的目标输出。
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -644,10 +653,7 @@ F(X)=\int_{-\infty}^x f(x)dx
\end{figure}
%-------------------------------------------
\parinterval
最后再整体看一下分词系统的学习和使用过程。如图
\ref
{
fig:2-17
}
所示,我们利用大量人工标注好的分词数据,通过统计学习方法获得一个统计模型
$
\textrm
{
P
}
(
\cdot
)
$
,给定任意分词结果
$
W
=
w
_
1
w
_
2
...w
_
m
$
,都能通过
$
\textrm
{
P
}
(
W
)=
\textrm
{
P
}
(
w
_
1
)
\cdot
\textrm
{
P
}
(
w
_
2
)
\cdot
...
\cdot
\textrm
{
P
}
(
w
_
m
)
$
计算这种切分的概率值。
\parinterval
经过充分训练的统计模型
$
\textrm
{
P
}
(
\cdot
)
$
就是得到的分词模型。对于输入的新句子
$
S
$
,通过这个模型找到最佳的分词结果
$
W
^
*
$
输出。假设输入句子
$
S
$
是``确实现在数据很多'',可以通过列举获得不同切分方式的概率,其中概率最高的切分方式,就是系统的目标输出。
\vspace
{
0.5em
}
\parinterval
这种分词方法也被称作基于1-gram语言模型的分词,或全概率分词,使用标注好的分词数据进行学习,获得分词模型。这种方法最大的优点是整个学习过程(模型训练过程)和推导过程(处理新句子进行切分的过程)都是全自动进行的。这种方法虽然简单,但是其效率很高,因此被广泛应用在工业界系统里。
\parinterval
当然,真正的分词系统还需要解决很多其他问题,比如使用动态规划等方法高效搜索最优解以及如何处理未见过的词等等,由于本节的重点是介绍中文分词的基础方法和统计建模思想,因此无法覆盖所有中文分词的技术内容,有兴趣的读者可以参考
\ref
{
sec2:summary
}
节的相关文献做进一步深入研究。
...
...
@@ -657,9 +663,10 @@ F(X)=\int_{-\infty}^x f(x)dx
%----------------------------------------------------------------------------------------
\sectionnewpage
\vspace
{
-0.5em
}
\section
{$
n
$
-gram语言模型
}
\parinterval
在基于统计的汉语分词模型中,我们通过``大题小做''的技巧,利用独立性假设把整个句子的单词切分概率转化为每个单个词出现概率的乘积。这里,每个单词也被称作1-gram(或uni-gram),而1-gram概率的乘积实际上也是在度量词序列出现的可能性(记为
$
\textrm
{
P
}
(
w
_
1
w
_
2
...w
_
m
)
$
)。这种计算整个单词序列概率
$
\textrm
{
P
}
(
w
_
1
w
_
2
...w
_
m
)
$
的方法被称为统计语言模型。1-gram语言模型是最简单的一种语言模型,它没有考虑任何的上下文。很自然的一个问题是:能否考虑上下文信息构建更强大的语言模型,进而得到更准确的分词结果。下面将进一步介绍更加通用的
$
n
$
-gram语言模型,它在机器翻译及其他自然语言处理任务中有更加广泛的应用。
\parinterval
在基于统计的汉语分词模型中,我们通过``大题小做''的技巧,利用独立性假设把整个句子的单词切分概率转化为每个单个词出现概率的乘积。这里,每个单词也被称作1-gram(或uni-gram),而1-gram概率的乘积实际上也是在度量词序列出现的可能性(记为
$
\textrm
{
P
}
(
w
_
1
w
_
2
...w
_
m
)
$
)。这种计算整个单词序列概率
$
\textrm
{
P
}
(
w
_
1
w
_
2
...w
_
m
)
$
的方法被称为统计语言模型。1-gram语言模型是最简单的一种语言模型,它没有考虑任何的上下文。很自然的一个问题是:能否考虑上下文信息构建更强大的语言模型,进而得到更准确的分词结果。下面将进一步介绍更加通用的
$
n
$
-gram语言模型,它在机器翻译及其他自然语言处理任务中有更加广泛的应用。
\\
\\
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -715,19 +722,18 @@ F(X)=\int_{-\infty}^x f(x)dx
\begin{itemize}
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
极大似然估计
}}
\index
{
极大似然估计
}
。
直接利用词序列在训练数据中出现的频度计算出
$
\textrm
{
P
}
(
w
_
m|w
_{
m
-
n
+
1
}$
\\
$
... w
_{
m
-
1
}
)
$
\item
{
\small\bfnew
{
极大似然估计
}}
\index
{
极大似然估计
}
:
直接利用词序列在训练数据中出现的频度计算出
$
\textrm
{
P
}
(
w
_
m|w
_{
m
-
n
+
1
}$
\\
$
... w
_{
m
-
1
}
)
$
\begin{eqnarray}
\textrm
{
P
}
(w
_
m|w
_{
m-n+1
}
...w
_{
m-1
}
)=
\frac
{
\textrm
{
count
}
(w
_{
m-n+1
}
...w
_
m)
}{
\textrm
{
count
}
(w
_{
m-n+1
}
...w
_{
m-1
}
)
}
\label
{
eq:2-24
}
\vspace
{
0.5em
}
\end{eqnarray}
其中,
$
\textrm
{
count
}
(
\cdot
)
$
是在训练数据中统计频次的函数。
\vspace
{
0.3em
}
\item
{
\small\bfnew
{
人工神经网络方法
}}
\index
{
人工神经网络方法
}
。构建一个人工神经网络估计
$
\textrm
{
P
}
(
w
_
m|w
_{
m
-
n
+
1
}
... w
_{
m
-
1
}
)
$
的值,比如,可以构建一个前馈神经网络来对
$
n
$
-gram进行建模。
\vspace
{
0.5em
}
\item
{
\small\bfnew
{
人工神经网络方法
}}
\index
{
人工神经网络方法
}
:构建一个人工神经网络估计
$
\textrm
{
P
}
(
w
_
m|w
_{
m
-
n
+
1
}
... w
_{
m
-
1
}
)
$
的值,比如,可以构建一个前馈神经网络来对
$
n
$
-gram进行建模。
\vspace
{
0.5em
}
\end{itemize}
\vspace
{
0.3em
}
\parinterval
极大似然估计方法和前面介绍的统计分词中的方法是一致的,它的核心是使用
$
n
$
-gram出现的频度进行参数估计,因此也是自然语言处理中一类经典的
$
n
$
-gram方法。基于人工神经网络的方法在近些年也非常受关注,它直接利用多层神经网络对问题的输入
$
(
w
_{
m
-
n
+
1
}
...w
_{
m
-
1
}
)
$
和输出
$
\textrm
{
P
}
(
w
_
m|w
_{
m
-
n
+
1
}
... w
_{
m
-
1
}
)
$
进行建模,而模型的参数通过网络中神经元之间连接的权重进行体现。严格意义上了来说,基于人工神经网络的方法并不算基于
$
n
$
-gram的方法,或者说它并没有显性记录
$
n
$
-gram的生成概率,也不依赖
$
n
$
-gram的频度进行参数估计。为了保证内容的连贯性,本章将仍以传统
$
n
$
-gram语言模型为基础进行讨论,基于人工神经网络的方法将会在第五章和第六章进行详细介绍。
...
...
@@ -779,7 +785,6 @@ F(X)=\int_{-\infty}^x f(x)dx
\parinterval
{
\small\bfnew
{
加法平滑
}}
\index
{
加法平滑
}
(Additive Smoothing)
\index
{
Additive Smoothing
}
是一种简单的平滑技术。本小节首先介绍这一方法,希望通过它了解平滑算法的思想。通常情况下,系统研发者会利用采集到的语料库来模拟真实的全部语料库。当然,没有一个语料库能覆盖所有的语言现象。常见的一个问题是,使用的语料无法涵盖所有的词汇。因此,直接依据这样语料所获得的统计信息来获取语言模型就会产生偏差。假设依据某语料
$
C
$
(从未出现`` 确实 现在''二元语法),评估一个已经分好词的句子
$
S
$
=``确实/现在/物价/很/高''的概率。当计算``确实/现在''的概率时,
$
\textrm
{
P
}
(
S
)
=
0
$
。显然这个结果是不合理的。
\parinterval
加法平滑方法假设每个
$
n
$
-gram出现的次数比实际统计次数多
$
\theta
$
次,
$
0
\le
\theta\le
1
$
。这样,计算概率的时候分子部分不会为0。重新计算
$
\textrm
{
P
}
(
\textrm
{
现在
}
|
\textrm
{
确实
}
)
$
,可以得到:
\begin{eqnarray}
\textrm
{
P
}
(
\textrm
{
现在
}
|
\textrm
{
确实
}
)
&
=
&
\frac
{
\theta
+
\textrm
{
count
}
(
\textrm
{
确实/现在
}
)
}{
\sum
_{
w
}^{
|V|
}
(
\theta
+
\textrm
{
count
}
(
\textrm
{
确实/
}
w))
}
\nonumber
\\
&
=
&
\frac
{
\theta
+
\textrm
{
count
}
(
\textrm
{
确实/现在
}
)
}{
\theta
{
|V|
}
+
\textrm
{
count
}
(
\textrm
{
确实
}
)
}
...
...
@@ -845,6 +850,7 @@ N & = & \sum_{r=0}^{\infty}{r^{*}n_r} \nonumber \\
\parinterval
这里使用一个例子来说明这个方法是如何对事件出现的可能性进行平滑的。仍然考虑在加法平滑法中统计单词的例子,根据古德-图灵方法进行修正如表
\ref
{
tab:2-21
}
所示。
\vspace
{
0.5em
}
%------------------------------------------------------
\begin{table}
[htp]
{
\begin{center}
...
...
@@ -953,6 +959,7 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
%----------------------------------------------------------------------------------------
\sectionnewpage
\vspace
{
-0.5em
}
\section
{
句法分析(短语结构分析)
}
\parinterval
通过前面两节的内容,已经了解什么叫做``词''、如何对分词问题进行统计建模。同时也了解了如何对词序列的生成进行概率描述。无论是分词还是语言模型都是句子浅层词串信息的一种表示。对于一个自然语言句子来说,它更深层次的结构信息可以通过句法信息来描述,而句法信息也是机器翻译和自然语言处理其他任务中常用的知识之一。
...
...
@@ -973,6 +980,7 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\end{figure}
%---------------------------
\vspace
{
0.3em
}
\parinterval
图
\ref
{
fig:2-20
}
右侧展示的是另一种句法结构,被称作依存句法树。依存句法树表示了句子中单词和单词之间的依存关系。比如,从这个例子可以了解,``猫''依赖``喜欢'',``吃''依赖``喜欢'',``鱼''依赖``吃''。
\parinterval
短语结构树和依存句法树的结构和功能有很大不同。短语结构树的叶子节点是单词,中间节点是词性或者短语句法标记。在短语结构分析中,通常把单词称作
{
\small\bfnew
{
终结符
}}
\index
{
终结符
}
(Terminal)
\index
{
Terminal
}
,把词性称为
{
\small\bfnew
{
预终结符
}}
\index
{
预终结符
}
(Pre-terminal)
\index
{
Pre-terminal
}
,而把其他句法标记称为
{
\small\bfnew
{
非终结符
}}
\index
{
非终结符
}
(Non-terminal)
\index
{
Non-terminal
}
。依存句法树没有预终结符和非终结符,所有的节点都是句子里的单词,通过不同节点间的连线表示句子中各个单词之间的依存关系。每个依存关系实际上都是有方向的,头和尾分别指向``接受''和``发出''依存关系的词。依存关系也可以进行分类,图
\ref
{
fig:2-20
}
中我们对每个依存关系的类型都进行了标记,这也被称作是有标记的依存分析。如果不生成这些标记,这样的句法分析被称作无标记的依存分析。
...
...
@@ -1006,7 +1014,6 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\end{itemize}
\parinterval
以上三点是实现一个句法分析器的要素。本节的后半部分会对相关的概念和技术方法进行介绍。
\vspace
{
-0.5em
}
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -1058,6 +1065,7 @@ S=\{\textrm{IP}\} \nonumber
最后,文法的规则集定义图
\ref
{
fig:2-21
}
所示(其中
$
r
_
i
$
为规则的编号)
%\setlength{\belowcaptionskip}{-1em}
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -1125,6 +1133,7 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\end{figure}
%-------------------------------------------
\vspace
{
0.5em
}
\parinterval
通常,可以把推导简记为
$
d
=
r
_
1
\circ
r
_
2
\circ
...
\circ
r
_
n
$
,其中
$
\circ
$
表示规则的组合。显然,
$
d
$
也对应了树形结构,也就是句法分析结果。从这个角度看,推导就是描述句法分析树的一种方式。此外,规则的推导也把规则的使用过程与生成的字符串对应起来。一个推导所生成的字符串,也被称作文法所产生的一个
{
\small\bfnew
{
句子
}}
\index
{
句子
}
(Sentence)
\index
{
Sentence
}
。而一个文法所能生成的所有句子是这个文法所对应的
{
\small\bfnew
{
语言
}}
\index
{
语言
}
(Language)
\index
{
Language
}
。
\parinterval
但是,句子和规则的推导并不是一一对应的。同一个句子,往往有很多推导的方式,这种现象被称为
{
\small\bfnew
{
歧义
}}
\index
{
歧义
}
(Ambiguity)
\index
{
Ambiguity
}
。甚至同一棵句法树,也可以对应不同的推导。图
\ref
{
fig:2-23
}
给出同一棵句法树所对应的两种不同的规则推导。
...
...
@@ -1139,12 +1148,11 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\end{figure}
%-------------------------------------------
\vspace
{
0.5em
}
\parinterval
显然,规则顺序的不同会导致句法树的推导这一确定的过程变得不确定。因此,需要进行
{
\small\bfnew
{
消歧
}}
\index
{
消歧
}
(Disambiguation)
\index
{
Disambiguation
}
。这里,可以使用启发式方法:要求规则使用都服从最左优先原则,这样得到的推导被称为
{
\small\bfnew
{
最左优先推导
}}
\index
{
最左优先推导
}
(Left-most Derivation)
\index
{
Left-most Derivation
}
。图
\ref
{
fig:2-23
}
中的推导1 就是符合最左优先原则的推导。
\parinterval
这样,对于一个上下文无关文法,每一棵句法树都有唯一的最左推导与之对应。于是,句法分析可以被描述为:对于一个句子找到能够生成它的最佳推导,这个推导所对应的句法树就是这个句子的句法分析结果。
\parinterval
不过问题又回来了,怎样才能知道什么样的推导或者句法树是``最佳''的呢?对于语言学专家来说,可以很确定的分辨出哪些句法树是正确的,哪些句法树是错误。甚至对于普通人,也通过一些课本中学到知识产生一些模糊的判断。而计算机如何进行判别呢?沿着前面介绍的统计建模的思想,计算机可以得出不同句法树出现的概率,进而选择概率最高的句法树作为输出,而这正是统计句法分析所做的事情
%-------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -1154,6 +1162,8 @@ s_0 \overset{r_1}{\Rightarrow} s_1 \overset{r_2}{\Rightarrow} s_2 \overset{r_3}{
\end{figure}
%-------------------------------------------
\parinterval
不过问题又回来了,怎样才能知道什么样的推导或者句法树是``最佳''的呢?对于语言学专家来说,可以很确定的分辨出哪些句法树是正确的,哪些句法树是错误。甚至对于普通人,也通过一些课本中学到知识产生一些模糊的判断。而计算机如何进行判别呢?沿着前面介绍的统计建模的思想,计算机可以得出不同句法树出现的概率,进而选择概率最高的句法树作为输出,而这正是统计句法分析所做的事情
\parinterval
在统计句法分析中,需要对每个推导进行统计建模,于是定义一个模型
$
\textrm
{
P
}
(
\cdot
)
$
,对于任意的推导
$
d
$
,都可以用
$
\textrm
{
P
}
(
d
)
$
计算出推导
$
d
$
的概率。这样,给定一个输入句子,我们可以对所有可能的推导用
$
\textrm
{
P
}
(
d
)
$
计算其概率值,并选择概率最大的结果作为句法分析的结果输出(图
\ref
{
fig:2-25
}
)。
%-------------------------------------------
...
...
@@ -1224,7 +1234,6 @@ r_6: & & \textrm{VP} \to \textrm{VV}\ \textrm{NN} \nonumber
\parinterval
这也对应了词串``吃
\
鱼''的生成过程。首先,从起始非终结符VP开始,使用规则
$
r
_
6
$
生成两个非终结符VV和NN;进一步,分别使用规则
$
r
_
3
$
和
$
r
_
4
$
从VV和NN进一步生成单词``吃''和``鱼''。整个过程的概率等于三条规则概率的乘积。
\parinterval
新的问题又来了,如何得到规则的概率呢?这里仍然可以从数据中学习文法规则的概率。假设有人工标注的数据,它包括很多人工标注句法树的句法,称之为
{
\small\bfnew
{
树库
}}
\index
{
树库
}
(Treebank)
\index
{
Treebank
}
。然后,对于规则
$
\textrm
{
r
}
:
\alpha
\to
\beta
$
可以使用极大似然估计:
\begin{eqnarray}
\textrm
{
P
}
(r) =
\frac
{
\text
{
规则
$
r
$
在树库中出现的次数
}}{
\alpha
\text
{
在树库中出现的次数
}}
\label
{
eq:2-49
}
...
...
@@ -1241,8 +1250,9 @@ r_6: & & \textrm{VP} \to \textrm{VV}\ \textrm{NN} \nonumber
\end{figure}
%-------------------------------------------
\vspace
{
0.5em
}
\parinterval
图
\ref
{
fig:2-27
}
展示了基于统计的句法分析的流程。首先,通过树库上的统计,获得各个规则的概率,这样就得到了一个上下文无关句法分析模型
$
\textrm
{
P
}
(
\cdot
)
$
。对于任意句法分析结果
$
d
=
r
_
1
\circ
r
_
2
\circ
...
\circ
r
_
n
$
,都能通过如下公式计算其概率值:
\setlength
{
\belowdisplayskip
}{
1pt
}
\begin{equation}
\textrm
{
P
}
(d)=
\prod
_{
i=1
}^{
n
}
\textrm
{
P
}
(r
_
i)
\end{equation}
...
...
@@ -1256,6 +1266,7 @@ r_6: & & \textrm{VP} \to \textrm{VV}\ \textrm{NN} \nonumber
\end{figure}
%-------------------------------------------
\vspace
{
1em
}
\parinterval
在获取统计分析模型后,就可以使用模型对任意句子进行分析,计算每个句法分析树的概率,并输出概率最高的树作为句法分析的结果。
%----------------------------------------------------------------------------------------
...
...
@@ -1263,6 +1274,7 @@ r_6: & & \textrm{VP} \to \textrm{VV}\ \textrm{NN} \nonumber
%----------------------------------------------------------------------------------------
\sectionnewpage
\vspace
{
0.5em
}
\section
{
小结及深入阅读
}
\label
{
sec2:summary
}
\parinterval
本章重点介绍了如何对自然语言处理问题进行统计建模,并从数据中自动学习统计模型的参数,最终使用学习到的模型对新的问题进行处理。之后,本章将这种思想应用到三个自然语言处理任务中,包括:中文分词、语言建模、句法分析,它们也和机器翻译有着紧密的联系。通过系统化的建模,可以发现:经过适当的假设和化简,统计模型可以很好的描述复杂的自然语言处理问题。相关概念和方法也会在后续章节的内容中被广泛使用。
...
...
Book/Chapter3/Chapter3.tex
查看文件 @
2337729a
...
...
@@ -101,6 +101,7 @@
\label
{
fig:3-3
}
\end{figure}
%----------------------------------------------
\vspace
{
-0.2em
}
\parinterval
图
\ref
{
fig:3-3
}
展示了人在翻译``我 对 你表示 满意''时可能会思考的内容。具体来说,有如下两方面内容。
...
...
@@ -132,6 +133,8 @@
\parinterval
对于第一个问题,可以给计算机一个翻译词典,这样计算机可以发挥计算方面的优势,尽可能多的把翻译结果拼装出来。比如,可以把每个翻译结果看作是对单词翻译的拼装,这可以被形象的比做贯穿多个单词的一条路径,计算机所做的就是尽可能多的生成这样的路径。图
\ref
{
fig:3-4
}
中蓝色和红色的折线就分别表示了两条不同的译文选择路径,区别在于``满意''和``对''的翻译候选是不一样的,蓝色折线选择的是``satisfy''和``to'',而红色折线是``satisfied''和``with''。换句话说,不同的译文对应不同的路径(即使词序不同也会对应不同的路径)。
\parinterval
对于第二个问题,尽管机器能够找到很多译文选择路径,但它并不知道哪些路径是好的。说的再直白一些,简单的枚举路径实际上就是一个体力活,没有什么智能。因此计算机还需要再聪明一些,运用它的能够``掌握''的知识判断翻译结果的好与坏。这一步是最具挑战的,当然也有很多思路。在统计机器翻译中,这个问题被定义为:设计一种统计模型,它可以给每个译文一个可能性,而这个可能性越高表明译文越接近人工翻译。如图
\ref
{
fig:3-4
}
所示,每个单词翻译候选的右侧黑色框里的数字就是单词的翻译概率,使用这些单词的翻译概率,可以得到整句译文的概率(用符号P表示)。这样,就用概率化的模型描述了每个翻译候选的可能性。基于这些翻译候选的可能性,机器翻译系统可以对所有的翻译路径进行打分,比如,图
\ref
{
fig:3-4
}
中第一条路径的分数为0.042,第二条是0.006,以此类推。最后,系统可以选择分数最高的路径作为源语言句子的最终译文。
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -141,9 +144,6 @@
\end{figure}
%----------------------------------------------
\parinterval
对于第二个问题,尽管机器能够找到很多译文选择路径,但它并不知道哪些路径是好的。说的再直白一些,简单的枚举路径实际上就是一个体力活,没有什么智能。因此计算机还需要再聪明一些,运用它的能够``掌握''的知识判断翻译结果的好与坏。这一步是最具挑战的,当然也有很多思路。在统计机器翻译中,这个问题被定义为:设计一种统计模型,它可以给每个译文一个可能性,而这个可能性越高表明译文越接近人工翻译。如图
\ref
{
fig:3-4
}
所示,每个单词翻译候选的右侧黑色框里的数字就是单词的翻译概率,使用这些单词的翻译概率,可以得到整句译文的概率(用符号P表示)。这样,就用概率化的模型描述了每个翻译候选的可能性。基于这些翻译候选的可能性,机器翻译系统可以对所有的翻译路径进行打分,比如,图
\ref
{
fig:3-4
}
中第一条路径的分数为0.042,第二条是0.006,以此类推。最后,系统可以选择分数最高的路径作为源语言句子的最终译文。
\vspace
{
-0.5em
}
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
...
...
@@ -175,6 +175,7 @@
\label
{
fig:3-5
}
\end{figure}
%----------------------------------------------
\vspace
{
-0.5em
}
\parinterval
接下来,本节将介绍统计机器翻译模型训练和解码的方法。在模型学习中,会分两小节进行描述
\ \dash
\
单词级翻译和句子级翻译。实现单词级翻译是实现句子级翻译的基础。换言之,句子级翻译的统计模型是建立在单词翻译之上的。在解码中,本节将介绍一个高效的搜索算法,其中也使用到了剪枝和启发式搜索的思想。
...
...
@@ -211,7 +212,7 @@
\end{table}
%----------------------------------------------
\vspace
{
-0.5em
}
%
\vspace{-0.5em}
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
...
...
@@ -264,7 +265,6 @@
\subsubsection
{
如何从大量的双语平行数据中学习?
}
\parinterval
如果有更多的句子,上面的方法同样适用。假设,有
$
N
$
个互译句对
$
(
\mathbf
{
s
}^{
[
1
]
}
,
\mathbf
{
t
}^{
[
1
]
}
)
$
,...,
\\
$
(
\mathbf
{
s
}^{
[
N
]
}
,
\mathbf
{
t
}^{
[
N
]
}
)
$
。仍然可以使用基于相对频度的方法估计翻译概率
$
\textrm
{
P
}
(
x,y
)
$
,具体方法如下:
\begin{eqnarray}
\textrm
{
P
}
(x,y) =
\frac
{{
\sum
_{
i=1
}^{
N
}
c(x,y;
\mathbf
{
s
}^{
[i]
}
,
\mathbf
{
t
}^{
[i]
}
)
}}{
\sum
_{
i=1
}^{
N
}{{
\sum
_{
x',y'
}
c(x',y';
\mathbf
{
s
}^{
[i]
}
,
\mathbf
{
t
}^{
[i]
}
)
}}}
\label
{
eq:3-4
}
...
...
@@ -321,6 +321,7 @@
\subsubsection
{
基础模型
}
\vspace
{
0.5em
}
\parinterval
计算句子级翻译概率并不简单。因为自然语言非常灵活,任何数据无法覆盖足够多的句子,因此,无法像公式
\ref
{
eq:3-4
}
一样直接用简单计数的方式对句子的翻译概率进行估计。这里,采用一个退而求其次的方法:找到一个函数
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
\ge
0
$
来模拟翻译概率对译文可能性进行估计。可以定义一个新的函数
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
,令其满足:给定
$
\mathbf
{
s
}$
,翻译结果
$
\mathbf
{
t
}$
出现的可能性越大,
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
的值越大;
$
\mathbf
{
t
}$
出现的可能性越小,
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
的值越小。换句话说,
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
的单调性和翻译概率
$
\textrm
{
P
}
(
\mathbf
{
t
}
|
\mathbf
{
s
}
)
$
呈正相关。如果存在这样的函数
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
,可以利用
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
近似表示
$
\textrm
{
P
}
(
\mathbf
{
t
}
|
\mathbf
{
s
}
)
$
,如下:
\begin{eqnarray}
...
...
@@ -354,6 +355,7 @@
\label
{
fig:3-7
}
\end{figure}
%----------------------------------------------
\vspace
{
-0.5em
}
\parinterval
对于句对
$
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
,假设可以得到最优词对齐
$
\widehat
{
A
}$
,于是可以使用单词翻译概率计算
$
g
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
,如下
\begin{eqnarray}
...
...
@@ -464,11 +466,7 @@ g(\mathbf{s},\mathbf{t}) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}
%----------------------------------------------
\parinterval
已经有工作证明机器翻译问题是NP难的
\cite
{
knight1999decoding
}
。对于如此巨大的搜索空间,需要一种十分高效的搜索算法才能实现机器翻译的解码。这里介绍一种贪婪的解码算法,它把解码分成若干步骤,每步只翻译一个单词,并保留当前`` 最好''的结果,直至所有源语言单词都被翻译完毕。
\parinterval
图
\ref
{
fig:3-10
}
给出了贪婪解码算法的伪代码。其中
$
\pi
$
保存所有源语单词的候选译文,
$
\pi
[
j
]
$
表示第
$
j
$
个源语单词的翻译候选的集合,
$
best
$
保存当前最好的翻译结果,
$
h
$
保存当前步生成的所有译文候选。算法的主体有两层循环,在内层循环中如果第
$
j
$
个源语单词没有被翻译过,则用
$
best
$
和它的候选译文
$
\pi
[
j
]
$
生成新的翻译,再存于
$
h
$
中,即操作
$
h
=
h
\cup
{
\textrm
{
Join
}
(
best,
\pi
[
j
])
}$
。外层循环再从
$
h
$
中选择得分最高的结果存于
$
best
$
中,即操作
$
best
=
\textrm
{
PruneForTop
1
}
(
h
)
$
;同时标识相应的源语单词已翻译,即
$
used
[
best.j
]=
true
$
。
该算法的核心在于,系统一直维护一个当前最好的结果,之后每一步考虑扩展这个结果的所有可能,并计算模型得分,然后再保留扩展后的最好结果。注意,在每一步中,只有排名第一的结果才会被保留,其他结果都会被丢弃。这也体现了贪婪的思想。显然这个方法不能保证搜索到全局最优的结果,但是由于每次扩展只考虑一个最好的结果,因此该方法速度很快。图
\ref
{
fig:3-11
}
给出了算法执行过程的简单示例。当然,机器翻译的解码方法有很多,这里仅仅使用简单的贪婪搜索方法来解决机器翻译的解码问题,在后续章节会对更加优秀的解码方法进行介绍。
\vspace
{
0.3em
}
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -477,25 +475,41 @@ g(\mathbf{s},\mathbf{t}) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}
\label
{
fig:3-10
}
\end{figure}
%----------------------------------------------
\vspace
{
-0.0em
}
\
vspace
{
5.0em
}
\
parinterval
图
\ref
{
fig:3-10
}
给出了贪婪解码算法的伪代码。其中
$
\pi
$
保存所有源语单词的候选译文,
$
\pi
[
j
]
$
表示第
$
j
$
个源语单词的翻译候选的集合,
$
best
$
保存当前最好的翻译结果,
$
h
$
保存当前步生成的所有译文候选。算法的主体有两层循环,在内层循环中如果第
$
j
$
个源语单词没有被翻译过,则用
$
best
$
和它的候选译文
$
\pi
[
j
]
$
生成新的翻译,再存于
$
h
$
中,即操作
$
h
=
h
\cup
{
\textrm
{
Join
}
(
best,
\pi
[
j
])
}$
。外层循环再从
$
h
$
中选择得分最高的结果存于
$
best
$
中,即操作
$
best
=
\textrm
{
PruneForTop
1
}
(
h
)
$
;同时标识相应的源语单词已翻译,即
$
used
[
best.j
]=
true
$
。
\vspace
{
0.3em
}
%----------------------------------------------
\begin{figure}
[htp]
\centering
\subfigure
{
\input
{
./Chapter3/Figures/greedy-mt-decoding-process-1
}}
%\subfigure{\input{./Chapter3/Figures/greedy-mt-decoding-process-3}}
%\setlength{\belowcaptionskip}{14.0em}
%\caption{贪婪的机器翻译解码过程实例}
%\label{fig:3-11}
\end{figure}
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\centering
%\subfigure{\input{./Chapter3/Figures/greedy-mt-decoding-process-1}}
\subfigure
{
\input
{
./Chapter3/Figures/greedy-mt-decoding-process-3
}}
\setlength
{
\belowcaptionskip
}{
14
.0em
}
\setlength
{
\belowcaptionskip
}{
2
.0em
}
\caption
{
贪婪的机器翻译解码过程实例
}
\label
{
fig:3-11
}
\end{figure}
%----------------------------------------------
\vspace
{
-1.8em
}
该算法的核心在于,系统一直维护一个当前最好的结果,之后每一步考虑扩展这个结果的所有可能,并计算模型得分,然后再保留扩展后的最好结果。注意,在每一步中,只有排名第一的结果才会被保留,其他结果都会被丢弃。这也体现了贪婪的思想。显然这个方法不能保证搜索到全局最优的结果,但是由于每次扩展只考虑一个最好的结果,因此该方法速度很快。图
\ref
{
fig:3-11
}
给出了算法执行过程的简单示例。当然,机器翻译的解码方法有很多,这里仅仅使用简单的贪婪搜索方法来解决机器翻译的解码问题,在后续章节会对更加优秀的解码方法进行介绍。
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
\vspace
{
5.5
em
}
%调整布局用
%\vspace{3
em}%调整布局用
\sectionnewpage
\section
{
基于词的翻译建模
}
...
...
@@ -507,6 +521,7 @@ g(\mathbf{s},\mathbf{t}) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}
\subsection
{
噪声信道模型
}
\vspace
{
0.5em
}
\parinterval
首先,重新思考一下人类进行翻译的过程。对于给定的源语句
$
\mathbf
{
s
}$
,人不会像计算机一样尝试很多的可能,而是快速准确的翻译出一个或者少数几个正确的译文。在人看来,除了正确的译文外,其他的翻译都是不正确的,或者说除了少数的译文人甚至都不会考虑太多其他的可能性。但是,在统计机器翻译的世界里,没有译文是不可能的。换句话说,对于源语言句子
$
\mathbf
{
s
}$
,所有目标语词串
$
\mathbf
{
t
}$
都是可能的译文,只是可能性大小不同。即每对
$
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
都有一个概率值
$
\textrm
{
P
}
(
\mathbf
{
t
}
|
\mathbf
{
s
}
)
$
来描述
$
\mathbf
{
s
}$
翻译为
$
\mathbf
{
t
}$
的好与坏(图
\ref
{
fig:3-12
}
)。
%----------------------------------------------
...
...
@@ -518,6 +533,7 @@ g(\mathbf{s},\mathbf{t}) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}
\end{figure}
%----------------------------------------------
\vspace
{
-0.5em
}
\parinterval
IBM模型也是建立在如上统计模型之上。具体来说,IBM模型的基础是
{
\small\sffamily\bfseries
{
噪声信道模型
}}
\index
{
噪声信道模型
}
(Noise Channel Model)
\index
{
Noise Channel Model
}
,它是由Shannon在上世纪40年代末提出来的
\cite
{
shannon1949communication
}
,并于上世纪80年代应用在语言识别领域,后来又被Brown等人用于统计机器翻译中
\cite
{
brown1990statistical
}
。
\parinterval
在噪声信道模型中,源语言句子
$
\mathbf
{
s
}$
(信宿)被看作是由目标语言句子
$
\mathbf
{
t
}$
(信源)经过一个有噪声的信道得到的。如果知道了
$
\mathbf
{
s
}$
和信道的性质,可以通过
$
\textrm
{
P
}
(
\mathbf
{
t
}
|
\mathbf
{
s
}
)
$
得到信源的信息,这个过程如图
\ref
{
fig:3-13
}
所示。
...
...
@@ -644,7 +660,6 @@ g(\mathbf{s},\mathbf{t}) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}
\subsubsection
{
基于词对齐的翻译模型
}
\parinterval
直接准确估计
$
\textrm
{
P
}
(
\mathbf
{
s
}
|
\mathbf
{
t
}
)
$
很难,训练数据只能覆盖整个样本空间非常小的一部分,绝大多数句子在训练数据中一次也没出现过。为了解决这个问题,IBM模型假设:句子之间的对应可以由单词之间的对应进行表示。于是,句子翻译的概率可以被转化为词对齐生成的概率:
\begin{eqnarray}
\textrm
{
P
}
(
\mathbf
{
s
}
|
\mathbf
{
t
}
)=
\sum
_{
\mathbf
{
a
}}
\textrm
{
P
}
(
\mathbf
{
s
}
,
\mathbf
{
a
}
|
\mathbf
{
t
}
)
\label
{
eq:3-17
}
...
...
@@ -722,13 +737,13 @@ g(\mathbf{s},\mathbf{t}) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}
%----------------------------------------------------------------------------------------
\sectionnewpage
\vspace
{
-2em
}
\section
{
IBM模型1-2
}
\parinterval
公式
\ref
{
eq:3-17
}
和公式
\ref
{
eq:3-18
}
把翻译问题定义为对译文和词对齐同时进行生成的问题。其中有两个问题:首先,公式
\ref
{
eq:3-17
}
的右端(
$
\sum
_{
\mathbf
{
a
}}
\textrm
{
P
}
(
\mathbf
{
s
}
,
\mathbf
{
a
}
|
\mathbf
{
t
}
)
$
)要求对所有的词对齐概率进行求和,但是词对齐的数量随着句子长度是呈指数增长,如何遍历所有的对齐
$
\mathbf
{
a
}$
?其次,公式
\ref
{
eq:3-18
}
虽然对词对齐的问题进行了描述,但是模型中的很多参数仍然很复杂,如何计算
$
\textrm
{
P
}
(
m|
\mathbf
{
t
}
)
$
、
$
\textrm
{
P
}
(
a
_
j|a
_
1
^{
j
-
1
}
,s
_
1
^{
j
-
1
}
,m,
\mathbf
{
t
}
)
$
和
$
\textrm
{
P
}
(
s
_
j|a
_
1
^{
j
}
,s
_
1
^{
j
-
1
}
,m,
\mathbf
{
t
}
)
$
?针对这些问题,Brown等人总共提出了5种解决方案,这也就是被后人所熟知的5个IBM翻译模型。第一个问题可以通过一定的数学或者工程技巧进行求解;第二个问题可以通过一些假设进行化简,依据化简的层次和复杂度不同,可以分为IBM模型1、IBM模型2、IBM模型3、IBM模型4以及IBM模型5。本节首先介绍较为简单的IBM模型1-2。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\subsection
{
IBM模型1
}
\parinterval
IBM模型1对公式
\ref
{
eq:3-18
}
中的三项进行了简化。具体方法如下:
...
...
@@ -739,7 +754,7 @@ g(\mathbf{s},\mathbf{t}) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}
\textrm
{
P
}
(m|
\mathbf
{
t
}
)
\;
\equiv
\;
\varepsilon
\label
{
eq:3-20
}
\end{eqnarray}
\vspace
{
0.5em
}
%
\vspace{0.5em}
\item
对齐概率
$
\textrm
{
P
}
(
a
_
j|a
_
1
^{
j
-
1
}
,s
_
1
^{
j
-
1
}
,m,
\mathbf
{
t
}
)
$
仅依赖于译文长度
$
l
$
,即每个词对齐连接的概率也服从均匀分布。换句话说,对于任何源语言位置
$
j
$
对齐到目标语言任何位置都是等概率的。比如译文为``on the table'',再加上
$
t
_
0
$
共4个位置,相应的,任意源语单词对齐到这4个位置的概率是一样的。具体描述如下:
\begin{eqnarray}
\textrm
{
P
}
(a
_
j|a
_
1
^{
j-1
}
,s
_
1
^{
j-1
}
,m,
\mathbf
{
t
}
)
\equiv
\frac
{
1
}{
l+1
}
...
...
@@ -755,7 +770,7 @@ g(\mathbf{s},\mathbf{t}) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}
用一个简单的例子对公式
\ref
{
eq:3-22
}
进行说明。比如,在图
\ref
{
fig:3-18
}
中,``桌子''对齐到``table'',可被描述为
$
f
(
s
_
2
|t
_{
a
_
2
}
)=
f
(
\textrm
{
``桌子''
}
|
\textrm
{
``table''
}
)
$
,表示给定``table''翻译为``桌子''的概率。通常,
$
f
(
s
_
2
|t
_{
a
_
2
}
)
$
被认为是一种概率词典,它反应了两种语言词汇一级的对应关系。
\end{itemize}
\vspace
{
3.0em
}
%
\vspace{3.0em}
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -797,7 +812,7 @@ g(\mathbf{s},\mathbf{t}) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\vspace
{
-4em
}
\subsection
{
IBM模型2
}
\parinterval
IBM模型1很好地化简了问题,但是由于使用了很强的假设,导致模型和实际情况有较大差异。其中一个比较严重的问题是假设词对齐的生成概率服从均匀分布。图
\ref
{
fig:3-20
}
展示了一个简单的实例。尽管译文
$
\mathbf
{
t
}$
比
$
\mathbf
{
t
}
'
$
的质量更好,但对于IBM模型1来说它们对应的翻译概率相同。这是因为当词对齐服从均匀分布时,模型会忽略目标语言单词的位置信息。因此当单词翻译相同但顺序不同时,翻译概率一样。同时,由于源语言单词是由错误位置的目标语单词生成的,不合理的对齐也会导致不合理的词汇翻译概率。
...
...
@@ -918,13 +933,14 @@ g(\mathbf{s},\mathbf{t}) \equiv \prod_{j,i \in \widehat{A}}{\textrm{P}(s_j,t_i)}
\parinterval
我们已经把IBM模型的参数训练问题定义为带约束的目标函数优化问题。由于目标函数是可微分函数,解决这类问题的一种常用手法是把带约束的优化问题转化为不带约束的优化问题。这里用到了
{
\small\sffamily\bfseries
{
拉格朗日乘数法
}}
\index
{
拉格朗日乘数法
}
(The Lagrange Multiplier Method)
\index
{
The Lagrange Multiplier Method
}
,它的基本思想是把含有
$
n
$
个变量和
$
m
$
个约束条件的优化问题转化为含有
$
n
+
m
$
个变量的无约束优化问题。
\parinterval
这里的目标是
$
\max
(
\textrm
{
P
}_{
\theta
}
(
\mathbf
{
s
}
|
\mathbf
{
t
}
))
$
,约束条件是对于任意的目标语单词
$
t
_
y
$
有
\\
$
\sum
_{
s
_
x
}{
\textrm
{
P
}
(
s
_
x|t
_
y
)
}
=
1
$
。根据拉格朗日乘数法,可以把上述优化问题重新定义最大化如下拉格朗日函数:
\vspace
{
-0.5em
}
\begin{eqnarray}
L(f,
\lambda
)=
\frac
{
\varepsilon
}{
(l+1)
^
m
}
\prod
_{
j=1
}^{
m
}
\sum
_{
i=0
}^{
l
}{
f(s
_
j|t
_
i)
}
-
\sum
_{
t
_
y
}{
\lambda
_{
t
_
y
}
(
\sum
_{
s
_
x
}{
f(s
_
x|t
_
y)
}
-1)
}
\label
{
eq:3-32
}
\end{eqnarray}
\vspace
{
-0.3em
}
\parinterval
$
L
(
f,
\lambda
)
$
包含两部分,
$
\frac
{
\varepsilon
}{
(
l
+
1
)
^
m
}
\prod
_{
j
=
1
}^{
m
}
\sum
_{
i
=
0
}^{
l
}{
f
(
s
_
j|t
_
i
)
}$
是原始的目标函数,
\\
$
\sum
_{
t
_
y
}{
\lambda
_{
t
_
y
}
(
\sum
_{
s
_
x
}{
f
(
s
_
x|t
_
y
)
}
-
1
)
}$
是原始的约束条件乘以拉格朗日乘数
$
\lambda
_{
t
_
y
}$
,拉格朗日乘数的数量和约束条件的数量相同。图
\ref
{
fig:3-23
}
通过图例说明了
$
L
(
f,
\lambda
)
$
各部分的意义。
\vspace
{
6.0em
}
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -996,8 +1012,8 @@ f(s_u|t_v) = \lambda_{t_v}^{-1} \frac{\varepsilon}{(l+1)^{m}} \prod\limits_{j=1}
\end{figure}
%----------------------------------------------
\noindent
\hspace
{
2em
}
为了化简
$
f
(
s
_
u|t
_
v
)
$
的计算,在此对公式
\ref
{
eq:3-39
}
进行了重新组织,见图
\ref
{
fig:3-25
}
。
\noindent
\hspace
{
2em
}
为了化简
$
f
(
s
_
u|t
_
v
)
$
的计算,在此对公式
\ref
{
eq:3-39
}
进行了重新组织,见图
\ref
{
fig:3-25
}
。
其中,红色部分表示翻译概率P
$
(
\mathbf
{
s
}
|
\mathbf
{
t
}
)
$
;蓝色部分表示
$
(
s
_
u,t
_
v
)
$
在句对
$
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
中配对的总次数,即``
$
t
_
v
$
翻译为
$
s
_
u
$
''在所有对齐中出现的次数;绿色部分表示
$
f
(
s
_
u|t
_
v
)
$
对于所有的
$
t
_
i
$
的相对值,即``
$
t
_
v
$
翻译为
$
s
_
u
$
''在所有对齐中出现的相对概率;蓝色与绿色部分相乘表示``
$
t
_
v
$
翻译为
$
s
_
u
$
''这个事件出现次数的期望的估计,称之为
{
\small\sffamily\bfseries
{
期望频次
}}
\index
{
期望频次
}
(Expected Count)
\index
{
Expected Count
}
。
\vspace
{
-0.3em
}
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -1007,8 +1023,6 @@ f(s_u|t_v) = \lambda_{t_v}^{-1} \frac{\varepsilon}{(l+1)^{m}} \prod\limits_{j=1}
\end{figure}
%----------------------------------------------
\noindent
其中,红色部分表示翻译概率P
$
(
\mathbf
{
s
}
|
\mathbf
{
t
}
)
$
;蓝色部分表示
$
(
s
_
u,t
_
v
)
$
在句对
$
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
中配对的总次数,即``
$
t
_
v
$
翻译为
$
s
_
u
$
''在所有对齐中出现的次数;绿色部分表示
$
f
(
s
_
u|t
_
v
)
$
对于所有的
$
t
_
i
$
的相对值,即``
$
t
_
v
$
翻译为
$
s
_
u
$
''在所有对齐中出现的相对概率;蓝色与绿色部分相乘表示``
$
t
_
v
$
翻译为
$
s
_
u
$
''这个事件出现次数的期望的估计,称之为
{
\small\sffamily\bfseries
{
期望频次
}}
\index
{
期望频次
}
(Expected Count)
\index
{
Expected Count
}
。
\noindent
\hspace
{
2em
}
期望频次是事件在其分布下出现次数的期望。另
$
c
_{
\mathbb
{
E
}}
(
X
)
$
为事件
$
X
$
的期望频次,其计算公式为:
\begin{equation}
...
...
@@ -1064,15 +1078,7 @@ f(s_u|t_v)=\frac{c_{\mathbb{E}}(s_u|t_v;\mathbf{s},\mathbf{t})} { \sum\limits_{
\label
{
eq:3-45
}
\end{eqnarray}
\noindent
\hspace
{
2em
}
进一步,假设有
$
N
$
个互译的句对(称作平行语料):
$
\{
(
\mathbf
{
s
}^{
[
1
]
}
,
\mathbf
{
t
}^{
[
1
]
}
)
,...,
(
\mathbf
{
s
}^{
[
N
]
}
,
\mathbf
{
t
}^{
[
N
]
}
)
\}
$
,
$
f
(
s
_
u|t
_
v
)
$
的期望频次为:
\begin{eqnarray}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v)=
\sum\limits
_{
i=1
}^{
N
}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s
^{
[i]
}
,t
^{
[i]
}
)
\label
{
eq:3-46
}
\end{eqnarray}
\noindent
\hspace
{
2em
}
于是有
$
f
(
s
_
u|t
_
v
)
$
的计算公式和迭代过程图
\ref
{
fig:3-27
}
所示。完整的EM算法如图
\ref
{
fig:3-28
}
所示。其中E-Step对应4-5行,目的是计算
$
c
_{
\mathbb
{
E
}}
(
\cdot
)
$
;M-Step对应6-9行,目的是计算
$
f
(
\cdot
)
$
。
\vspace
{
-0.5em
}
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -1081,17 +1087,28 @@ c_{\mathbb{E}}(s_u|t_v)=\sum\limits_{i=1}^{N} c_{\mathbb{E}}(s_u|t_v;s^{[i]},t^
\label
{
fig:3-27
}
\end{figure}
%----------------------------------------------
\vspace
{
-1em
}
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter3/Figures/figure-EM-algorithm-flow-chart
}
\setlength
{
\belowcaptionskip
}{
-0.5em
}
%
\setlength{\belowcaptionskip}{-0.5em}
\caption
{
EM算法流程图(IBM模型1)
}
\label
{
fig:3-28
}
\end{figure}
%----------------------------------------------
\noindent
\hspace
{
2em
}
进一步,假设有
$
N
$
个互译的句对(称作平行语料):
$
\{
(
\mathbf
{
s
}^{
[
1
]
}
,
\mathbf
{
t
}^{
[
1
]
}
)
,...,
(
\mathbf
{
s
}^{
[
N
]
}
,
\mathbf
{
t
}^{
[
N
]
}
)
\}
$
,
$
f
(
s
_
u|t
_
v
)
$
的期望频次为:
\begin{eqnarray}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v)=
\sum\limits
_{
i=1
}^{
N
}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;s
^{
[i]
}
,t
^{
[i]
}
)
\label
{
eq:3-46
}
\end{eqnarray}
\noindent
\hspace
{
2em
}
于是有
$
f
(
s
_
u|t
_
v
)
$
的计算公式和迭代过程图
\ref
{
fig:3-27
}
所示。完整的EM算法如图
\ref
{
fig:3-28
}
所示。其中E-Step对应4-5行,目的是计算
$
c
_{
\mathbb
{
E
}}
(
\cdot
)
$
;M-Step对应6-9行,目的是计算
$
f
(
\cdot
)
$
。
\vspace
{
-1.5em
}
%\vspace{-1em}
\noindent
\hspace
{
2em
}
同样的,EM算法可以直接用于训练IBM模型2。对于句对
$
(
\mathbf
{
s
}
,
\mathbf
{
t
}
)
$
,
$
m
=
|
\mathbf
{
s
}
|
$
,
$
l
=
|
\mathbf
{
t
}
|
$
,E-Step的计算公式如下,其中参数
$
f
(
s
_
j|t
_
i
)
$
与IBM模型1一样:
\begin{eqnarray}
c
_{
\mathbb
{
E
}}
(s
_
u|t
_
v;
\mathbf
{
s
}
,
\mathbf
{
t
}
)
&
=
&
\sum\limits
_{
j=1
}^{
m
}
\sum\limits
_{
i=0
}^{
l
}
\frac
{
f(s
_
u|t
_
v)a(i|j,m,l)
\delta
(s
_
j,s
_
u)
\delta
(t
_
i,t
_
v)
}
{
\sum
_{
k=0
}^{
l
}
f(s
_
u|t
_
k)a(k|j,m,l)
}
\\
...
...
@@ -1137,6 +1154,8 @@ a(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;\mathbf{s}^{[k]},\mathbf{t}^
\parinterval
为了表述清晰,我们重新说明每个符号的含义。
$
\mathbf
{
s
}$
、
$
\mathbf
{
t
}$
、
$
m
$
和
$
l
$
分别表示源语言句子、目标语译文、源语言单词数量以及译文单词数量。
$
\mathbf
{
\varphi
}$
、
$
\mathbf
{
\tau
}$
和
$
\mathbf
{
\pi
}$
分别记录产出率、生成的源语言单词以及它们在源文中的位置。
${
\varphi
}_{
i
}$
表示第
$
i
$
个译文单词
$
t
_
i
$
的产出率。
${
\tau
}_{
i
}$
和
${
\pi
}_
i
$
分别表示
$
t
_
i
$
生成的源语言单词列表及其在源语言句子
$
\mathbf
{
s
}$
中的位置列表。
\parinterval
可以看出,一组
$
\tau
$
和
$
\pi
$
(记为
$
<
\tau
,
\pi
>
$
)可以决定一个对齐
$
\mathbf
{
a
}$
和一个源语句子
$
\mathbf
{
s
}$
。
\vspace
{
0.5em
}
%----------------------------------------------
\begin{figure}
[htp]
\centering
...
...
@@ -1146,8 +1165,8 @@ a(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;\mathbf{s}^{[k]},\mathbf{t}^
\end{figure}
%----------------------------------------------
\
parinterval
可以看出,一组
$
\tau
$
和
$
\pi
$
(记为
$
<
\tau
,
\pi
>
$
)可以决定一个对齐
$
\mathbf
{
a
}$
和一个源语句子
$
\mathbf
{
s
}$
。相反的,一个对齐
$
\mathbf
{
a
}$
和一个源语句子
$
\mathbf
{
s
}$
可以对应多组
$
<
\tau
,
\pi
>
$
。如图
\ref
{
fig:3-30
}
所示,不同的
$
<
\tau
,
\pi
>
$
对应同一个源语言句子和词对齐。它们的区别在于目标语单词``Scientists''生成的源语言单词``科学家''和``们''的顺序不同。这里把不同的
$
<
\tau
,
\pi
>
$
对应到的相同的源语句子
$
\mathbf
{
s
}$
和对齐
$
\mathbf
{
a
}$
记为
$
<
\mathbf
{
s
}
,
\mathbf
{
a
}
>
$
。因此计算
$
\textrm
{
P
}
(
\mathbf
{
s
}
,
\mathbf
{
a
}
|
\mathbf
{
t
}
)
$
时需要把每个可能结果的概率加起来,如下:
\
vspace
{
-0.2em
}
\noindent
相反的,一个对齐
$
\mathbf
{
a
}$
和一个源语句子
$
\mathbf
{
s
}$
可以对应多组
$
<
\tau
,
\pi
>
$
。如图
\ref
{
fig:3-30
}
所示,不同的
$
<
\tau
,
\pi
>
$
对应同一个源语言句子和词对齐。它们的区别在于目标语单词``Scientists''生成的源语言单词``科学家''和``们''的顺序不同。这里把不同的
$
<
\tau
,
\pi
>
$
对应到的相同的源语句子
$
\mathbf
{
s
}$
和对齐
$
\mathbf
{
a
}$
记为
$
<
\mathbf
{
s
}
,
\mathbf
{
a
}
>
$
。因此计算
$
\textrm
{
P
}
(
\mathbf
{
s
}
,
\mathbf
{
a
}
|
\mathbf
{
t
}
)
$
时需要把每个可能结果的概率加起来,如下:
\begin{equation}
\textrm
{
P
}
(
\mathbf
{
s
}
,
\mathbf
{
a
}
|
\mathbf
{
t
}
)=
\sum
_{{
<
\tau
,
\pi
>
}
\in
{
<
\mathbf
{
s
}
,
\mathbf
{
a
}
>
}}{
\textrm
{
P
}
(
\tau
,
\pi
|
\mathbf
{
t
}
)
}
\label
{
eq:3-66
}
...
...
@@ -1155,18 +1174,8 @@ a(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;\mathbf{s}^{[k]},\mathbf{t}^
\parinterval
不过
$
<
\mathbf
{
s
}
,
\mathbf
{
a
}
>
$
中有多少个元素呢?通过图
\ref
{
fig:3-29
}
中的例子,可以推出
$
<
\mathbf
{
s
}
,
\mathbf
{
a
}
>
$
应该包含
$
\prod
_{
i
=
0
}^{
l
}{
\varphi
_
i
!
}$
个不同的二元组
$
<
\tau
,
\pi
>
$
。 这是因为在给定源语言句子和词对齐时,对于每一个
$
\tau
_
i
$
都有
$
\varphi
_{
i
}
!
$
种排列。
\parinterval
进一步,
$
\textrm
{
P
}
(
\tau
,
\pi
|
\mathbf
{
t
}
)
$
可以被表示如图
\ref
{
fig:3-31
}
的形式。其中
$
\tau
_{
i
1
}^{
k
-
1
}$
表示
$
\tau
_{
i
1
}
\tau
_{
i
2
}
\cdots
\tau
_{
i
(
k
-
1
)
}$
,
$
\pi
_{
i
1
}^{
k
-
1
}$
表示
$
\pi
_{
i
1
}
\pi
_{
i
2
}
\cdots
\pi
_{
i
(
k
-
1
)
}$
。可以把图
\ref
{
fig:3-31
}
中的公式分为5个部分,并用不同的序号和颜色进行标注。每部分的具体含义是:
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter3/Figures/figure-expression
}
\caption
{{$
\textrm
{
P
}
(
\tau
,
\pi
|t
)
$}
的详细表达式
}
\label
{
fig:3-31
}
\end{figure}
%----------------------------------------------
\begin{itemize}
\vspace
{
0.5em
}
\item
对每个
$
i
\in
[
1
,l
]
$
的目标语单词的产出率建模(
{
\color
{
red!70
}
红色
}
),即
$
\varphi
_
i
$
的概率。它依赖于
$
\mathbf
{
t
}$
和区间
$
[
1
,i
-
1
]
$
的目标语单词的产出率
$
\varphi
_
1
^{
i
-
1
}$
。
\footnote
{
这里约定,当
$
i
=
1
$
时,
$
\varphi
_
1
^
0
$
表示空。
}
...
...
@@ -1178,9 +1187,17 @@ a(i|j,m,l) &=\frac{\sum_{k=0}^{K}c_{\mathbb{E}}(i|j;\mathbf{s}^{[k]},\mathbf{t}^
\item
对于每个
$
i
\in
[
1
,l
]
$
的目标语言单词生成的源语言单词的
{
\small\bfnew
{
扭曲度
}}
\index
{
扭曲度
}
(Distortion)
\index
{
Distortion
}
建模(
{
\color
{
yellow!70!black
}
黄色
}
),即第
$
i
$
个译文单词生成的第
$
k
$
个源语言单词在源文中的位置
$
\pi
_{
ik
}$
的概率。其中
$
\pi
_
1
^{
i
-
1
}$
和
$
\pi
_{
i
1
}^{
k
-
1
}$
分别表示区间
$
[
1
,i
-
1
]
$
的目标语言单词生成的源语言单词的扭曲度和第
$
i
$
译文单词生成的前
$
k
$
个源语言单词的扭曲度。
\vspace
{
0.5em
}
\item
$
i
=
0
$
时的扭曲度建模(
{
\color
{
gray!70
}
灰色
}
),即空标记
$
t
_
0
$
生成的源语言单词在源语言句子中位置的概率。
\vspace
{
0.5em
}
\end{itemize}
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter3/Figures/figure-expression
}
\caption
{{$
\textrm
{
P
}
(
\tau
,
\pi
|t
)
$}
的详细表达式
}
\label
{
fig:3-31
}
\end{figure}
%----------------------------------------------
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
...
...
@@ -1238,12 +1255,13 @@ p_0+p_1 & = & 1 \label{eq:3-56}
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\vspace
{
-2em
}
\subsection
{
IBM 模型4
}
\parinterval
IBM模型3仍然存在问题,比如,它不能很好地处理一个目标语言单词生成多个源语言单词的情况。这个问题在模型1和模型2中也存在。如果一个目标语言单词对应多个源语言单词,往往这些源语言单词构成短语或搭配。但是模型1-3把这些源语言单词看成独立的单元,而实际上它们是一个整体。这就造成了在模型1-3中这些源语言单词可能会``分散''开。为了解决这个问题,模型4对模型3进行了进一步修正。
\parinterval
为了更清楚的阐述,这里引入新的术语
\ \dash
\
{
\small\bfnew
{
概念单元
}}
\index
{
概念单元
}
或
{
\small\bfnew
{
概念
}}
\index
{
概念
}
(Concept)
\index
{
Concept
}
。词对齐可以被看作概念之间的对应。这里的概念是指具有独立语法或语义功能的一组单词。依照Brown等人的表示方法
\cite
{
Peter1993The
}
,可以把概念记为cept.。每个句子都可以被表示成一系列的cept.。这里要注意的是,源语言句子中的cept.数量不一定等于目标句子中的cept.数量。因为有些cept. 可以为空,因此可以把那些空对的单词看作空cept.。比如,在图
\ref
{
fig:3-32
}
的实例中,``了''就对应一个空cept.。
\vspace
{
3em
}
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -1259,14 +1277,12 @@ p_0+p_1 & = & 1 \label{eq:3-56}
\parinterval
另外,可以用
$
\odot
_{
i
}$
表示位置为
$
[
i
]
$
的目标语言单词对应的那些源语言单词位置的平均值,如果这个平均值不是整数则对它向上取整。比如在本例中,目标语句中第4个cept. (``.'')对应在源语言句子中的第5个输出值。可表示为
${
\odot
}_{
4
}
=
5
$
。
\parinterval
利用这些新引进的概念,模型4对模型3的扭曲度进行了修改。主要是把扭曲度分解为两类参数。对于
$
[
i
]
$
对应的源语言单词列表(
$
\tau
_{
[
i
]
}$
)中的第一个单词(
$
\tau
_{
[
i
]
1
}$
),它的扭曲度用如下公式计算:
\begin{equation}
\textrm
{
P
}
(
\pi
_{
[i]1
}
=j|
{
\pi
}_
1
^{
[i]-1
}
,
{
\tau
}_
0
^
l,
{
\varphi
}_
0
^
l,
\mathbf
{
t
}
)=d
_{
1
}
(j-
{
\odot
}_{
i-1
}
|A(t
_{
[i-1]
}
),B(s
_
j))
\label
{
eq:3-70
}
\end{equation}
\noindent
其中,译文的第
$
i
$
个单词生成的第
$
k
$
个源语单词在源语言句子中的位置用变量
$
\pi
_{
ik
}$
表示。而对于列表(
$
\tau
_{
[
i
]
}$
)中的其他的单词(
$
\tau
_{
[
i
]
k
}
,
1
< k
\le
\varphi
[
i
]
$
)的扭曲度计算,进行如下计算
\begin{equation}
\textrm
{
P
}
(
\pi
_{
[i]k
}
=j|
{
\pi
}_{
[i]1
}^{
k-1
}
,
\pi
_
1
^{
[i]-1
}
,
\tau
_
0
^
l,
\varphi
_
0
^
l,
\mathbf
{
t
}
)=d
_{
>1
}
(j-
\pi
_{
[i]k-1
}
|B(s
_
j))
\label
{
eq:3-71
}
...
...
@@ -1296,7 +1312,6 @@ p_0+p_1 & = & 1 \label{eq:3-56}
%----------------------------------------------
\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}
\textrm
{
P
}
(
\pi
_{
[i]1
}
= j |
\pi
_
1
^{
[i]-1
}
,
\tau
_
0
^
l,
\varphi
_
0
^
l,
\mathbf
{
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
}
))
...
...
@@ -1358,7 +1373,7 @@ p_0+p_1 & = & 1 \label{eq:3-56}
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
\vspace
{
-2em
}
\subsubsection
{
词对齐模型
}
\parinterval
IBM模型把翻译问题定义为对译文和词对齐同时进行生成的问题,模型翻译质量的好坏与词对齐有着非常紧密的联系。IBM模型1假设对齐概率仅依赖于译文长度,即对齐概率服从均匀分布;IBM模型2假设对齐概率与源语言、目标语言的句子长度以及源语言位置和目标语言位置相关。IBM模型2已经覆盖到了大部分的词对齐问题,但是该模型只考虑到了词语的绝对位置,并未考虑到相邻词语间的关系。图
\ref
{
fig:3-35
}
展示了一个简单的实例,可以看到的是,汉语的每个词都被分配给了英语句子中的每一个单词,但是词语并不是任意分布在各个位置上的,而是倾向于生成簇。也就是说,如果源语言的两个词位置越近,它们的目标词在目标语言句子的位置也越近。
...
...
@@ -1373,7 +1388,6 @@ p_0+p_1 & = & 1 \label{eq:3-56}
%----------------------------------------------
\parinterval
因此,基于HMM的词对齐模型抛弃了IBM模型1-2的绝对位置假设,将一阶隐马尔可夫模型用于单词对齐问题。HMM词对齐模型认为,词语与词语之间并不是毫无联系的,对齐概率应该取决于对齐位置的差异而不是本身词语所在的位置。具体来说,位置
$
j
$
的对齐概率
$
a
_
j
$
与前一个位置
$
j
-
1
$
的对齐位置
$
a
_{
j
-
1
}$
和译文长度
$
l
$
有关,形式化的表述为:
\begin{eqnarray}
\textrm
{
P
}
(a
_{
j
}
|a
_{
1
}^{
j-1
}
,s
_{
1
}^{
j-1
}
,m,
\mathbf
{
t
}
)=
\textrm
{
P
}
(a
_{
j
}
|a
_{
j-1
}
,l)
\label
{
eq:3-59
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论