ACL 2019 | 通过问题分解和重新打分,让机器学会做多跳阅读理解

本文是由华盛顿大学以及艾伦人工智能研究所联合发表在自然语言处理顶会 ACL 2019 的一篇有关多跳机器阅读理解的文章,其代码已开源在:

https://github.com/shmsw25/DecompRC

概述

本文研究对象为多跳阅读理解(RC)。多跳阅读理解与单跳阅读理解的不同是它不能直接从文章中获取答案,需要一定的推理,因此也更具有挑战。由卡内基梅隆大学、斯坦福大学和蒙特利尔大学联合开发的 HotpotQA 数据集  [2]  就是一个多跳阅读理解的数据集,也是本文所使用的数据集,其推理类型有 bridging, intersection 和 comparison 等,我将在下一节介绍这几种推理类型的不同。

本文提出了一个系统 DECOMPRC,它将组合问题分解为更简单的可以通过现成的单跳 RC 模型来回答的子问题。 由于这种分解的注释成本很高,本文将子问题生成问题视作 span 预测问题,并通过实验展示了该方法仅使用 400 个带标签的样本进行训练就可以生成与人工编写的子问题一样有效的子问题。

本文还介绍了一种新的全局重新打分的方法,考虑每种分解来选择最佳答案,大大提高了整体性能。 本文关于 HotpotQA 数据集的实验表明了这种方法达到了最先进的结果,同时为以子问题的形式做出决策提供了可解释的证据。

主要工作

已有的多跳阅读理解方法侧重于回答关系查询,而本文专注于通过分解问题来回答自然语言问题。DECOMPRC 通过三个步骤回答问题:

首先,DECOMPRC 基于 span 预测,根据并行的几种推理类型,将原始的多跳问题分解为多个单跳子问题。

然后,对每一种推理类型,DECOMPRC 利用单跳阅读理解模型回答每个子问题,并根据推理类型组合答案。

最后,DECOMPRC 利用一个分解打分器来判断哪个分解是最合适的,并将该分解的答案作为最终答案输出。

上述所说的推理类型包括 bridging, intersection 和 comparison。bridging 类型(47%)需要找到第一跳证据,以便找到另一个第二跳证据,intersection 类型(23%)要求找到满足两个独立条件的两个实体,comparison 类型(22%)需要比较两个不同实体的属性。系统工作原理如下图所示,其中就给出了各种推理类型的样例,下面我将对各个模块原理进行详细说明。

▲   图1. 系统工作原理

组合问题分解

本文提出了一种使用问题的 span 预测来创建子问题的方法。其核心思想是,每个子问题都可以通过复制和适当地编辑原问题的关键片段来形成,每种推理类型都需要不同的片段。

该方法不需要太多的监督(400 个注释)。 注释是通过将问题映射成若干个点来收集的,这些点将问题划分为若干个区间。 本文训练一个模型 ,它学会将一个问题映射到 c 个点,然后通过算法 1 用 c 个点为每个推理类型组成子问题。

是在一个输入序列中 指向  c   索引 的函数,令 S=[s1,…,s11] 代表输入序列的 n 个词, 模型使用 BERT 编码 S:

其中  h  为编码器的输出维数。

令 表示一个可训练参数矩阵。计算一个指针得分矩阵:

其中 表示第  i  个单词是指针产生的第  j  个索引的概率。 该模型提取出推理时联合概率最高的  c  个指针:

单跳阅读理解

该模块的目标是在给定的子问题和 N 个段落中获得答案和证据。在这里,答案是一个段落的 span,YES 或 NO。证据是答案所以基于的那个段落。

给定 N 个段落 ,这种方法独立计算来自每个段落中的 和,其中 和 分别表示来自第 i 段的候选答案和表示第 i 段的不包含答案的分数。最终答案是从中具有最低 的段落选出的。

对于每个段落,让表示 BERT 编码子问题与片段的级联结果,计算四个分数 表示答案是否是段落中的一个片段、YES、NO 或不存在。

其中 max 表示输入序列上的最大池操作, 代表一个参数矩阵,此外,该模型计算的由起点和终点定义。

