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