购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第2章
机器阅读理解技术

本章主要介绍了机器阅读理解所需的相关方法和技术。首先对NLP领域影响最大的文本表示技术(text representation)进行介绍,包括词嵌入技术的产生、发展过程,以及目前主流的预训练语言模型。其次介绍RNN的原理、内部单元结构和计算公式,以及变体结构LSTM和GRU。最后对多任务学习的介绍,包括多任务学习的核心思想、产生的原因及为什么有效等。

2.1 常用数据集

在互联网飞速发展的今天,人们在日常使用互联网的同时也产生了大量的数据,其中包括数字、图像数据和文本数据。在机器阅读理解任务中,这些大量的文本数据经过研究者的整理成为具有研究价值的数据集。并且在不同的阅读理解任务中有与之相适应的数据集。在完形填空任务中比较典型的数据集有CNN,Daily Mail,Childrens Book Test,CMRC2017等;在多项选择任务中有MCTest,RACE等;在跨度提取式任务中,比较常用的英文数据集为SQuAD(Stanford Question Answer Dataset),该数据集是由斯坦福大学自然语言处理团队发布的。并且发布了SQuAD1.1 和SQuAD2.0 两个版本,2.0 版本相比 1.1 版本增加了数据量,1.1版本中的问题都能在文章中找到答案,而2.0版本加入了很多在文章找不到答案的问题。所以说,SQuAD2.0版本的发布增加了研究的难度。其中,CMRC2018数据集是和SQuAD数据集相似的中文数据集。在自由形式问答任务类型中,比较常用的英文数据集有DeepMind等发布的Narrative和微软的MS MARCO。而中文的有由百度NLP团队发布的DuReader数据集,该数据集是最大的中文数据集,它具有数据规模大、数据来源真实以及每个问题对应多篇文档的特点,因为DuReader数据集中的数据规模庞大且问题对应多个文档,所以对研究机器阅读理解任务增加了很多难度。每个数据集都有不同的评价指标来衡量模型的准确度,对简单的机器阅读理解任务一般直接使用准确率,而跨度提取式和自由回答式的任务通常采用EM,F1或者Rouge-L,BLEU-4分数 [72, 73] 作为评价指标。

2.2 词嵌入技术

在人类世界中,不同的国家和地区有着不同的语言。但不同语言的基本单位是词。词语是能够表达语言意思的最简单的组合。计算机无法直接识别人类语言,这就需要计算机在接收到人类语言后,先进行相应的转化,计算完成后再将结果转化成人类语言。由于现有的机器阅读理解模型中的数据都是采用向量形式,所以在研究模型时首先要考虑的是如何让文本中的词表示成向量。

在机器阅读理解任务中,所研究的数据集通常是以文本的形式进行存储的,因为我们研究神经网络基本是在计算机上,而计算机所处理的只能是数字,所以文本形式并不能直接输入神经网络中进行训练。针对这一问题,研究者考虑将文本中的每一个词映射到一个低维度的向量空间中,随后输入模型进行以后的训练操作,将这种方法称为词嵌入(Word Embedding) [74 -76] 。因为神经网络模型最先输入的数据便是词向量,所以说词向量在一定程度上影响着模型的训练效果,训练一个质量比较好的词向量在机器阅读理解任务中也是非常重要的。

早期的词嵌入技术有独热编码(One-Hot编码) [77] ,这种方法只用0和1来表示进行编码的文本,这个词出现的位置用1表示,其余位置用0表示。例如:

①“机器”:[1,0,0];

②“阅读”:[0,1,0];

③“理解”:[0,0,1]。

但该方法存在明显的缺点:一方面,在现实操作中,数据集中的数据都过于庞大,文本序列的长度也比较长,而One-Hot编码中每个词的维度就是词表的长度,当语料库中的词达到数以百万计时,这样的编码方法所得的向量维度也变得非常大,神经网络在处理这些向量时会产生内存不够的问题。用One-Hot编码出来的向量是离散的,显然这种方法只适合编码较短的文本,如果文本过长将会导致维度灾难,无法输入模型中进行训练。另一方面,因为这种独特的编码方式,不考虑词与词之间的顺序和词语之间的关系,得到的向量表示是互相之间没有关系并且离散稀疏的。One-Hot编码的向量只能区分不同的词,而无法对词义进行编码,就无法表示词与词之间的相关性。对于中文来说,编码时最小单位可能是一个字或一个词,但对于英文来说,可能是一个词根或一个词缀甚至是一个字母,为了解决这一问题,研究人员提出了更多的词嵌入方法,目前常见的有:Word2vec [78] 和GloVe [79] 等。

