由于我利用了大牛的论文复现了代码,但是很多同学都不太懂,由于本人代码规范不是太好,并且最近太忙所以一直没有整理这方面的,所以抽出时间,准备再重新过一遍,然后看是否能够基于本篇论文做更多的贡献,然后把代码从头梳理一遍。
那么从论文开始进行编辑。
问答已经变成一个比较流行的方式,人类从billion数据集中获取知识的方式。与网页搜索不同的是基于知识库的QA更加精准并且答案简洁,并且提供了一个自然语言的理解,映射为一个从知识库结构化查询。最大的挑战在于,同一种意思,用户可以有十几种不同的问法,之前的方法由于他们的表示方法有一定的限制:
基于规则的方法知识能够理解小部分数据集, 虽然基于关键字或基于同义词的方法不能完全理解这些问题。在这篇文章,我们提供了一个新的问题表示方法:template(其实并不是新的方法),通过a billion 知识库和a million scale QA 语料(非常重要)。例如:针对一个有关城市的人口问题,我们学习一个模板what's the population of $city ?(这可以理解为一个问题的模板。)how many people are there in $city ,在这篇论文中,一共对2785个意图学习了27 million 模板(可见非常多的问题模板对应了一个意图)基于这些模板,我们的系统能够有效的回答二元事实性问题,针对于一系列复杂的问题,由一系列的二元事实问题组成也能够很好的回答(本次代码也只针对二元事实问题做了实验,也只对二元事实问题作解释,原因是这篇论文对于实际应用,不太现实)。
QA有大量研究,一个QA一般被设计为回答一些特定的问题[5].其中最重要的一种类型问题就是事实性问题,问的是一些基于实体的,问一些有关实体的一个属性。例如:how many people are there in Honolulu,如果我们能够回答BFQs,那么我们能够一些其他类型问题,例如 :which city has the 3rd largest population;
基于知识库的QA有一个长的历史,近些年,一些非常大的知识库变得可用例如:google 的graph,freebase,YAGO2,大大增加了QA system的重要性以及商业价值。这些知识库大部分采用的RDF的数据格式,他们包含了billion 的SPO(subject,predict,objects).
figure1: 一个简单的知识库(这里dob pob分别代表date of birth 和place of birth),sponse of 意图是由多个边表示:name-》marriage-person-name。
给定一个问题,和一个知识库,我们面临这两个挑战:第一个是问题的表示(表示设计),第二个是怎么把表示映射到结构化查询中(语意匹配);
一般问题描述了上千种意图,一种意图有上千种问题的模板,例如表1的a和b问的都是有关于Honolulu的人口数量,但是它们表达的方式确实不同,那么QA系统需要对不同的questions表示成不同的representation。(1)那么这样的表示必须能够鉴别问题有相同的语义.(2)能够区别不同的意图。在QA语料,我们利用了27M问题模板,2782个意图,所以处理这些意图是一个非常大的挑战。
弄清楚问题表示之后,我们需要把表示映射为结构化的查询。对于FBQ结构画的查询主要依赖与知识库的predicate,由于predicate与representation之间的gap,找到这样的mapping非常重要,对于表1的例子a的语义与population相同。更有甚者,二元关系并不是单边关系,例如spouse of 用路径表达marriage-->person-->name对于知识库,会发现超过98%的意图对应这复杂的结构关系。
因此关键的问题通过一个合适的问题表示方式,构建一个知识库的predicate与自然语言问题之间的映射。
根据之前的基于QA系统表示问题的,分为三类:基于规则的、基于关键词的、synonym based(同义词的)。
基于规则的是通过用人工的结构话规则吧问题映射为predicate。虽然能够获得非常搞得准确率,但是有着非常低的召回率。人为对大量问题创建规则不可行的。
关键词匹配是利用问题中的关键词与predicate进行匹配,这样的模型可能能够回答简单的问题,例如在table1中的b在问题中鉴别出来population映射到知识库中的predicate的population。但是一般情况很难用这种方式找到类似的mapping,在知识库中的一个predicate不能够匹配多个自然语言的表示,例如我们不能够匹配a或者c
基于语法的通过考虑谓词的同义词来扩展关键词,他们首先对每一个predicate生成同义词,然后从questions与同义词之间找到mapping,DEANNA是一个典型的基于同义词的-+QA问答系统。主要的思想是把QA降低到评估谓语predicate与与候选同义词之间的相似性。例如question C,可以得到答案通过在问题中number of people与population是同义词,很显然可以通过Wikipedi-
a.来计算他们之间的语义相似性。gAnser能够获取更高的精度通过学习复杂的结构,但是所有的这些方法不能够回答问题a,很显然没有一个how many people are there 与population相关,how many people在不同的场景下有不同的意思。在how many people live in Honolulu ,它表示population,在how many people visit New Yoker each year ,他表示旅客的数量。
一般的上述方法并不能解决以上挑战,基于规则的方法,需要付出人类难以达到的标记努力,基于关键词和基于同义词的方法,一个单词或者一个短语并不能完整的表示问题的语义,我们需要完整的理解整个句子的意思。如果一个问题是一个复杂的问题或者映射到一个复杂的结构知识库,对于之前的方法是非常困难的。例如e和f。
如图所示,为了回答一个问题,首先represent问题,为了表示一个问题,首先应该吧自然语言的questions转换威意图representation,这个表示能够获取语义以及问题的意图,然后对于每一个表示,怎么映射到RDF查询基于一个知识库。因此我me们关键的工作在即internal representation,表示为templates。
REpresenting questions by templates 有关于同义词在a中的缺陷激励我们用templates进行表示,例如how many people are there in $city? 是a的一个模板。不管$city是Honolulu 还是其他的城市。这个模板总是有关于population的问题。
那么问题的关键在于怎么把一个问题映射到已经存在的templates心中。为了得到这个我们把问题中的entity替换成对应的concepts,例如图2,Honolulu将会用$city替代,这个方法虽然不算抬起眼,但是是通过一个概念化的机制来获得[25,17],会自动的对输入进行消岐,(所以例如apple的项将会被company替代在what is the headquarter of apple这个句子中)。这个概念化的机制是基于一个大的语义网络(Probase[32]),这个女网络涵盖了millions of 概念。所以我们有足够的granularity来表示所有类型的问题。
the templates 对于复杂的问题也非常有效,用模板我们能够吧复杂的问题分解威一系列的简单问题,每一个简单的问题对应了一个predicate,对问题f进行分享,我们把问题分解为Barack Obama's wife 和 when was Michele Obama born?对应了marriage-->person-->name 和 dob,第一个问题嵌套在第二个问题中,we know dob modifies marriage → person → name,
and marriage → person → name modifies Barack Obama.
Mapping template to predicates 我们学习模板和映射到对应的predicates用的是Yahoo! Answers.这个问题很像语义解析。大部分语义解析是通过同义词。为了构造谓语与predicate之间的关系模型。SEMPRE [2] uses一个二分图,概率组合分类语法。他们仍然是基于同义词的方法,mapping`从template到predicate是n:1的关系,每一个predicate有多个对应关系。在我们的工作,我们一共学习了27126355个模板针对2782个predicate。大量保证了基于模板的QA的广泛覆盖。
学一个模板的predicate的过程如下,首先对于训练问答对的每一个,我们提取出来对应的实体和对应的value。通过查找连接实体与value的predicate从知识库中。我们的基本思想是,如果most的模板映射到同一个predicate,那么就用这些predicate来映射这一个predicate,能够利用一定方法计算template到predicate之间的特定概率。映射到复杂知识库结构的学习模板采用类似的过程,唯一不同的是我们发现了扩展predicate对应了多个边,映射了一个实体到一个特定的value。
在第2章介绍KBQA的基本综述,这篇论文的主要贡献在于从QA语料中学习templates,所有的先关技术都是围绕着它,第3章展示了在线回答问题基于template,第4章详细说明了利用模板对predicate的推断,其中关键步骤就是利用模板。第五章是扩展了我们的方法回答复杂的问题。第6章是扩展了模板推断复杂的问题。提出的实验在第7章,2
在这一章,我们介绍知识库的背景和KBQA的综述,如表2:列出了文章的符号
Binary factoid QA 我们主要集中在的是二元事实性问答,意思就是问题问的是一个针对一个实体的制定属性。例如咋表1中的问题除了问题f。
RDF knowledge base 给定一个问题,我们寻找答案在一个RDF知识库中,一个RDF知识库是一个有三元组构成的(s,p,o),其中s,p,o代表主语,谓语,宾语。图1展示了一个简单的RDF通过一个有向图展示的知识库。每一个(s,p,o)被表示成从s到o的有向边用p进行标记。例如,一条边从a到1961用dob表示了一个三元组(a,dob,1961),代表了奥巴马的出生日期。
QA corpora 我们学习问题模板从Yahoo! Answer中,包含了41millionQA对,QA语料表示为,其中,并且提取的answer在回复中包含,表3展示了其中几个例子,.
Templates 通过从问题中替换实体e变成实体e的类别c,得到问题的模板,表示模板为,一个问题可能包含多个实体,每一个实体可能包含多个类别,我们获取实体的概率分布通过基于上下文的概念化[32],其实论文就是利用了这篇论文的结果,在微软的网站上,并没有啥技术含量。例如在表3的问题q1包含一个实体a,由于a含有两个类别$person $politicain,那么可以获取两个template,When was $person born? When was $politician born?
System Architecture . 图3展示QA系统的流程,主要包含两个过程
在线过程,当一个问题进来时,首先解析并且分解成一系列二元事实问题,分解过程在第5章解释,对于你每一个二元事实问题,我们采用概率推断的方法来寻找他的答案,,在第三章介绍,推断依赖于谓词的模板分布,例如:p(p|t),这个学习在线学习。
离线的任务就是学习template到predicate之间的映射,用P(p|t)进行表示,在第4章进行讲解,扩展predicate在第6章进行解释,所以我们可以学习更加复杂的predicate的模板(eg,marriage-->person-->name在图1)
在这一章,用概率的方式格式化我们的问题在3.1章,在3.2章将详细介绍大部分的概率估计,剩下的p(p|t)将在第4章进行介绍
我们在3.3详细介绍在线处理过程。
KBQA学习问答是基于QA语料和一个知识库,我们强调了从问题的意图到知识库的谓语的不确定性[18]。例如问题"where was Brack from" 至少与FReabase 的两个predicate相关,1:place of birth,2:place lived location。在DBpedia 中who founded $organization ? 与两个谓语先关founder 和father
问题定义1 :给定一个问题q。我们的目标就是寻找一个最大概率的答案v(v 是一个简单的value):
(1)
为了阐述给定一个问题,怎么能够占到答案,我们提出了一个生成模型,开始与给定一个问题q,首先通过P(e|q)概率分布鉴别出实体,然后根据问题和实体我们产生的template分布概率P(t|q,e),谓语p仅仅依赖与t,所以我们可以根据P(p|t) 来推断p,最后根据实体e和p产生答案v根据P(v|e,p),v可以直接返回也可以 ,展示这些变量之间的依赖在图4,基于生成模型我们计算P(q,e,t,p,v)基于公式2,那么公式1就减少为公式3
(2)
(3)
例子1来解释这样的计算答案的过程,考虑生成过程()在表格3,由于在问题仅有一个实体“Honolulu”,我们产生实体节点通过=1,把Honolulu概念话为city,我们产生了一个模板how many people are there in $city?.注意到模板对应的谓语总是population,不管指定哪个城市,所以我们通过P(p|t)预测出是population,然后通过“Honolulu”和“population”,则值是390k可以非常容易的从知识库中找到。
Outline of the following subsections
给定上边的目标函数,我们的问题就减小为计算公式(2)的每一项的概率,P(p|t)通过离线在第四章进行讲解,可以通过现成的解决方案直接计算其他概率项,(例如命名实体识别(这个是错误的,实体识别决定了这个系统的好坏),和概念化),我们将在3.2章阐述这些概率,在3.3章阐述在线过程。
这一章我们计算公式(2)的每一个概率,除了p(p|t).
Entity distribution
P(e|q)是从问题中鉴别实体,我们鉴别实体包含两个条件,实体在问题中;并且他在知识库中,他们用的是斯坦福的命名实体识别,很明显具有一定的局限性,因为命名实体识别是整个系统的关键,但是斯坦福只能识别有限的实体类型,然后我们检查实体名称是否在知识库中,如果有多个实体,仅仅简单的给定一个均匀概率,很明显有事不合乎情理的。
在4.1章我们已经提取出来了,对于问题和答案,其中values是从答案中获取,其实并不需要解释了,这里作者就是用的斯坦付的命名实体方法,没啥技术含量。
Template distribution
P(t|q,e) 一个模板类似于When was $person born?.换句话说,就是用问题中的实体的类别替代实体,用表示用实体e的类别c替代实体因此我们有:
(5)
其中,表示基于q的上下文的实体e的类别分布,在这篇文章中利用的是概念化方法[25]来计算P(c|q,e),其实文章是直接调用的微软的api接口,应为微软这个是利用大量数据获得概念化概率,所以文章这几个概率,比较水。
Value (answer) distribution
p(v|e,p) 对于实体e和一个实体的谓语,基本上已经找到了答案,所以这里说的都是废话,基本上。
在在线过程,给定一个问题q,可以根据公式7,返回最大的答案
(7)
右上可知,本论文的基本核心就在第四章,其他的概率有点扯。
这一章将会介绍怎么利用template推断出谓语来评估,我们把作为参数,用最大似然估计(ML)来估计,首先我们构造观察数据的最大似然,(例如QA对语料)在4.1,然后评估参数在4.2,以及算法实现在4.3.
我们并不是直接构造观察数据的最大似然估计,首先构造一个简单的案例,question-entity-value的三元组的似然是从QA对中提取而来,然后构建两个似然之间关系,间接之间的关系很好goujian,在QA中的答案是一个包含确切答案和其他单词的复杂的自然语言句子。大部分单词对于表示谓语以及对于观察带来噪声。另外一方面在生成模型中构建一个完整的答案是困难的,尽管在生成模型中构建一个答案非常容易。
首先我们从QA语料中抽取出来entity-value对,在4.1,允许构建一个question-entity-value三元组的似然函数(X),然后构建QA语料与X的似然关系,在E-q(13)4.1.2章。
我们的原则是从answer中提取values,以至于entity&value在知识库中有对应的关系。基于这样的原则我们从来鉴别entity-value对如下:
(8)
其中是子串,阐述例子2.
example 2 在表3的,一些词并没有用例如(the ,was,in ),我们提取有效数值1961,注意到Brack Obama和1961是由pob进行连接在图1可以看出来,我们也提取出来噪声politician,接下来就会如何在下面的过程进行细化过滤的过程
Refinement of ,我们需要过滤噪声对,例如:e.g. (Barack Obama, politician)在例子2中直觉就是,正确的答案和问题应该有same 类别。在这里一个答案的类别意味着回答问题类型的期望,这已经作为问题分类的问题[22],We use the UIUC taxonomy [20].对于我们使用的方法在文献[22]中提到,对于value的类别我们参考他的谓语的类别,罪域谓语的类别一般是手工标记的,由于谓语一般只有几千个,所以是可行的。
经过entity&value从q,a中提取,每一个QA对()转移成一个问题,和一个entity-value的集合,假设这些实体value对的独立性,QA对的观察概率如公式9所示,因此我们计算语料QA对的似然函数如公式10.
(9)
(10)
假定每一个问题的生成有相同的概率,例如
(11)
其中可以认为是一个常数,由于训练数据集是一定的,所以应该可以作为常数,等式11意味着与question-entity-value三元组成比例,利用X表示为从QA语料中提取的三元组:
(12)
通过假设每一个位图有一个等价的概率产生,例如,我们有如下:
请看基于kbqa 的复旦大学论文解释 learning question answering over QA corpora and knowledge bases(二)
.