作者 | 科 雨
编辑 | 丛 末
对于知识图谱的研究在最近几年呈现逐渐热门的趋势,在今年的ICLR2020上,就涌现出了大量相关研究,其中,来自CMU和Google的研究者提出了一种新的将语料库作为虚拟知识库(Virtual Knowledge Base,KB)来回答复杂多跳问题的方法,其可以遍历文本数据,并遵循语料库中各个实体的关系路径,并基于评分的方法,实现了整个系统端到端的训练。实验结果证明此模型可以快速地实现更好的性能。
接下来,我们来详细讨论一下此论文的主要内容和思路:
1
背景
大型的知识库(KBs)可以组织实体中蕴含的信息,并可以简化内容推理的过程,比如Freebase和WikiData。我们可以举例说明,如果有个类似“Gratefu Dead的主唱什么时候出生?”的查询,我们可以将”Grateful Dead“定义为一个实体,定义“主唱”和“出生日期”为可以提取出结果的关系,如果这个信息在知识库中出现,那我们就可以得到问题的答案。
然而,不幸的是,知识库常常是不完整的。虽然关系提取方法可以运用在流行知识库中,但是这一过程在本质上却容易出错,并且是昂贵和缓慢的。
开放领域QA的进展,使得研究者提出了一种替代的方法:与表示关系提取相反的是,通过回答来自于语料库的跨度查询,的我们可以将大语料库视为一个虚拟知识图谱。这可以保证事实信息可以在关系提取过程中得到保留。然而,这一方法同样遇到了挑战。这个挑战是,QA模型将每个文档编码为依赖于查询的模式,这使得即使在使用现代硬件设备的情况下,使用QA模型来回答问题依然更加昂贵的。针对复杂问题来说,QA的大量耗费则更是一个的问题(比如前文的例子)。如果“Gratefu Dead的主唱什么时候出生?“这个问题出现的文段和”Jerry Garcia出生在1942年“在语料库中相距很远的距离,那么系统就很难获取并且依靠一个单项文本就去找到答案。更概括地去说,涉及到实体集或者关系集的复杂的问题,可能需要从多个文档中聚合信息,而这个过程是很昂贵的。
研究者为了实现更加有效率的QA,也做出了一些改进工作,比如Seo等人提出的短语索引QA,在此方法中,多语料库之间的跨度和独立于问题的语境表示相关,并通过索引,来实现快速获取功能。研究者将自然语言问题转换为向量来得到问题的答案,而这个向量被用来执行针对索引的最大内部乘积搜索(Miximum Inner Product Search, MIPS)。而近似算法(Shrivastava&Li,2014)的使用则可以保证这一过程的效率。然而,因为在构造过程中,索引中存储的信息关于的是一次跨度中的局部语境,而此局部语境只能在在阅读单个文段之后就能获取其答案的问题中使用,因此,这一过程无法直接被用来回答复杂查询。
本文强调了基于短语检索问答机制的局限。同时,研究人员提出了一种针对在大型文本语料库的复杂问答(QA)的,高效的,端到端的可微网络,而此语料库中则通过独立于查询的原则进行编码。更具体一点,我们考虑“多跳”复杂问题,这一复杂问题可以通过重复执行下面操作的近似版本来回答:
其中,X是实体集,R为关系集。
在过去的工作中,此操作的近似可微版本被用来回答针对明确的KB的多跳问题。在这里,我们提出了一个更强大的神经模块,这个神经模块的操作主要针对索引语料库(一个虚拟KB),并和前述操作类似。在我们的模块中,输入X是一个有权重的实体集的系数向量,关系R则是一个稠密特征向量,例如,在由一个自然语言查询的神经网络生成的向量。研究人员用X和R来构造一个MIPS查询,此查询可以用来从索引中检索出top-K跨度。而输出Y是另外一个稀疏向量,代表着带权实体集,并由在top-K跨度上的实体提及(Entity Mentions)聚合而来。本文第二部分的第三块主要讨论了索引的预训练机制。
针对多条查询,输出实体Y可以作为下一次迭代的输入,被循环利用到相同的模块中。实体Y是可以微分的,这可以保证实现端到端学习过程。
我们主要讨论基于稀疏矩阵向量乘积的实现过程,这一过程的运行时间和记忆只依赖于从索引中检索到的跨度K的数量。这一点,对于扩展到大型语料库非常关键,并直接实现了在超越最新多跳开放领域QA系统15倍的加速推断过程。
本文将这一新系统称为DrKIT(提取自Differentiable Reasoning over a Knowledge base of Indexed Text)。研究者在针对复杂问题回答的MetaQA基准上进行了DrKIT的测试,结果展现了,相对于先前基于文本的系统,此方法在两跳问题上提高了5个百分点的性能,在三跳问题上提高了9个百分点的性能,从而将基于文本和基于知识库两种系统的差距分别降低了30%和70%。
同时,本文还将DrKIT在Wikipedia上的多跳插槽填充新数据集上进行了测试,结果证明,在此任务上,本文的方法可以超过DrQA(Chen 等人,2017)和PIQA(Seo等人,2019)的表现。
最后,研究者还将DrKIT应用于在HotpotQA数据集(Yang等人,2018)的多跳信息检索任务中,结果表明,与基于BERT的重排序方法相比,此模型可以达到10倍的加速效果。
接下来,我们一起来看看模型的具体设计:
2
索引文本知识库的可微推断
研究者将文本语料库视为知识库(KB),并用来回答问题q。他们从问题q中的实体集z开始,并试图沿着知识库中的关系边来获得答案。
为了在文本上模拟此行为,首先,他们将z扩展为同时出现的提及集集m(使用TFIDF)。并不是所有同时出现的提及都和问题q相关,所以研究者训练了一个神经网络,此网络根据q到m的相关性分数来过滤提及。接着,研究者将结果提及集聚合到他们所指的实体集中,并以一个有序实体集为结束,此实体集代表着候选的答案。这一过程和遍历知识库非常相似。此外,如果问题是多跳的,我们可以从z'出发,重复以上过程。这一过程如下图所示:
上图表示DrKIT通过迭代地将输入实体集X(The Grateful Dead, Bob Dylan)映射到输出实体集Y(Dylan&the Dead, American beauty ,...)来回答多跳问题的过程,Y依据关系R(album by)和输入实体集相关。
接下来,我们首先在第一部分中的框架下描述这一思想,接着,在第二部分,我们描述了如何使用稀疏矩阵乘积和MIPS算法(Johnson等,2017),来有效的执行从实体集到提及的扩展以及对提及的过滤。最后,我们会在第三部分讨论针对构造提及表示的预训练机制。
在开始之前,我们先介绍下文用到的表示法:
我们将给定的语料库表示为D={d1, d2,...},其中每个代表符号序列。首先,我们在语料库上运行一个实体链接器,以标志对于固定实体集的提及。每一个提及m都是一个元组,该元组表示在文档中的文本跨度提及了实体,同时在语料库中的所有提及的集合被表示为M。需要注意的是,。
本文假设在训练过程中,我们只能知道T跳问题的最终答案实体,所以这是一个弱监督学习问题。本文将回答中间跳跃的潜在实体序列设定为,其中,代表问题的提及,同时有。我们可以递归的将中间答案的概率写为:
在这里,是在此问题上的实体链接系统的输出, 则象征在从给定前跳 得到的实体之后,依照关系,从而回答第t跳问题的单跳模型。上式对隐藏实体链进行了推理,但是,当在回答文本语料库的问题时,我们必须依靠实体的提及来进行推断,而不是实体本身。因此,需要在的所有提及上被聚合,从而有:
在上面的式子中,我们来关注这一项:,这一项表示了给定问题和实体下的提及m的相关性。类比知识库,我们将实体扩展为同时提及m,且用一个学习过的评分函数来找到这些提及相关性。
接着,我们将包含m的文档的TFIDF向量表示为,将从前跳得到的实体的*表面形式(surface form)*的TFIDF向量表示为,将学习过的评分函数(每跳都不同)表示为。因此,我们可以将建模为(3)式:
此外,理解上式所表示的模型的方法是,第二项检索的事第t跳的问题所请求的正确类型的提及,第一项则基于与的同时出现对其进行了过滤。
接下来的环节中,研究者还展示了同时出现(co-occurrence)和相关性的结合对于实现良好性能的重要性,这一点在2019年也被Seo等人证明过。
在公式(2)中位于靠左位置的另外一项是,基于实体链接系统,当提及m包含实体z的时候,值为1,反之为0。为了计算(2),我们需要评估(3)中所有潜在实体和提及对的提及分数,而这一点是极其昂贵的,并不契合实际。
然而,如果我们将限制为内积形式,就可以高效地解决这一问题。这一环节会在第二部分中陈述。
为了强调整体工作机制的可微性,我们将公式(2)中的计算过程表示为矩阵操作。
我们将针对所有实体和提及的TFIDF项预计算为稀疏矩阵形式,并表示为:
接着,我们就可以使用将稀疏向量与稀疏矩阵相乘,从而将实体扩展为同时出现的提及。对于相关性评分,我们将在中被编码为稀疏向量的top-K相关提及表示为。
最后,提及到实体的聚合就可以被定义为与另外一个稀疏矩阵的乘积,这就实现了对*共引(coreference)*的编码(比如:指向相同实体的提及)。
将上面所有结合起来,并使用来表示元素对应乘积(element-wise product),且,我们可以观察到,对于大型的K(比如 ),公式(2)可以与下式相等:
其中:上式中每个操作都是存在于稀疏矩阵和向量之间,并可以微分:我们将在下一部分(第二部分)讨论此过程的高效实现。此外,因为我们在基于TFIDF的扩展过程中,将其过滤为了top-K相关提及(在上式中的元素对应乘积部分),同时,每个提及只能指向中的单个实体,所以,中非零实体的数量会受到K的限制。由于它阻碍了中的实体数量在跳跃中爆炸增长,所以此操作非常重要。
我们可以将和视为带权实体的Multiset,将视为隐式选择的提及(对应于关系R)。接着,(4)就变成了 的可微实现(如模仿传统知识库中的图遍历)。因此,我们可以将公式(4)称为文本跟随操作(textual follow operation)。
通过优化之间的交叉熵损失、T跳之后实体集的权重以及答案集A的真实值,研究者对模型进行了端到端的训练。
因为检索出的top-K提及的内积评分通常有很高的值,而这一点可以造成具有非常陡峭的分布形式,在计算公式(4)中的softmax层的时候,研究者使用了温度系数。
研究者还还发现了在公式(2)中,提取实体的提及集的最大值可以比使用总和要更加有用。这一点与只在置信度最高的实体的提及上优化相对应,并且在一些像Wikipedia之类的冗余度不高的语料库上起作用。在2019年,Min等人在弱监督学习上也做了类似的观察。
为了计算公式(4)中的实体-提及扩展的稀疏矩阵,研究人员将TFIDF向量和在unigrams和bigrams上进行构造。计算了来自在m附近整个文章的向量,而只使用了的表面形式(surface form)。
针对实体集到附近提及的扩展,可以使用由稀疏向量的乘积得到的稀疏矩阵计算而来。在这一部分,研究者做出的特殊处理是:分别表示稀疏矩阵的两个行的可变大小的索引列表和非零元素值列表,这导致了矩阵的表示*“参差不齐(ragged)”*(tf.RaggedTensors, 2019),这样,我们就可以轻松地将其对应于()时间内的向量中的非零条目进行切片。此外,研究者将剩余的K个稀疏向量进行了了加权。此外,这种实现对于诸如TensorFlow之类的深度学习框架是可行的。下图将这种方法与TensorFlow中可用的默认稀疏矩阵乘以密集矢量乘积进行了比较:
为了使公式(4)的计算更加可行,我们需要有效地在不需要列举所有概率的情况下,去得到对于问题q的和中实体相关的top-k相关提及。本文采用的关键方法就是将评分函数限制为内积形式,这样我们就可以轻而易举的在所有提及m上估计计算的并行版本。
为了实现这一点,我们可以让代表m的稠密编码,代表第t跳问题的稠密编码,然后,评分函数就变为了:
这样一来,我们就可以通过将 和 相乘,来平行计算公式(5)。尽管在现实语料库中,这个矩阵会变得非常巨大,但由于我们只关注top-k的值,对于最大内积搜索(MIPS, Maximum Inner Product Search),我们就可以使用一个估计算法来找到前K个最高分数的元素。使用MIPS算法,计算这一过滤步骤的复杂度大致为。
使用BERT-large模型(Devlin等人,2019),我们通过传递包含提及的文段来对其进行编码。假设提及m在文段d中出现,从i位置开始,到j位置结束。接着,有,其中是从BERT中生成的嵌套输出,W是到大小为p上的线性投影。
在处理查询的时候,研究者则使用更小的类似于BERT的模型来进行了编码,最终计算复杂度达到了。
理想情况下,我们期望仅使用有标签的QA数据来对提及编码f(m)来进行端到端的训练。然而,当此过程和估计最近邻搜索结合的时候,会出现问题——因为每次参数f更新之后,我们需要计算在M中出现所有提及的嵌入表示。为了解决这一问题,本文采用了一种分阶段的训练方法:首先,研究人员对提及编码f(m)进行了与训练,接着,一次性计算并且索引了所有提及的嵌入表示,这样就可以在训练下游QA任务的时候,保证这些嵌入表示是固定的。这个步骤之后被证明是相当关键的。
在本文中,研究人员使用了在知识库中的远程监督(distant supervision)方法,来完成对提及编码的训练。
具体来说,假设我们有由事实组成的开放域知识库,其中R是从到 的关系。接着,对于实体之间相互链接的文本语料库,我们自动定义在d同时提及 和的情况下的元组表示。使用这一数据,我们在阅读理解步骤中,学习去回答填充插槽查询,其中查询q是从实体和自然语言描述R中构造出的,而答案则需要从文段d中提取。使用q中的字符串表示,可以保证我们预训练设置和下流任务相似。
除此之外,为了高效的将上述表示转化为完整语料库设置,我们必须在预训练过程中同时提供负样例,比如,文章中并不包含答案的查询和文章对。
3
实验
文章在MetaQA数据集上进行了DrKIT的评估,下图展示了在1-3跳的子任务中,top-1检索实体的准确率,同时,还将本文的方法和最新研究进行了对比:
实验结果说明,DrKIT的准确率超越了前人的方法,在2跳和3跳问题上表现出了尤为突出的性能。
除此之外,和PullNet相比,DrKIT更针对处理时间最小的问题回答,下图显示了准确率和推断时间的权衡:
我们发现,DrKIT在处理具有更短处理时间的问题中,具有更高的准确率。除此之外,我们还可以观察到,DrKIT的运行时间相比PullNet要增加了5到15倍。
因为MetaQA数据集是在小型知识库中建造的,因此它存在一定的限制。因此,本文还考虑了一个全新的任务数据集WikiData,规模更大,并且具有更多的实体关系和文本段落。同时,这个新数据集还可以让我们在包含训练过程中并没有出现的文档和实体上进行测试。
下图显示了在WikiData上的实验结果:
我们可以看到,经过预训练之后的PIQA,的确极大地提高了预测的性能,但是在相同任务上,在预训练之后,DrKIT比它有着更高的性能提升,并且最终结果也明显超越了PIQA。
下图显示了PIQA和DrKIT两种方法的准确率和查询时间的权衡,我们可以观察到,由于实体提及扩展这一处理过程,DrKIT的运行时间增加了2到3倍。
HotpotQA(Yang等人, 2018)是一个包括大小超过10万的众包多跳问题集和基于Wikipedia文段的回答的数据集。本文在此数据集上进行了实验,下图展示了模型运行的结果,其中@k代表了top-k的检索准确率:
下图是2018年研究人员提出的基准,我们可以看到,和该基准相比,DrKIT都有明显优越的性能表现:
下图将DrKIT和前人提出的推断系统在运行时间,答案等维度上进行了对比:
我们可以看到,DrKIT的结果在明显超过前人提出基准的情况下,虽然没有达到最高性能,但是在整体运行时间上比前人要快100多倍。
4
结论
本文主要提出了一个可以回答多跳问题的可微DrKIT方法,这个方法是直接使用了大型实体相关的文本语料库。DrKIT主要用来模仿在知识库中的文本语料库遍历过程,并提供了在虚拟知识库中沿着关系搜寻的能力。在实验部分,本文在回答自然语言问题上的MetaQA数据集上实现了最好的性能。同时,由于本文使用稀疏操作和内积搜索,开发了一套高效的实现算法,因此相对于基准方法,在查询时间上实现了10到100倍的加速。