張禹堯,蔣玉茹,毛 騰, 張仰森
(北京信息科技大學 智能信息處理研究所,北京 100101)
機器閱讀理解是當下自然語言處理的一個熱門任務,也是一項十分具有挑戰(zhàn)性的任務。在該任務中,機器需要在給定上下文和問題的基礎上,發(fā)現(xiàn)上下文與問題之間的聯(lián)系并給出最終答案。根據(jù)具體的任務類型劃分,可以將任務細分為完形填空式閱讀理解任務和片段抽取式閱讀理解任務。
近年來,已有很多深度學習模型在片段抽取式機器閱讀理解任務上取得了較好的成績,其中比較典型的模型是包含推理過程的閱讀理解模型,它的成功主要歸結(jié)于兩點[1]: ①多跳結(jié)構(gòu): 這種結(jié)構(gòu)允許模型多次計算文檔上下文與問題之間的關(guān)聯(lián),隨著層次加深,能獲得更深層次的關(guān)聯(lián)信息表示; ②注意力機制: 注意力機制允許模型更關(guān)注重要的信息。將這兩種方式結(jié)合起來后,模型會進行多輪的計算,并在每輪計算中借助注意力機制調(diào)整信息的權(quán)重,達到推理的效果,從而取得較好的成績。
目前為止,典型的基于多跳模型結(jié)構(gòu)與注意力機制的模型(GA reader、IA reader[2]、 ReasoNet[3])都采取了類似的方式,即通過多輪的迭代以及注意力機制來實現(xiàn)推理,不斷縮小答案的范圍。本文認為這些將多跳結(jié)構(gòu)和注意力機制結(jié)合起來的方式仍存在著一定的改進空間,因此,本文將聚焦于如何盡可能發(fā)揮注意力機制在多跳模型中的作用,并提出了一種基于多重聯(lián)結(jié)機制的注意力模型(MCA-Reader)。與現(xiàn)有的類似模型不同,本文提出的模型不再是通過多輪迭代來逐步縮小答案的范圍,而是通過使用多重聯(lián)結(jié)機制,給予每輪迭代不同的含義,使其能挖掘出不同的特征信息。在CMRC2018[4]評測任務上,本文所提出的模型取得了較好的成績,在最終提交的隊伍中排名第二。
機器閱讀理解任務可以被定義為一個監(jiān)督學習問題,一般地,形式化為一個三元組:
T=(c,q,a)
其中,T為機器閱讀理解任務,c為給定的文檔或者上下文的信息,q表示與文檔或上下文相關(guān)的問題,a表示問題的答案。
隨著機器閱讀理解技術(shù)的發(fā)展,機器閱讀理解的任務形式也在不斷發(fā)生變化。
早期的完形填空式任務,一般會提供一個答案候選集C,問題q是上下文中的一個句子且該句中會抽出一個詞并使用占位符替代。任務最終的目標是在給定上下文c和問題q的前提下,在C中選擇一個最佳答案a。典型的數(shù)據(jù)集有CNN/Daily Mail[5]、Children’s Book Test[6]、CMRC2017[7]等。然而,完形填空式閱讀理解的答案通常是單一的詞語或?qū)嶓w,有時答案的選取甚至不需要完全理解文本,因此與真正的閱讀理解還有一定的距離。
第二階段的閱讀理解任務發(fā)展為基于百科的單文檔片段抽取式閱讀理解任務,這一階段中不再給出答案候選集,問題一般由人工編寫,答案是文檔或上下文中的一個連續(xù)的片段。典型的數(shù)據(jù)集包括SQuAD1.0[8]、CMRC2018等。基于百科的單文檔片段抽取式閱讀理解任務相較于完形填空式任務難度更大,也更接近真實的閱讀理解,但是仍然存在一定的限制,即數(shù)據(jù)是封閉式的,且語言表達上與人類所使用的日常表達存在一定差異。
隨著基于百科的單文檔閱讀理解技術(shù)的發(fā)展,機器閱讀理解任務又進一步升級為基于網(wǎng)頁數(shù)據(jù)的多文檔閱讀理解形式,與前一階段的主要區(qū)別是數(shù)據(jù)是開放式的,且語言表達更加貼近人類日常使用情況,難度更大。其中典型的數(shù)據(jù)集包括MS-MARCO[9]、DuReader[10]等。
注意力機制[11]最早由Bahdanau等人提出并將其使用在神經(jīng)機器翻譯任務中,本質(zhì)上起到對齊的作用,它將翻譯中的目標語句與源語句中的詞進行對齊,進而大大提升了翻譯質(zhì)量。隨后,在自然語言處理任務中,注意力機制得到了更廣泛的應用。在機器閱讀理解任務中,注意力機制更是成了通用的模型。使用注意力機制,可以更好地捕獲到文章和問題中重要的信息,進而更加準確地給出答案。不同的網(wǎng)絡結(jié)構(gòu),使用注意力的方式和類型也不盡相同。以AS Reader[12]為代表的一類模型中,只使用了一次注意力機制,并直接將注意力的值送入輸出層做預測;而BiDAF[13]一類的模型則不同,模型在做完一次注意力計算之后,還需要繼續(xù)進行編碼,再輸入給預測層;還有一類則是以ReasoNet為代表的多跳注意力方式,模型中會多次迭代計算注意力的值,以達到推理的效果。
CMRC2018評測任務是“篇章片段抽取型閱讀理解”,閱讀理解模型將根據(jù)給定的一個篇章和一個問題,在文章中找出問題的答案,即預測問題的答案在篇章中的起始位置s和結(jié)束位置e,其數(shù)據(jù)格式如表1所示。系統(tǒng)的目標就是根據(jù)問題(Question)在文檔(Document)中找出答案(Answer)在文章中出現(xiàn)的位置(如表1中所標示的陰影文字部分)。
表1 CMRC2018訓練集實例
篇章內(nèi)容來自中文維基百科,問題由人工編寫。數(shù)據(jù)規(guī)模如表2所示,其中預測試集是測試集的一個子集,預測試集和測試集對參賽隊伍都是不可見的。
表2 CMRC2018評測數(shù)據(jù)集規(guī)模
CMRC2018評測任務的基本評價指標有兩個: (1)精準匹配度(exact match,EM): 計算預測結(jié)果與標準答案是否完全匹配。(2)模糊匹配度(F1): 計算預測結(jié)果與標準答案之間字級別的匹配程度。
本文所提出的基于多重聯(lián)結(jié)機制的注意力模型與Gated-Attention Reader模型相似,主要包括嵌入層、編碼層、多輪交互層和輸出層。如圖1所示,該模型的主要創(chuàng)新點在模型的多輪交互階段,在其他層本文也有一些創(chuàng)新工作,下文將給出詳細描述。
圖1 MCA-Reader模型結(jié)構(gòu)
第一層為嵌入層,將每個單詞映射到一個高維空間中。在這里,本文使用了采用Word2Vec[14]預訓練的兩組詞向量,且詞向量不會隨模型一同訓練。此外,受FastQA[15]論文啟發(fā),本文還嘗試加入了兩個維度為1的手工特征:
(1) 詞級別共現(xiàn): 如果某個詞,在上下文和問題中同時出現(xiàn),則將該詞在上下文和問題中對應的位置的詞級別共現(xiàn)特征的值w置為1,否則置為0,如式(1)所示。
(1)
(2) 字級別共現(xiàn): 以詞為單位,遍歷詞中的每個字,如果某字在上下文和問題中同時出現(xiàn),則共現(xiàn)次數(shù)加1,最終字級別共現(xiàn)特征c的計算方式為該詞中字的共現(xiàn)次數(shù)之和m除以字所在詞的長度len(w)。如式(2)所示。
(2)
第二層為編碼層,編碼層利用雙向GRU[16],對經(jīng)過詞嵌入映射后的結(jié)果進行上下文編碼。文章的編碼結(jié)果記為hctx∈R|C|×2d, 問題的編碼結(jié)果記為hqry∈R|Q|×2d,其中R為編碼后的向量,|C|為上下文長度,|Q|為問題長度,d為編碼維度。如式(3)~式(4)所示。
其中,x為上下文或問題中詞序列對應的索引序列,v(x)表示將x中每個索引轉(zhuǎn)化為詞向量,wx為對應序列的詞級別共現(xiàn)特征,cx為對應序列的字級別共現(xiàn)特征。
第三層為多輪交互層,這是本文工作的核心部分。在此層,本文使用Attention-over-Attention Reader[17]中提出的注意力方式進行上下文和問題的交互。首先將hctx∈R|C|×2d和hqry∈R|Q|×2d做點積運算,得到評分矩陣M∈R|C|×|Q|,如式(5)所示。
M(i,j)=hctx(i)T·hqry(j)
(5)
其中i、j為索引,hctx(i)為上下文中的第i個詞所對應的編碼后向量,hctx(i)T表示對向量hctx(i)進行轉(zhuǎn)置,得到矩陣M后,分別在列方向與行方向做softmax操作,得到兩個注意力矩陣α和β, 如式(6)~式(9)所示。
其中t為索引,式(6)中t的范圍是1到|Q|,式(8)中t的范圍是1到|C|,將得到的注意力矩陣α與β做乘法,得到矩陣A1∈R|C|×|Q|,然后將A1再與問題的編碼hqry∈R|Q|×2d相乘,得到最終的包含著問題信息的上下文G1∈R|C|×2d,如式(10)、式(11)所示。
將得到的含著問題信息的上下文G1∈R|C|×2d和進行注意力計算之前的上下文的輸入hctx∈R|C|×2d進行聯(lián)結(jié)得到單輪交互的最終結(jié)果ha1_o∈R|C|×4d,如式(12)所示。
ha1_o=[hctx;G1]
(12)
在得到單輪交互的結(jié)果ha1_o∈R|C|×4d后,再次進行編碼與交互,重復兩次,但重復的過程中不再對問題進行編碼,最終得到ha1_o∈R|C|×4d,ha2_o∈R|C|×4d,ha3_o∈R|C|×4d與A1、A2、A3。
最后將A1、A2、A3相加,然后在列的維度取平均,得到A∈R|C|×1;將A與ha1_o,ha2_o,ha3_o聯(lián)結(jié),并進行最后一次編碼,得到最終的上下文表示hc∈R|C|×(12d+1),如式(13)、式(14)所示。這是能使本文的模型中每輪交互能夠注意到不同的側(cè)面信息的關(guān)鍵。
最后一層為輸出層,本文使用Pointer Network[18]進行預測,預測的輸出為答案在上下文中的開始位置s和結(jié)束位置e,如式(15)所示。
s,e=PtrNet(hc)
(15)
本文使用CMRC2018評測任務的數(shù)據(jù)集對所提出模型進行評估。另外,本文在模型訓練過程中使用了兩個額外的數(shù)據(jù)集,分別是CMRC2017數(shù)據(jù)集和DRCD[19]數(shù)據(jù)集。兩個數(shù)據(jù)集的數(shù)據(jù)格式與表1中的數(shù)據(jù)格式類似,任務也相同,本文將DRCD數(shù)據(jù)集進行了繁簡轉(zhuǎn)換,然后全部并入訓練集。最終訓練集中包含CMRC2018試驗集、CMRC2018訓練集、CMRC2017訓練集、DRCD數(shù)據(jù)集,總訓練數(shù)據(jù)達到 40 000條。
本文使用Word2Vec預訓練了200維的詞向量初始化詞嵌入層,語料為9 GB的百度百科語料。此外,詞嵌入層中加入一層丟棄層[20],丟棄率為0.1。模型中所有的雙向GRU為雙層,隱藏維度為88,且每一層后面追加一層丟棄層,第一層后的丟棄層的丟棄率為0.3,第二層后的丟棄層的丟棄率為0.2。批量大小為64,優(yōu)化器為Adam[21],學習率為0.001,L2正則化的系數(shù)為0.000 4。
本文中,針對未登錄詞,做了如下兩部分的處理。第一部分是命名實體分詞的問題。本文發(fā)現(xiàn),在中文中,大部分的未登錄詞都是人名、地名、機構(gòu)名等命名實體,而簡單的分詞無法直接將命名實體切分出來,這樣就會引入很多無意義的詞。因此,在分詞階段,本文引入了命名實體識別工具,首先進行命名實體識別,將識別到的命名實體,作為一個整體,再進行切分,一定程度上提升了分詞的準確性。第二部分是命名實體的表示問題。引入了命名實體的分詞機制,在提高了分詞準確性的同時,也引入了一個新的問題,即如何對這些命名實體進行表示的問題。此時,對未登錄詞的表示問題可以轉(zhuǎn)化為如何為命名實體賦予合適的向量進行表示的問題。為解決命名實體的表示問題,本文同樣預訓練了一組詞向量,在該組詞向量的訓練過程中,首先進行了命名實體識別,對識別到的命名實體,替換為命名實體對應的類別(Ns、Nh、Ni)。將進行命名實體替換后的語料進行訓練,即得到命名實體類的詞向量。使用時,如果某詞未在嵌入層預訓練詞向量的詞表中,則進一步判斷該詞是否為命名實體,如是命名實體,則賦予其命名實體類別的詞向量。
通過以上兩部分的處理,一定程度上緩解了未登錄詞的問題最終對模型的影響。
最終的評測結(jié)果如表3和表4所示。其中表3為測試集上的最終評測結(jié)果,表4為挑戰(zhàn)集上的結(jié)果。從中可以看出,本文所提出模型在各種測試集上的表現(xiàn)效果都比較穩(wěn)定,都處于前三名的位置。
表3 CMRC2018評測任務測試集評測結(jié)果
表4 CMRC2018評測任務挑戰(zhàn)集評測結(jié)果
本文中的多重聯(lián)結(jié)機制具體指在最后一次編碼時,將多輪迭代過程中的全部中間計算結(jié)果進行聯(lián)結(jié)。經(jīng)實驗發(fā)現(xiàn),通過這種機制,模型中多輪迭代的過程不再是一個逐漸縮小答案范圍的過程,而是變?yōu)橹饾u探索特征信息的過程,最終在多層聯(lián)結(jié)注意力模型的每一層分別關(guān)注了回答問題所需特征的不同側(cè)面。本文選取兩組案例來說明這一問題,如圖2和圖3所示,圖中橫坐標為問題分詞后的結(jié)果,縱坐標為文檔分詞后的結(jié)果。為了方便展示,這里對文檔的內(nèi)容進行了截斷。其中子圖(a)、(b)和(c)分別是從第一層、第二層和第三層的注意力計算中得到的,圖中顏色越深,代表在該層計算中所獲得注意力的值越大。
圖2 多重聯(lián)結(jié)機制下的注意力權(quán)重案例A
圖3 多重聯(lián)結(jié)機制下的注意力權(quán)重案例B
從圖2和圖3中可以看出,注意力每次對齊的結(jié)果,都關(guān)注不同的側(cè)面,都是有利于回答問題的一類特征信息。第一次的注意力在詞的語義層面進行對齊,如圖2(a)中的“坐落于”和“位于”, 圖3(a)中的“歌手”和“職業(yè)”等;第二次的注意力會對答案的最大范圍進行對齊(一般是句號,答案不會跨句),圖2(b)中對齊了句號,沒有關(guān)注逗號, 圖3(b)中可以發(fā)現(xiàn)對兩個句號都有對齊,但是對于答案所在句的句號的權(quán)重值更大;第三次的注意力則會對能代表問題類型的關(guān)鍵字進行對齊,如圖2(c)中的“什么”“地方”,圖3(c)中的“什么”。對于開發(fā)集中注意力第三次計算結(jié)果中的最大值對應問題中的詞語,本文進行了詞頻統(tǒng)計,最終結(jié)果如表5所示。
表5 第三次注意力計算結(jié)果及頻次統(tǒng)計
續(xù)表
為了驗證本文提出模型的效果,我們設計了一組對比實驗,實驗對象為一般的多輪迭代方式模型,超參數(shù)保持不變,實驗結(jié)果如表6所示。
表6 多重聯(lián)結(jié)機制對結(jié)果的影響
對于多重聯(lián)結(jié)機制為何能發(fā)揮作用,本文認為是因為在最后一次編碼時會考慮模型前部分的全部注意力信息,不再局限在最后一次注意力的結(jié)果,因此可以使得模型中每層注意力對齊的特征不同。但是并不是迭代的輪數(shù)越多,就越能得到更多的信息,對結(jié)果的提升越大。對于具體進行多少輪迭代的問題,本文設計了對比實驗,實驗結(jié)果如表7所示。
表7 迭代輪數(shù)對結(jié)果的影響
其中,迭代輪數(shù)為2時,每輪都會對齊不同的特征,第二次同時對齊問題類型關(guān)鍵詞和答案的最大邊界;迭代輪數(shù)為4時,第1、2、4次的注意力對齊效果與3層時一致,但是第3次迭代時注意力完全失去了效果,數(shù)值全部接近于0。
除了模型本身的多重聯(lián)接機制以外,本文嘗試的一些額外方法,對模型同樣起著至關(guān)重要的作用。實驗結(jié)果如表8所示。
表8 開發(fā)集上的模型各部分影響
從表8中可以清晰地看出,除了模型的結(jié)構(gòu)本身,數(shù)據(jù)總量(數(shù)據(jù)集擴增)、數(shù)據(jù)的處理(未登錄詞)以及手工特征(字、詞共現(xiàn)特征)對模型的影響,同樣不可忽視。
關(guān)于字、詞共現(xiàn)特征為何能使模型性能產(chǎn)生較大的提升,本文認為是這兩個不同粒度的對齊特征能緩解一定的未登錄詞問題。本文設計了對比實驗,抽取了驗證集中部分數(shù)據(jù),抽取的原則是問題中必須包含未登錄詞,共抽取數(shù)據(jù)837條,作為本部分實驗的測試數(shù)據(jù),最終結(jié)果如表9所示。從結(jié)果上來看,手工特征的引入,對于未登錄詞的問題確實有一定的緩解作用。由于字特征比詞特征的粒度更細,提升效果也更加明顯。
表9 手工特征對含未登錄詞數(shù)據(jù)的影響
續(xù)表
針對CMRC2018評測任務,本文提出了一種基于多重聯(lián)結(jié)機制的注意力閱讀理解模型,該模型能夠使注意力機制在片段抽取式機器閱讀理解任務中更好地發(fā)揮作用。在多輪迭代的過程中,模型可以得到回答問題不同的特征信息,最終將這些不同的特征信息聯(lián)結(jié)在一起,可以更準確地找到答案。為了驗證多重聯(lián)結(jié)機制的效果,本文與非多重聯(lián)結(jié)結(jié)構(gòu)的模型進行了對比。此外,本文進行了其他對比實驗,實驗表明: 在現(xiàn)有語料規(guī)模和超參數(shù)空間下,疊加層數(shù)為3時,本模型能取得最好的效果。同時,除了模型本身,針對特定任務的特征挖掘、數(shù)據(jù)處理等額外的方法,對于模型效果的提升,同樣不可忽視。
本文中并未加入語言模型這一目前主流的方法,因此在性能上還尚未能達到最優(yōu),還有一定的提升空間。此外,如何利用短語結(jié)構(gòu)對模型預測結(jié)果中不合乎短語結(jié)構(gòu)的數(shù)據(jù)進行修剪,是我們下一步研究的目標。