T-Reader: 一种基于自注意力机制的多任务深度阅读理解模型
2018-12-20郑玉昆刘奕群马少平
郑玉昆,李 丹,范 臻,刘奕群,张 敏,马少平
(1. 清华大学 计算机系,北京 100084;2. 阿姆斯特丹大学 ILPS,荷兰 阿姆斯特丹 1098XH)
0 简介
近年来,机器阅读理解发展迅速,成为了深度学习领域的热点。随着多个阅读理解与问答数据集的发布,越来越多端到端的深度学习方法被提出,算法性能上取得了极大进步。数据集方面,斯坦福问答数据集SQuAD[1]和微软阅读理解数据集MS MARCO[2]是两个目前最为流行的真实问答数据集。其中,SQuAD属于抽取式的问答数据集,但不同于以往类似数据集的是,SQuAD数据集涉及了多种模式的上下文逻辑推理。MS MARCO数据集从Bing搜索引擎中收集问题的文档,答案不再具有约束,即一些答案可能由用户撰写,存在无法与段落完全匹配的文字或者同时包含多个段落片段。MS MARCO数据集的设置更接近真实阅读理解与问答的情景,同时任务也更具有挑战性。目前两个数据集的最新排行榜上机器均取得了超过人类平均水平的成绩,极大地推动了深度学习在自然语言理解的发展。
此次2018机器阅读理解技术竞赛采用全新的DuReader数据集[3],与MS MARCO数据集类似,DuReader采用了来自百度搜索引擎的真实查询词作为问题,从搜索引擎检索的顶部文档中进行答案标注。因此,此次比赛具有更真实的任务设定,同时面临查询意图模糊、多文档、多段落、答案可能不在文档中出现等多方面挑战。
本文介绍了在此次比赛中我们使用的模型设计以及实验结果。为了应对复杂的实验挑战,我们在R-Net模型基础上设计了基于自注意力机制的多任务深度阅读理解模型T-Reader。模型的主要扩展有以下三点:
(1) 在模型中加入了跨段落和跨文档两个级别的注意力机制,使得问题下所有的段落能够实现信息交互。
(2) 在预测答案范围的基础上加入了基于预测答案的段落排序网络,使用增强学习的方法直接优化评价指标。
(3) 借鉴信息检索领域中排序学习(learning to rank)的常用方法,手动提取了问题—段落精准匹配特征作为额外的模型输入,显式地捕捉问题词项在段落中的分布模式。
我们将模型分别在search和zhidao两种数据集上单独进行训练、验证和测试,最终在Test v2测试集取得了Rouge-L为54.41,BLEU-4为47.77的表现,在所有参赛队伍中性能表现获得第八名。
1 相关研究工作
1.1 相关数据集
在斯坦福问答数据集SQuAD[1]出现之前,传统的机器阅读数据集主要分为两类: (1)通过人工标注建立的阅读理解数据集,这种数据集一般数据规模很小,难以用于深度模型的训练; (2)从真实语料中抽取段落构成的数据集,其中各个段落中部分词汇被去除,模型的训练目标为判断句中缺失的单词,补全句子。受数据规模和质量影响,传统的阅读理解问题研究进展缓慢。2016年发布的SQuAD真正为机器阅读理解领域提供了一份数据量大且标注可靠的真实问答类数据集,有力推动了机器阅读理解领域的研究。
另一份大规模数据集,微软阅读理解数据集 (MS MARCO)[2]则直接向用户提供多个相关文档摘要,并直接采用用户的答案作为标准答案,这种生成式的问答问题更加贴近实际,也对问答模型的性能提出了更高的要求。
1.2 基于深度学习的问答系统模型
早在SQuAD数据集产生之前,许多团队已经将深度学习方法应用于阅读理解的相关问题,并取得了不错的效果。Hermann等人受到机器翻译和图像识别领域成果的启发,第一次在机器阅读理解领域引入了注意力机制(attention)的概念,进行问题和答案对应的向量及单个字词的权重交互[4]。Kadlec等人在模型中引入指针网络(pointer network),结合指针网络和注意力机制进行缺失单词的预测[5]。
在SQuAD发布后,不断有端到端的深度模型被提出。Wang和Jiang首先提出Match-LSTM模型[6],实现了基于单词的带权重匹配和单词间的信息交互;之后他们又进一步将指针网络和Match-LSTM模型结合[7],使模型能够预测SQuAD数据集中每一个问题对应的最佳答案在文中的起止位置。基于Match-LSTM和指针网络,微软亚洲研究院的研究人员提出了R-Net模型[8]。R-Net模型在问题—答案注意力计算的基础上又引入了自我匹配注意力机制(self-matching attention),并结合使用了词项、字符两种表示,继续提升了模型在SQuAD和MS MARCO数据集上的效果。
为了完成MS MARCO类数据集中生成答案式的任务,Tan等人在R-Net的基础上又提出了S-Net[9],该模型通过提取特征-生成答案两部分,利用已有模型和思路提取特征后,使用双向GRU进行答案生成。
2 模型设计
在实现T-Reader的过程中我们主要参考了R-Net的模型设计,包括编码层、问题—段落匹配层、段落匹配层和指针网络。除此之外,我们新加入了基于预测的答案范围和段落文本表示的段落排序网络。在实现T-Reader的过程中,我们也针对比赛任务进行了特殊的设计,例如,加入问题—段落精准匹配信号、文档标题信息以及段落位置信息等。T-Reader模型框架如图1所示。
图1 T-Reader模型框架
2.1 编码层
对于问题和段落文本,我们采用了类似R-Net的处理方法,使用循环神经网络处理变长的词项序列。循环神经网络(RNN)有很多变种,例如,LSTM和GRU等。以往工作中[8-9],GRU在效率和效果上均有很好的表现,所以本次工作中我们也沿用了GRU作为循环神经网络的实现。除了词项级别的表示外,R-Net还使用了字符级别的词嵌入向量,用于表示未出现在词表中的词项。在实现过程中,囿于计算资源有限,我们没有采用字符级词嵌入向量。
(1)
(2)
2.2 问题—答案匹配层
其中,ct通过基于注意力机制的问题和段落交互得到式(8)~式(10)。
(11)
2.3 段落匹配层
其中,ct通过基于段落的自注意力机制得到式(15)~式(17)。
特别地,为了增强模型对于文档表示的学习能力,我们尝试了多种自注意力机制的作用级别: 段落级别、文档级别和问题级别,即分别将一个段落、文档和问题下所有文档作为自注意力层的输入。经过测试,我们最终选取了文档级别作为最终的实现。尽管在我们的测试中,较高的级别带来越好的模型表现,但这也意味着模型需要占用越大的计算资源和越长的训练时间,此时的模型提升却十分有限。为了弥补问题级别文档信息交互的缺失,我们引入额外的文档信息交互层。首先,对于文档di={pi1,pi2,…,pis},我们将循环神经网络最后一个时刻的隐状态作为文档的表示oi,如式(18)所示。
oi=BiGRU(pi1,pi2,…,pis)
(18)
(19)
2.4 指针网络
指针网络,也是模型中预测答案范围的输出层,我们在此部分沿用了以往工作中的常见做法。首先我们使用循环神经网络重新对段落中每个词项表示进行学习,如式(20)所示。
(20)
特殊地,在初始时刻,我们使用问题向量表示rq作为GRU的初始状态,如式(21)~式(23)所示。
2.5 段落排序网络
该网络用于最小化答案质量得分sp与段落p中当前预测答案的Rouge-L值的误差。
3 实验结果
3.1 实验数据与评价指标
实验数据采用本次机器阅读理解比赛提供的数据集DuReader,预先分为训练集、验证集和测试集三部分。数据集包含30万问题和超过100万文档。每个数据样本可以归纳为四元组: {q,t,D,A},其中q是问题,t是问题类型,D是相关文档集合,A是人工生成的标准答案集合。问题类型包含三类: 是否类(YesNo)、实体类(Entity)、描述类(Description)。数据根据文档来源分为search和zhidao类,分别来自百度搜索和百度知道。经过观察,我们发现两类文本存在不同: zhidao类文档内容多由网站用户生成,文档平均长度更长且答案更加显式清楚地在文中分布。
DuReader数据集的主要特点为答案较多样、存在答案改写。具体表现为zhidao中70.8%的问题和search中62.2%的问题都包含多个答案。答案和文档的编辑距离较大,其中51.3%的样本的最小编辑距离(minimum edit distance)大于10。平均来说,问题包含4.8个词,答案包含69.6个词,文档包含396个词。
实验采用Rouge-L和BLEU-4作为评价指标。Rouge-L衡量准确率和召回率,考察候选答案和参考答案在最长公共子序列上的准确率和召回率。BLEU-4衡量准确率,考察一元至四元词汇共现的频率。两个指标共同反映答案的可信度和可读性。
3.2 数据分析
本次实验我们仍然采取段落抽取连续片段的方式得到最终的预测答案。但DuReader数据集存在答案无法与段落完全匹配的情况,因此为了验证答案抽取的方式能否在当前数据上取得较好的表现,我们在图2中统计了所有问题下最佳答案片段的Rouge-L值的分布。其中,search和zhidao均有超过95%的问题能够在文档中找到Rouge-L大于0.7以上的连续答案片段。二者互相比较可以发现,zhidao数据下该分布较search更为集中,超过90%的问题按照答案抽取的方式能够找到标准答案。基于以上分析,我们认为答案抽取的方式可以在当前数据集上取得较好的表现。
图2 数据集search和zhidao中问题最佳抽取式答案片段的Rough-L分布
3.3 实验设置
本次实验中,我们在全量数据集上采用在默认参数下的Skip-gram模型训练得到维度为300的词嵌入向量,依据词频取前50万个词项作为模型词嵌入层的大小,未包含在词项中的词项统一记为UNK。模型基于PyTorch实现,所有GRU均为1层,其隐向量维度为150。对于文本序列的处理,模型最多保留问题和段落的前40和500个词项。模型的丢弃率(dropout rate)为0.2,初始学习率(learning rate)为0.01,优化器使用Adadelta。模型训练时批处理大小(batch size)为2,使用两个GPU加速计算。训练迭代10万轮后在训练集和验证集上达到收敛,用时4天。
3.4 损失函数
对于答案范围预测网络,我们使用交叉熵作为损失函数,如式(30)所示。
Lspan=-log(p(posstart))-log(p(posend))
(30)
其中,posstart和posend分别为全局最佳答案的起始和终止位置。对于段落排序网络,我们使用平均平方误差(MSE)作为损失函数,如式(31)所示。
(31)
其中,rpred为模型预测的Rouge-L值,rtarget为当前预测答案真实的Rouge-L值。最终模型的损失函数为二者的和,如式(32)所示。
L=Lspan+Lrank
(32)
3.5 答案生成
我们采用了官方提供的BiDAF和Match-LSTM模型作为基线方法。NI-Readers为本次评测第一名的方法。表1报告了T-Reader和其他基线方法在Test v2数据上的表现, 其中,T-Readersub表示去掉段落排序网络的T-Reader模型。可以看出,T-Reader模型取得了优于基准模型BiDAF、Match-LSTM和R-Net的表现,但较此次比赛的最佳方法NI-Reader仍有较大的差距。在去掉段落排序网络后,T-Reader在Rouge-L和BLEU-4表现上均有下降,因此可以认为基于增强学习的段落排序网络可以提升模型效果。
表1 Rough-L和BLEU-4结果比较
3.6 样例分析
我们对不同模型生成的答案进行了样例分析,示例如图3所示。样例A中T-Reader正确预测出答案,而BiDAF模型预测的答案尽管也相关,但不够简洁。另外,我们发现存在部分T-Reader生成的答案在语义层面能够被纳为一个合格的答案,但在指标上却比较低。我们认为这是由两个主要原因造成的。一是文档中具有多个答案,而人工标注的至多三个参考答案无法完全覆盖。例如样例B中,T-Reader和BiDAF生成的答案从逻辑上都可以认为是正确的,但是由于与参考答案重合较少,两个系统得分较低。二是评价指标(如Rouge-L)无法考虑语义,使得系统评价存在偏差。例如样例C中,T-Reader生成的答案是不正确的,但是得分较高;而BiDAF生成的答案是正确的,但由于过多解释性的内容使得其得分反而降低。
图3 答案样例展示答案后的数字表示Rouge-L值
4 总结
本次比赛我们设计并实现了基于自注意力机制的多任务机器阅读模型T-Reader。在参考R-Net基础上,我们在编码层加入问题与段落精准匹配信号、段落位置信息以及问题类型扩展文本表示,在段落匹配层引入跨段落和跨文档两级的信息交互,同时在指针网络后加入了基于强化学习的段落排序网络,进一步提升了模型效果。
在未来工作中,我们希望能够对段落位置因素对模型效果的影响进行分析,同时优化模型设计,减少参数数量,降低计算空间占用。