2 语义解析式的知识库问答
基于语义解析(semantic parsing)的方法是指先利用语义解析理解自然语言问题的语义,将问题转化为具备相同语义的逻辑形式,再通过查询引擎对生成的逻辑形式进行查询处理,得到最终结果。上述过程分别对应语义解析和查询执行两个主要阶段。这类方法的优点在于如果解析成功,则能完整获得提问者的意图,从而精确地返回查询结果。与此同时,将生成的逻辑形式展示给用户可以让用户检验系统是否理解正确,哪一步解析发生了错误,从而利用用户反馈进一步改善系统的精度。因此这种方法是一种“可解释”的面向知识图谱的自然语言问答方法。语义解析式的问答系统所生成的逻辑形式一般与对应数据库的查询语言相同,例如RDF知识库对应的SPARQL语言;或者是通用的逻辑表达式,例如Lambda表达式;也有系统使用其他的逻辑形式,例如查询图等。
作为基于语义解析的问答系统中最重要的阶段,语义解析(问题理解)一般可以分解为三个任务,分别是短语检测、资源映射和语义组合。
短语检测
短语检测的目标是将问题中蕴含有效信息的短语抽取出来,这些短语被称作表征短语。蕴含有效信息是指能够对应到知识库中的特定元素(实体,概念,关系)。例如,图3中的短语film对应知识库中的概念(类型)dbo:Film,短语directed by对应知识库中的谓词(关系)dbo:director。
短语检测的难点在于冲突处理。例如在句子“The lyrics of April in Paris”中,短语“April in Paris”对应到知识库中的一首歌曲,短语“Paris”对应知识库中的一座城市,二者之中只能有一个被选作表征短语。较常被使用的应对策略是“最长覆盖原则”[16],即优先选择那些更长的短语而抛弃有冲突的较短短语。文献[17]提出了一种将冲突问题转化为带权极大团问题,再利用经典算法解决的思路。
资源映射
给定自然语言问题中的若干表征短语,资源映射的目标是将各短语映射到知识库中的特定元素。根据映射元素的不同种类,资源映射可以被分为实体链接(entity linking)和关系识别两个主要任务(relation extraction)。这两个任务在自然语言处理(NLP)领域被广泛研究。
实体链接的难点在于如何消除歧义。知识库中的实体在自然语言中可能有多种表述形式,自然语言短语也可能指代不同的实体。例如“Obama”既可能是指“Barack_Obama”,也可能指“Michelle_Obama”。如何选择合适的实体需要考虑到上下文环境、字符及语义层次的相似度,以及实体本身的流行度等相关因素。
关系识别的任务目标是将自然语言关系短语映射到知识库中的谓词。解决方案主要包括依赖于预定义的模板进行匹配、根据构建好的短语关系复述词典进行识别[8]、通过神经网络模型进行相似度计算[9]等。关系识别的难点在于隐式关系和复杂关系,例如“Chinese actor”隐藏着国籍的关系,“grandson”对应知识库中一条路径而不是一个简单谓词。文献[5]提出了一种基于规则的桥接(bridging)方法来补充上述隐式谓词的情况。
语义组合
将自然语言问题中的表征短语抽取出来,并将它们与知识库中的实体、谓词等元素对应起来。语义解析的最后一步就是将这些元素组合成对应的逻辑形式。对于简单的问题,一般只包含单一实体和关系,只需要将其相连即可。对于复杂的问题,可能包含多个实体和关系(例如图3所示),则需要考虑各实体和关系之间如何配对组合。
文献[6-7]等工作通过模板匹配的方式来进行逻辑形式的构建。文献[6]预先定义了若干Lambda表达式的模板,先根据模板生成问题N的若干候选Lambda表达式,然后对于每个表达式生成若干复述语句,再通过语言复述模型(Paraphrase Model)来比较这些复述语句和N的相似度,从而选择最合适的表达式。文献[7]针对特定数据库Freebase和评测集WebQuestions设计了三个查询模板,覆盖了其中将近95%的问题。由问题N匹配到查询模板时,获取N中每个实体在知识库中两步内所有符合模板限制的查询图作为候选,再经过特征提取和排序选择其中最好的作为最终查询。总的来说,基于模板的结构化查询生成的方法,被广泛应用到工业界的知识库问答系统中,例如前面提到的被Amazon收购的EVI系统,就是通过人工定义模板的方法[12]来生成面向知识库的结构化查询。
文献[9]提出了一种查询图生成方法STAGG(见图4),基于识别出的实体和关系定义了若干操作和状态。查询图最初由只包含一个实体的状态开始,通过不同操作进行扩展(状态转移)。对于每一种状态由状态评估模型给出置信度,每次操作优先作用于当前置信度最高的状态。当所有候选都扩展完毕后,选取全局得分最高的状态作为最终查询图。
当问题被转化为结构化的逻辑形式时,只需要使用相应的数据查询引擎执行查询就可以了。对于没有直接生成SPARQL查询的RDF问答系统,利用一些简单规则将生成的逻辑形式进一步转化成SPARQL语言,再利用现有的SPARQL查询引擎(Virtuoso[18]、GStore[19] 1等)进行查询,得到最终结果。