王 紅 邸 帥 吳燕婷
(中國民航大學計算機科學與技術學院 天津 300300)
機器閱讀理解(Machine Reading Comprehension,MRC)是讓機器閱讀并理解文本,進而對于給出的問題進行回答的技術[1]。學術界中,通過機器閱讀理解來評估機器的理解能力是一項持久而又富有挑戰的自然語言處理問題。工業界中,機器閱讀理解是譬如智能問答、搜索等任務的關鍵技術。當機器具備相當水平的理解能力時,機器將便捷精準地從海量碎片化的信息流中獲取人類所需的知識[2]。
傳統的機器閱讀理解模型大多采用基于規則的方法。Hirschman等[3]開發了Deep Read閱讀理解系統,通過使用詞袋法來表示句子信息并且借鑒了信息抽取的方法。Riloff等[4]通過啟發式規則開發了一個基于規則的閱讀理解系統Quarc,通過采用設定的規則來尋找文本和問題之間的詞匯和語義線索。然而此系統針對不同的問題需要手工設定不同的規則,耗時費力。盡管在一些較為簡單的數據集中,基于規則的方法可以取得一定的效果,但是,基于規則的方法過于依賴人工[5],系統的工程成本較高且很大程度上依賴現有的自然語言處理工具,如依存句法分析或是語義標注工具[6],較難獲取到機器閱讀理解任務所需的深層語義特征。同時,由于訓練此法的數據集本身的局限性,導致其泛化能力大打折扣。此外,此法往往依賴于窗口進行匹配,因此難以解決句子之間的長距離依賴問題。
隨著神經網絡模型日趨成熟,研究者們將循環神經網絡(Recurrent Neural Network,RNN)[7]、卷積神經網絡(Convolutional Neural Networks,CNN)[8]、注意力機制等應用于機器閱讀理解任務中。Yu等[9]首次提出采用二元CNN生成文本序列和問題序列的分布式語義表示,但是長距離依賴問題仍未有效解決。Hermann等[10]率先將注意力機制應用于機器閱讀理解任務中,效果超越同期方法,但是未解決指代消解以及所采用的單向注意力機制未充分獲取文本和問題之間的關聯等問題。隨著注意力機制的發展,Wang等[11]提出的Match-LSTM模型、Seo等[12]提出的BiDAF模型、谷歌提出的QANet[13]模型均結合使用了各類的注意力機制,較好地解決了文本序列與問題序列的語義融合問題,但是仍然解決不了一詞多義等問題。隨著谷歌BERT[14]的提出,預訓練的語言模型極大地促進了機器閱讀理解的發展。由于通過大規模的預訓練樣本進行訓練,可以捕獲更深層次的語義特征與句間關系,較好地提高了機器閱讀理解的模型性能[15-16]。
基于以上分析,本文將預訓練的BERT模型、注意力機制和自注意力機制相結合,針對機器閱讀理解中的問答式任務,提出基于BERT_Att的機器閱讀理解模型,旨在解決當前機器閱讀理解模型中存在的上下文語義融合不夠充分以及缺乏整體信息利用等問題。
本文所構建的機器閱讀理解模型BERT_Att自下而上共分為五個層次,模型框架如圖1所示。

圖1 基于BERT_Att的機器閱讀理解模型框架
(1) 嵌入層。采用BERT將文本序列和問題序列映射進高維稠密的向量空間。
(2) 上下文編碼層。采用Bi-LSTM針對文本序列和問題序列的向量分別進行編碼,提取上下文信息。
(3) 注意力交互層。采用文本對問題和問題對文本的雙向注意力機制對文本和問題進行語義融合,進一步采用自注意力機制突出整體信息的表達。
(4) 解析層。采用Bi-LSTM捕獲伴隨問題感知的文本中詞與詞之間的交互關系。
(5) 答案輸出層。采用Softmax計算答案開始和結束位置的概率分布。
模型的輸入為問題序列Q={q1,q2,…,qJ}和上下文的文本序列P={p1,p2,…,pT},嵌入層的作用是將問題序列和文本序列映射到高維稠密的向量空間中。BERT為谷歌2018年提出的預訓練模型,模型框架如圖2所示。其中:E代表輸入的向量表示;T代表輸出的向量表示;Trm為Transformer特征抽取器(BERT的BASE版本具有12層的Transformer;Embedding的維度為768;BERT的LARGE版本有24層的Transformer,Embedding的維度為1 024。本文使用的是BERT的BASE版本)。