Word2vec是将无法计算、非结构化的文本转化成可计算、结构化的词向量的一种词嵌入方法。Word2vec在本质上是一个简单的全连接神经网络,并且该网络只使用了一个隐藏层。Word2vec模型不仅使文本转换成低维度的词向量,而且还能够学习词语之间的信息,目的是预测每个词和上下文词之间的关系,通过训练得到模型中的参数,模型训练好后得到的其实是神经网络模型的权重,然后将需要转化的词用训练好的权重计算得到对应的词向量。为了学习语料库中词语之间信息,该模型通常使用两种策略进行训练。Word2vec有CBOW(Continuous Bag of Words)和Skip-gram两种模型。

①CBOW模型根据上下文来预测当前的词,给定要预测的词,并去掉该词语,相当于从一句话中扣出一个词,然后根据这句话猜这个词是什么,由该词前后的词语来预测词语。

②Skip-gram模型 [80] 是用当前词来预测上下文,给出某一词语,预测该词语的上下文。相当于给了一个词,猜这个词前后可能是什么词。

这两种模型的结构如图2.1所示。

图2.1 CBOW和Skip-gram模型结构

Skip-gram模型为CBOW模型的逆过程。从图 2.1中可以看出,当前假设窗口大小为 2,CBOW模型的基本思路是:取预测词前后各两个词作为输入,然后从词嵌入矩阵中找到这几个词对应的词向量与另一个权重矩阵 E 相乘,最后输入softmax函数中的计算概率 ,记为 ,通过神经网络不断优化权重矩阵 E ,最终训练好的权重矩阵 E 可以用于其他任务中。其计算式如下所示:

其中, V i表示第 i 个词在词嵌入矩阵中对应的词向量与 E 的乘积, N 为句子长度,则损失函数计算式为:

可以看出,模型计算的复杂程度与词嵌入矩阵的大小有关,这会造成非常繁重的计算量。针对这种情况,作者提出了层次softmax和负采样两种方法来优化Word2vec模型。Word2vec方法的缺点在于窗口的大小是固定的,因此只能对局部特征进行提取,忽略了较远的词对当前词的影响。为了解决这种不足,Jeffrey Pennington等人提出了GloVe [92] 方法,GloVe的全称为Global Vectors for Word Representation,即全局词向量。该方法根据语料库构建共现矩阵,矩阵中每个元素代表一个词与其他上下文词在特定上下文窗口内共同出现的次数,词与词之间的距离加一个衰减的权重,即两个词隔得越远,权重就越小,GloVe可以无监督地学习词向量表示。

2.3 神经网络

在日常生活中,我们经常会碰到很多基于时间序列的数据,例如,文本、音频等。循环神经网络(Recurrent Neural Network,RNN)在处理该类问题上具有一定的优势。对RNN的研究可追溯到20世纪八九十年代,受当时计算能力的限制,研究一直停滞不前,随着深度学习技术的不断发展,RNN又重新出现在人们的视线中。本节将以RNN最基础的结构为出发点,分析在处理时间序列问题上的利弊,引出RNN的变体结构长短期记忆网络(Long Short-Term Memory network,LSTM)和门控循环单元(Gate Recurrent Unit,GRU)。

2.3.1 循环神经网络

在研究自然语言处理时,处理数据的方式并不像在图像处理领域一样,在图像处理中神经网络输入的数据为图像的像素,对图像的处理,通常使用卷积神经网络来进行特征提取。而在自然语言处理的各项任务中,输入神经网络中的是英文或者中文,对文本序列的处理就成了研究者首先要考虑的问题。循环神经网络便是处理这种输入序列的一种网络结构。

