机器阅读理解任务可以形式化成一个有监督的学习问题:给出三元组形式的训练数据(C,Q,A),其中,C 表示段落,Q 表示与之相关的问题,A 表示对应的答案。我们的目标是学习一个预测器 f,能够将相关段落 C 与问题 Q作为输入,返回一个对应的答案 A 作为输出:
f : ( C , Q ) → A f:(C,Q)\rightarrow A f:(C,Q)→A
一般地,我们将段落表示为 C={w1C,w2C,w3C,…,wmC} ,将问题表示为 Q={w1Q,w2Q,w3Q,…,wmQ} ,其中,m 和 n 分别为段落 C 的长度和问题 Q 的长度,所有 w 都属于预先定义的词典V。由于数据集的类型不同,问题和答案会被表示成不同的形式, 6 种类型中具有代表性的数据集:CBT、SciQ、SquAD、CoQA、NarrativeQA以及HotpotQA。具体地,可以将数据集定义为以下 6 种类型。
机器阅读理解中对于模型的评价指标主要由数据集的类型决定。
对于完形填空和多项选择类型的任务,由于答案都是来源于已经给定的选项集合,因此使用Accuracy 这一指标最能直接反映模型的性能,即,在问题数据中模型给出的正确答案数 n 占总问题 m 的百分比:
A c c u r a c y = n m Accuracy=\frac{n}{m} Accuracy=mn
对于抽取式和多跳推理类型的任务,需要对模型预测的答案字符串和真实答案进行比对,因此一般使用 Rajpurkar 等人提出的 **Exact Match(EM)**和 F1 值,以及两者结合得到最终的联合 EM 和 F1 值(joint EM,F1) 。
EM 是指数据集中模型预测的答案与标准答案相同的百分比;
F1 值是指数据集中模型预测的答案和标准答案之间的平均单词的覆盖率,P 代表准确率(precision),R 代表召回率(recall);
(joint EM,F1):
F 1 = 2 × P × R ( P + R ) F1=\frac{2\times P\times R}{(P+R)} F1=(P+R)2×P×R
对于会话类型的任务,由于其答案是文本自由形式,因此并没有一种通用的评价指标,该类任务的评价指标主要由数据集本身决定。
对于生成式类型的任务,由于答案是人工编辑生成的,而机器的目标是使生成的答案最大限度地拟合人工生成的答案,因此该类任务一般使用机器翻译任务中常用的 BLEU-4和 Rouge-L两种指标。
BLEU 的本质是依靠计算共现词频率来判断机器生成答案和人工编辑答案的相似或接近程度,在这里,BLEU-4 指的是采用四元精度(4-gram precision)对原始的 BLEU 算法进行改进后的版本(N=4),其中,BP 是惩罚因子:
P n = ∑ C ∈ { C a n d i d a t e s } ∑ n − g r a m ∈ C C o u n t c l i p ( n − g r a m ) ∑ C ~ ∈ { C a n d i d a t e s } ∑ n − g r a m ′ ′ ∈ C ~ C o u n t c l i p ( n − g r a m ′ ′ ) P_n=\frac{\sum\limits_{C\in \{Candidates\}}\sum\limits_{n-gram\in C}Count_{clip}(n-gram)}{\sum\limits_{\tilde{C}\in \{Candidates\}}\sum\limits_{n-gram''\in \tilde{C}}Count_{clip}(n-gram'')} Pn=C~∈{Candidates}∑n−gram′′∈C~∑Countclip(n−gram′′)C∈{Candidates}∑n−gram∈C∑Countclip(n−gram)
B P = { 1 , c > r e 1 − r c , c ⩽ r BP=\left\{\begin{array}{rcl}1,c>r\\ e^{1-{\frac{r}{c}}},c\leqslant r \end{array}\right. BP={1,c>re1−cr,c⩽r
B L E U = B P ⋅ exp ( ∑ n = 1 N w n log P n ) BLEU=BP\cdot \exp(\sum\limits_{n=1}^{N}w_n\log P_n) BLEU=BP⋅exp(n=1∑NwnlogPn)
Rouge-L 是采用了最长公共子序列(longest common subsequence,简称 LCS)的 Rouge 的一种改进版本,其中,X 表示长度为 m 的正确答案,Y 为模型生成的长度为 n 的答案 :
R l c s = L C S ( X , Y ) m R_{lcs}=\frac{LCS(X,Y)}{m} Rlcs=mLCS(X,Y)
P l c s = L C S ( X , Y ) n P_{lcs}=\frac{LCS(X,Y)}{n} Plcs=nLCS(X,Y)
F l c s = ( 1 + β ) 2 R l c s P l c s R l c s + β 2 P l c s F_{lcs}=\frac{(1+\beta)^2R_{lcs}P_{lcs}}{R_{lcs}+\beta ^2P_{lcs}} Flcs=Rlcs+β2Plcs(1+β)2RlcsPlcs
基于端到端神经网络的机器阅读理解模型大都采用如下图所示的 4 层架构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
编码层的目的是将已经表示为词向量的 Tokens(词的唯一标记单位)通过一些复合函数进一步学习其内在的特征与关联信息,机器阅读理解中常用循环神经网络(recurrent neural networks,简称 RNNs)及其变体对问题和段落进行建模编码,也有一些模型使用卷积神经网络(convolutional neural network,简称 CNN)进行特征提取。
交互层是整个神经阅读理解模型的核心部分,它的主要作用是负责段落与问题之间的逐字交互,从而获取段落(问题)中的单词针对于问题(段落)中的单词的加权状态,进一步融合已经被编码的段落与问题序列。
注意力机制(attention mechanism)
交互层主要采用注意力机制,在自然语言处理领域,该机制最早由 Sutskever 等人在 2014 年应用于Sequence-to-Sequence 模型(Seq2Seq);随后,Luong 等人和 Bahdanau 等人将其应用于机器翻译领域并获得极大的成功;这之后,注意力机制被广泛应用于各种 NLP 任务中,包括机器阅读理解任务。
如下图所示:在 MRC 任务中,一般使用注意力机制来融合“段落和问题”的信息。图左为以段落-问题为例的注意力矩阵表示,图右为注意力矩阵中每一行注意力值(即段落中每一单词对问题的注意力)的详细计算方法,具体地,可以分为以下 3 步:
将段落 C 中的单词 Cj,j=1,…,m 和问题 Q 中的每一个单词 Q1,…,Qi,…,Qn 进行相似度计算,得到权重Sj1,…,Sji,…,Sjn,其中,相似度函数可以有多种选择,常用的有点积 dot、双线性映射 bilinear 以及多层感知机 MLP:
S j i = { f d o t ( C j , Q i ) = C j T Q i f b i l i n e a r ( C j , Q i ) = C j T W Q i f M L P ( C j , Q i ) = V T tanh ( W C C j + W Q Q i ) S_{ji}=\left\{\begin{array}{rcl}f_{dot}(C_j,Q_i)&=&C^T_jQ_i\\ f_{bilinear}(C_j,Q_i)&=&C^T_jWQ_i\\f_{MLP}(C_j,Q_i)&=&V^T\tanh(W^CC_j+W^QQ_i) \end{array}\right. Sji=⎩⎨⎧fdot(Cj,Qi)fbilinear(Cj,Qi)fMLP(Cj,Qi)===CjTQiCjTWQiVTtanh(WCCj+WQQi)
使用 Softmax 函数对权重进行归一化处理,得到αj1,…,αji,…,αjn:
α j i = s o f t m a x ( S j i ) = exp ( S j i ) ∑ i = 1 n exp ( S j i ) \alpha_{ji}=softmax(S_{ji})=\frac{\exp(S_{ji})}{\sum^n_{i=1}\exp(S_ji)} αji=softmax(Sji)=∑i=1nexp(Sji)exp(Sji)
将归一化后的权重和相应的问题 Q 中的单词 Qi 进行加权求和,得到序列 ,即问题-感知的段落表示:
C j ^ = A t t e n t i o n ( C j , Q ) = ∑ i = 1 n α j i Q i \hat{C_j}=Attention(C_j,Q)=\sum^n_{i=1}\alpha_{ji}Q_i Cj^=Attention(Cj,Q)=i=1∑nαjiQi
自注意力机制(self-attention mechanism)
Vaswani 等人提出了自注意力机制(self-attention mechanism),并基于多头自注意力机制(multi-head self-attention)提出了 Transformer 模型架构,该架构用注意力机制完全替代了 RNN 模型,使得整个模型的参数大大减少并且弥补了 RNN 模型并行性差的缺点。
输出层主要用来实现答案的预测与生成,根据具体任务来定义需要预测的参数。
Devlin 等人提出了将ELMo 和 GPT 模型结合的 BERT 预训练模型。采用遮蔽语言模型(masked LM)的方法来解决完全双向编码机制隐含的“自己看见自己”的问题,同时,采用连续句子预测(next sentence prediction)的方法将模型的适用范围从单词级别扩展到句子级别,这两项创新也使得 BERT 预训练模型能够充分利用并挖掘海量的语料库信息,从而大幅度提升包括机器阅读理解在内的 11 项下游任务的性能。
Transformer 架构由 6 个相同的编码-解码模块组成,其中,每个编码模块包括了自注意力模块(self attention)和前向神经网络模块(feed forward neural network),每个解码模块包括了自注意力模块、编码-解码注意力模块(encoder-decoder attention)和前向神经网络模块,而其中,自注意力模块采用了多头注意力机制(multiheaded attention),即采用 h 个不同的自注意力进行集成,多次并行地通过缩放点积(scaled dot-product)来计算注意力值,如下列公式与下图所示,其中,dk 为 K 的维度:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k V ) Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}}V) Attention(Q,K,V)=softmax(dkQKTV)
M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d h ) W O MultiHead(Q,K,V)=Concat(head_1,...,head_h)W^O MultiHead(Q,K,V)=Concat(head1,...,headh)WO
其中
h e a d i = A t t e n t i o n ( Q W i Q K W i K V W i V ) head_i=Attention(QW_i^QKW_i^KVW_i^V) headi=Attention(QWiQKWiKVWiV)
Transformer 架构的两个优势:
Transformer 架构另一个里程碑式的创新之处在于:为基于海量未标记语料训练的预训练模型的构建提供了支持,进而使研究者们只需在对应的下游任务中微调预训练模型就能达到较好的效果。其中最具代表性的应用就是通过基于 Transformer 架构的预训练模型来提升词表达能力:通过自注意力机制,可以在一定程度上反映出一句话中不同单词之间的关联性以及重要程度,再通过训练来调整每个词的重要性(即权重系数),由此来获得每个单词的表达。由于这个表达不仅仅蕴含了该单词本身,还动态地蕴含了句子中其他单词的关系,因此相比于普通的词向量,通过上述预训练模型得到的上下文词表达更为全面。
遮蔽语言模型 :Devlin 等人受完形填空任务的启发,提出了采用 Masked LM 的方式来训练模型。他们将输入 Tokens 中的 15%进行随机遮蔽处理,用[MASK]标记替代;进一步地,他们为了解决预训练模型中若完全使用[MASK]标记则会导致后续任务不能很好地进行模型微调的问题(因为后续任务微调中并不会出现[MASK]这一标记),进行了如下图所示的改变。
通过上述变化,使得 Transformer 架构不知道哪个单词需要被预测,哪个单词已经被替换。因此,BERT 不仅解决了完全双向模型“自己看见自己”的问题,还“被迫”地保证了每一个输入 Token 都能保持分布式的上下文表征状态。
连续句子预测 :连续句子预测任务主要是为了让模型能够学习连续的文本片段之间的关系,以加入句子级别的表征能力。具体地说,对于每次从训练集中选取的两个连续句子 A 和 B,Devlin 等人将句子 B 做以下处理:在训练时,输入模型的第 2 个句子 B 会以 50%的概率从全部文本中随机选取替换,剩下 50%的概率选取第 1 个句子 A 的后续的文本,即保持原句不变。
综上所述,BERT 模型的提出,对于机器阅读理解任务来说,除了为建立更高性能的模型提供新的思路以外,更是证明了一个好的预训练模型在 MRC 任务中的重要性。因此,未来 MRC 模型的建立可以从以下两方面展开:
如下图所示(蓝色为数据集,绿色为模型),在最近 3 年的时间里,MRC领域的发展就已经取得了惊人的成绩(所有数据集和模型都已经以论文形式发表在国际会议或 arXiv 上,截至日期为 2019.7.18)。
从 2015 年至今,国内外已经公布了许多专门用于机器阅读理解的数据集,本文选取最具有代表性的 24 个中英文数据集进行对比分析,各个数据集的属性见下表:
机器阅读理解数据集难度的不断提升,也推动着神经阅读理解模型的发展。本文选取了 27 个具有代表性的神经阅读理解模型,并按时间线顺序进行了归纳对比,见下表:
其中:
所有模型都是原论文中的基本模型;
应用场景包含了原论文中提到的数据集以及特定数据集发布时使用该模型作为 Baseline 的场景;
上下文在这里指的是预训练词向量的上下文嵌入,不包括网络结构中对问题和文章的上下文编码;
CNN 在这里特指架构中使用的神经网络模型,不包含 Char-Level 嵌入中使用的 CNN。
词向量表示
模型的不同词向量表示对性能的改变(部分)见下表:
神经网络模型
每一种模型的创新点以及在数据集上的性能归纳于下表:
构建更贴近人类自然语言习惯的数据集;
构建兼具速度与性能的模型;
在训练中融入对抗实例,以提高模型的鲁棒性与泛化能力:
未来研究中,我们需要考虑如何在训练过程中加入对抗实例以提高模型的鲁棒性,从而使模型在具有噪声的数据集上也能保持一定的性能;此外,如何将迁移学习(transfer learning)和多任务学习(multi-task learning)应用到神经网络模型中,构建跨数据集的高性能模型,也是未来的研究方向;
提高模型的可解释性,未来研究中,我们可以在构建数据集时加入支持证据,让模型在每一次预测时提供相关证明;此外,尝试在构建模型时加入原理生成模块(rationales generating),让模型在预测答案之前优先给出对应的理由,也是未来的研究方向。
多跳推理类别数据集是最近 1 年才兴起的,其代表为 Yang 等人在 2018 年 9 月 25日提出的 HotpotQA 数据集。与其他数据集的区别是:
参考文献
[1] 顾迎捷,桂小林,李德福,等.基于神经网络的机器阅读理解综述[J].软件学报,2020(7):2095-2126.