圖2 BERT模型框架
事實上在BERT之前,出現過GPT(Generative Pre-Training)預訓練模型與ELMO(Embedding from Language Models)預訓練模型。這三個模型均可以解決Word2Vec或者Glove這類靜態模型遺留的一詞多義問題(例如:“一天一蘋果,醫生遠離我”和“蘋果新款手機發布會”,兩句中的“蘋果”如果使用Word2Vec或者Glove將會生成完全相同的向量)。但是,由于ELMO使用LSTM而不是Transformer作為特征抽取,導致其獲取特征能力偏弱。而GPT雖然使用了Transformer抽取特征,但是使用的是單向自回歸的語言模型,在上下文特征的獲取方面存在短板。反觀BERT模型,其具有以下優勢:
(1) 通過使用Masked雙向語言模型,可以較好地抽取上下文相關的特征。
(2) 通過添加Next Sentence Prediction任務,可以處理句子相關的任務。
(3) 使用Transformer來抽取特征。
基于以上分析,本文采用BERT將Q和P分別映射進d維的向量空間中。該層的輸出為:
文本表征矩陣:Ep∈Rd×T
問題表征矩陣:Eq∈Rd×J
式中:T表示的是文本序列的最大長度;J表示的是問題序列的最大長度;d則為向量的維度,d=768。
為了進一步獲取任務所需要的上下文信息。在本文模型中,上下文編碼層以及解析層均采用了Bi-LSTM網絡。Bi-LSTM是由LSTM(Long Short-Term Memory)網絡發展而來。LSTM的單個單元的內部構造如圖3所示。其是由輸入門i、輸出門o、遺忘門f、記憶單元ct所組成。LSTM網絡可以有效解決訓練過程中的梯度爆炸或者梯度消失的問題。

圖3 LSTM單元內部構造
LSTM網絡的計算過程如下:
X=[et,ht-1]
(1)
it=σ(Wi·X+bi)
(2)
ot=σ(Wo·X+bo)
(3)
ft=σ(Wf·X+bf)
(4)
ct=ft⊙ct-1+it⊙tanh(Wc·X+bc)
(5)
ht=ot⊙tanh(ct)
(6)
式中:⊙為點乘運算;et為文本序列(或問題序列)的t時刻向量表示;ht為第t時刻的隱藏層狀態向量;σ為代表網絡的激活函數為Sigmoid;W為隱藏層向量的權重矩陣;b為偏置向量;W和b均為網絡的可訓練參數。
盡管LSTM可以獲取上文的信息,但是無法獲取下文的信息,因此本文采用Bi-LSTM來對上下文信息進行捕獲。Bi-LSTM網絡如圖4所示。

圖4 Bi-LSTM模型框架
注意力(Attention)機制最早應用于視覺圖像領域,自然語言處理領域最早應用注意力機制的則是Bahdanau等[17]所做的機器翻譯任務。注意力機制可以計算單詞的權重,此權重可以理解為對任務的重要性大小。此層的目的是將問題中的詞與文本中的詞進行交互與融合,以突出模型所需要的重點部分。詳細過程如下:
首先,本文從兩個方向上計算注意力。計算文本與問題相似度矩陣S,計算公式如下:
S=α(H:t,U:t)∈RT×J
(7)

文本對問題的注意力表現為文本中的詞與問題中的詞的相關性,計算公式如下:
at=softmax(St:)
(9)

問題對文本的注意力表現為與問題最相關的文本序列的權重,計算公式如下:
b=softmax(maxcol(S))
(10)

(13)
式中:β是一個可被訓練的多層感知機函數,這是其中一種效果較好的拼接方式。
最后,由于自注意力機制有助于學習文本自身內部信息的表達,因此本文模型又采用了自注意力機制即等效為連帶著問題再遍歷一遍上下文,計算公式如下:
uit=tanh(Wwgit+bw)
(16)
式中:git為包含問題感知的向量G的第i列中第t個位置的向量;uw為可訓練參數矩陣。由此輸出通過自注意力機制得到的向量G′∈R8d×T。
此層采用Bi-LSTM,用于捕獲伴隨問題感知的上下文序列中詞之間的交互信息。具體過程為上層的輸出G′先通過一層Bi-LSTM(每個方向上的輸出維度為d)產生一個矩陣M1∈R2d×T,再將M1送入另外一層Bi-LSTM得到矩陣M2∈R2d×T。由上文分析可知,M1和M2均包含文本和問題的上下文感知信息。
此層通過定位答案起始位置和結束位置來獲取最終的答案。通過式(17)和式(18)分別計算出答案在整個文本中起始位置和結束位置的概率分布。