循环神经网络 [81] 是一种能够充分利用时序信息的一种神经网络结构。在循环神经网络之前的网络结构输入序列是相对独立的,即每个词之间没有关系,上一时刻的输入与下一时刻的输入没有关联。而实际上,自然语言领域处理的输入序列往往是有时序关系的,也就是说,一个句子中的某个词通常与前几个词或者后几个词都具有很大的关系,所以利用一般的网络结构对输入序列进行处理不能捕获这种时序上的关系从而会严重影响模型的结果,就比如在阅读理解型的机器阅读理解任务中,所预测的词语必须依赖于前面和后面的语义信息,所以,能够获取其他词对当前预测词的关系是至关重要的。

循环神经网络又称为递归神经网络,输入序列的每一个元素在网络中执行相同的任务,即每一时刻的输出都与这一时刻的输入和前一时刻的输出有关。可以说,每一时刻的信息都传递到下面的隐层中,通俗地讲,就是RNN有一定的记忆功能,模型可以记住前面计算的内容。RNN基本结构如图2.2所示。

图2.2 RNN基本结构图

图 2.2 为循环神经网络的展开图,从图中可以看出,模型包括每一时刻的输入集 ,输出集 和各个隐层单元的输出状态集合 ,神经网络的隐层个数取决于输入序列的长度,如果以输入序列 6为例,则循环神经网络的隐层个数就为 6,其中, X t 是第 t 时刻的输入,即第 t + 1个词向量表示, A t 为第 t 时刻的隐藏层状态, Y t 为第 t 时刻的隐层状态输出,则 t 时刻的隐层状态和输出结果的计算过程可以由下式表示:

其中,函数 f 为隐藏层状态的激活函数 [82 -84] ,通常采用tanh和ReLu等激活函数; B W 为权重向量,在网络开始运行时随机初始化对其进行赋值,并在以后随着网络的训练来更新里面的数值。函数 g 为隐藏层输出的激活函数,通常设为sigmoid函数和softmax函数,如果所做的任务为二分类的任务,则设为sigmoid函数;如果是多分类的任务则设为softmax函数。 V 为权重向量也可设为初始化赋值,随着网络的训练进行数值更新。

RNN这种特殊处理文本序列的方式比较像人类阅读文章,即在读当下的内容时会受之前内容的影响,所以它在自然语言处理任务中取得了优异成果,也在各个自然语言处理的分支中有着广泛应用。但是RNN也有着明显的缺点,那就是梯度消失和梯度爆炸问题。因为RNN的工作机制,我们在理想状态下可以使RNN处理任意长度的文本序列,但是在实际操作的过程中,如果让其处理过长文本序列时,会大大增加运算时间成本。与此同时,还会引起梯度消失等问题。所以基本的RNN不能很好地处理长距离的文本序列。针对这种问题,研究人员先后改进了RNN模型,其中,常见的有长短期记忆网络(Long short-term memory,LSTM) [85] 和门控循环单元(Gated Recurrent Unit,GRU) [86]

普通的神经网络在相邻的两层连接方式可能为全连接,也可能为部分连接,而层与层之间的神经元没有相关性,学一点儿忘一点儿。自然语言是典型的基于时间序列的数据,当序列长度较长时,普通的神经网络便不再有效,RNN能够很好地处理时间序列问题,建立序列内部信息的相关性,因此,在处理长序列问题时一般采用RNN,RNN结构如图2.3所示。

图2.3 RNN结构图

从图2.3中可以看出,对每一个RNN的细胞单元,在同一个时间步有两个输入和两个输出,输入包括当前时间步序列中的输入 x t t = 1,2,…)和上一时间步的隐藏状态 ,输出包括当前时间步的输出 o t 和传给下一个时间步的隐藏状态 h t ,理论上,输入序列长度可以扩展到任意维度。

t 时刻的隐藏状态 h t 和输出 o t 的计算式为:

其中, U,V,W 是 3个权重矩阵,通过反向传播不断地更新参数; σ 为sigmoid激活函数; b c 为偏置。

从图2.3中不难发现,每个时间步使用的 U,V,W 3个矩阵是相同的,它们的参数是共享的,不会根据序列长度不同构建不同的权重矩阵,从而大大降低了模型的复杂程度。每个神经元不再单单依靠当前步的输入,还受到前一步输出隐藏状态的影响,使得模型能够学习到不同时间步上的依赖特征。

2.3.2 门控循环单元网络

