阐述自然语言理解的基本流程、相关技术,重点介绍Glue Semantics 和DRT两个理论。设计开发基于Glue Semantics 和DRT的语义计算系统平台,对平台的设计思想、具体实现和关键技术进行详细的介绍,并指出存在的一些问题。
This paper describes the basic process and related technologies of natural language understanding, and it focuses on the Glue Semantics and DRT. The authors designs and develops a semantic computing system based on Glue Semantics and DRT.Then the design ideas, concrete implementation and key technologies, as well as existing problems are introduced in details.
自然语言理解是计算语言学及人工智能的一个重要分支。目前,针对自然语言理解的研究基本还停留在词法分析和句法分析的层面上,对语义层面的探索是很有限的,我国在这方面的研究成果很少。人机交互和人工智能的核心问题都可归结为语义计算的问题,因此语义计算的研究是非常重要的。目前国外在语义计算方面正呈现出快速发展的状态,因此这一问题的研究对于赶超国外先进的科学技术有着重要的意义。
在20世纪,自然语言理解得到了长足的发展。在句法层面上,管辖与约束理论(Government and Binding Theory)[ 1]、词汇功能语法(Lexical Functional Grammar,LFG)[ 2]、广义的短语结构语法(Generalized Phrase Structure Grammar, GPSG)[ 3]、树连接语法(Tree Adjoining Grammar,TAG)[ 4]等语法模型相继被提出。在语义层面上,随着认知科学的发展,学者们相继提出了话语表示理论 (Discourse Representation Theory,DRT)[ 5]、格语法[ 6]等理论,这些理论在其自身的发展过程中开始趋于融合。随后语用分析也开始展开,情景语义学 (Situation Semantics)[ 7]和语用学(Pragmatics)[ 8]成为了研究的热点。
本研究通过设计并实现一个自然语言理解系统,来探索在自然语言理解过程中的几个重要的技术,分别是句法和语义接口以及语义表示的相关技术。Glue Semantics是近年来发展起来的一套理论,它以线性逻辑为基础,实现了句法和语义的接口[ 9]。换句话讲,Glue Semantics就是将线性逻辑运用在语义分析中,它是线性逻辑的一个重要应用。探索Glue Semantics的基本原理和实现方法是此次研究的目标之一。在语义表示方面,DRT是一个重要的理论,它继承并发展了蒙太格语法,摒弃了前人静态分析的方法,将语义表示的过程表现为一个动态的过程[ 5]。因此,开展对DRT的应用研究也是此次研究的一个重要目标。
Glue Semantics 是由Dalrymple等于1993年提出的[ 3],它有三个基本的出发点:
(1)句子是由词语组成的;
(2)句子的词语与句子的语义有千丝万缕的联系;
(3)句子的语义是由词语的语义按一定的规则组合而成。
在Glue Semantics出现以前,句法和语义接口存在着一个严重的问题,那就是认为句法和语义是相互依赖的,语义的推理过程受到了语序的制约,但是,不同语言的语序有很大的差别,例如英语是“SVO”型,爱尔兰语是“VSO”型,这样语义的推理过程就不能够统一,而要根据不同语言的语序特点来制定出推理的规则。Glue Semantics避免了这个缺点,它不受语序的限制。Glue Semantics之所以有这样的优势,原因在于Glue Semantics采用的是线性逻辑。
线性逻辑和古典的数理逻辑有一些重要的差别,主要表现在两个方面:
(1)在古典逻辑中,假设是永远有效的,即假设可以被使用多次;在线性逻辑中假设仅可使用一次。
(2)在古典逻辑中假设可以出现在推理过程中,也可以不出现在推理过程中;在线性逻辑中,所有的假设都要参与到推理过程中。
鉴于上文提到的线性逻辑的特点,很多学者提出线性逻辑的最大特点是“资源敏感”,可以通过一个简单的例子形象地表明资源敏感这个特点:面粉可以做成面包,但是在面粉做成面包之后,那些面粉也就消失了。正是由于线性逻辑有着这样的特点,它在语义推理中可以发挥很好的作用。在自然语言中,每个词都有一定的语义信息,而在推理句子的语义时,每个词的信息应该仅使用一次,这与线性逻辑的推理特点完全一致。因此Glue Semantics可理解为是线性逻辑在自然语言处理当中的一个重要应用。
指明句子中的指代关系一直是计算语言学的一个重要课题。早期的方法只能解决句内的指代关系,但是当代词和所指代的词分属不同的句子时,例如“A man met an attractive woman. He smiled at her.”对于这样的句子,传统的方法显得无能为力。要解决这样的问题,一个基本的出发点就是先分析第一个句子,再分析第二个句子,然后建立指代关系。这就是DRT的基本思想,DRT理论正是针对这样的问题提出的,它最初专注于解决句间的指代关系。
DRT要经过两个步骤:构造出语义表达式,也就是Discourse Representation Structure(DRS);对这些DRS做模型解读[ 5],即由一个新的语句动态地更新已处理的语句表达式。语段的语义存在于两个方面:更新的信息和所输入的真值条件。因此可把它定义为一个映射,这个映射把一个已经建立起来的话语表达式的语境转化为一个新的语境。
DRT理论极大地推动了语义学的发展,将语义生成的过程理解为一个动态变化的过程,这符合人的思维过程。在分析句子的语义时,它考虑到了语境这个重要的因素,因此,这一理论将成为语义学发展中的一个里程碑。
基于自然语言理解技术的发展,笔者设计并开发了一个基于Glue Semantics和DRT理论的自然语言理解平台,该系统深化了对自然语言的处理能力,实现了句法向语义的过渡,完善了对语义的表达。本系统的创新主要有以下三方面:
(1)使用DRT理论中的DRS来表示语义。目前比较通用的做法是采用蒙太格语法来表示语义,但是这一方法存在着一些局限性,主要表现在:在分析句子的语义时并不是动态的;忽略了句间的指代关系。DRT理论摒弃了前人的静态分析的方法[ 5],将语义表示的过程表现为一个动态的过程。
(2)使用Glue Semantics理论来完成句法向语义的过渡。目前,国内学者对这一理论的认识不够,并没有深入地展开对这一问题的应用研究。在此次研究中,笔者用Glue Semantics实现了句法和语义的接口,达到了句法向语义的过渡。
(3)国外在研究Glue Semantics时,通常是面向词汇功能语法(Lexical Functional Grammar,LFG)[ 10, 11, 12, 13]、中心语驱动短语结构语法(Head-driven Phrase Structure Grammar,HPSG)[ 14]、树连接语法(Tree Adjoining Grammar,TAG)[ 15]等,目前尚没有将其应用于依存语法(Dependency Grammar,DG)。本系统采用了DG作为句法模型,用Glue Semantics实现了句法向语义的过渡。
本系统划分为4个模块,分别是词性标注模块、句法分析模块、句法和语义接口模块和语义表示模块。系统的整体架构如图1所示:
对文本进行词性标注,是其后的句法分析及构建DRT-Glue 语义结构的必要准备。词性标注完成后,句中各词的词类得以明确,这样就可根据制定好的Glue 词典分析出各词的语义表达式和Glue表达式。语义表达式用于表达出该词语的语义,通常是以一阶谓词的形式来表示,形如“(\Q.(([x],[
在得到标注文本后,要对其进行句法分析,以得到句子各成分间的关系。本文采用基于统计的句法分析,因此要构建相应的语料库,这里的句法分析和传统的句法分析略有不同,要根据现有的语法理论,如LFG、DG等语法模型来分析出句子成分间的关系,因此在构建语料库时,要体现出句子各成分间的依存关系、功能关系等要素,这些给构建大规模的语料库带来了一定的难度。借助构建的语料库,采用了开源的MaltParser[ 16],MaltParser是一套较成熟的句法分析系统,由瑞典韦克舍大学的Johan Hall、Jens Nilsson等人设计开发,具体内容请参见:http://maltparser.org/。句法分析完成后,句中各词语间的依存关系和功能关系得以明确,可以进入到由句法向语义转换的模块。
该模块是本系统的核心模块,实现了由句法向语义的过渡,加强了对自然语言的处理能力。这一模块的实现要借助一个规模庞大的Glue 词典。Glue 词典中描述了不同词类的语义表达式、Glue表达式和词间关系,词性标注的工作完成了词向词类的映射,Glue 词典完成了词类向Glue表达式的映射,这样单词的语义表达式和Glue表达式就得以确定。在句法分析的过程中,依存关系和功能关系得以体现,它们将映射到Glue 词典中的词间关系这个部分,以单词的语义表达式和Glue表达式为基础,借助词间关系,利用逻辑的推演算法,可以得到这个句子的语义,从而实现了句法和语义的接口。
该模块也是本系统的重点模块,它将接口模块中的DRT-Glue 语义结构转化为逻辑表达式,从而初步实现了单句语义的表达。转化过程中所采用的算法是逻辑的演算方法。为了进一步分析出语义的信息,可将逻辑表达式转化为DRS。在得到DRS后,就完成了语义的表达。
词性标注模块实现了词向词类的映射,为词类向Glue表达式的映射打下了基础。因此词性标注模块是接口模块的一个预处理过程。但是,本研究的重点是探讨句法和语义接口以及语义表示的相关技术,词法分析不作为此次研究的重点,因此这里仅使用了一个基于词典的标注技术。词典的具体形式如下:
[('^(David|Mary|John|Jim)$','NNP'),
('^(sees|walks|eats|chases|believes|gives)$', 'VB'),
('^(go|order|vanish|find|approach|see)$', 'VB'),
('^(is)$', 'VBZ'),
('^(fast)$', 'RB'),
('^(walked|ran)$', 'VBD'),
('^(a)$', 'ex_quant'),
('^(in)$', 'IN'),
('^(the)$', 'def_art'),
('^(no)$', 'no_quant'),
('^(every)$','univ_quant'),
('^(sandwich|man|dog|)$', 'NN'),
('^(big|gray|former|white)$', 'JJ'),
('^(he|him|himself)$', 'PRP'),
('^(and)$', 'cc_clause'),]
以“David sees Mary”为例,词性标注的结果如下:[('David', 'NNP'), ('sees', 'VB'),('Mary', 'NNP')]。
这样‘David’的词类被映射为NNP,‘sees’的词类被映射为VB,‘Mary’的词类被映射为NNP,以此为线索去Glue词典中匹配相应的词类,得出相应的Glue表达式,为构建语义的表达做准备。
该模块的目的是分析出句子中各成分间的关系,本系统所需要的关系有词语间的依存关系及功能关系。本文采用基于统计的分析方法,利用大规模的语料库和统计模型来得出分析的结果,由于句法分析的目的是得出词语间的依存关系和功能关系,因此在语料库的设计上要充分体现出这些信息,这给语料库的构建带来了一定的难度。本系统所采用的语料库的具体形式如下:
在上述语料库中,第2列描述了词性的信息,第3列描述了依存的信息,第4列描述了功能的信息。以这样的语料库为基础,利用较成熟的统计学模型,可以得出语句的依存结构及功能机构。本系统采用MaltParser。
以“David sees Mary”为例,句法分析的结果如下:
[{'address':0, 'deps':[2], 'rel':'TOP', 'tag':'TOP', 'word':None},
{'address':1,
'deps':[],
'head':2,
'rel':'SUBJ',
'tag':'NNP',
'word':'David'},
{'address':2,
'deps':[1, 3],
'head':0,
'rel':'ROOT',
'tag':'VB',
'word':'sees'},
{'address':3,
'deps':[],
'head':2,
'rel':'OBJ',
'tag':'NNP',
'word':'Mary'}]
address是对每一个词的标号,deps及head部分都描述了依存的信息,由句法分析的结果可看出‘David’和‘Mary’都是依存于‘sees’,‘sees’是这句话的‘ROOT’节点,对体现出句子的内容及语义起到了最关键的作用。rel反映了功能的信息,‘David’充当了这句话的主语,‘Mary’是宾语,而‘sees’则充当了谓词。tag 是标注的词性,在得到这样的分析结果后,由于已标注出各个单词的rel信息,因此可轻松地将其转化为LFG中的功能结构,具体如下:
f:[pred 'sees'
obj h:[pred 'Mary']
subj g:[pred 'David']]
在该模块中,要将句法分析的结果表示为DRT-Glue 语义结构,实现句法和语义的接口,初步完成了句法向语义的过渡。在句法和语义接口的研究中,Glue Semantics 受到了广泛的关注,也取得了长足的发展,本系统采用了Glue Semantics 的技术方法,来完成句法向语义的过渡。要完成这一工作,首先要构建一个Glue 词典,形式如下:
#Quantifiers
def_art:(\P Q.([x],[((([y],[])+Q(y)) <-> (x = y)), P(x)]), ((super.v-o super.r)-o ((super.f-o super.var)-o super.var)))
#Nouns
NN: (\Q.(([x],[
NNS(NN)
#Verbs
VB:(\x.([],[
VB:(\x y.([],[
#Modifiers
nmod:(\x.([],[
#Prepositions
IN(vmod):[]
#Conjunctions
cc_clause:(\P Q.(P+ Q), (a-o (b-o f)))
上述的Glue 词典分别描述了冠词、名词、动词、修饰语、介词和连词的语义表达式及Glue表达式,语义表达式用于语义的描述,Glue表达式用于其后的逻辑推理,以得出句子的逻辑表达式。Glue 词典的规模对系统的实用性很重要,因此构建一个庞大、准确的Glue 词典是本系统的核心部分。
利用构建的Glue 词典,可将句法分析的结果转化为DRT-Glue 语义结构。以“David sees Mary”为例,这句话的DRT-Glue 语义结构如下所示:
[\x y.([],[sees(x,y)]):(f-o (h-o g)):{1}, v2:fv:{2}, v3:f:{3}, \P Q.(([x],[]) + (P(x) + Q(x))):(fr[2]-o (F2[3]-o F2)):{4}, \x.([],[David(x)]):(fv-o fr):{5}, v6:hv:{6}, v7:h:{7}, \P Q.(([x],[]) + (P(x) + Q(x))):(hr[6]-o (H4[7]-o H4)):{8}, \x.([],[Mary(x)]):(hv-o hr):{9}]
在这个例子中,DRT-Glue语义结构有9个部分,每个部分的第一项是语义表达式,表示出单词的语义;第二项是Glue表达式,以此为依据可将DRT-Glue语义结构转化为整个句子的逻辑表达式,由此实现了接口;第三项是一个标号。
该模块利用逻辑学的演算规则,将得出的DRT-Glue语义结构转化为句子的逻辑表达式,这样就部分地实现了语义的表示。为了更直观地表达出句子的语义,系统将逻辑表达式转化为DRS。以“David sees Mary”为例,此模块的结果如下:sees(David,Mary)。
将上述的逻辑表达式转化为DRS,如图2所示:
至此系统就完成了对语义的表示工作。
以“John gives David the dog”为例,来测试系统各个模块。
(1)词性标注的结果如下所示:
[('John', 'NNP'), ('gives', 'VB'),('David','NNP'), ('the',' def_art'), ('dog','NN')]。
(2)句法分析的结果如下:
[{'address':0, 'deps':[2], 'rel':'TOP', 'tag':'TOP', 'word':None},
{'address':1,
'deps':[],
'head':2,
'rel':'SUBJ',
'tag':'NNP',
'word':'John'},
{'address':2,
'deps':[1, 3, 5],
'head':0,
'rel':'ROOT',
'tag':'VB',
'word':'gives'},
{'address':3,
'deps':[],
'head':2,
'rel':'OBJ',
'tag':'NNP',
'word':'David'},
{'address':4,
'deps':[],
'head':5,
'rel':'SPEC',
'tag':'def_art',
'word':'the'},
{'address':5,
'deps':[4],
'head':2,
'rel':'THEME',
'tag':'NN',
'word':'dog'}]
(3)句法和语义接口模块的分析结果如下:
[\x y z.([],[gives(x,y,z)]):(f-o (h-o (j-o g))):{1}, v2:fv:{2}, v3:f:{3}, \P Q.(([x],[]) + (P(x) + Q(x))):(fr[2]-o (F2[3]-o F2)):{4}, \x.([],[John(x)]):(fv-o fr):{5}, v6:hv:{6}, v7:h:{7}, \P Q.(([x],[]) + (P(x) + Q(x))):(hr[6]-o (H4[7]-o H4)):{8}, \x.([],[David(x)]):(hv-o hr):{9}, \x.([],[dog(x)]):(jv-o jr):{10}, v11:jv:{11}, v12:j:{12}, \P Q.([x],[((([y],[]) + Q(y)) <-> (x = y)), P(x)]):(jr[11]-o (J7[12]-o J7)):{13}]
(4)在实现了句法和语义接口模块后,进入语义表示模块,至此就得到了系统的输出。该模块的结果如图3所示:
目前在语义计算方面,蒙太格语法得到了广泛的应用,但蒙太格语法是一种静态分析的方法,没有考虑语境的信息,因此很难指明句间的指代关系[ 17]。DRT继承并发展了蒙太格语法,考虑了上下文的信息。以“Every dog chases a boy. He runs”为例,系统的分析结果如下:([z12,z15],[boy(z12), (([x],[dog(x)])→([],[chases(x,z12)])), (z15 = z12), runs(z15)])。“z15 = z12”表明“He”指代 “a boy”。由此可见,这一技术具有较好的效果。
本系统实现了由句法向语义的转换,对自然语言处理向更深层次去扩展,具有一定的创新性。在语义的表示方面,借鉴DRT理论的基本内容,将语义表达式进一步转化为DRS,更深入地表达了语义的信息。
但是在实验中也遇到了很大的困难,主要体现在以下三个方面:
(1)用于句法分析的语料库的建设。由语料库的形式可看出建设的难度很大,目前尚没有形式一致的语料库可借鉴,其规模又严重制约着系统的性能,因此构建一个规模庞大的训练语料是一项重要的工作。
(2)构建Glue词典。Glue词典是实现接口的重要工具,直接关系着句法向语义的转换,但构建Glue词典需要有丰富的语言学知识和逻辑学知识,其规模应尽可能涵盖语言学的基本现象,因此也具有一定的难度。
(3)系统在长句的处理上也面临着一定的困难。长句的依存关系较复杂,由此得出的DRT-Glue 语义结构很长,推理的难度很大,推理的时间也很长。长句在语义表示上也面临着一些困难,谓词阶数会相应地提高。
今后笔者将会逐步克服以上的困难,进一步完善系统的性能,使之向更实用的方向迈进。
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|
[8] |
|
[9] |
|
[10] |
|
[11] |
|
[12] |
|
[13] |
|
[14] |
|
[15] |
|
[16] |
|
[17] |
|