Complex Knowledge Base Question Answering: A Survey(2021年10月)
前言
这是一篇对于复杂问题KBQA领域的详细综述,其工作主要集中在以下方面:
当前复杂问题知识库问答面临的问题
具体来说,复杂问题的知识问答分为两类:基于语义解析的知识库问答,基于信息检索的知识库问答。基于语义解析的知识库问答在拿到问题之后通过对问句的语义进行分析,构建出形式化的查询,通常是SPARQL语句,然后去知识库中查找答案。基于信息检索的知识库问答,在拿到问句之后根据问句中的实体在知识库中找出相应的子图,然后构建出主题实体到答案的路径,进而求解出答案。这篇文章对于两种方法具体化的分为了几个功能模块,并对每个功能模块面对的挑战进行了介绍。
论文章节内容:
常用的大规模知识库有:Freebase [1], DBPedia [2], Wikidata [3] and YAGO [4]
对于知识库更加详细的对比可以看这里。
知识库的公式化表达
G = { < e , r , e ′ > ∣ e , e ′ ∈ ε , r ∈ R } \mathcal{G} = \{
其中, < e , r , e ′ >
问答任务的公式化定义
问题: q = { w 1 , w 2 , ⋯ , w m } q = \{w_1,w_2, \cdots, w_m\} q={w1,w2,⋯,wm},其中 w i w_i wi是问句中第 i i i个单词的token。
预测答案: A ~ q \tilde{\mathcal{A}}_q A~q, 真实答案: A q {\mathcal{A}}_q Aq
用于训练模型的数据集: D = { ( q , A q ) } \mathcal{D}=\{(q,{\mathcal{A}}_q)\} D={(q,Aq)}
当前的研究假设 A q {\mathcal{A}}_q Aq提取自知识库的实体集 ε \varepsilon ε。这里要注意,对于简单问句,其答案实体往往和主题实体是直接相连的,其真是答案 A q {\mathcal{A}}_q Aq 真包含于实体集 ε \varepsilon ε。然而,对于复杂问句,其答案实体往往有多个而且离主题实体有好几跳的距离,甚至其答案是这些实体的聚合。
如下图所示是对简单问题的知识库问答框架,通常分为两步。
第一步是寻找问句中的主题实体,目的在于将一个问题和知识库中有关联的实体连接起来。在这个过程中,命名实体识别、消歧和链接都是在这一步完成。这一步通常用一些现成的实体链接工具,如:S-MART [24], DBpedia Spotlight [25], and AIDA [26]. 这里有实体链接工具的介绍。
第二步是用问题 q q q作为一个答案预测模型的输入,用这个模型来预测答案 A ~ q \tilde{\mathcal{A}}_q A~q。
论文中还讲了其他的方法,这里不一一赘述,详细可看论文。
值得一提的是,简单问题的知识库问答基本已经解决,这篇文章讲述了简单问题知识库问答的情况,而且附有源码,我个人认为是了解简单问答的一个很好的资料。相信对简单问答有了一些了解之后,对复杂问答的理解也会有帮助。
总的说,对于一个KBQA系统的评估,可以从三方面进行:可靠性、健壮性、系统和用户的交互。
可靠性
评估指标有四个:准确率、召回率、F1值、Hits@1
准确率: P r e c i s i o n = ∣ A q ∩ A q ~ ∣ ∣ A q ∣ ~ Precision = \frac{|\mathcal{A}_q \cap \tilde{\mathcal{A}_q}|}{|\tilde{\mathcal{A}_q|}} Precision=∣Aq∣~∣Aq∩Aq~∣
召回率: R e c a l l = ∣ A q ∩ A q ~ ∣ ∣ A q ∣ Recall = \frac{|\mathcal{A}_q \cap \tilde{\mathcal{A}_q}|}{|\mathcal{A}_q|} Recall=∣Aq∣∣Aq∩Aq~∣
F1 值 : F 1 = 2 ∗ P r e c i s i o n ∗ R e c a l l P r e c i s i o n + R e c a l l F_1 = \frac{2*Precision*Recall}{Precision + Recall} F1=Precision+Recall2∗Precision∗Recall
这里的Hits@1是Hits@n中的n取1时的指标,而Hits@n是知识图谱嵌入中的常用指标,在知识图谱嵌入中n通常取3或者10。Hits@1有时会用在KBQA任务中。
Hits@n,主要用于三元组链接预测,假设有一个三元组的正例,目前已知三元组的主题实体,然后对这个三元组进行预测。进行了1次预测,这一次预测得到了m(n
假设有两个正例
Jack born_in Italy
Jack friend_with Thomas
进行了两次预测
s p o score rank
Jack born_in Ireland 0.789 1
Jack born_in Italy 0.753 2 *
Jack born_in Germany 0.695 3
Jack born_in China 0.456 4
Jack born_in Thomas 0.234 5
s p o score rank
Jack friend_with Thomas 0.901 1 *
Jack friend_with China 0.345 2
Jack friend_with Italy 0.293 3
Jack friend_with Ireland 0.201 4
Jack friend_with Germany 0.156 5
其中后面带星的是正例。则:
Hits@3= 2/2 = 1.0
Hits@1= 1/2 = 0.5
健壮性
当前的很多KBQA数据集都是基于模板产生而缺乏多样性;
训练数据的规模因为人工标注的高代价而受到限制;
现在是数据爆炸的时代,训练数据集不可能覆盖所有的范围。
因此,提高模型的健壮性一直是一个重要的话题,如何使得模型可以覆盖不包含在训练集内的模式元素和领域是一个重要的研究方向。
系统和用户的交互
一个好的问答系统应该跟用户有良好的交互,当前离线的试验评估受到比较大的重视,然而和用户的交互这一方面收到了忽略。事实确实如此,此处不多余赘述、
此部分对复杂问题知识库问答中常用的数据集进行介绍分析。
原文中的章节对各个数据集的来源以及构建时的特殊性进行了详细的介绍,感兴趣可以去阅读原文。如果作为使用者,文中的TABLE 1已经足够:
其中LF\CO\NL\NU的含义如下:
LF:数据集是否提供类似SPARQL的逻辑形式(Logic Forms)
CO:数据集中是否含有包含约束(Constraints)的问题
NL:数据集的生成过程中是否雇佣人工对问题进行同意改写(NL, Natural Language)
NU:数据集中是否包含需要数字操作(Numerical operations)的问题,数字操作例如比较、排序等
在文章中是对基于语义解析的知识库问答和基于信息检索的知识库问答两种主要思路都进行了介绍,这里只看基于语义解析的方法,对基于信息检索的方法感兴趣可以去看原文。
总的来说,基于语义分析的方法执行的是一个 p a r s e − t h e n − e x c u t e parse-then-excute parse−then−excute 的流程,基于信息检索的方法执行的是一个 r e t r i e v e − a n d − r a n k retrieve-and-rank retrieve−and−rank 的流程。
第一步:完整的理解问题中的语义信息,这一步经常使用LSTM,GRU,当前使用BERT也很多,最终得到的是包含语义信息的编码后的问题
q ~ = Q u e s t i o n _ U n d e r s t a n d i n g ( q ) \tilde{q} = Question\_Understanding(q) q~=Question_Understanding(q)
第二步:将第一步得到的编码后的问题作为输入,生成逻辑形式,提取问题中的逻辑结构信息。这一步可以通过序列生成或者对候选打分获得。实践中经常采用Seq2seq模型和基于特征的打分模型。(逻辑形式到底是什么样的形式?)
l q ˉ = Logical_Parsing ( q ~ ) \bar{l_q}=\text{Logical\_Parsing}(\tilde{q}) lqˉ=Logical_Parsing(q~)
第三步:将第二步得到的逻辑形式,针对具体的知识库进行实例化,生成可以在知识库中执行的查询 l q l_q lq,这个 l q l_q lq可以转化为SPARQL形式。值得一提的是, l q l_q lq中必然包含 e q e_q eq,这里的 e q e_q eq是通过实体链接得到的。在很多模型中,是将第二步和第三步结合在一起的。(实体链接在哪一步执行?)
l q = KB_Grounding ( l q ˉ , G ) l_q = \text{KB\_Grounding}(\bar{l_q},\mathcal{G}) lq=KB_Grounding(lqˉ,G)
第四步:执行第三步得到的形式化查询得到预测答案
A q ~ = KB_Execution ( l q ) \tilde{\mathcal{A_q} } = \text{KB\_Execution}(l_q) Aq~=KB_Execution(lq)
注意:
前面已经将基于语义分析的知识库问答流程大致分为了四个阶段:Question understanding, Logical parsing, KB grounding, KB execution。不同的部分都面临相对的问题,概括的将有以下几个方面:
论文接着从四个方面对当前的研究情况进行总结,概括如下表,接下来我将详细说明。
作为SP-based的第一步,问题理解模块讲非结构化的转化为编码的问题,这对下游的分析有很大的作用,而复杂问题相对于简单问题更加难以提取其语义。
传统方法采取状态转换策略来生成候选查询图。这种策略忽视了问题本身的结构性,这样讲导致一大批不合格的查询进入候选集。
论文列表:
为了生成一个可执行的逻辑形式,传统方法第一步利用现存的解析器讲一个问题转换为CCG派生,这个CCG派生可以通过在知识库中寻找相应的关系和实体与其谓词和论据相匹配,进而生成具体的SPARQL查询。
然而,由于这些方法存在本体错误匹配的问题,只能被当做复杂问题问答中的次优先级方法。因此,利用知识库的的结构来进行精准的解析就是必须的,这种精准的解析表现出来的是和知识库的事实高度一致。为了适应复杂问题的组合型,研究者提出了不同的逻辑表达形式作为解析的目标。
由于在前面的步骤已经得到了主题实体,【78】从主题实体出发,设计了三种查询模版作为解析的目标。如下图所示,前两种模板返回跟主题实体‘Titanic’相距一跳或者两跳距离的实体。第三种模版返回跟主题实体的距离在两跳以上以及被其他实体限制的实体。这种方法虽然可以成功解析几种类型的复杂问题,但是它受到覆盖面有限这一缺陷的约束。【79】与此论文类似,他集中精力设计可以处理时态问题的模板。
【36】提出了将查询图作为表达解析的目标。一个查询图是一种图形式的逻辑形式,它和知识库模式相匹配,并且可以转化为一个可执行的SPARQL。查询图包含试题,变量和函数,他们分布对应问题中提到的固定实体,要查询的变量、聚合操作。就像图5所示,从主题实体出发的推断链首先被确定,然后约束实体和聚合操作被附加到路径链上,从而使得可以适应更加复杂的问题。不同于与定义的模板,查询图不受跳数以及约束数量的限制。这一方法在复杂问题知识问答任务中展现了强大的表达能力,但这一方法的缺陷是尚不能处理长尾类型的复杂问题。
基于对长尾问题的更多观察,【64】尝试通过增加句法提示来增加查询图的结构复杂性,进而可以提升查询图的公式,【12】尝试应用更多的聚合操作,例如合并、共指消解等来适应复杂问题。
Tips
CCG(combinatory categorial grammars,组合范畴文法),CCG的作用是提供一个从自然语言的语法到语义的转化,能够作为将自然语言转换为数据库查询结构的工具。具体内容较多,在ReadPaper的相关知识中有介绍的PPT,后面需要再仔细学习。
共指消解:将现实世界中同一实体的不同描述合并到一起。
为了得到可执行的逻辑形式,知识库链接模块利用知识库将可能的逻辑形式实例化。知识库中的一个实体常常关联到成百上千个实体,在这样的情况下进行知识库链接和搜索的时间代价以及计算复杂度都是极高的。相比于在一步之中枚举逻辑形式,研究者们尝试在多步中生成复杂查询。
除了采用分解复杂问题从而得到子问题的方法,有很多学者采用了 expand-and rank 的方法来缩小搜索空间,通过一种以迭代方法扩展逻辑形式的方法。具体来说,第一个迭代中找出与主题实体只有一条距离的实体作为候选实体,然后通过比较问题和逻辑形式的语义相似性来给这些候选实体打分,然后得分较高的一部分实体将继续扩展,而低分的将被舍弃。接下来,得高分的逻辑形式将会被继续扩展,这样就能够得到更加复杂的查询图。每当找到最佳的查询图,这一过程就会停止。
【47】首先使用逐条贪婪搜索扩展最可能查询图。
【82】提出了一种增量式序列匹配模块,可以迭代地解析问题,而不需要在每个搜索步骤中重新访问生成的查询图。
【83】不同于以上提出的线性方法,这样的线性方法只有在多条关系上效率较高。在这篇论文中在每个迭代中定义了三个动作:扩展、连接、聚合,其分别对应多条推理、约束关系和数值运算。
使用强化学的方式,在基于语义解析的方法中只能在完全解析后的逻辑形式执行之后得到反馈,这会导致严重稀疏的正奖励和虚假推理问题。为了解决这些问题,一些研究工作采用了句法分析评价的整形策略。