正文
有了上面的定义,我们就可以把一个自然语言问题表示为一个可以在知识库中进行查询的逻辑形式,比如对于问句
“Number of dramas starring Tom Cruise?”
它对应的逻辑形式是:
当自然语言问题转化为逻辑形式之后,通过相应的逻辑语言(转化为 SPARQL query)查询知识库就可以得到答案。那么,语义解析要如何把自然语言问题正确地转化为相应的逻辑形式呢?
3. 语义解析 KB-QA 的方法框架
语法分析的过程可以看作是自底向上构造语法树的过程,树的根节点,就是该自然语言问题最终的逻辑形式表达。整个流程可以分为两个步骤:
1. 词汇映射:
即构造底层的语法树节点。将单个自然语言短语或单词映射到知识库实体或知识库实体关系所对应的逻辑形式。我们可以通过构造一个词汇表(Lexicon)来完成这样的映射。
2. 构建(Composition):
即自底向上对树的节点进行两两合并,最后生成根节点,完成语法树的构建。这一步有很多种方法,诸如构造大量手工规则,组合范畴语法(Combinatory Categorical Grammars,CCG)等等,而我们今天要讲的这篇论文,采用了最暴力的方法,即对于两个节点都可以执行上面所谈到的连接 Join,求交 Intersection,聚合 Aggregate 三种操作,以及这篇文章独创的桥接 Bridging 操作(桥接操作的具体方式稍后会提到)进行结点合并。显然,这种合并方式复杂度是指数级的,最终会生成很多棵语法树,我们需要通过对训练数据进行训练,训练一个分类器,对语法树进行筛选。
自然语言转化为逻辑形式的流程如下图所示:
上图红色部分即
逻辑形式
,绿色部分 where was Obama born 为自然语言问题,蓝色部分为
词汇映射(Lexicon)
和
构建(Composition)
使用的操作,最终形成的语义解析树的根节点即语义解析结果。
接下来,我们还剩最后三个待解决的问题,如何训练分类器?如何构建词汇表?什么是桥接操作?
训练分类器
分类器的任务是计算每一种语法分析结果 d(Derivation)的概率,作者通过 discriminative log-linear model 进行 modeling,使用 Softmax 进行概率归一化,公式如下:
其中 x 代表自然语言问题,
是一个从语法分析结果
和 x 中提取出来的 b 维特征向量(该特征向量包含了构造该语法树所有操作的对应特征,每种操作的具体特征之后会提到),