孙 付,李林阳,邱锡鹏,刘 扬,黄萱菁
(1. 复旦大学 计算机学院,上海 201210; 2. 流利说 硅谷人工智能实验室,美国 旧金山 94104)
机器阅读理解在自然语言处理领域是一个具有挑战性的任务,其要求计算机能够在阅读文章内容后回答与文章内容相关的问题。得益于深度学习技术的快速发展和SQuAD[1-2]数据集的提出,基于神经网络的端到端模型[3]在机器阅读理解任务上取得了丰硕的成果。
SQuAD 1.1[1]的文章选自开放领域的维基百科,问题和答案通过人工标注产生。SQuAD 1.1的局限性之一是每个问题在原文中都有正确的答案,因此模型只需要选择文章中最相关的文本作为答案,而不必判断原文中是否有此问题的答案。为了弥补SQuAD 1.1的不足,斯坦福大学将一些无法通过原文回答的人工标注问题加入到SQuAD 1.1中,构造了新的数据集SQuAD 2.0[2],如图 1所示。新数据集要求机器阅读理解系统能够判断哪些信息通过原文不能获得。
图1 SQuAD 2.0 示例
为了能够处理无法回答的问题,模型需要在理解问题和原文后,判断是否可以回答给定问题,如果可以回答,则确定答案范围。已经存在大量答案选择方面的工作,因此该任务的主要挑战在于如何可靠地判断原文是否能够回答给定的问题。
一种是Hu等人提出的引入答案验证程序的方法[4],先确定疑似答案,然后通过找到的疑似答案来确定问题是否可以回答。这种方法使用流水线式结构,需要答案选择和答案判别两个模型,两个模型分别训练,找答案时获取的信息除答案信息外,不能传递到答案判别模型中。
随着大规模预训练语言模型[5-6]的提出,一些模型开始基于此类预训练模型处理机器阅读理解问题,效果优于现有模型,但是计算成本高,效率较低。
本文为了使用统一模型而不引入过多的参数和计算量处理机器阅读理解问题,将带有无法回答问题的机器阅读理解任务分解为三个子任务: 答案范围选取、无答案指示和答案验证。由于这三个子任务是高度相关的,因此我们通过共享一些知识将具有无法回答问题的机器阅读理解任务视为多任务学习问题[7]。
我们通过U-Net将三个子任务整合到一个统一的模型中: ①答案选择器,用于预测问题的候选答案范围; ②无答案指示器,当问题无答案时避免答案选择器选取文本; ③答案验证器,用候选答案信息辅助判断问题是否可以回答。此外,我们还引入了一个U节点,将问题和文章连接成一个序列,这大大提高了U-Net的简洁性。U节点同时获得问题和文章的信息,以判断问题是否可以回答。SQuAD 2.0数据集上的实验结果表明,U-Net有效预测了问题的不可回答性,F1分数达到74.9,优于所有提交的不基于BERT[5]、GPT[6]等的大规模预训练语言模型。在不需要判断问题是否可以回答的“莱斯杯”中文军事机器阅读理解竞赛中,我们的模型ROUGE-L得分90.0,BLEU-4得分83.4,其中BLEU-4得分优于其他所有参赛模型得分。
U-Net对文本建模的方法与BERT类似,但BERT的U节点只能通过自注意力机制获取信息,我们的模型采用多种方式获取全局信息,显得更加高效。模型基础编码组件采用LSTM[5]而不是Transformer[8],LSTM对于超参鲁棒性更好,在不进行预训练时,LSTM更容易收敛,且参数量更少。相比于BERT Large[5]340M的参数量只能通过高性能图形处理器来处理数据,我们的模型只需要10M参数即可获得可靠的结果。
本文的贡献可归纳如下:
(1) 将带有无法回答问题的机器阅读理解任务分解为三个子任务,并用一个统一模型来解决这三个任务;
(2) U-Net引入通过多种方式获取信息的U节点来编码问题和文章的公共信息,信息融合过程更合理;
(3) U-Net只需要BERT参数的1/34即可取得可靠的结果。
(4) U-Net不需要大规模预训练语言模型。
(5) U-Net在中英文数据集上均表现优秀。
SQuAD是斯坦福大学发布的机器阅读理解领域经典且富有挑战的数据集。
针对每个问题都有明确答案的SQuAD 1.1,研究机构提出了一大批优秀的端到端模型[3],这些模型的共同特点是由三个基础组件构成: 编码层、交互层和指针网络[9]。编码层最初广泛使用以GloVe[9]为代表的静态词向量,后来发展出来以Elmo[10]为代表的动态词向量;交互层主要通过各种注意力机制实现,用于信息的交互与融合;指针网络则用于指示答案的开始和结束位置。当前流行的BERT[5]比较特殊,BERT本身既是编码层也是交互层,设计过程吸收了动态词向量和交互层的优点。
SQuAD 2.0中设置了一些根据提供的文章内容不可回答的问题。最直观的想法是采用Hu等人[11]提出的流水线式的解决方法,该方法首先使用在SQuAD 1.1中表现良好的模型查找问题的可能答案,然后用另一个分类模型判断找到的可能答案是否能回答原问题。随着人们对BERT[5]用法的研究,使用BERT处理SQuAD 2.0的做法开始出现,这些方法均利用BERT的CLS节点对问题的可回答性进行分类。本文提出的U-Net模型的U节点位置上与BERT的SEP节点相同,功能上具有BERT中CLS节点的部分功能。
本文的部分内容使用英文非正式地发布在arxiv上,供以英语为母语的研究人员阅读[12]。
本文可以将机器阅读理解任务抽象表示为三元组(Q,P,A),其中Q=(q1,q2,…,qm)表示m个单词的问题,P=(p1,p2,…,pn)表示n个单词的文章,而A=prs:re是答案,其中rs和re表示答案在文章中的起点和终点,目标是估计条件概率P(A|Q,P)。
本文提出的U-Net模型的主要结构如图 2所示,将主要代码开源在http://github.com/FudanNLP/UNet。U-Net包含四个主要模块: 统一编码模块,多级注意力[13](multi-level attention)模块,信息融合模块和预测模块(pointer)。我们首先将问题和文章的词向量表示与U节点拼接在一起;再将它们的嵌入表示通过BiLSTM[14]对整个序列进行编码;再通过注意力机制进行信息交互;然后,将词向量信息及注意力机制产生的信息通过自注意力机制(self attention)[8]进行融合;最后将融合后的信息送入预测模块进行多任务训练。在U-Net中,U节点(universal node)对于模型效果的提升起到至关重要的作用,我们在交互层将问题和文章分开编码,并通过注意力机制将问题和文章的信息分别融合进U节点,在融合层通过自注意力机制融合文章和问题的全部信息,在统一编码层、交互层和融合层中,双向LSTM也会通过隐藏单元将问题和文章的信息传递给U节点。U-Net的U在这里有一个双关的解释,既是表达U(universal)节点在本模型中的独特地位,也用于区分流水线式的模型,突出我们使用统一(universal)的模型来解决SQuAD 2.0中提出的问题。
图2 U-Net模型结构
下面将详细描述我们的模型。
模型有一个U节点,该节点的信息在预测问题Q是否可回答时发挥关键作用。我们希望该节点能够学习文章和问题之间的相关性信息。U节点在词嵌入阶段放在问题和文章之间,用于连接问题和文章的表示,并在后面的交互阶段被问题和文章共享,训练过程中使其拥有抽象的全局语义信息,而不仅仅是一个分割符。U节点在训练之前被随机初始化成d维向量表示。
将问题表示、U节点表示和文章表示拼接在一起表示为V,如式(1)、式(2)所示。
我们用两层双向LSTM(BiLSTM)[10]对问题、U节点和文章的嵌入表示进行处理,如式(3)、式(4)所示。
其中,Hl是第一个BiLSTM的输出,表示低层语义信息,Hh是第二个BiLSTM的输出,表示高层语义信息。
最后,我们将Hl和Hh连接在一起,并将它们传递给第三个BiLSTM,以获得更全面信息的表示Hf,如式(5)所示。
令H=[Hl;Hh;Hf] 表示各层语义的融合信息。由于我们使用BiLSTM对信息进行双向的编码,位于问题和文章之间的U节点即hm+1可以融合问题和文章信息。
为了充分融合问题和文章的语义信息,我们使用注意力机制[16](attention)来捕获它们在不同级别上的相关性。在H上全部使用自注意力机制[8]效果稍差,因此本文设计的U-Net的交互层采用多层注意力机制。
我们首先将H分为两段: 带有U节点的文章表示Hp和带有U节点的问题表示Hq,其中U节点由问题和文章共享,U节点在下式中表示为hm+1。
U节点共享可以使其处于特殊的地位,问题和文章的信息均可通过注意力机制发送到U节点上。
我们参考FusionNet[3],同样设置三次注意力计算用于融合编码层提供的不同级别的语义信息。以第一级为例,下面是计算方法。
首先计算问题和文章的相关性得分S,如式(8)所示。
其中,W1和W2是可学习的参数。
其中,“×”是按列相乘。
经过交互层的信息交互,问题和文章产生交互信息。为了充分利用每个单词的历史信息,我们采纳DenseNet[17]的做法,将历史相关信息依次拼接起来作为下一层的输入。
首先,通过BiLSTM对拼接起来的历史信息进行融合,获得HA,如式(11)所示。
然后将原始的词嵌入表示V和HA连接起来得到A,如式(2)所示。
其次,使用自注意力机制融合所有信息,如式(13)所示。
此时获得的O是所有信息的最终融合表示。
我们将O分成OQ和OP两部分,分别代表文章的融合信息,如式(15)、式(16)所示。
此时U节点表示(om+1)仅在文章表示OP中出现,这是因为关于U节点的信息融合过程已经完成,当问题无法回答时,我们需要用U节点在文章表示中充当无答案的占位符。
预测层接收文章OP和问题OQ的融合信息,最终预测下面三个任务: ①答案选择; ②无答案指示; ③答案验证。
首先,我们采纳Match-LSTM[18]的做法将问题表示OQ压缩为固定尺寸的表示cq,如式(17)所示。
2.4.1 答案选择
当问题可以回答时,采用指针网络结构[19]来指示答案在文章的开始和结尾位置。我们采用αi和βi计算开始和结束的概率,其中“∝”表示正比于,在这里对所有位置的值进行归一化处理以满足其概率意义。
当问题可回答时,我们不考虑U节点,此时,i>0(i=0指示U节点)。
当问题可以回答时答案选择的损失函数定义如式(20)所示。
其中,a和b是答案在原文中的开始和结束位置。
2.4.2 无答案判定
对于无法回答的问题,我们将答案选择损失定义为,如式(21)所示。
其中,α0和β0对应于U节点的位置,该位置在文章表示Op的最前面。
此外,由于在SQuAD 2.0中针对每个无法回答的问题都设置了一个疑似答案,因此我们引入一个额外损失来预测疑似答案的边界。疑似答案指针与答案选择部分具有相同的结构。加入疑似答案选择后的无答案判定损失函数如式(22)所示。
(22)
其中,α′和β′是疑似答案的概率分布,a*和b*是疑似答案的开始和结束位置。
2.4.3 答案验证
答案验证模块用来判别问题是否可以回答,验证答案是否正确。与预测层类似,将文章中答案的开始和结束信息分别压缩成固定维度的向量,如式(23)、式(24)所示。
然后,把U节点表示(om+1)与问题和文章的摘要拼接起来,如式(25)所示。
其中,F用于分类,以验证问题是否可以回答,如式(26)所示。
其中,σ是S形函数,Wf是可学习的权重矩阵。
最终的答案验证部分的损失如式(27)所示。
LAV=-(δ·logpc+(1-δ)·(log(1-pc)))
(27)
其中,δ表示问题在文章中是否有答案,当存在答案时取1,不存在答案时取0。
我们将三个损失函数同时训练,最终损失函数如式(28)所示。
其中,LA,LNA和LAV分别表示答案选择、无答案判别和答案验证三个部分的损失函数,这里的δ同样表示是否存在答案,LA和LNA在一个实例中只有一个有效。
在测试阶段,答案选择器查找问题的潜在答案,而答案验证器则判断问题是否可回答。如果答案验证器预测问题可以回答,则认为答案选择器提取的答案是合理的。
本文主要在SQuAD 2.0数据集上进行实验以分析模型性能,并在第一届“莱斯杯”中文军事智能阅读理解竞赛中验证我们的模型。
2018年发布的机器阅读理解数据集SQuAD 2.0[2]是由SQuAD 1.1[1]扩充加入一些无法回答的问题而构建的。这些问题无法仅凭文章内容回答,但问题形式与可回答问题相同。将这些问题与可回答的问题区分开来是一项有挑战的工作。
第一届“莱斯杯”中文军事智能阅读理解竞赛问题和文章形式与SQuAD 1.1类似,如图 3所示,不存在不能回答的问题。
图3 中文军事智能阅读理解竞赛示例
我们使用Spacy处理问题和文章获得其词性(POS)和命名实体识别(NER)标签。作者使用12维的POS标签嵌入,使用8维的NER标签嵌入[15]。本文还引入3维词级别匹配标识: 问题和文章的词是否精确匹配、忽略小写之后是否匹配和词原型是否匹配。
本文在SQuAD 2.0中使用100维GloVe预训练词向量和1 024维Elmo词向量,在中文阅读理解竞赛中只使用200维GloVe词向量。模型中所有的LSTM都是双向的,将隐藏层维度设置为125,注意力机制的隐藏层维度设置为250。
本文在所有层上添加了一个随机丢弃层[20],其丢弃率为0.3。使用学习率为0.002的Adam[21]优化器。在训练和测试过程中,对于超长文本,只截取文章的前400个词、问题的前50个词。
各个主流模型在SQuAD 2.0数据集上的表现如表 1所示,我们的模型EM与F1指标均显著高于除BERT外的所有模型,由于具有竞赛性质,本文还报告了各个模型的集成学习效果,这里使用的集成学习方法为Bagging方法,随机采样训练集80%的数据训练6次模型,分别使用训练好的模型对测试集中的问题计算相应答案,然后投票获得最终结果。在“莱斯杯”中文军事智能阅读理解竞赛中,由于不存在没有答案的问题,我们在训练时只训练模型的答案选择模块,在竞赛中我们的模型取得BLEU-4指标第一、ROUGE-L指标第四的成绩,但由于其他参赛选手并未公开模型实现方法,故我们的实验对比开源的经典模型,最终结果如表2所示。
表1 各模型在SQuAD 2.0上的表现
表2 各模型在第一届“莱斯杯”中文军事智能阅读理解竞赛上的表现
我们的模型在两个机器阅读理解数据集中均表现优异,其中在中文军事机器阅读理解竞赛中的表现与BERT相似,这可能是由于BERT预训练过程中并未遇到过大量的军事语料,预训练与训练过程中的数据分布不匹配,使得BERT并未取得如在SQuAD这种通用领域数据集上如此明显的优势,这种情况在罕见领域上表现会更加明显。这说明基于传统词向量的方法在一些罕见领域更具有通用性。
本文还在SQuAD 2.0上对我们的模型做了消融试验,用于测试模型中不同组件的作用,如表3所示。
表3 不同设置对U-Net性能的影响
当我们不使用U节点对信息进行汇总时,单模型的F1指标下降2.6个百分点,采用集成学习后也有2.4个百分点的下降,表明U节点在我们的模型中起到至关重要的作用。而U节点在做注意力计算时是否共享使用也对性能有一定影响。
在SQuAD 2.0数据集的训练集中,对于不可回答的问题提供了疑似答案,这对模型训练答案选择模块有帮助,如果在训练中不使用疑似答案,也会使单模型的F1指标下降1.1个百分点。
如果交互层全部采用自注意力机制计算将使单模型F1值下降0.5%,这表明交互层的设计方式有助于模型学习到更多的信息。
SQuAD 2.0包含答案选择和验证问题是否可以回答两个任务,通过实验验证,两个任务在一起训练时如何相互影响,如表 4所示。EM*和F1*表示不考虑不可回答问题时的EM和F1分数。当Loss取L时表示同时训练答案选取和答案验证(判断问题是否有答案)部分,当Loss取LAV时表示只训练答案验证部分,当Loss取LA时表示只训练答案选择部分。
表4 任务之间相互影响实验
对于答案选择任务,我们发现联合训练答案验证对其性能没有帮助。但是在验证问题是否可回答时,联合训练答案选择部分比只训练验证部分准确率提高13.1%,说明找答案过程对于判断问题是否有答案有很大帮助,而这种优势是流水线式的模型所不具备的。
针对SQuAD 2.0中存在根据文章内容回答不了的问题,本文提出了一个端到端的模型U-Net,该模型在SQuAD 2.0数据集上取得了除大规模预训语言模型如BERT外的最好结果,在“莱斯杯”中文军事智能阅读理解竞赛的数据集上BLEU-4指标得分优于所有参赛模型。BERT需要巨大的计算资源才能完成计算,而我们的模型只需要BERT模型参数的1/34即可有效解决问题。
未来工作中,我们将充分挖掘U-Net的潜力,使其适用于所有的对于两段文本建模的任务,如自然语言推理、语义匹配等。当前流行的基于大规模预训练语言模型的BERT类模型有其特有的优势,我们的轻量级模型拥有与BERT类似的模型结构,下一步将采纳知识蒸馏[25]的方法,将BERT的知识蒸馏到U-Net中,以在更多的领域获得更好的表现。