传统的RNN在长距离传输的过程中,由于所有时间步上 3 个矩阵参数共享,在更新参数时通过反向传播(Back Propagation,BP)算法,偏导值不断连乘容易导致梯度消失和梯度爆炸的问题,使得参数无法更新。研究人员对RNN做了各种变化,门控机制的引入巧妙地缓解了这一问题,可以动态地实现信息的更迭,对信息进行过滤后向后传递。Hochreiter改进了传统的RNN,提出了一种特殊的网络结构LSTM,每个神经元的内部结构也更加复杂,含有 3 个门和 1 个细胞状态。3 个门分别是:输入门、遗忘门和输出门,用于控制信息的通过,细胞状态中存储的是序列的长距离依赖关系,能够有效地向后传递长距离的语义信息。

LSTM其实是在RNN单元的结构内部增加了门控机制,在RNN中随着序列的不断加长,其中文章的重要信息可能会被丢失,相对来说,LSTM并不会轻易丢失长序列文本中的重要信息;相反,它能够遗忘无关的信息,并且在一定程度上解决了梯度消失和梯度爆炸的问题。LSTM在RNN中引入了 3 个门控单元对隐层状态的流动进行控制。LSTM的具体结构如图2.4所示。

图2.4 LSTM结构图

首先是遗忘门,该门控单元决定了在信息传输的过程中过滤掉无关紧要的信息,保证有用信息的存储。遗忘门的计算式为:

其次是输入门,主要功能是决定在神经元中应该存储哪些有用的信息。输入门的计算式为:

最后通过输出门来控制LSTM单元的最终输出信息。输出门的计算式为:

其中, W 为权重矩阵,并在网络初始化的过程中,对其进行随机赋值; b 为偏置向量; σ (⋅)为sigmoid函数,来决定可以通过门控的有用信息,输出 0表示不通过任何信息,输出 1则表示允许所有信息通过。

LSTM的本质是在RNN的基础上增加了门控机制,神经元会通过遗忘门来丢弃前面没用的信息,通过输入门保留之前序列对当前时刻有用的信息。LSTM神经网络随着时刻的推进,当前时刻会把重要的信息保存在隐层状态中并传递到后面时刻的隐层状态,重要信息的储存时间就比RNN神经网络储存时间更长,但重要信息并不会一直储存在隐藏层状态中,因为随着数据输入的变化,这部分信息还有可能被后面时刻中的遗忘门舍弃掉,所以这种神经网络也被称为长短时记忆神经网络。

GRU对LSTM进行了简化,比LSTM的参数量少,使用起来更加方便且不容易产生过拟合现象。GRU有两个门,分别是更新门和重置门。更新门决定了前面的哪些信息传到后面,有助于捕捉时间序列中的长期依赖关系。重置门决定了对之前记忆的遗忘程度,有助于捕捉时间序列中的短期依赖关系。每个神经元有两个输入和两个输出,输入包括当前步的输入和上一步的隐藏状态,其中,隐藏状态包含了之前的信息;而输出则包括当前步隐藏神经元的输出和传给下一个神经元的隐藏状态,GRU记忆单元结构如图2.5所示。

图2.5 GRU记忆单元

GRU的具体计算过程如下所示:

其中,[]表示两个向量的拼接; r t 表示重置门,决定之前的状态是否忘记; z t 表示更新门,决定是否对隐藏状态进行更新; W 表示两层之间的权重矩阵; σ 和tan h 为激活函数。

在RNN的变体中,除了LSTM这种长短时记忆网络,还有一种常用的解决长距离问题的网络门控循环网络(Gated Recurrent Unit,GRU),与LSTM相比,GRU在内部结构上进行了优化,具体操作为它将LSTM中的输入门和遗忘门结合在一起,组成一个新的门控单元称为更新门。这种操作所带来的直接好处就是将LSTM中的3个门结构简化成两个门,计算次数减少,实验时间更快,参数规模更小。在具体实验中,GRU所得的结果与LSTM的结果相比,相差不多甚至优于LSTM。

GRU所处理的文本序列也和LSTM一样都属于长距离的序列。GRU中含有两种门控单元:更新门和重置门。更新门用于控制前一时刻的状态信息被代入当前时刻状态中的程度,更新门的值越大说明前一时刻的状态信息代入越多。重置门用于控制前一状态有多少信息被写入当前的候选集 上,重置门的值越小,前一状态的信息被写入得越少。

