98 Chapter 3. 词法分析和语法分析基础 肖桐 朱靖波
3.4 句法分析
前面已经介绍了什么叫做“词”以及如何对分词问题进行统计建模。同时,也
介绍了如何对多个单词构成的命名实体进行识别。无论是分词还是命名实体识别都
是句子浅层信息的一种表示。对于一个自然语言句子来说,它更深层次的结构信息
可以通过更完整的句法结构来描述,而句法信息也是机器翻译和自然语言处理其他
任务中常用的知识之一。
3.4.1 句法树
句法Syntax)是句子个组部分们之组合式。一般说,
句法和语言是相关的,比如,英文是主谓宾结构,而日语是主宾谓结构,因此不同的
语言也会有不同的句法描述方式。自然语言处理领域最常用的两种句法分析形式是
短语结构句法分Phrase Structure Parsing)和依存句法分析Dependency Parsing)。
3.15展示了这两种的句法表示形式的实例。其中,左侧是短语结构树,它描述的是
短语的结构功能,比如“吃”是动词(记为 VV“鱼”是名词(记为 NN“吃/鱼”
组成动词短语,这个短语再与“喜欢”这一动词组成新的动词短语。短语结构树的
每个子树都是一个句法功能单元,比如,子树 VP(VV() NN()) 就表示了“吃/鱼”
这个动词短语的结构,其中子树根节点 VP 是句法功能标记。短语结构树利用嵌套的
方式描述了语言学的功能,短语结构树中,每个词都有词性 (或词类)不同的词或者
短语可以组成名动结构、动宾结构等语言学短语结构,短语结构句法分析一般也被
称为成分句法分析Constituency Parsing)或完全句法分析Full Parsing)。
3.15右侧种句构,作依树。存句
句子单词存关系。如,个例解,“猫”依“喜
欢”“吃”依赖“喜欢”“鱼”依赖“吃”
IP 句子
VP
VP
NN名词
VV动词
VV动词
喜欢
NP
NN名词
喜欢
主谓
连动
谓宾
3.15 短语结构树 () 和依存树 ()
短语结构树和依存句法树的结构和功能有很大不同。短语结构树的叶子节点是
单词,中间节点是词性或者短语句法标记。在短语结构句法分析中,通常把单词称
终结符Terminal把词性称为预终结符Pre-terminal而把其他句法标记称为
非终结符Non-terminal)。依存句法树没有预终结符和非终结符,所有的节点都
3.4 句法分析 99
句子里的单词,通过不同节点间的连线表示句子中各个单词之间的依存关系。每个
依存关系实际上都是有方向的,头和尾分别指向“接受”和“发出”依存关系的词。
依存关系也可以进行分类,例如,图3.15的对每个依存关系的类型都有一个标记,
这也被称作是有标记的依存句法分析。如果不生成这些标记,这样的句法分析被称
作无标记的依存句法分析。
虽然短语结构树和依存树的句法表现形式有很大不同,但是它们在某些条件下
能相互转化。比如,可以使用启发性规则将短语结构树自动转化为依存树。从应用
的角度,依存句法分析由于形式更加简单,而且直接建模词语之间的依赖,因此在
自然语言处理领域中受到很多关注。在机器翻译中,无论是哪种句法树结构,都已
经被证明会对机器翻译系统产生帮助。特别是短语结构树,在机器翻译中的应用历
史更长,研究更为深入,因此本节将会以短语结构句法分析为例介绍句法分析的相
关概念。
而句法分析到底是什么呢?简单的理解,句法分析就是在小学语文课程中学习
的句子成分的分析,以及对句子中各个成分内部、外部关系的判断。更规范一些的
定义,可以参照百度百科和维基百科关于句法分析的解释。
定义 3.4.1 句法分析
句法分析就是指对句子中的词语语法功能进行分析。
—百度百科
在自然语言或者计算机语言中,句法分析是利用形式化的文法规则对一个符
号串进行分析的过程。
—维基百科(译文)
上面的定义中,句法分析包含三个重要的概念:
形式化的文法:描述语言结构的定义,由文法规则组成。
符号串:在本节中,符号串就是指词串,由前面提到的分词系统生成。
分析:使用形式文法对符号串进行分析的具体方法,在这里指实现分析的计算
机算法。
以上三点是实现一个句法分析器的要素,本节的后半部分会对相关的概念和技
术方法进行介绍。
3.4.2 上下文无关文法
句法树是对句子的一种抽象,这种树形结构表达了一种对句子结构的归纳过程,
比如,从树的叶子开始,把每一个树节点看作一次抽象,最终形成一个根节点。那这
个过程如何用计算机来实现呢?这就需要使用到形式文法。
形式文法是分析自然语言的一种重要工具。根据乔姆斯基的定义
[8]
形式文法分
100 Chapter 3. 词法分析和语法分析基础 肖桐 朱靖波
为四种类型:无限制文法(0 型文法)、上下文有关文法1 型文法)、上下文无关文
2 型文法)和正规文法3 型文法)不同类型的文法有不同的应用,比如,正规
文法可以用来描述有限状态自动机,因此也会被使用在语言模型等系统中。对于短
语结构句法分析问题,常用的是上下文无关文法Context-free Grammar
10
。上下文
无关文法的具体形式如下:
定义 3.4.2 上下文无关文法
一个上下文无关文法可以被视为一个系统
G
=
< N,Σ,R,S >
,其中
N 为一个非终结符集合;
Σ 为一个终结符集合;
R 为一个规则(产生式)集合,每条规则 r R 的形式为 X Y
1
Y
2
...Y
n
X N , Y
i
N Σ
S 为一个起始符号集合且 S N
举例说明,假设有上下文无关文法 G =< N,Σ, R,S >可以用它描述一个简单
汉语句法结构。其中非终结符集合为不同的汉语句法标记
N = {NN,VV,NP,VP,IP}
这里,NN 代表名词,VV 代表动词,NP 代表名词短语,VP 代表动词短语,IP 代表
单句。进一步,把终结符集合定义为
Σ = {, 喜欢, , }
再定义起始符集合为
S = {IP}
最后,文法的规则集定义图3.16所示(其中 r
i
为规则的编号)这个文法蕴含了
不同“层次”的句法信息。比如,规则 r
1
r
2
r
3
r
4
表达了词性对单词的抽象;
r
6
r
7
r
8
是表达了短语结构的抽象,其中,规则 r
8
描述了汉语中名词短语 (
)+ 动词短语 (谓语) 的结构。在实际应用中, r
8
这样的规则可以覆盖很大的片段
(试想一下一个包含 50 个词的主谓结构的句子,可以使用 r
8
进行描述)
上下文无关文法的规则是一种产生式规则Production Rule形如 α β它表
示把规则左端的非终结符 α 换为规则右端的符号序列 β通常,α 被称作规则的
左部Left-hand Sideβ 被称作规则的右部Right-hand Side使用右部 β 替换左
10
在上下文无关文法中,非终结符可以根据规则被终结符自由替换,而无需考虑非终结符所处的上
下文,因此这种文法被命名为“上下文无关文法”
3.4 句法分析 101
r
1
: NN
r
2
: VV 喜欢
r
3
: VV
r
4
: NN
r
5
: NP NN
r
6
: VP VV NN
r
7
: VP VV VP
r
8
: IP NP VP
r
1
: NN
r
2
: VV 喜欢
r
3
: VV
r
4
: NN
r
5
: NP NN
r
6
: VP VV NN
r
7
: VP VV VP
r
8
: IP NP VP
r
1
,r
2
,r
3
,r
4
为生成单词词性的规则
r
5
为单变量规则,它将词性 NN 进一步抽象为名词短语 NP
r
6
,r
7
,r
8
为句法结构规则,比如 r
8
表示了主 (NP)+ (VP) 结构
3.16 一个示例文法的规则集
α 的过程也被称作规则的使用,而这个过程的逆过程称为规约。规则的使用可以
如下定义:
定义 3.4.3 上下文无关文法规则的使用
一个符号序列 u 可以通过使用规则 r 替换其中的某个非终结符,并得到符号
序列 v,于是 v 是在 u 上使用 r 的结果,记为 u
r
v
u
r
v
VVVV
NN
u :
VVVV
r :
v:
NN
给定起始非终结符,可以不断地使用规则,最终生成一个终结符串,这个过程
也被称为推导Derivation)。形式化的定义为:
定义 3.4.4 推导
给定一个 G =< N,Σ,R,S >对于一个字符序列 s
0
,s
1
,...,s
n
和规
序列 r
1
,r
2
,...,r
n
,满足
s
0
r
1
s
1
r
2
s
2
r
3
...
r
n
s
n
i [0,n],s
i
(N Σ)
C s
i
为合法的字符串
j [1,n],r
j
R C r
j
G 的规则
s
0
S C s
0
为起始非终结符
s
n
Σ
C s
n
为终结符序列
s
0
r
1
s
1
r
2
s
2
r
3
...
r
n
s
n
为一个推导
比如,使用前面的示例文法,可以对“猫/喜欢//鱼”进行分析,并形成句法分
析树(图3.17。从起始非终结符 IP 开始,使用唯一拥有 IP 作为左部的规则 r
8
推导
102 Chapter 3. 词法分析和语法分析基础 肖桐 朱靖波
NP VP之后依次使用规则 r
5
r
1
r
7
r
2
r
6
r
3
r
4
得到了完整的句法树。
通常,可以把推导简记为 d = r
1
r
2
... r
n
,其中 表示规则的组合。显然,d
也对应了树形结构,也就是句法分析结果。从这个角度看,推导就是描述句法分析树
的一种方式。此外,规则的推导也把规则的使用过程与生成的字符串对应起来。一
个推导所生成的字符串,也被称作文法所产生的一个句子Sentence)。而一个文法
所能生成的所有句子的集合是这个文法所对应的
语言
Language
)。
IP
r
8
NP VP
r
5
NN VP
r
1
VP
r
7
VV VP
r
2
猫喜欢 VP
r
6
猫喜欢 VV NN
r
3
猫喜欢吃 NN
r
4
猫喜欢吃鱼
r
1
: NN
r
2
: VV 喜欢
r
3
: VV
r
4
: NN
r
5
: NP NN
r
6
: VP VV NN
r
7
: VP VV VP
r
8
: IP NP VP
IP
VP
VP
NN
VV
VV
喜欢
NP
NN
3.17 上下文无关文法推导实例
但是,句子和规则的推导并不是一一对应的。同一个句子,往往有很多推导的
方式,这种现象被称为歧义Ambiguity)。甚至同一棵句法树,也可以对应不同的
推导,图3.18 给出同一棵句法树所对应的两种不同的规则推导。
IP
VP
VP
NN
VV
VV
喜欢
NP
NN
推导 1
IP
r
8
NP VP
r
5
NN VP
r
1
VP
r
7
VV VP
r
2
猫喜欢 VP
r
6
猫喜欢 VV NN
r
3
猫喜欢吃 NN
r
4
猫喜欢吃鱼
推导 2
IP
r
8
NP VP
r
7
NP VV VP
r
2
NP 喜欢 VP
r
6
NP 喜欢 VV NN
r
4
NP 喜欢 VV
r
5
NN 喜欢 VV
r
3
NN 喜欢吃鱼
r
1
猫喜欢吃鱼
3.18 同一棵句法树对应的不同规则推导
显然,规则顺序的不同会导致句法树的推导这一确定的过程变得不确定,因此,
需要进行消歧Disambiguation这里,可以使用启发式方法:要求规则使用都服从
最左优先原则,这样得到的推导被称为最左优先推导Left-most Derivation3.18
3.4 句法分析 103
的推导 1 就是符合最左优先原则的推导。
这样,对于一个上下文无关文法,每一棵句法树都有唯一的最左推导与之对应。
于是,句法分析可以被描述为:对于一个句子找到能够生成它的最佳推导,这个推
导所对应的句法树就是这个句子的句法分析结果。
不过问题又回来了,怎样才能知道什么样的推导或者句法树是“最佳”的呢?
3.19所示,对于语言学专家,他们可以很确定地分辨出哪些句法树是正确的,哪些
句法树是错误。甚至普通人也可以通过一些课本中学到的知识产生一些模糊的判断。
而计算机如何进行判别呢?沿着前面介绍的统计建模的思想,计算机可以得出不同
句法树出现的概率,进而选择概率最高的句法树作为输出,而这正是统计句法分析
所做的事情。
IP
NP
NN
VP
VV
VP
VV
喜欢
NN
IP
VP
VP
NN
VV
VV
喜欢
NP
NN
IP
VP
NP
NN
VP
VV
VV
喜欢
NP
NN
语言学家: 不对 不对
我们: 似乎对了 比较肯定 不太可能
分析器: P = 0.2 P = 0.6 P = 0.1
3.19 如何选择最佳的句法分析结果 - 专家、普通人和句法分析器的视角
在统计句法分析中,需要对每个推导进行统计建模,于是定义一个模型 P (·)
于任意的推导 d都可以用 P (d) 计算出推导 d 的概率。这样,给定一个输入句子,
们可以对所有可能的推导用 P ( d ) 计算其概率值,并选择概率最大的结果作为句法分
析的结果输出(图3.20
猫喜欢吃鱼
IP
NP
NN
VP
VV
VP
VV
喜欢
NN
IP
VP
VP
NN
VV
VV
喜欢
NP
NN
IP
VP
NP
NN
VP
VV
VV
喜欢
NP
NN
...
d
1
d
2
d
3
P ( ) = 0.0123 P ( ) = 0.4031 P ( ) = 0.0056
3.20 不同推导(句法树)对应的概率值
104 Chapter 3. 词法分析和语法分析基础 肖桐 朱靖波
3.4.3 规则和推导的概率
对句法树进行概率化,首先要对使用的规则进行概率化。为了达到这个目的,
以使用概率上下文无关文法Probabilistic Context-free Grammar它是上下文无关文
法的一种扩展。
定义 3.4.5 概率上下文无关文法
一个概率上下文无关文法可以被视为一个系统 G =< N,Σ,R,S >,其中
N 为一个非终结符集合;
Σ 为一个终结符集合;
R 为一个规则(产生式)集合,每条规则 r R 的形式为 p : X Y
1
Y
2
...Y
n
其中 X N , Y
i
N Σ每个 r 都对应一个概率 p表示其生成的可能性;
S 为一个起始符号集合且 S N
概率上下文无关文法与传统上下文无关文法的区别在于,每条规则都会有一个
概率,描述规则生成的可能性。具体来说,规则 P (α β) 的概率可以被定义为:
P (α β) = P (β|α) (3.13)
即,在给定规则左部的情况下生成规则右部的可能性。进一步,在上下文无关文法
中,每条规则之间的使用都是相互独立的
11
因此可以把 P (d) 分解为规则概率的乘
积:
P (d) = P (r
1
·r
2
·... ·r
n
)
= P (r
1
) ·P (r
2
)···P (r
n
) (3.14)
这个模型可以很好的解释词串的生成过程。比如,对于规则集
r
3
: VV
r
4
: NN
r
6
: VP VV NN
可以得到 d
1
= r
3
·r
4
·r
6
的概率为
P (d
1
) = P (r
3
) ·P (r
4
) ·P (r
6
)
= P (VV ) ·P (NN ) ·P (VP VV NN) (3.15)
11
如果是上下文有关文法,规则会形如 aαb b,这时 α β 的过程会依赖上下文 a b
3.4 句法分析 105
这也对应了词串“吃/鱼”的生成过程。首先,从起始非终结符 VP 开始,使用
规则 r
6
生成两个非终结符 VV NN;进一步,分别使用规则 r
3
r
4
将“VV”和
NN”进一步推导,生成单词“吃”和“鱼”。整个过程的概率等于三条规则概率的
乘积。
新的问题又来了,如何得到规则的概率呢?这里仍然可以从数据中学习文法规
则的概率。假设有人工标注的数据,它包含很多人工标注句法树的句法,称之为树库
Treebank)。然后,对于规则 r : α β 可以使用基于频次的方法:
P (r) =
规则 r 在树库中出现的次数
α在树库中出现的次数
(3.16)
IP
VP
VP
NN
骨头
VV
VV
喜欢
NP
NN
IP
IP
NP
NP
NN
句子
ADJP
JJ
QP
M
CD
VP
VV
VP
VV
数据:树库
P (VP VV NN)
=
VP VV NN 同时出现的次数 =1
VP 出现的次数=4
=
1
4
P (NP NN)
=
NP NN 同时出现的次数 =2
NP 出现的次数=3
=
2
3
P (IP NP NP)
=
IP NP NP 同时出现的次数 =0
IP 出现的次数=3
=
0
3
3.21 上下文无关文法规则概率估计
3.21展示了通过这种方法计算规则概率的过程。与词法分析类似,可以统计树
库中规则左部和右部同时出现的次数,除以规则左部出现的全部次数,所得的结果
就是所求规则的概率。这种方法也是典型的相对频次估计。但是如果规则左部和右
部同时出现的次数为 0 时是否代表这个规则概率 0 呢?遇到这种情况,可以使
平滑方法对概率进行平滑处理,具体思路可参考第二章的相关内容。
IP
NP
NN
例子
M
VP
VV
IP
VP
AS
VV
看到
NP
PN
...
学习用数据
P (·)
统计分析模型
统计学习
预测
统计分析模型
对任意句子进行分析
3.22 统计句法分析的流程
3.22展示了基于统计的句法分析的流程。首先,通过树库上的统计,获得各个
106 Chapter 3. 词法分析和语法分析基础 肖桐 朱靖波
规则的概率,这样就得到了一个上下文无关句法分析模型 P ( · ) 对于任意句法分析
结果 d = r
1
r
2
... r
n
,都能通过如下公式计算其概率值:
P (d) =
n
Y
i=1
P (r
i
) (3.17)
在获取统计分析模型后,就可以使用模型对任意句子进行分析,计算每个句法
分析树的概率,并输出概率最高的树作为句法分析的结果。