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 Derivation)。图3.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 → aβ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)
在获取统计分析模型后,就可以使用模型对任意句子进行分析,计算每个句法
分析树的概率,并输出概率最高的树作为句法分析的结果。