由此可知,GRU就是对LSTM的简化,使其内部的3个门控单元设计成两个门控单元,从而简化计算,减少参数规模,在实验结果相当的情况下提高模型的训练效率,比LSTM更好地完成了长距离文本序列的时序问题。

即使LSTM和GRU都解决了长距离的时序问题,但是对于单向的循环神经网络而言,它只能从输入序列的正向来获取语义信息,而不能从反向的语义信息获取。就整个输入序列信息不能准确地把握,而实际上,大多数自然语言处理中的任务特别是机器阅读理解任务中需要模型从正反两个方向进行捕捉语义信息。例如,在抽取式的机器阅读理解中,对给定的问题,需要从给定的文本中找寻答案,这时再从文本的正向获取文本的信息就不能准确地预测答案,而是需要捕获文本的上下文信息。所以,针对这类问题,常见的解决办法是采用双向循环神经网络来对文本进行处理。这种双向循环神经网络可以为双向LSTM [87] ,也可以替换成双向GRU。以GRU为例,双向GRU,即Bi-GRU是从文本序列的两个方向上进行建模,正反两个方向都使用GRU。Bi-GRU的每一时刻的输出是这一时刻的正反两个方向输出序列向量的拼接。每一时刻都有正反两个方向的输出结果,并且相互独立,将最后时间步骤走完拼接后的隐藏层的信息作为Bi-GRU网络模型的最终输出。Bi-GRU的总体模型如图 2.6所示。

图2.6 Bi-GRU的总体模型

2.3.3 注意力机制

注意力机制 [88] 是自然语言处理领域内非常重要的网络结构,在该领域内的任务中有着广泛应用。注意力机制最初是在图像处理领域中提出的,随后被引入了自然语言处理任务中。在上一小节中,介绍了长短时记忆神经网络和门控神经单元,两者都能够很好地解决长距离的文本序列,但是当我们在做其他任务时,还会有其他问题,例如,在多文本的机器阅读理解任务中,神经网络要回答问题就要从多篇文本中搜集与问题相关的线索,如果文本序列非常长或者相关联的词语在句子中的跨越距离很长,即使使用上述的神经网络也会有相关词语之间语义丢失的问题,而采用注意力机制能够很好地解决此类问题,在自然语言处理中有着不错的表现。

与其他神经网络结构一样,注意力机制的研究也受启发于人类世界的认知形式。当人们在阅读时,会将注意力放在应该关注的地方,而对其他无关紧要的内容进行略读或者直接省略来减少注意力,最后阅读完成后就能够把握住文章的主要内容。对于机器来说,使用注意力机制同样可以达到这样的效果,在神经网络处理过长的文本序列中,通过采用注意力机制使网络能够捕获重要的信息,忽略或者减少学习无关信息,避免受到无关信息的干扰,提升神经网络的计算效率。在处理输入序列时,对序列中含有重要信息的位置赋予高的权重值,让神经网络了解该部分是重要的信息,使该部分信息能够在神经网络中长距离传递 [89] 。而对无关的信息会分配较低的权重,使神经网络减少该部分的学习,由于权重低,随着神经网络的不断训练,权重不断更新。无关的数据对最终结果的计算参与度很低,对结果影响不大,而重要的信息会对最终结果贡献度很高,这样就使得神经网络在训练中能够重视相关度高的数据,丢弃无关的数据。最终实现神经网络把注意力放在重要数据的位置,能够得到很好的效果。

注意力机制(Attention)本质上就是权重计算,其结构图如图2.7所示。

图2.7 注意力机制结构图

在机器阅读理解任务中,模型处理的内容包括文章和问题两个部分。注意力机制的工作原理是计算问题与文章之间的权重值,问题中的每一个词与文章中的每一个词的相关程度是不同的。如果问题序列中的某个词与文章中的某个词的相关度越高,那么两者之间的权重就越大,即两个词之间的注意力关注度越高;反之,相关度越低权重就越小,注意力关注度也更小。

注意力计算过程图如图2.8所示。

图2.8 注意力计算过程图

注意力机制计算式为:

