丁美榮,劉鴻業(yè),徐馬一,龔思雨,陳曉敏,曾碧卿
(華南師范大學 軟件學院,佛山 528225)
機器閱讀理解(machine reading comprehension,MRC)是通過計算機理解文章語義并回答相關問題的一項重要研究任務.讓計算機系統(tǒng)能夠理解文本的含義,并且做出正確的反饋,是自然語言處理的長期目標.機器閱讀理解的研究對提升機器的自然語言理解能力具有重要促進作用,已受到學術界和工業(yè)界的廣泛關注.
將機器閱讀理解技術運用到智能客服問答系統(tǒng)中,能夠更進一步的提高問答系統(tǒng)的擴展性和效率.例如,Long 等[1]提出了基于機器閱讀理解的智能審判模型AutoJudge.Xu 等[2]推出了醫(yī)療閱讀理解數據集CliCR.?uster 等[3]提出了一種深度學習模型StockNet,可以同時分析股價歷史以及Twitter 上相關的新聞.
目前機器閱讀理解任務仍然面臨著許多挑戰(zhàn),例如推理性不強,缺乏可解釋性等問題[4].而將機器閱讀理解應用于法律等其他領域時,對知識推理能力與可解釋性有著更加巨大的需求和挑戰(zhàn).缺乏大量的訓練數據是當前閱讀理解領域急需解決的問題之一.現有的閱讀理解模型和相關數據集存在一定限制,限定輸出只有單個答案.而實際應用中,存在大量場景不僅需要答案,還需要這個答案具有一定的解釋性,需要同時找出能夠支撐該答案的相關句子.目前在司法領域的機器閱讀理解研究還較少,因此也需要我們更多地圍繞該領域對以上問題展開對有效模型和方法的研究探索.
在本文CAIL2020 比賽提供的中文法律機器閱讀理解數據集就是能夠解決這一問題的數據集.該數據集與傳統(tǒng)機器閱讀理解的數據集有所不同,傳統(tǒng)機器閱讀理解任務中,只需要給定文章和問題,通過模型得到答案.而這里的數據集參考了HotpotQA 數據集,使得該機器閱讀理解任務具有更大的挑戰(zhàn),要求實現觀點類問題作答的同時,每個問題都需給出答案的依據,如圖1所示.
圖1 CAIL2020 閱讀理解數據樣例
針對以上問題,本文結合預訓練模型,提出一種層次微調模型(hierarchical fine-tuning reader model,HFReader Model),與機器閱讀理解中主流的幾種預訓練模型進行實驗對比和探索性研究分析,主要貢獻包括3 個方面.
(1)提出一種機器閱讀理解模型,能夠以文章作為依據回答問題,并且能夠有效定位多個支持答案的句子.
(2)參考Retrospective reader 方法并進行修改,將模型分為精讀模塊與泛讀模塊兩個部分.精讀模塊使用字級別的向量對問題和文章進行處理,用作抽取以及分類,泛讀模塊使用句子級別的向量對問題與文章進行處理,用作句子二分類.通過實驗證明該思路的有效性.
(3)提出層次微調方法.使用RoBERTa 預訓練模型,在數據集上先使用多任務學習方法進行微調,再用于精讀模塊與泛讀模塊進行二次微調,使模型得到進一步的提升,驗證該方法是較優(yōu)的提升方式.
機器閱讀理解是一種利用算法使計算機理解文章語義并回答相應問題的技術.本節(jié)從當前國內外經典的抽取式機器閱讀理解數據集以及相關模型兩個角度來對機器閱讀理解進行表述.
抽取式機器閱讀理解的主要任務是給定一段文本和問題,通過模型從文中抽取相應的內容來回答問題.
Rajpurkar 等[5]提出了SQuAD 數據集,該數據集是通過人工方式獲取的基于維基百科構造的數據集,許多經典的模型都是基于此數據集提出的,例如,Seo等[6]提出了BiDAF 模型,使用雙向注意力流的方法獲取上下文表示,使用多層次處理數據在SQuAD 上取得了較好的效果;Wang 等[7]提出了R-Net 模型,一種基于門控與自注意力的模型,該模型在某些指標上已經接近人類水平.Huang 等[8]提出了FusionNet,基于對以往工作中注意力方法的分析,提出單詞歷史與全關注注意力使模型結合了不同語義層的信息流.
Devlin 等[9]提出的雙向語言理解模型BERT,在11 種不同的自然語言處理任務中達到了最佳成績.該模型使用了Vaswani 等[10]提出的多層Transformers 結構,并且使用掩碼機制對大量文本進行無監(jiān)督訓練,再將訓練好的模型用于下游任務.在這之后如CoQA,SQuAD2.0,HotpotQA 等更具有挑戰(zhàn)性的數據集也逐漸被發(fā)表出來.Reddy 等[11]提出的CoQA 數據集將抽取式閱讀理解引入對話場景中,通過多輪對話問答的方式進行問答,該數據集還額外包含了答案為Yes/No的問題,使得模型不僅僅能從文中抽取答案,還能根據原文信息判斷Yes/No的問題.Zhu 等[12]提出了一種全新的基于上下文注意力機制的深度神經網絡SDNet 來解決對話問答任務,并將前幾輪的問題和對當前問題的回答加入上下文從而解決多輪對話問題.
Rajpurkar 等[13]提出的SQuAD2.0 數據集則是包含了不可回答問題,使得模型不僅僅需要回答原文中可以找到答案的問題,還要避免回答原文中找不到答案的問題,從而達到更深層次的理解.Zhang 等[14]首次提出回顧式閱讀方法Retro-Reader 模型,將其化為兩個模塊分別進行訓練,第一個模塊先進行判斷是否是可回答問題,第二個模塊來產生答案候選,最后綜合兩個模塊來得到最后的答案.
Yang 等[15]提出的HotpotQA 數據集的挑戰(zhàn)在于,該數據集是基于多文檔以及推理的數據集.Ding 等[16]提出了CogQA 模型,使用BERT 模型輸出答案信息以及多跳信息在GNN 上生成新的節(jié)點和下一跳的關系,以此方法進行推理計算.Qiu 等[17]提出了DFGN 模型,使用動態(tài)融合圖網絡來解決多跳推理問題,設計了融合模塊來提高實體圖和文章之間的交互性.Tu 等[18]提出了HDE 模型,通過互注意力學習候選答案、問題、文檔以及實體之間的關系,同時利用這些關系構建了一個異構圖,并通過圖卷積神經網絡進行推理尋找答案的支撐句.Nishida 等[19]提出了QFE 模型,將片段抽取任務與多跳推理任務進行聯合學習,使用RNN來提取答案的支撐句.Tu 等[20]提出了SAENet 模型,提出了learning-to-rank 算法過濾冗余文檔信息,結合多任務學習以及圖神經網絡對答案以及證據共同預測,增強了模型的可解釋性.Shao 等[21]提出了C2F Reader模型,通過實驗證明了Transformers 有能力學習從一個實體到另一個實體的注意力從而替代圖結構,認為多跳推理并不一定需要圖結構.
法律的智能化在近些年來成為一個熱點研究方向,其中一項重要的任務就是將機器閱讀理解技術應用在司法領域,讓人工智能自動地閱讀和分析海量的法律文書,以提高司法人員在案件處理環(huán)節(jié)的效率.但目前關于中文司法領域的機器閱讀理解的數據集相對匱乏.因此,Duan 等[22]提出了一個中文司法閱讀理解(CJRC)數據集,它包含了大約一萬個文檔和近五萬個問題和答案.文件來源于判決書,問題由法律專家注釋.CJRC 數據集可以幫助研究人員通過閱讀理解技術提取元素.在該數據集上,譚紅葉等[23]對閱讀理解中問題類型多樣性的解答展開研究,提出一種基于BERT的多任務閱讀理解模型,利用注意力機制獲得豐富的問題與篇章的表示,并對問題進行分類,然后將分類結果用于任務解答,實現問題的多樣性解答.
機器閱讀理解任務主要分為3 大類型:填空式閱讀理解,選擇式閱讀理解,抽取式閱讀理解.本文的主要研究就是基于抽取式閱讀理解的數據集CAIL2020,與傳統(tǒng)的抽取式閱讀理解任務不同,傳統(tǒng)的抽取式閱讀理解任務定義為:
給定一段文本c={w1c,w2c,…,wnc}和問題q={w1q,w2q,…,wnq},通過模型從文本中抽取出對應的答案a.
而本文研究的數據集,除了需要從文本中抽取對應的答案部分之外還需要額外抽取支撐該答案的句子,即支撐答案的證據Sk,k為證據的句子數目.對于上述任務,其定義如式 (1) 所示:
層次微調模型分為兩層,第一層我們先使用RoBERTa 模型進行編碼分別用線性層進行輸出計算損失值,并保存最優(yōu)權重,進行第一次微調,如圖2中(a)所示.第二層再結合Retro-Reader 方法,將模型分為精讀模塊和泛讀模塊分別讀取模型(a)微調后的權重進行二次微調,最后進行預測,如圖2中(b)所示.
圖2 HF-Reader 模型架構圖
編碼層將問題和文章的離散符號轉換為連續(xù)向量表示序列.本文使用RoBERTa-large-wwm 來實現編碼層.該方法主要更改了原預訓練階段的訓練樣本生成策略,將全詞掩碼的方法應用在了中文中,即對組成的同一個詞的漢字全部進行[MASK].
首先本文使用預訓練模型RoBERTa的詞表先將輸入的文本轉化Input=[CLS]Q[SEP]T[SEP]的方式.其中[CLS]用于分類任務,Q為問題,T為文章,[SEP]作為分隔符來對問題Q和文章T 進行分割.Input 長度為512,如果總長度未達到512,空余部分以0 補全.之后將離散的符號映射至高維的向量,通過24 層Transformers,隱藏層維度為1 024,激活函數使用高斯誤差線性單(GELU),并采用16 頭注意力機制進行編碼.經過編碼層得到的向量將用于后續(xù)的交互層進行處理.
層次微調方法的主要作用是將圖2中(a)的模型結合更多的任務獲取更廣泛的相關領域知識.
該方法是通過RoBERTa 預訓練模型與多任務學習方法進行訓練,并保存最優(yōu)的RoBERTa 模型權重.然后再將其權重值傳遞給圖2中(b)部分的精讀模塊和泛讀模塊分別進行讀取,繼續(xù)在對應的任務上進行訓練,從而達到一個較好的效果.
精讀模塊主要包含編碼層,交互層以及輸出層.而編碼層均采用3.3 節(jié)方法進行編碼故本節(jié)主要描述交互層以及輸出層.
采用多任務學習方法,任務1為序列標注問題從文章中標注答案開始位置以及結束位置,任務2為分類問題,結合問題以及文章進行判斷得到答案的類型.由編碼層可以得到輸入層的1 024 維向量表示,n為512.
任務1 中定義BERT的輸入為[CLS]Q[SEP]P.定義P中n個單詞的BERT 編碼為[h1,h2,…,hn],hi∈Rd.在BERT的模型上加入一個前向網絡Ws∈Rd*l來獲取分數si∈hiWs.經過Softmax計算得到模型預測的答案在文本中每個位置開始的概率PiS,如式 (2) 所示:
同理,加入另一個的前向網絡WE∈Rd*l來獲取分數ei∈hiWE.經過Softmax計算得到模型預測的答案在文本中每個位置結束的概率PiE,如式 (3) 所示:
使用n維度的矩陣W,將每個開始位置與每個結束位置的概率相加,若開始位置大于結束位置,則置為0.從中W尋找概率最大的位置.矩陣W的定義如式 (4)所示.
任務2 中BERT的輸入同樣為[CLS]Q[SEP]P.定義[CLS]的BERT 編碼為h0∈Rd.在BERT 模型上加入一個前向網絡Ws∈Rd*4用來獲取分數得到[t1,t2,t3,t4].經過Softmax 計算得到模型預測的每個答案類型的概率Pi,并得到概率最大的答案類別為Pt.答案類型為4 種分別為SPAN 類型,YES 類型,NO 類型以及UNKNOWN 類型.對于類型的分類定義,如式 (5):
將任務1 中,W矩陣中概率最大的開始位置與結束位置與標準答案的位置輸入交叉熵損失函數得到loss1.
同樣將任務2 中概率最大的類型與標準答案的類型進行交叉熵函數得到loss2并將兩者的loss相加返回總損失值L進行訓練,具體定義如式 (6)-式 (8) 所示:
其中,yS與yE分別代表開始位置的標準值與結束位置的標準值,yt代表答案類別的標準值,PS與PE則是分別代表模型預測的開始位置與結束位置,Pt代表模型預測的答案類別,a與b為系數.
泛讀模塊也同樣包含編碼層,交互層以及輸出層.編碼層均采用3.3 節(jié)方法進行編碼故本節(jié)主要描述交互層以及輸出層.
本模塊單獨進行編碼不與精讀模塊進行共享權重參數,該模塊先將3.3 節(jié)得到512×1024 維度向量按照句子的位置信息,轉化為m×1024 維的句子向量,其中m為文章中句子的數目,句子向量表示為S={s1,s2,…,sn}.然后再經過全連接層與Sigmoid函數輸出預測值x,判斷該句子是否為答案的證據.
最后損失函數使用二元交叉熵函數,計算過程如式 (9)和式 (10) 所示,其中y為目標值,x為預測值.
精讀模塊的預測結果有兩部分,第1 部分為答案類型一共有4 種分類.分別為截取類型(SPAN 類型),是否類型(YES/NO 類型)以及不可回答類型(UNKNOWN類型).第2 部分為根據問題在原文中所截取的片段.
我們先取第1 部分答案類型分類結果,如果分類為是否類型與不可回答類型,則直接輸出答案類型作為精讀模塊結果.如果為截取類型,則取第2 部分輸出內容為結果.
最后,將精讀模塊預測內容與泛讀模塊中輸出的答案支撐句進行拼接,進行最終答案的輸出,得到如圖1的結果方便后續(xù)評估.
本文的實驗數據集為CAIL2020,訓練集包括重新標注的約5 100 個問答對,其中民事、刑事、行政各約1 700 個問答對,均為需要多步推理的問題類型.驗證集和測試集各分別約為1 900和2 600 個問答對,同樣均為需要多步推理的問題類型.其中訓練集中按照答案類型進行劃分,如圖3截取類型(SPAN 類型)數據包含2748 個問答對,是否類型(YES/NO 類)包含1 512個問答對,不可回答類型(UNKNOWN 類型) 包含758 個問答對.
圖3 答案類型圖
實驗訓練過程中模型采用Loshchilov 等[24]提出的帶有權重衰減的自適應動量估計算法(AdamW)作為優(yōu)化算法,學習率為1e-5.使用預熱學習率(warmup step),即先用較小的學習率訓練,然后每步逐漸增大,直到達到最初設置的學習率,批處理大小為1,一共訓練10 輪.
由于預測結果主要包含兩個字段,分別為“answer”和“sup”.“answer”對應的是模型預測的答案,“sup”則是模型預測的答案的依據.本文使用F1 作為評分的主要評分標準,分別對“answer”和“sup”的值進行計算精確率(precision)和召回率(recall),得到pAns,rAns,pSup,rSup.再計算綜合的Joint F1 值作為最終評價標.其中precision用來描述所有預測的答案文本中與真正答案文本的相同字數所占比率,recall用來描述所有真正答案中與預測答案文本的相同字數所占比率.F1 綜合了precision和recall兩個指標,其定義如式 (11)和式 (12).
TP表示真實樣本與預測樣本中令牌(token)相同的部分,TP+FP表示預測樣本中所有的令牌數目,TP+FN表示真實樣本中所有的令牌數目.
Ans_F1 以及Sup_F1的計算方法則是將其對應的精確率與召回率分別相乘如式 (13)和式(14) 所示:
Joint_F1的計算方法則是將“answer”與“sup”的精確率與召回率分別相乘,再計算Joint 最終評價指標.具體如下式所示:
本文使用機器閱讀理解中流行的主流預訓練模型進行對比實驗.并且選取了4 種不同規(guī)模的模型進行對比分析,主要為:
(1)BERT 模型,在預訓練模型之后使用多任務學習方法進行預測.
(2)ALBERT 模型,采用矩陣分解等方法為輕量級的BERT 模型[25],并在預訓練模型之后采用多任務學習方法進行預測.
(3)RoBERTa 模型,相較于BERT,訓練時去除了下一句預測部分.其中對比實驗中用到了其base 版本和large-ext 版本[26].同樣使用多任務學習方法進行預測.
(4)MJL-DPCNN 模型,使用句法關系增強的關系要素圖構建方法在DFGN 模型上進行支撐句挖掘并使用DPCNN 進行觀點類問題分類[27,28].
(5)DFGN_CAIL 模型,按照CAIL2020的數據格式,修改了DFGN的數據處理部分.
(6)Cola 模型,CAIL2020 閱讀理解比賽第4 名所用模型.
由于本文的數據集為中文數據集,因此使用中文全詞覆蓋的方式取代原本英文的WordPiece 方法.本文采用RoBERTa 作為預訓練模型,實驗的評價指標與HotpotQA 一致.以上模型在測試集上的實驗結果如表1所示,可以看出所有的基線模型中RoBERTa-large模型效果最好.本文的模型方法相較于RoBERTa-large基線模型綜合評分提升了3.38%.
表1 CAIL2020 實驗結果 (%)
消融實驗部分將訓練集按照9:1 進行分割分別作為新的訓練集和驗證集.為了進一步評估模型各個模塊的貢獻,本文進行了如下消融實驗:
(1)-Retro Reader:去掉精讀模塊與泛讀模塊,并使用多任務方法取代進行預測.
(2)-HF:去掉層次微調方法.
表2實驗結果顯示,去掉層次微調方法后,Ans_F1的值下降了1.24,Sup_F1 下降了1.99,Joint_F1 下降了2.24.去精讀模塊與泛讀模塊,并使用多任務方法取代后,Ans_F1的值下降了2.01,Sup_F1 下降了2.48,Joint_F1 下降了3.7.通過消融實驗分析,證明了本文所提模型的有效性.
表2 消融實驗 (%)
本文提出了一種多任務層次微調模型,靈活使用預訓練與多任務學習方法獲取到更廣泛的語義信息,并將答案類型預測和答案預測兩個任務放入精讀模塊.使用多任務學習方法進行預測,再將證據抽取任務單獨分放進泛讀模塊,單獨進行訓練預測,最后綜合兩個模塊的預測結果進行輸出,并且選取了BERT、ALBERT、RoBERTa、RoBERTa-large 四種不同規(guī)模的預訓練模型對輸出的實驗結果進行了對比分析.實驗表明,本文所提方法可以有效提高機器閱讀理解的答案抽取以及證據抽取的效果.為了進一步評估模型各個模塊的貢獻,本文又通過消融實驗將訓練集按照9:1 進行了分割,用分割后新的訓練集和驗證集進行實驗,分別去掉Retro-Reader 部分以及層次微調部分,并使用多任務方法取代進行預測后,F1的值均顯示下降,進一步證明了本文所提模型的有效性.未來將把側重點放在精讀模塊與泛讀模塊上,以進一步對模型進行改進優(yōu)化,例如結合當前熱門的圖卷積網絡技術以句子作為節(jié)點進訓練并行預測,進一步提升機器閱讀理解的效果以及可解釋性.