機器閱讀理解的數據集中,英文的數據集有SQuAD[18]、MS MARCO[19]等,中文的有DuReader[20]、DRCD[21]等。本文所使用的數據集為百度2017年發表的中文機器閱讀理解的數據集DuReader,基于TensorFlow1.10.0深度學習框架,采用NVIDIA GTX 1080顯卡,16 GB內存的PC進行實驗。依據問題類型劃分,DuReader分為實體類(Entity)、描述類(Description)和是非類(YesNo)問題,此外,針對每一類問題,再次可以細分為事實類(Fact)和觀點類(Opinion)。相比于其他的機器閱讀理解數據集,DuReader具有以下特點:(1) 文本和問題均由百度知道與百度搜索引擎產生,符合現實的中文應用場景;(2) DuReader涵蓋了之前較少涉及的觀點類與是非類數據,數據類型多樣;(3) 數據集包含的文本以及問題數量充足,每個文本的平均長度也長于以往的數據集。
為了評估模型性能,本文所采用的評價指標為BLEU- 4和ROUGE-L。計算公式如下:
式中:ly1為標準答案的長度;ly2為輸出答案的長度;Pn表示N-gram的精度;N取4,Wn為1/N,BP為懲罰項,懲罰長于標準答案的結果。
式中:y1為標準答案;y2為輸出答案;LCS(·,·)為求最長公共子序列長度;β一般設置較大的值,此處β取1.2。
模型訓練的損失函數選擇交叉熵損失函數,即為:

模型在訓練過程中,由于DuReader數據量較大,文本一般較長,可能會影響模型的收斂,因此本文為了能讓模型更好地處理,在訓練時選取與正確答案重疊最多的段落,測試時選取與問題重疊最多的段落,并對數據集中的噪音(如亂碼與URL等)進行清洗,進一步對是非類問題進行適當的篩選。模型的主要超參數設置如表1所示。

表1 主要超參數設置
模型在訓練過程中使用Adam優化算法進行優化,加快模型的收斂速度。
實驗對比分析了機器閱讀理解任務中主流的幾個模型,實驗結果如表2所示。

表2 不同模型實驗對比(%)
通過對比模型的分析可知,總體而言,由于Match-LSTM模型在編碼的部分使用的是LSTM網絡,因此上下文信息的挖掘有所欠缺,而BiDAF模型的嵌入層無法解決一詞多義問題,并且在注意力層可以進一步挖掘文本和問題的關聯,單純BERT模型正確率有所提升,證明了預訓練有助于提升模型的性能表現。而本文模型BERT_Att性能表現較好,為了進一步驗證模型中各個模塊對總體性能的影響,本文進行了模塊對比實驗(表3中的“√”表示此模塊沿用本文模型中所采用的),結果如表3所示。

表3 不同模塊實驗對比
通過分析表3可得:
(1) 在嵌入層中,相比于使用Word2vec,采用大規模語料預訓練的BERT模型可以提升模型的整體性能。
(2) 在上下文編碼層中,相比于使用只能獲取上文信息的LSTM網絡,采用能捕獲上下文信息的Bi-LSTM網絡更有助于提升模型的整體性能。
(3) 在交互層中,通過采用問題對文本的注意力和文本對問題的注意力并且聯合自注意力機制更能有效地提高模型的整體性能。
此外,為了進一步研究DuReader中兩個不同來源的數據子集對性能的影響,本文分別做了這兩個子集的實驗,結果如圖5所示。

圖5 百度搜索和百度知道實驗對比
由圖5分析可得,本文的閱讀理解模型在百度知道上的性能要優于在百度搜索上的。這是由于百度知道是相對固定的問答數據,而百度搜索所構造的數據則類似于開放世界領域的數據,表明了針對機器閱讀理解任務而言,開放領域數據的模型建模要更為復雜。
最后,為了分析不同的問題類型對模型性能的影響,本文對數據集中三類問題進行實驗,結果如表4和表5所示。

表4 三類問題實驗對比(%)

表5 三類問題結果示例
由表4可知,描述類問題的性能表現最好,實體類問題次之,是非類問題最差。再結合表5的結果示例可以得出,從數據集的角度來看,描述類問題的文本通常是相同中心思想的文段,它的正確答案往往也是一段話,更有助于模型進行歸納總結;實體類問題的文本則相對分散,正確答案也較為簡短,需要模型對上下文進行較為精確的理解后進行簡短歸納方可得出,相比于描述類問題較難學習;然而,是非類問題的文本,有的對于模型而言是“相互矛盾”的,有的則是過于簡短的文本,比如只是簡單的是否,因此模型更難學習。
本文提出的基于BERT、注意力機制與自注意力機制的機器閱讀理解模型BERT_Att,通過在公共數據集DuReader上的實驗結果表明,其BLEU- 4值和ROUGE-L值分別提升了3.2百分點與2.1百分點,較為有效地解決了機器閱讀理解任務中上下文語義信息融合不充分以及整體信息利用缺乏的問題。未來可以引入外部知識庫如知識圖譜使模型更加適應開放領域數據或者領域內數據,可以考慮推理算法來突破是非類問題的性能瓶頸,并通過對抗訓練與遷移學習提高模型在跨數據集上的性能。