由上述公式可知,注意力机制的计算过程。首先计算Query与Key的相似度权重 e i ,常用相似度函数 f 为点积、拼接等,之后使用softmax函数对权重 e i 进行归一化得到 a i ,最后将 a i 和上下文词向量加权求和得到注意力表示,目前NLP研究中,Key和Value通常是同一个,即Key=Value。

这里使用了双向注意力,双向注意力就是从两个方向进行注意力的计算,即上下文对问题的注意力及问题对上下文的注意力。

2.4 预训练语言模型

近年来,预训练语言模型成为自然语言处理领域研究的热点问题,其基本思路是:首先在大规模的数据集上进行无监督学习,经过充分训练后得到了模型的参数,然后将训练好的模型用于下游任务,在下游任务上就不用将整个模型重新训练,只需在已训练好的基础上进行微调。许多研究人员发现,使用大规模语料库进行预训练的语言模型能达到更好的效果。

不管是Word2vec还是GloVe都存在一个问题,当模型训练好之后,每个词的词向量就不会再变了,这并不符合我们的要求,因为在实际生活中经常会出现一词多义的情况。例如,“门槛”这个词,可以指真实的门框下面挨着地面的横木,也可以比喻某种标准或条件,如名校门槛很高。每个词的具体意思要结合上下文的语境来进行分析,用传统的词嵌入技术难以做到,因此需要动态地学习每个词在不同的语境下的不同含义。

Peters等人为了解决这一问题,提出了ELMo(Embeddings from Language Models)模型,模型结构如图2.9所示。

图2.9 ELMo模型结构

从图2.9中可以看出,ELMo模型利用双向LSTM进行编码,能够充分学习到每个词的语法和语义信息。同时,在不同层LSTM之间引入残差链接,简化了学习过程,加快了梯度的传播速度,提高了学习效率。ELMo模型首先在大规模的语料库上进行了训练,然后将训练好的词向量表示用到下游任务中进行微调,已在多个任务上有了明显的改善。然而,ELMo的双向LSTM结构其实是由两个单向LSTM拼接而成的,实际上还是单向的语言模型,并没有真正意义上的融合双向语义信息。另外,LSTM虽然能够处理较长的序列,但是由于RNN模型是基于时间序列的,不能够并行计算,导致了训练时间较长。

2017年,谷歌提出了Transformer模型,使用Attention机制,可以一次性地将完整的序列输入模型进行训练,解决了LSTM不能并行计算的问题。BERT模型使用的Transformer编码器,实现了真正意义上的双向,结构如图2.10所示。由于Transformer本身的特性,使得BERT能够捕捉上下文的双向关系,在强大的硬件设备支撑下,进行了大规模的无监督训练,因此,在多个任务上结果有了大幅度提升。BERT模型的出现,对于自然语言处理产生了巨大的冲击力,几乎刷新了所有的文本表示类任务的最好性能,具有里程碑意义。

图2.10 BERT模型结构

BERT模型接收到自然语言序列后,需要在序列的开头和结尾处加特殊的标记符,如果输入的是两个序列,则除了开头和结尾,还需要在两个序列之间加分隔符。对输入的每一个token,分别有3个embedding: Token Embeddings、Segment Embeddings和Position Embeddings,每个token的词向量由3个向量相加而成。BERT的模型输入如图2.11所示。

输入时的[CLS]和[SEP]为特殊的token,在数据预处理时通过Wordpiece对单词进行拆分,因此对于英文来说每个token可能不是一个完整的单词,例如,“playing”拆成了“play”和“ing”,比起使用完整的单词和仅使用一个字母,取了一个折中的办法。Segment Embeddings用来区分两个序列,序列A用全 0 表示,序列B用全 1 表示。Position Embeddings是将每个token的位置信息进行编码,由于Transformer不像RNN一样能捕捉序列中每个词的位置信息,因此在词嵌入时引入位置编码,为了帮助模型区分每个词的位置。一个词在句子中的位置不同,其含义可能也不一样,如果不考虑位置信息,那么某个token在和两个相同的token计算attention时结果会相同。作者提出了一种使用正余弦函数交替的方法来进行编码,其计算式为:

图2.11 BERT模型输入

这里使用的是BERT-base版,由12层Transformer编码器构成,每层的输出作为下一层的输入,Transformer的编码器如图2.12所示。输入的自然语言序列首先编码为词向量表示,然后输入Self-Attention层,图中以两个词为例,这里使用多头注意力机制,其计算式为:

