摘要
我们介绍了一种将神经段落级问答模型适应于以整个文档作为输入的情况的方法。当前大多数问答模型无法扩展到文档或多文档输入,并且天真地将这些模型独立地应用于每个段落,这通常会导致它们被无关紧要的文本分散注意力。我们表明,通过使用改进的训练方案(教模型忽略不包含答案的段落),可以显着提高性能。我们的方法涉及从每个文档中采样多个段落,并使用一个要求该模型产生全局正确输出的目标函数。我们还会识别和改进在处理文档级数据时出现的许多其他设计决策。 在TriviaQA和SQuAD上进行的实验表明,我们的方法改进了现有技术,包括在TriviaQA上获得了10点的增益。
1.介绍
教机器回答用户生成的任意问题是自然语言处理的长期目标。对于广泛的问题,现有的信息检索方法能够找到可能包含答案的文档。但是,从这些文本中自动提取答案仍然是一个挑战。神经模型最近在回答相关段落的问题上取得了成功,表明它们有潜力成为解决该问题的关键部分。大多数神经模型无法扩展到长文本,因此通常这需要对段落级模型进行调整以处理文档级输入。
本论文中的任务有两种基本方法。1)管道方法从输入文档中选择单个段落,然后将其传递到段落模型以提取答案。2)基于置信度的方法将模型应用于多个段落,并以最高置信度返回答案。置信度方法的优点是对(通常不那么复杂)段落选择步骤中的错误具有鲁棒性,但是它们需要一个模型,该模型可以为每个段落生成准确的置信度分数。正如我们将要展示的那样,简单的模型训练方法通常很难满足这一要求。
在本文中,我们首先提出一种改进的管道方法,该方法可实现最新的结果。然后,我们介绍了一种模型训练的方法,以准确的产生每个段落的置信度得分,并且我们展示了如何将此方法与多个段落选择相结合来进一步提高性能。
我们的管道方法致力于解决文档级数据训练所带来的挑战。我们使用线性分类器来选择要训练和测试的段落。由于处理整个文档非常昂贵,因此通常会远程管理此类数据,这意味着仅知道答案文本,而不知道答案范围。为了处理由此产生的噪音,我们使用求和目标函数,该函数将答案文本出现的所有位置的模型输出边缘化。我们将这种方法与模型设计结合起来,该模型设计结合了阅读理解模型中的一些最新思想,包括self-attention和bi-directional attention。
我们的置信度方法扩展了此方法,以更好地处理多段落环境。先前的方法在给定问题及与问题相对应的包含答案的段落上训练了模型。这有几个缺点:没有训练模型为不包含答案的段落产生低的置信度得分,并且不以训练段落之间的置信度对比得分为目标。我们通过抽取上下文文档中的段落(包括不包含答案的段落)进行训练来解决这些问题。然后,我们使用共享正则化目标函数,其中段落是独立处理的,但是候选答案的概率在从同一文档中采样的所有段落中都被边缘化了。即使每个段落都独立处理,这也要求模型产生全局正确的输出。
我们在Wiki,Web和未经过滤的环境中评估我们在TriviaQA上的工作。与已发布的先前工作相比,我们的模型领先了将近10点。我们还对管道方法进行了消融研究,我们在改进版本的SQuAD上展示了多段落方法的有效性,该版本仅知道正确的文档而不是正确的段落。最后,我们将模型与网络搜索后端结合起来,构建了一个演示性的端到端QA系统,并表明该模型在TREC问答任务中的问题上表现良好。我们发布了代码以方便将来的工作。
2.管道方法
在本节中,我们提出一个管道QA系统,在该系统中,首先选择一个正确段落,然后将其传递给段落级别的问答模型。
2.1 段落选择
如果只有一个原始文档,则选择和问题具有最小TF-IDF余弦距离的段落。使用文档中的各个段落来计算文档频率。如果存在多个输入文档,我们发现可以使用线性分类器,并以下面几项作为特征:1)TF-IDF分数,2)该段是否是其文档中的第一段,3)该段之前的字符数量以及4)该段中包含的疑问词数量。在选择至少包含一个答案范围的段落的远程监督目标下训练分类器。在TriviaQA网站上,相对于通过先前的工作来截断文档,这将所选文本包含正确答案的机会从83.1%提高到85.1%。
2.2 处理噪声标签
在远程监督的环境中,我们将与答案文本匹配的所有文本跨度标记为正确。这会导致训练的模型选择了不需要的答案范围。图1包含一个示例。为了解决这一难题,我们使用了与Kadlec et al. (2016)的目标函数相似的求和目标函数,这优化了选择任何正确答案范围的负对数概率。我们在这里考虑的模型通过独立预测答案范围的开始和结束字符来起作用,因此我们对两次预测都采用这种方法。例如,预测答案开始字符的目标函数为
,其中
是开始答案的字符组,
是模型针对字符
预测的答案开始概率。此目标函数的优点是与模型如何在可能的答案跨度上分布概率质量无关,从而使模型仅专注于最相关的跨度。
2.3 模型
我们使用具有以下几层的模型(如图2所示):
(1)嵌入层
我们使用预训练的单词向量嵌入单词。我们将这些与由字符向量生成的单词嵌入串联起来,字符嵌入是通过使用学习的嵌入矩阵嵌入字符,然后应用卷积神经网络和最大池化来产生的。
(2)预处理层
共享的双向GRU用于处理问题和段落嵌入。
(3)注意力层
双向注意力流(BiDAF)模型中的注意力机制用于构建基于问题的上下文表示。令
和
为上下文单词
和问题单词
的向量,
和
分别为问题和上下文的长度。我们将上下文单词
和疑问单词
之间的注意力计算为:
其中
,
和
是学习向量,
是逐元素乘法。然后,我们为每个上下文单词计算一个参与向量
:
我们还计算了一个问题到上下文向量
:
每个单词的最终向量是通过将
,
,
和
串联而构建的。在我们的模型中,我们随后将结果传递给具有ReLU激活的线性层。
(4)Self-attention层
接下来,我们使用一层残差self-attention。输入通过另一个双向GRU。然后,我们仅在段落与其自身之间应用相同的注意机制。在这种情况下,我们不使用问题到上下文注意力,如果
,则设置
。
和以前一样,我们将连接的输出通过带有ReLU激活的线性层。然后将结果与原始输入相加。
(5)预测层
在模型的最后一层中,应用了双向GRU,然后是线性层,以计算每个单词的答案开始分数。然后,将隐藏状态与输入串联,并馈入第二个双向GRU和线性层以预测答案结束得分。softmax函数应用于开始和结束分数,以产生答案的开始和结束概率。
(6)Dropout
我们对所有GRU的输入和注意机制的输入均采用了0.2的dropout。
3.置信度方法
我们通过针对每个跨度使用未标准化且未经指数化(即,在应用softmax运算符之前)的分数作为模型置信度的测量来对该模型进行调整。对于我们在此处使用的基于边界的模型,跨度的分数是为其起点和终点字符被赋予的分数之和。在测试时,我们在每个段落上运行模型,并选择具有最高置信度的答案范围。这是Chen et al. (2017a).采用的方法。
我们在第5节中的实验表明,如果像以前的工作那样仅对包含答案的段落进行训练,则这些置信度得分可能会很差。表1包含了发生错误的一些定性示例。
我们假设有两个主要的错误来源。首先,对于使用softmax目标函数训练的模型,可以在不更改所得softmax概率分布的情况下,将所有跨度的pre-softmax分数任意增加或减少一个恒定值。结果,没有什么可以阻止模型产生的分数在一个段落中比另一个段落更大或更小。其次,如果模型仅看到包含答案的段落,则对于先验已知存在答案的启发式方法或模式可能会变得过分自信。例如,该模型可能过于依赖于选择与所询问的问题的语义类型相匹配的答案,从而导致该类型的其他实体出现在不相关的文本中时很容易分心。将干扰词添加到上下文中时也观察到这种错误。
我们实验了四种训练模型的方法,以产生可对比的置信度得分,如以下几个小节所示。在所有情况下,我们都将不包含答案的段落作为附加训练点。
3.1 共享标准化
在这种方法中,使用了修改后的目标函数,其中跨度的开始和结束得分在从相同文档中采样的所有段落中均被标准化。这意味着来自相同文档的段落在最终的softmax操作中使用共享的归一化因子。我们通过在每个mini-batch中包含来自同一文档的多个段落来实现此目标。关键思想是,这将迫使模型产生在各段之间可比的分数,即使该模型无法访问有关正在考虑的其他段落的信息。
3.2 合并
作为先前方法的替代方法,我们尝试在训练过程中将从相同文档中采样的所有段落连接在一起。在每个段落之前添加带有可学习的段落分隔符标记嵌入。
3.3 无答案选项
我们还尝试允许模型为每个段落选择特殊的“无答案”选项。首先,我们将目标函数重写为:
其中
和
是模型为单词
生成的起点和终点的分数,而a和b是正确的起点和终点单词。我们让模型计算另一个分数
,以表示被赋予“无答案”概率的权重。我们修改后的目标函数变为:
如果答案存在,则
为1,否则为
。如果有多个答案范围,我们将使用相同的目标函数,其中分子包括所有答案开始和结束标记的总和。
我们通过在模型末尾添加一个额外的层来计算
。我们通过获取RNN的隐藏状态总和(用于预测由开始/结束概率加权的开始/结束字符分数)并在自注意层的输出上使用学习到的注意力向量来构建输入向量。进入具有80维隐藏层和ReLU激活的两层网络,该激活将生成z作为其唯一输出。
3.4 Sigmoid
作为最终baseline,我们考虑具有sigmoid损失目标函数的训练模型。也就是说,我们通过将sigmoid函数应用于每个单词的开始/结束分数来计算每个单词的开始/结束概率。对每个单词概率使用交叉熵损失。直觉是,由于评分是相互独立评估的,因此它们在不同段落之间的可比性更高。