原文地址:http://blog.sina.com.cn/s/blog_72d083c70100pqz5.html
乔姆斯基在讲课
上下文有关语法和0型语法简介
冯志伟
这篇博文讨论上下文有关语法(context-sensitive grammar)和0型语法(type-0 grammar)。
我们首先讨论上下文有关语法。
上下文有关语法的重写规则P的形式为
φ→ψ,
其中,φ和ψ都是符号串,并且要求|φ|≤|ψ|,也就是ψ的长度不小于φ的长度。
现在有一种形式语言L={anbncn},它是由n个a,n个b和n个c相互毗连而成的符号串,并且要求n≥1。生成这种语言的语法G是:
G = {Vn, Vt, S, P}
Vn = {S, B, C}
Vt = {a, b, c}
S = S
P:
S → aSBC ①
S → aBC ②
CB → BC ③
aB → ab ④
bB → bb ⑤
bC → bc ⑥
cC → cc ⑦
从S开始,用规则① n-1次,得到
S => an-1S(BC)n-1
然后,用规则②一次,得到
S => an(BC)n
规则③可以把(BC)n变换成BnCn。例如,如果n=3,则有
aaaBCBCBC => aaaBBCCBC => aaaBBCBCC => aaaBBBCCC,
这样,便有
S => anBnCn
接着,用规则④一次,得到
S => anbBn-1Cn
然后,用规则⑤n-1次,得到
S => anbnCn
然后,用规则⑥一次,得到
S => anbncCn-1
最后,用规则⑦n-1次,得到
S => anbncn
这就是我们要生成的形式语言。
这个语法的各个重写规则中,右边的符号数总是大于或者等于左边的符号数,满足条件
|φ|≤|ψ|
因此,这个语法是上下文有关语法。
Chomsky指出,上下文有关语法和上下文无关语法之间存在着如下的关系:
第一,每一个上下文无关语法都包含在上下文有关语法之中。
在上下文有关语法的重写规则φ→ψ中,φ和ψ都是符号串,当重写规则左边的符号串蜕化为一个单独的非终极符号A时,就有A→ψ,由于ψ是符号串,因而可用ω代替,即得A→ω,这就是上下文无关语法的重写规则。
第二,存在着不是上下文无关语言的上下文有关语言。例如,Chomsky指出的不能用有限状态语法来生成的语言L3={αα},也不能用上下文无关语法来生成。但是,它却可以用上下文有关语法来生成。生成语言L3的语法如下:
G = {Vn, Vt, S, P}
Vn = {S}
Vt = {a, b}
S = S
P:
S → aS ①
S → bS ②
αS → αα ③
在规则③中,α是集合{a, b}上的任意非空符号串,由于αS的长度不大于αα的长度,并且αS不是单个的非终极符号,而是符号串,所以,这个语法不可能是上下文无关语法,而是上下文有关语法。
例如,形式语言abbabb可以这样来生成:从S开始,用规则①一次,得到S=>aS,用规则②两次,得到S=>abbS,用规则③一次,得到S=>abbabb。
可见,上下文有关语法的生成能力,比有限状态语法和上下文无关语法都强。但是,由于上下文无关语法可以采用Chomsky范式这种有力的手段来实现层次分析,所以,在自然语言的计算机处理中,人们还是乐于采用上下文无关语法。
最后,我们来讨论0型语法(type-0 grammar)。
0型语法的重写规则是φ→ψ,除了要求φ≠ψ之外,没有任何别的限制。Chomsky证明了,每一个0型语言都是符号串的“递归可枚举集”(recursively enumerable set);并且证明,任何一个上下文有关语言同时又是0型语言,而且还存在着不是上下文有关语言的0型语言。因此,上下文有关语言应包含于0型语言之中,它是0型语言的子集合。
不过,因为0型语法的重写规则几乎没有什么限制,用于描写自然语言颇为困难,它的生成能力太强,会生成难以计数的不合格的句子。所以,在Chomsky的四种类型的语法中,最适合于描述自然语言的还是上下文无关语法。这种语法,我国自然语言处理的学者习惯于把它叫做短语结构语法。
Chomsky的形式语言理论,对于计算机科学发生了重大的影响。Chomsky把他的四种类型的语法分别与图灵机、线性有界自动机、后进先出自动机和有限自动机等四种类型的自动机(自动机是用来识别语言的抽象机器)联系起来,并且证明了语法的生成能力和语言自动机的识别能力的等价性的四个重要结果:
①若一语言能被图灵机识别,则它就能用0型语法生成,反之亦然。
②若一语言能被线性有界自动机识别,则它就能用上下文有关语法生成,反之亦然。
③若一语言能被后进先出自动机识别,则它就能用上下文无关语法生成,反之亦然。
④若一语言能被有限自动机识别,则它就能用有限状态语法生成,反之亦然。
Chomsky的上述结论,提供了关于语言的生成过程和语言的识别过程的极为精辟的见解。这对于计算机程序语言的设计、算法分析、编译技术、图象识别、人工智能等,都是很有用处的,在自然语言处理中,也发挥了巨大的作用。