其中, Q K V 为输入向量与初始化矩阵相乘后的结果,通过不断训练得到, d k 是调节的参数,防止两个矩阵相乘后结果过大导致softmax函数的梯度调小。自注意力层主要计算两词之间的影响有多大,经过残差连接和归一化之后,输入到不同的Feed Forward Neural Network(一个单层的前馈神经网络),输出的结果再经过残差连接和归一化之后输出,即为第一层隐藏层输出的词向量表示,每一层输出的中间向量再作为下一层的输入。

BERT放弃了传统的CNN和RNN,采用两个预训练任务分别是:“遮盖语言模型”(Masked Language Model,MLM)和“上下句预测”(Next Sentence Prediction,NSP)。MLM是随机遮盖一部分token,让模型对遮盖部分进行预测,这样当模型遇到没有见过的词时,能够更加健壮,MLM是随机mask掉这句话中的15%的词,具体遮盖规则如下:

①80%的概率用特殊标记“[mask]”替换。

图2.12 Transformer编码器结构

②10%的概率随机用别的词替换。

③10%的概率不进行替换。

NSP任务是判断两个序列是否为上下句的关系,是对句子连续性的预测,在训练时,从语料库中随机抽出两句话,其中有一半的两句话是上下句关系,另一半不是上下句关系。通过NSP可以学习到句子之间的依赖关系,这些关系保存在[CLS]这个特殊token对应的向量中,使模型获得更丰富的语义表示,捕捉句子层面的语义特征。

2.5 多任务机器阅读理解模型

多任务学习(Multi-Task Learning,MTL)是将多个相关任务放在一起学习的一种机器学习方法,属于迁移学习的一种,目前已成为一种广泛使用的技术,可以通过深度神经网络学习更强大地表示。其核心思想是联合训练多个任务,通过将其他任务学习到的相关知识应用到目标任务上,来提升模型的效果,增强泛化能力。当然这里的其他任务要与目标任务有一定的相关性,如果几个任务之间没有什么联系,那就不一定会有很好的效果。MTL是一种集成学习方法,将几个任务同时训练,使得多个任务之间相互影响,一般是对共享参数的影响。当多个任务共享同一模型结构时,该结构中的参数在优化时会受到所有任务的影响,因此,这样训练出来的模型会比单任务训练出来的模型泛化能力要好。单任务学习和多任务学习对比示意图,如图2.13所示。

图2.13 单任务学习和多任务学习对比示意图

从图2.13中可以看出,单任务学习的各个模型之间是相互独立的,多任务学习的各个模型之间是共享的。多任务学习可以看作受人类的启发,例如,学习一个英语单词时,用眼睛看的同时张嘴读、动手写,比起只用眼睛看效果往往会更好。“看、读、写”可以看作3个任务,通过“训练”让大脑记住这个单词,在这个过程中,3个任务具有相关性,根据读音很容易将这个单词写出来,从而使大脑记得更牢固。在深度学习中,多任务学习的两种最常用方法:一个是参数的硬(hard)共享;一个是参数的软(soft)共享。

参数的硬共享在深度神经网络的MTL中最为常见,是指多个任务共享同一层或同几层隐藏层,最后使用不同的输出层分别对几个任务进行输出。通过共享隐藏层网络,能够使模型学习到几个任务共有的一些特征,同时几个任务的底层所共享的隐藏层参数相同。针对不同任务的不同特点,设计不同的顶层输出结构,抽取更高层次的特征。参数硬共享降低了模型过拟合的风险,这就好比我们同时做多项任务,每个任务有不同的方法一样,想要找到一个方法做所有的事情很难。MTL的参数硬共享示意图如图2.14所示。

参数的软共享是指多个任务使用多个不同的模型结构,每个模型有自己的参数,但是多个模型的参数相互约束。多个模型参数之间的距离是正则化的,以此来保证模型间的参数尽可能相似。受MTL正则化的启发,对深度神经网络的软参数共享提出了不同的正则化方法,文献[90]使用L2范数来约束不同任务之间的参数,文献[91]使用迹范数来进行正则化。MTL的参数软共享示意图如图2.15所示。

