- 论文原文:https://nlp.stanford.edu/pubs/semparseEMNLP13.pdf
1. 简介
经典的语义解析,baseline方法
语义解析(Semantic Parsing)KB-QA的思路是通过对自然语言进行语义上的分析,转化为一种在知识库中的语义表示,进而通过知识库中的知识,进行推理(Inference)查询(Query),得出最终答案,这种语义表示即逻辑形式(Logic Form)
逻辑形式
Lambda Dependency-Based Compositional Semantics ( Lambda-DCS)是一种经典的逻辑语言,它用于处理逻辑形式(在实际操作中,逻辑形式会转化SPARQL query,可以在Virtuoso engine上对Freebase进行查询)
用\(z\)表示一个逻辑形式,用\(K\)表示知识库,\(e\)表示实体,\(p\)表示实体关系(谓词或属性)。逻辑形式分为一元形式(unary)和二元形式(binary)。对于一个一元实体\(e\),我们可以查询出对应知识库中的实体,给定一个二元关系\(p\),可以查到它在知识库中所有与该实体关系\(p\)相关的三元组中的实体对。并且我们可以像数据库语言一样,进行连接Join,并求交集Intersection和聚合Aggregate(如计数,求最大值等等)操作。具体来说,逻辑形式有以下形式和操作
有了上面的定义,就可将一个自然语言问题表示为一个可以在知识库中进行查询的逻辑形式,比如问句
"Number of dramas starring Tom Cruise"
它对应的逻辑形式是
\(count(Genre.Drama\cap Performance.Actor.TomCruise)\)
当自然语言问题转化为逻辑形式后,通过相应的逻辑语言(转化为SPARQL query)查询知识库就可以得到答案。
2. 语义解析KB-QA的方法框架
语义解析的过程可以看作是自底向上构造语法树的过程,树的根节点,就是该自然语言问题最终的逻辑形式表达。整个流程可以分为两部分
- 词汇映射:即构造底层的语法树节点。将单个自然语言短语或单词映射到知识库实体或知识库实体关系所对应的逻辑形式。我们可以通过构造一个词汇表(Lexicon)来完成这样的映射。
- 构建(Composition):即自底向上对树的节点进行两两合并,最后生成根节点,完成语法树的构建。这一步有很多方法,诸如构造大量手工规则,组合范畴语法(Combinatory Categorical Grammars,CCG),本文采用了最暴力的方法,即对于两个节点都可以执行上面所谈到的连接Join,求交Intersection,聚合Aggregate三种操作,以及本文独创的桥接Bridging操作进行结点合并。显然,这种合并方式复杂程度是指数级的,最终会生成许多棵语法树,我们需要通过对训练数据进行训练,训练一个分类器,对语法树进行筛选。
自然语言转化为逻辑形式的流程如下图所示:
红色部分即逻辑形式,绿色部分where was Obama born为自然语言问题,蓝色部分为词汇映射(Lexicon)和构建(Composition)使用的操作,最后形成的语义解析树的根节点即语义解析结果。
3. 训练分类器
分类器的 任务是计算每一种语义解析结果\(d\)(Derivation)的概率,作者通过discrimminative loglinear model进行modeling,使用Softmax进行概率归一化,公式如下
其中\(x\)代表自然语言问题,\(\phi(x,d_i)\)是一个从语义解析结果\(d_i\)和\(x\)中提取出来的b维特征向量(该特征向量包括了构造该语法树所有操作的对应特征)\(\theta\)是b维的参数向量。
对于训练数据 问题-答案对\((x_i,y_i)\),最大化log-likelihood损失函数,通过AdaGrad算法(一种动态调整学习率的随机梯度下降算法)进行参数更新。目标函数如下:
可以看出特征向量的训练实际上是一种弱监督训练(准确的说是一种远程监督,Distant Supervison)。
AdaGrad算法[https://zhuanlan.zhihu.com/p/61955391]
该算法的思想是独立地适应模型的每个参数:具有较大偏导的参数相应有一个较大的学习率,而具有小偏导的参数则对应一个较小的学习率
具体来说,每个参数的学习率会缩放各参数反比于其历史梯度平方值总和的平方根
算法描述
注意:全局学习率\(\epsilon\)并没有更新,而是每次应用时被缩放
4. 构建词汇表
词汇表即自然语言与知识库实体或知识库实体关系的单点映射,这一操作也被成为对齐(Alignment)。
自然语言实体到知识库实体映射相对简单。比如将“Obama was also born in Honolulu.”中的实体Obama映射为知识库中的实体BarackObama,可以使用一些简单的字符串匹配方式进行映射。
但自然语言短语到相应知识库实体关系的映射较难,如“was also born in”映射到PlaceOfBirth。则可以使用统计,在文档中,如果有较多的实体对(entity1, entity2)作为主语和宾语出现在was born in的两侧,并且,在知识库中,这些实体也同时出现在包含PlaceOfBirth的三元组中,那么我们可以认为"was also born in"这个短语可以和PlaceOfBirth建立映射。
比如(“Barack Obama”,“Honolulu”),(“MichelleObama”,“Chicago”)等实体对在文档中经常作为“was also born in”这个短语的主语和宾语,并且它们也都和实体关系PlaceOfBirth组成三元组出现在知识库中。
本文构建的词汇表
利用ReVerbopen IE system在ClueWeb09(注:该数据集由卡耐基梅隆学校在09年构建,还有一个12年的版本,ClueWeb12)上抽取15millions个三元组构成一个数据集,如(“Obama”, “was also born in”, “August 1961”),可以看出三元组的实体和关系都是自然语言的形式,取出其中的一个三元组子集,对里面的每一个三元组的主语实体和宾语实体通过字符匹配的方式替换为知识库的实体,并使用SUTime对数据进行归一化。如:(“Obama”, “was also born in”, “August 1961”) 经过预处理后转化为 (BarackObama, “was also born in”, 1961-08)。
接着对每一个三元组中的自然语言短语\(r_1\)两边的实体对(entity1, entity2)进行标注,同时需要注意,由于自然语言短语\(r_1\)和知识库实体关系\(r_2\)的对应关系是多对多的,比如“was also born in”可能对应PlaceOfBirth,也可能对应DateOfBrith,我们需要对每一个\(r_1\)进行区分,我们可以通过知识库查询到每一个实体的类型(type),比如1961-08的类型是date而honolulu的类型是place,我们对\(r_1\)两边的实体类型进行查询可以得到主语实体的类型\(t_1\)和宾语实体的类型\(t_2\),因此\(r_1\)可以进一步表示为\(r[t_1,t_2]\),我们对其所在三元组两边的实体进行统计,得到实体对集合\(F(r[t_1,t_2])\)。
同样的,通过对知识库进行统计,对每一个知识库三元组中的实体关系\(r_2\)也统计其两边的实体,可以得到实体对集合\(F(r_2)\),通过比较集合\(F(r[t_1,t_2])\)和集合\(F(r_2)\)类似Jaccard距离(集合交集元素数目比集合并集元素个数)这样的特征来确定是否建立词汇映射,如下图所示
图中绿色字体为\(r_1\),蓝色字体为\(r_2\)。作者定义了词汇映射操作的三种特征(用于训练分类器),对齐特征(Alignment features),文本相似特征(Text similarity features),和词汇化特征(Lexicalized features),具体内容如下表
其中文本相似度特征中的\(s_2\)指\(r_2\)的freebase name。
在实际使用中,我们可以通过词性标注(POS)和命名实体识别(NER)来确定哪些短语和单词需要被词汇映射(Lexicon),从而忽略对一些skipped words进行词汇映射。并且,作者还建立了18种手工规则,对问题词(question words)进行逻辑形式的直接映射,如“where,how many”映射为Type.Location 和 Count。
5. 桥接操作(Bridging)
完成词汇表的构建后,仍然存在一些问题。比如,对于go, have, do 这样的轻动词(light verb),难以直接映射到一个知识库实体关系上。其次,有些知识库实体关系极少出现,不容易通过统计的方式找到映射方式,还有一些词比如actress,实际上是两个知识库实体关系进行组合操作后的结果(\(actor\cap gender.female\))(作者最后提到这个问题有希望通过在知识库上进行随机游走Random walk或者使用马尔科夫逻辑Markov logic解决),因此我们需要找到一个额外的二元关系将当前的逻辑形式连接起来,就是桥接
例:“Which college did Obama go to?”
假设“Obama” 和 “college” 可被词汇映射映射为 BarackObama 和 Type.University, 这里"go to" 却难以找到一个映射,事实上,这里我们需要去寻找一个中间二元关系\(b\)(即Education)使得上面的句子可以被解析为\((Type.University\cap Education.BarackObama)\),如下图所示
具体来说,给定两个类型(tpye)分别是\(t_1\)和\(t_2\)的一元逻辑形式\(z_1\)和\(z_2\),我们需要找到一个二元逻辑形式\(b\),在\(b\)对应的实体对类型满足\((t_1,t_2)\)的条件下生成逻辑形式\((z_1\cap b,z_2)\),这就是桥接,由于这里有类型限制,所以我们可以在知识库中相邻的逻辑关系中暴力搜索符合条件的二元关系\(b\)。
(注:在论文中还提到了另外两种需要进行桥接的场景,但不再详细写)
同样的,作者也为桥接操作定义了相应的特征(为了分类器训练),定义如下表所示
对于构建(composition)的其他三种操作:连接Join,求交集Intersection和聚合Aggregate,作者也定义了相应的特征(为了分类器的训练),如下表
6. 存在问题
- 词汇映射是整个算法有效(work)的基点,然而这里采用的词汇映射(尤其是关系映射)是基于比较简单的统计方式,对数据有较大依赖性。最重要的是,这种方式无法完成自然语言短语到复杂知识库关系组合的映射(如actress 映射为\(actor\cap gender.female\))。
- 在答案获取的过程中,通过远程监督学习训练分类器对语义树进行评分,注意,这里的语义树实际的组合方式是很多的,要训练这样一个强大的语义解析分类器,需要大量的训练数据。但无论是Free917还是WebQuestion,这两个数据集的问题-答案对都比较少。