本文实际上没提出新的模型,就是做了各种实验去验证各类小trick是否有效。
简介
这篇文章主要讲的是用BERT去做QA任务,其实主要是阅读理解。
较早的工作也有用BERT去做阅读理解的,但是有几个问题:首先,将对应同一问题的不同文章视为独立的训练实例,可能导致答案的得分是不可比较的。所以,对于对应同一问题的不同文章,需要有一个全局的标准化分数。其次,先前的工作把篇章,段落,句子都定义为文章。但是,关于文章适当的划分粒度没有得到充分的探讨。第三,先前工作显示,排序模块对于召回高质量的文章是非常有用的,但是,BERT是否也需要排序?第四,大部分效果好的阅读理解模型高度依赖于问题与篇章的交互式匹配(explicit inter-sentence matching),然而BERT仅仅在问题-文章pair上用了self-attention层。对于BERT是否可以做句子级别的匹配其实尚无定论。
本文在OpenSQuAD数据集上的实验表明,(1)当需要从大量的文章中定位答案时,全局标准化的得分使得QA模型会更加鲁棒。(2)可以通过100词的滑动窗口,把篇章拆分成若干文章,这个做法可以带来4%提升。(3)排序采用BERT-based带来了额外2%的提升。(4)BERT做交互式匹配没什么用。
模型
开放领域QA中阅读理解就是给定问题Q,以及一个文章P,目的是找出文章中问题所对应答案所属的段落,用记号标识答案起始位置,用记号标识答案结束的为止。其实就是在对答案在篇章中的起始与开头位置做预测。更形式化的表达就是:
其中指的是答案的起始位置的概率,是结束位置的概率,答案所属段落概率就是它两的联合概率。
BERT-RC
BERT-RC模型是把文章作为BERT的textA,问题作为textB作为输入的,大概就是这样:。然后分别用两个不同的dense层去预测 和。在训练过程中,起始位置与结束位置的对数似然是各自独立优化的。然后预测过程中BERT-RC独立地处理不同的文章,然后选择得分最高的文章的答案作为最终答案。如果不同的文章中,答案所属的那段文字是相同的,则把两个文章答案的得分累加。这部分可以参考BERT的原始论文中做SQuAD实验的那部分。
Multi-passage BERT
对于不同的文章,BERT-RC计算与 的时候是独立的。换句话说,就是对于,如果一个问题,与这个问题相关的文章有n条,那么模型会独立做n次预测,每次预测没有关联。这会导致一个什么问题?
问题出在softmax上,就是模型做预测的时候,需要经过一层softmax,实际上,softmax有个特性是,所有维度加一个常数,结果是不变的。换句话说计算[100,99,98,97]与[10,9,8,7]的结果是一样的,softmax不在乎pre-softmax绝对值大小,只在乎相对差距。这意味着,比较两篇文章得分大小有时候没有意义,因为某篇文章socre小可能仅仅是它与其他开始结束符的候选拉不开差距。所以可以利用一个全局的归一化方法去把与答案相关的所有文章的得分在同一尺度下归一化。
Passage ranker
排序模块就是对高质量的文章做一个召回。本文用了另一套BERT去做召回,第一步,用BERT的[CLS] token去预测文章与答案的相关性得分(我估计应该是个二分类问题,文章包含问题的答案就是1,不包含就是0)。然后把所有文章的得分输给一个softmax,然后尝试优化,其中是排序得分。
实验
数据集
1. *OpenSQuAD* 1. *TriviaQA* 1. *Quasar-T* 1. *SearchQA*
实验设置
模型分析
首先,每个篇章按照不同的长度进行切分成没有重叠的若干份文章,文章长度的选择有{50,100,200}。实验结果如Table1中2、3、4行所示。可以看出,相比篇章拆分成句子级别(Table 1中第一个实验),按照字数拆分的效果会好一些。
- 滑动窗口效果实验
强制按照字符数拆分可能会把答案拆分到两个文章中去,这样容易丢失上下文。为了避免这一点,所以不再限制拆分的文章没有重叠,而是通过滑动窗口进行文章截取。具体做法是,假设限制窗口大小未100个词,然后每50个词(窗口大小的一半)进行一次滑动。结果呈现在Table 1的实验。可以看到效果提升还是蛮大的。
- 排序模块的效果
直接看7、8、9的实验结果就好了,就是说明下8,9的区别,8是在最终的预测答案的目标函数里没有用到排序得分,9是用到了文章(排序)得分。7、8可以看出,排序是有效果的,8、9可以看出,预测答案的目标函数加入文章(排序)的得分优惠提供0.9%的EM与1%的F1。
- 全局标准化的效果
看图1,总体可以看出,如果没有排序模块与全局标准化,F1的损失随着文章数量的增长是巨大的。然后全局标准化的加入,使得文章数量大的情况下,即使没有文章得分也不会有F1上的损失。这主要是因为,随着文章数量增多,如果没有排序,模型并不清楚问题与哪个文章相关,而缺少全局标准化,使得模型也无法准确的衡量各文章之间的答案得分。
- 交互式匹配是否有效?
本文做了一个实验查看交互式匹配的效果,那么,首先Q、P需要分别encode,然后输给QANet,实验结果是Table 1的10行。结果惨不忍睹。这是因为BERT的参数产生了灾难性遗忘。为了解决这个问题,在训练QAnet的过程中,fix住BERT的参数,Table 1的11行显示出这样做有很大提升,但是仍然比multi-passage BERT差一点(第6个)。实验12是说,使用11的模型,接着这个模型继续训练,这次同时调整BERT与QAnet的参数,结果稍微好那么一点,但是仍然和multi-passage BERT有差距。这个原因可能是,Q、P输入同一个BERT,在multi-head attention的作用下,其实已经产生了类似于句子交互的效果。
与SOTA模型的比较