图2.14 MTL的参数硬共享示意图

图2.15 MTL的参数软共享示意图

多任务学习之所以有效,主要有以下原因:

①同时学习多个任务时,任务之间有相关的地方,也有不相关的地方,在学习一个任务时,与该任务不相关的地方就相当于噪声,引入噪声可以提高模型的泛化能力,减小过拟合的风险。

②在单任务学习中,梯度反向传播过程中很容易陷入局部最小值,而多任务学习时,多个任务的局部最小值分布在不同位置,通过相互作用可以有效帮助模型摆脱局部最小值。

③如果存在数据量小、向量维度高、噪声严重的情况,MTL可以隐式地增加数据,帮助模型找到有用的特征,因为其他任务会从不同方向提供信息。

④某些特征G对任务A来说可能很难学习到,但对任务B来说学习起来很容易,这可能是因为某些其他特征阻碍了任务A对特征G的学习,或者是任务A和特征G的交互方式更为复杂,MTL可以使任务A的模型“窃听”到任务B学习到的特征G。

当面对多个问题时,不应该将它们拆解成一个个单独的问题,这样会破坏问题之间的关联性,导致在处理其中一个问题时可能变得很困难。深度神经网络中MTL能够学习到更多的特征,特别适合一次获得多个任务的预测,受到更多研究人员的关注。

2.6 多文档机器阅读理解模型

传统的机器阅读理解模型通常采用分层结构,一般可以分为词嵌入层、编码层、交互层和答案预测层4个部分。每层的功能都是具体的且不一样的,可概括如下:

①词嵌入层(Word Embedding Layer)。该层的主要功能是将文章和问题序列中的词语进行向量化表示。将得到的词向量输入模型中并参加模型的训练。根据不同的问题和模型的结构可以调整词向量的维度。在作词嵌入时通常采用Word2vec和GloVe方法得到词语的向量化表示。

②编码层(Encoder Layer)。该层的主要功能是分别对文章和问题进行语义特征提取,利用编码神经网络根据词嵌入得到的向量进行编码得到文章和问题的语义信息向量,最终整合向量输出一个包含语义信息的矩阵。通常采用的编码神经网络为RNN,LSTM,GRU等循环神经网络。

③交互层(Interaction Layer)。该层是模型中的重要部分,主要功能是融合问题和文章之间的信息,在编码层问题和文章中各自的编码互相独立,所得的词向量是没有关联的。交互层是在文章和问题之间建立联系,使问题信息能够融入文章信息中。使模型带着问题去阅读文章。通常在交互层中使用注意力机制来进行信息交互。

④答案预测层(Answer Layer)。该层的主要功能为预测答案,模型根据交互层输出的上下文信息输出模型预测的结果。根据任务的不同预测答案的方式也不相同。在跨度抽取式任务中,答案预测层一般会采用全连接网络或者指针网络(Pointer Network)来预测答案在文章中的开始位置和结束位置。

传统机器阅读理解模型主要由以上四层结构组成,其总体模型框架如图2.16所示。

图2.16 传统机器阅读理解模型框架图

研究者在研究机器阅读理解模型时都是以传统模型架构为基础的。在模型的各个部分进行改进。例如,在词嵌入层尝试不同的词嵌入方法,在编码层中使用LSTM或者GRU等进行语义编码,作为模型最核心部分的交互层是改进比较频繁的地方,因为使问题信息融入文章中时的本质就是让模型读懂文章从而回答问题,也是研究模型的最终目的,在答案预测层使用全连接网络或者指针网络或者其他网络对比模型的结果。

传统的机器阅读理解模型中普遍存在以下缺点:

①对DuReader这种数据集,文本序列过长以至于超过了传统模型所接受输入的范围。

②采用LSTM进行语义编码,每一时刻的输出只含有序列正向的信息,无法获取反向的信息,并且LSTM结构复杂,计算时间过长,使模型效率降低。

③问题与文章的语义信息没有足够的交互融合,使模型很难从文章中找到回答问题的线索,从而降低模型的准确度。 6w9CF4La98Rwq1m5pv41q6HkofncfCT3iHT2wkO0sRjgSU0MA7sIzWRAkCMPSmo8

点击中间区域
呼出菜单
上一章
目录
下一章
×