《Graph-Based Reasoning over Heterogeneous External Knowledge for Commonsense Question Answering》
来源:AAAI2020
关键词:图神经网络、常识问答、知识库、attention
论文链接:https://arxiv.org/abs/1909.05311
常识问答:对于一些常识性问题,要求机器采集背景知识并且在知识上推理得到答案。
常用数据集:CommonsenseQA
可以由下图了解一下数据集及相关工作:
通常给定一个自然语言问题,和五个选项,目标是通过证据抽取和推理选择最靠谱的那个选项。
问题中包含的概念是“playing guitar”,从知识库ConceptNet中的证据有助于选出答案A/C,Wikipedia中的文本数据有助于选取出C/E,综合两个数据源的证据,可以得到正确答案C。
近年来提出的证据抽取和推理方法,要么是从人工标注的证据中生成证据,要不就是从同质数据源(只有结构话知识库或者无结构文本)中抽取证据。但是它们没能同时利用这两种数据源。结构化知识库包含便于推理的概念之间的结构化关系,但是覆盖率低。纯文本可以提供丰富的高覆盖率的证据,对结构化知识进行补充。本文同时从结构化数据库ConceptNet和无结构的wiki文本中抽取证据并推理。方法包括两个模块:知识抽取和基于图的推理。
在知识抽取部分,本文自动地从ConceptNet中提取图形路径,从Wikipedia中自动提取句子。为了更好地利用证据的关系结构,本文为两个来源构建了图,包括从ConceptNet中提取的图路径和通过语义角色标记(Semantic Role Labeling,SRL)从Wikipedia句子中提取的三元组。
在推理部分,本文提出了一种基于图的方法来更好地利用图信息,开发了两个基于图的模型,包括(1)基于图的上下文词表示学习模块,该模块利用图结构信息重新定义单词之间的距离,以便更好地学习上下文单词表示;以及(2)基于图的推理模块,该模块首先采用GCN将邻居信息编码到节点的表示中,然后使用图形注意机制进行证据聚合。
整体流程图:
概述:根据问题和选项,从知识库ConceptNet和Wikipedia文本中抽取相关知识。然后将来自两个数据源的知识构建图。再在图上利用基于图的算法进行推理,得到最后的结果。
一、知识抽取
1.从ConceptNet中抽取知识
ConceptNet是一个大规模的常识知识库,包含数百万个节点和关系。ConceptNet中的三元组包含四个部分:两个节点、一个关系和一个关系权重。对于每个问题和选项,首先在给定的ConceptNet中确定它们对应的的实体。然后我们搜索从问题实体到选项实体的路径(少于3跳),并将覆盖到的三元组合并成一个图,其中节点是三元组,边是三元组之间的关系。如果两个三元组si,sj包含相同的实体,将从上一个三元组si到下一个三元组sj添加一个边。为了获得图中节点的上下文词表示,根据ConceptNet中的关系模板将三元组转换成自然语言序列。下图显示一个示例。将这个图叫做Concept-Graph。
2.从Wikipedia抽取知识
通过Spacy从Wikipedia抽取107M个句子,然后采用Elastic Search tools来给Wikipedia句子加索引。我们首先删除给定问题和选项中的停词,然后将剩下的词连接起来作为查询从Elastic Search engine中进行搜索。引擎将查询和所有维基百科句子之间的匹配分数排序,选取top K的句子作为Wikipedia evidence。
为了发现Wikipedia evidence中的结构信息,本文为Wikipedia evidence建了一张图。利用Semantic Role Labeling (SRL)来从一个句子中抽取(subjective, predicate, objective)三元组。参数和谓词(predicate)都是图中的节点。
图中的实线肩头关系包含两种:<subjective, predicate>(主谓关系),<predicate, objective>(谓宾关系)。为了加强图中的连接度,本文去停词,并且根据如下规则添加边:(1)a包含在b中,并且b中的单词数多于3(原文写的a,我觉得有误),如图中虚线箭头所示;(2)a和b只有一个不同的词,并且a和b的单词数都多于3。把这个图叫做Wiki-graph。
二、基于图的推理
基于图的推理模型包括两个模块,第一个模块通过用图信息来重定义单词之间的距离,学习更好的词表示;第二个模块通过GCN来获取图中节点表示。overview图:
1.基于图的上下文表示学习模块
众所周知,预训练模型有很强文本理解能力,在很多NLP任务上都得到了SOTA的效果。本文用XLNet作为主干,这是一个可以捕捉远距离依赖的成功的预训练模型。获取每个词的表示的一个简单方法是把所有的证据给串成单个序列,然后喂入XLNet。但是这样会使在不同证据句子中提及的单词间距离较远,尽管这些单词可能语义相关。因此,我们使用图结构来重新定义证据单词之间的相对位置。这样,语义相关词的相对位置就会变短,而证据中的内部关系结构可以用来获得更好的上下文词表示。
具体来说,本文用拓扑排序算法来对输入证据进行排序。
(1)用ConceptNet的关系模板把三元组转换为一个自然语言句子。比如“mammals HasA hair”会被转换成“mammals has hair”,这样就可以基于抽取到的三元组的得到一个句子集合。然后再根据如下图的算法1,来reorder这些句子:
比如在上边的图三中,输出是<“people has eyes”, “eyes is related to cry”, “people can do singing”, “cry is a kind of sound”, “singsing requires sound”, “sound is related to playing guitar”>,缩短更相似的三元组之间的距离。
对于Wikipedia的句子证据,构建一个句子图。证据句子是图中的节点。对于两个句子,如果两个句子分别包含p和q。并且<p,q>在Wiki-Graph中,那么在句子图中两个句子节点连边。然后通过算法1得到排序的句子证据。
最终XLNet的输入是排序的ConceptNet证据句子、排序的Wikipedia证据句子、问题和选项的串联。XLNet的输出就是上下文的词表示还有输入表示<cls>。通过将提取的图转换为自然语言文本,可以将这两种不同的异构知识源融合到同一表示空间中。
2.基于图的推理模块
上一小节提到的基于XLNet的模型为做出预测提供了有效的word-level线索。图在更抽象的层次上提供了更多的语义层次的信息,例如关系的主语/宾语。一种更可取的方法是在图的层次上聚合证据以做出最终的预测。具体而言,我们将两个证据图Concept-Graph和Wiki-graph视为一个图,并采用GCN编码图结构信息来获取节点表示。
为了在证据间传递信息并在图上推理,GCN通过合并相邻节点的特征来更新节点表示。但是关系GCN通常会出现参数过多的问题,因此我们在无向图上使用GCN。
第i 个节点的初始表示通过平均XLNet输出中相应证据的隐藏状态向量并通过非线性变换降维得到。其中Si是第i 个对应的证据。
为了在图上进行推理,通过两步在证据间传播信息:
(1)聚合,从每个节点的邻居节点聚合信息。
(2)合并
然后利用图注意力机制来进行预测。
我认为这个hg是整张图的表示向量,因为它用加权求和了所有的节点,其与输入表示hc串联之后送入多层感知机MLP来计算置信分数score(q,a),选项a是问题q的答案的概率可以用如下公式得到:
其中A是所有候选答案的集合。最终选择概率最高的作为答案。
我的理解:总体来说,对于问题+一个选项,我们从异质信息源抽取证据,构建一张图,然后用GCN+ATT得到最后的预测分数。这样对于每个问题+选项,我们都会得到一个置信分数,选取置信分数最高的预测为答案。
三、实验部分
数据集:CommonsenseQA包含12102个examples,9741训练,1221验证,1140测试。
给每个选项前加“The answer is”来使选项变成一个句子。对应于每个选项的输入格式是“<evidence> <sep> ques- tion <sep> The answer is <choice> <cls>”.最后,五个选项得到五个置信分数,然后再利用Softmax函数来计算ground truth和预测之间的loss,使用交叉熵损失函数。
(1)与baseline对比实验结果:
其中Groups 1: 不使用描述或者论文的模型;
Groups 2: 不抽取知识的模型;
Groups 3: 抽取结构化知识的模型;
Groups 4: 抽取无结构知识的模型。
(2)消融实验:
消融实验可以验证拓扑排序和图推理的有效性。
(3)case study
展示本文的模型可以利用异质知识源来回答问题。问题是“Animals who have hair and don’t lay eggs are what”,答案是“mammals”。上边三个节点来自于Concept-Graph,“mammals is animals” 和 “mammals has hair” 可以提供“mammals” 和两个概念“animals” 和“hair”之间的关系。还需要展示“lay eggs”和“mammals” 之间的联系。来自Wiki-graph的后三个证据可以提供信息“very few mammals lay eggs”,这展示了两个知识源对于推测出答案都是有必要的。
(4)误差分析
从验证集中选出了50个错误例子,分成了三类:缺少证据,相似的证据和数据噪声。
缺少证据:第一个例子从ConceptNet中没有抽取到三元组,在Wiki中抽取的知识也不足以支持找到正确答案。这个问题可以通过改进知识抽取策略或者添加更多的数据源来缓解。
相似证据:第二个例子“injury” 和 “puncture wound”两个选项,两个来源的知识都提供相似的证据,难以很好的区分两个答案。需要来自其他知识源的更多信息来缓解这个问题。
还有一些就是数据本身的噪声,比如说有两个完全一样的选项。
四、结论
本文的主要贡献是在常识问答上从两个异质数据源抽取知识,并且利用图神经网络算法在抽取的知识上推理答案。