和分别表示第 j 个单词是答案空间的开始和第 k 个单词是答案空间的结束的概率。 和是由的第 j 个元素和 的第 k 个元素通过以下公式得到的:

其中 是参数方程。最终 answer 被确定为中的一个或 YES 或 NO,这取决于 中哪个值最高。

分解打分器

每个分解都由子问题、它们的答案和与推理类型相对应的证据组成。DECOMPRC 给分解打分并以得分最高的分解的答案作为最终答案。

设 t 为推理类型,和 为来自推理类型 t 的答案和证据。设 x 为问题、推理类型 t、答案和 串联而成的 n 个单词序列。分解打分器使用 BERT 来编码这个输入 x 得到 ,得分计算公式为:

其中 是可训练的矩阵。

在推理过程中,将推理类型确定为 ,并选择与此推理类型对应的答案作为最终答案。

实验结果与讨论

本文在 HotpotQA 上做了实验,将 DECOMPRC 与 HotpotQA 数据集上的最新技术和强基线模型进行了比较,结果如下所示:

在干扰项设置和完整 wiki 设置中,DECOMPRC 都比所有对比实验表现得更好。此外,虽然 BERT 在单跳阅读理解上训练获得了很高的 F1 分数,但在单跳不可解的样本中,DECOMPRC 的性能大大优于 BERT。

本文还通过收集了一组新的干扰项段落以及创建一组相反的比较问题来评估 DECOMPRC 的健壮性,结果表明 DECOMPRC 健壮性更好。本文还进行了消融实验,结果表明本文基于 span 的子问题和人工编写的自由形式的子问题一样有效。

本文还存在一定的局限性。其一,一些问题不能分解,但是需要隐式多跳推理。其二,有些问题是可以分解的但是每个子问题的答案并不是在文本中明确存在的,而是必须通过常识推理来推断。其三,所需的推理有时超出了本文的推理类型(例如计数或计算)。

启发与思考

预训练模型作为迁移学习的一种思路被研究者们广泛使用。使用预训练模型的好处有弥补数据量的不足,加快模型的训练速度、找到好的初始化参数等等。文本的预训练模型有很多种,从传统的 word2vec、GloVe 到后来的 ELMO [3] 、GPT  [4] 、BERT  [5]  等,各种预训练模型如雨后春笋般涌现了出来。

本文就将 BERT 这个预训练模型应用到了整个系统的各个模块中。在子问题生成任务中,本文训练一个 模型,它学会将一个问题映射成 c 个点,然后通过算法 1 用 c 个点为每个推理类型组成子问题,其中使用了 BERT 将问题进行编码。通过此方法分解得到的子问题与人工编写的子问题一样有效,这得益于BERT通过语言建模学习到句子的语法信息。

在解决阅读理解问题中,本文同样使用了 BERT 对子问题以及段落进行编码,所不同的是本文提出的 DECOMPRC 模型还加入了打分器,增强了模型的可解释性,为其答案推理提供了依据,使得 DECOMPRC 在单跳不可解问题上表现得比传统的 BERT 要好。

这种做法给我们的启示是现在有大量优秀的文本预训练模型,这使得我们不用再去纠结句子编码的问题,而可以把更多的注意力放到特定任务上。在文本预训练模型上针对特定任务进行改进也是近年来各大顶会的热点。

参考文献

[1] Min S, Zhong V, Zettlemoyer L, et al. Multi-hop Reading Comprehension through Question Decomposition and Rescoring[J]. arXiv preprint arXiv:1906.02916, 2019.

[2] Yang Z, Qi P, Zhang S, et al. Hotpotqa: A dataset for diverse, explainable multi-hop question answering[J]. arXiv preprint arXiv:1809.09600, 2018.

[3] Peters M E, Neumann M, Iyyer M, et al. Deep contextualized word representations[J]. arXiv preprint arXiv:1802.05365, 2018.

[4] Radford A, Narasimhan K, Salimans T, et al. Improving language understanding by generative pre-training[J]. URL https://s3-us-west-2. amazonaws. com/openai-assets/researchcovers/languageunsupervised/language understanding paper. pdf, 2018.

[5] Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.