基于知识图谱的问答系统(三): 信息抽取

日期: 2018-12-04 10:15:20 / 人气: 30

通过问句中的主题词可以找到它在知识库中对应的图节点,我们将该图节点相邻几跳(hop)范围内的节点和边抽取出来得到一个知识库的子图,这个子图作者称为主题图(Topic graph),一般来说,这里的跳数一般为一跳或两跳,即与主题词对应的图节点在一条或两条边之内的距离。主题图中的节点,即是候选答案。接下来,我们需要观察问题,对问题进行信息抽取,获取能帮助我们在候选答案中筛选出正确答案的信息。

依存树

语法依存树(Dependency tree),如果你对依存树不了解,可以把它理解成是一种句子成分的形式化描述方式。 
首先我们要提取的第一个信息就是问题词(question word,记作qword), 例如 who, when, what, where, how, which, why, whom, whose,它是问题的一个明显特征 。第二个关键的信息,就是问题焦点(question fucus, 记作qfocus),这个词暗示了答案的类型,比如name/time/place,我们直接将问题词qword相关的那个名词抽取出来作为qfocus,在这个例子中,what name中的name就是qfocus。第三个我们需要的信息,就是这个问题的主题词(word topic,记作qtopic),在这个句子里Justin Bieber就是qtopic,这个词能够帮助我们找到freebase中相关的知识,我们可以通过命名实体识别(Named Entity Recognition,NER)来确定主题词,需要注意的是,一个问题中可能存在多个主题词。最后,第四个我们需要提取的特征,就是问题的中心动词(question verb ,记作qverb),动词能够给我们提供很多和答案相关的信息,比如play,那么答案有可能是某种球类或者乐器。我们可以通过词性标注(Part-of-Speech,POS)确定qverb。通过对问题提取 问题词qword,问题焦点qfocus,问题主题词qtopic和问题中心动词qverb这四个问题特征,我们可以将该问题的依存树转化为问题图(Question Graph)

问题图

具体来说,将依存树转化为问题图进行了三个操作 
1)将问题词qword,问题焦点qfocus,问题主题词qtopic和问题中心动词qverb加入相对应的节点中,如what -> qword=what。 
2)如果该节点是命名实体,那就把该节点变为命名实体形式,如justin -> qtopic=person (justin对应的命名实体形式是person)。这一步的目的是因为数据中涉及到的命名实体名字太多了,这里我们只需要区分它是人名 地名 还是其他类型的名字即可。 
3)删除掉一些不重要的叶子节点,如限定词(determiner,如a/the/some/this/each等),介词(preposition)和标点符号(punctuation)。 
从依存树到问题图的转换,实质是就是对问题进行信息抽取,提取出有利于寻找答案的问题特征,删减掉不重要的信息。

找出正确答案

在候选答案中找出正确答案,实际上是一个二分类问题(判断每个候选答案是否是正确答案),我们使用训练数据问题-答案对,训练一个分类器来找到正确答案。那么分类器的输入特征向量怎么构造和定义呢? 
特征向量中的每一维,对应一个问题-候选答案特征。每一个问题-候选答案特征由问题特征中的一个特征,和候选答案特征的一个特征,组合(combine)而成。 
在使用的时候,对于每一个候选答案,我们抽取出它的特征(假设有k个特征)后,再和问题中的每一个特征两两结合(假设有m个特征),那么我们就得到了k*m个问题-候选答案特征,因此我们的输入向量就是一个k*m-hot(即k*m维为1,其余维为0)的3万维向量。 
作者用带L1正则化的逻辑回归(logistic regression)作为分类器,训练每种问题-候选答案特征的权值

论文实验与总结

候选答案的主题图是根据问题中的主题词确定的,而一个问题可能包含多个主题词。作者先通过命名实体识别提取问题中的所有命名实体(如果提取不到一个命名实体,则使用名词短语代替),将所有命名实体输入到Freebase Search API中,选取返回排名最高的作为最终的主题词,使用Freebase Topic API得到相应的主题图。 
信息抽取的办法,总体来说涉及到了不少linguistic的知识,比较符合人类的直觉。虽然也涉及到了很多手工和先验知识的东西,但个人认为它的思想还是很不错的。 
作者在构造候选答案特征时,引入了和P(R|Q)相关的特征,这个思路是一个很好的思路,但是对P(R|Q)的估计方式总体来说还是比较粗暴(比如使用backoff),个人认为可以使用Deep Learning的方法进行提升。 
信息抽取的特征向量,每一维都代表了一个可解释的特征,是一种离散的表达。在下一期中,我们将介绍KB-QA的第三种传统方法——向量建模,它将使用分布式表达(Distributed Embedding)来构造问题和答案的特征向量,该方法相比信息抽取和语义解析,涉及到较少的linguistic和手工规则,也较容易通过Deep Learning进行提升。

[1] Yao X, Durme B V. Information Extraction over Structured Data: Question Answering with Freebase[C]// Meeting of the Association for Computational Linguistics. 2014:956-966. 
[2] https://zhuanlan.zhihu.com/p/25782244


现在致电 0755-88820392 OR 查看更多联系方式 →