杜家駒,葉德銘,孫茂松
(1. 清華大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,北京100084;2. 清華大學(xué) 人工智能研究院,北京100084;3. 清華大學(xué) 智能技術(shù)與系統(tǒng)國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京100084)
智能問答是自然語(yǔ)言處理中的重要任務(wù),其目標(biāo)是回答人類用自然語(yǔ)言形式提出的各種問題,涉及檢索、語(yǔ)義匹配、推理等自然語(yǔ)言處理中的重要技術(shù)。與搜索引擎不同,它能夠?yàn)橛脩糁苯犹峁┐鸢?,省去用戶閱讀文檔的時(shí)間,擁有重要的實(shí)際價(jià)值。
開放域問答是智能問答的主要研究領(lǐng)域之一。它的目標(biāo)是回答任意領(lǐng)域的問題,而不是把問題限定在某個(gè)領(lǐng)域內(nèi)。給定一個(gè)問題Q以及許多文檔(如維基百科的全部?jī)?nèi)容,或互聯(lián)網(wǎng)上的所有網(wǎng)頁(yè)),模型需要根據(jù)這些文檔回答問題。開放域問答模型的一種常見實(shí)現(xiàn)方式由檢索器和閱讀器兩部分構(gòu)成。檢索器需要從給定的文檔集合中檢索出可能相關(guān)的一些文檔,之后閱讀器需要閱讀并綜合處理這些文檔,得出問題的答案。這兩部分通常是分離的,檢索器通常使用傳統(tǒng)方法進(jìn)行檢索,如TF-IDF或BM25,或者使用搜索引擎(如Bing),閱讀器一般使用標(biāo)注好的閱讀理解數(shù)據(jù)集訓(xùn)練,其文檔通常來自于維基百科。閱讀理解是智能問答的另一重要研究領(lǐng)域。目前,閱讀理解模型通常在大規(guī)模預(yù)訓(xùn)練語(yǔ)言模型上微調(diào)(Fine-tune),在各類數(shù)據(jù)集上能夠接近甚至超出人類水平。
但是,閱讀理解和開放域問答是不同的場(chǎng)景,所以用閱讀理解數(shù)據(jù)集訓(xùn)練得到的模型直接遷移到開放域問答往往會(huì)遇到很多問題。我們使用目前通行的方法訓(xùn)練了一個(gè)閱讀理解模型,并在真實(shí)場(chǎng)景下進(jìn)行了評(píng)測(cè),發(fā)現(xiàn)了一些問題,如圖1所示。在示例1中,檢索器抽取網(wǎng)頁(yè)的主要內(nèi)容并進(jìn)行分段處理,會(huì)出現(xiàn)形如“喬戈里峰”這樣僅含一個(gè)實(shí)體的較短的段落。此時(shí)閱讀器看到了問題要求回答某一座山峰,且段落中包含一座山峰后就直接輸出了“喬戈里峰”。在示例2中,問題和文章中涉及的地點(diǎn)限定詞是不同的,但模型仍然輸出了屬于“山峰”這一類型的一個(gè)實(shí)體。這兩個(gè)例子說明目前的閱讀理解模型沒有真正地理解問題和文章之間的關(guān)系,只是學(xué)習(xí)到了淺層的文本匹配。
圖1 閱讀理解模型錯(cuò)誤輸出示例
上述問題出現(xiàn)的原因本質(zhì)上是因?yàn)槟壳伴_放域問答系統(tǒng)的閱讀器使用閱讀理解數(shù)據(jù)集訓(xùn)練。在開放域問答中,人們通常是先想到問題再去找相關(guān)文章。而在標(biāo)注閱讀理解數(shù)據(jù)集時(shí),標(biāo)注者在閱讀文章后提出若干問題,文章內(nèi)容的先入為主導(dǎo)致他們提出的問題通常與文章的句子比較相近。所以較短的段落以及與問題中不同的限定詞這樣的情況并不會(huì)在閱讀理解數(shù)據(jù)中出現(xiàn),進(jìn)而使開放域問答模型在這幾種情況下出錯(cuò)。為了解決這些問題,我們提出了幾種能在現(xiàn)實(shí)場(chǎng)景下增強(qiáng)問答系統(tǒng)魯棒性的數(shù)據(jù)增廣方法。其中包括針對(duì)無(wú)上下文的答案,提出使用類似答案的文章;針對(duì)問題文章中限定詞不匹配的問題,提出條件刪除,構(gòu)造不含問題中條件的文章;針對(duì)模型會(huì)受到與問題高度相似的句子影響,提出句子替換,用高度相關(guān)的句子替換含有答案的句子。這些數(shù)據(jù)增廣方法能夠幫助閱讀器獲得辨別這幾種情況的能力,進(jìn)而提升開放域問答系統(tǒng)的魯棒性。
考慮到閱讀理解數(shù)據(jù)集和實(shí)際場(chǎng)景的巨大差異,我們構(gòu)造了一個(gè)開放域問答數(shù)據(jù)集OpenCQA用于評(píng)測(cè)。與以往閱讀理解數(shù)據(jù)集的區(qū)別是: OpenCQA給出的文章是從網(wǎng)頁(yè)中提取出來的,且沒有做相關(guān)的過濾處理,更接近人類閱讀網(wǎng)頁(yè)時(shí)的情景,具有更強(qiáng)的干擾性。實(shí)驗(yàn)結(jié)果表明本文提出的幾種數(shù)據(jù)增廣方法都在這個(gè)數(shù)據(jù)集上取得了一定的效果提升。
本文的貢獻(xiàn)主要包含:
(1) 發(fā)現(xiàn)目前的閱讀理解模型不能夠處理真實(shí)場(chǎng)景下的文章,提出了幾種能夠增強(qiáng)魯棒性的數(shù)據(jù)增廣方法,并在真實(shí)場(chǎng)景下獲得了性能提升。
(2) 為了修正目前閱讀理解數(shù)據(jù)集不能有效評(píng)估實(shí)際場(chǎng)景下模型效果的問題,構(gòu)造并發(fā)布一個(gè)開放域問答數(shù)據(jù)集。
智能問答近年來已經(jīng)有了許多進(jìn)展,性能有了很大的提升。這些進(jìn)展得益于許多數(shù)據(jù)集的出現(xiàn)。在中文領(lǐng)域,閱讀理解數(shù)據(jù)集有以下幾種形式: 完型填空形式,給出的文本有若干個(gè)詞被刪除,需要根據(jù)上下文恢復(fù)這些詞,如CMRC 2017[1];抽取式,答案是給出的文本中的一個(gè)區(qū)間,如CMRC 2018[2],DRCD[3],WebQA[4],XQA[5];生成式,需要根據(jù)問題和文章生成一段文本作為答案,如DuReader[6],Gaokao History[7];以及多項(xiàng)選擇形式,從四個(gè)答案中選出最合適的一項(xiàng),如Gaokao Challenge[8-9],MCQA 2017[10],ChID[11],C3[12]??傮w上來說,上述中文的數(shù)據(jù)集的規(guī)模遠(yuǎn)遠(yuǎn)小于英文數(shù)據(jù)集,如SQuAD[13],TriviaQA[14],Natural Questions[15]等。
當(dāng)前問答模型遇到的一個(gè)重要問題是模型總是傾向于做簡(jiǎn)單的文本匹配。為了解決這一問題,Jia和Liang[16]通過對(duì)文章進(jìn)行一定的修改,可以誤導(dǎo)模型輸出錯(cuò)誤的答案,并通過加入對(duì)抗樣本訓(xùn)練緩解這一問題。Zhu[17]等人提出通過神經(jīng)網(wǎng)絡(luò)模型生成若干不可回答的問題來幫助訓(xùn)練問答模型。Welbl[18]等人發(fā)現(xiàn)了問答系統(tǒng)的不敏感性(Undersensitivity),即對(duì)文章做出一定的更改后,模型仍然會(huì)輸出原有的答案,然后用了對(duì)抗訓(xùn)練的方法降低不敏感性。Back[19]等人提出了NeurQuRI,能夠檢測(cè)出問題中的一些條件能否被答案所滿足,但這一模型僅使用答案的表示作為輸入,沒有顯式地對(duì)文章中的片段和問題中的條件進(jìn)行匹配。
除閱讀理解外,近年來開放域問答也有了許多進(jìn)展。Chen[20]等人提出了兩階段的“檢索+閱讀”框架,在此基礎(chǔ)上,有一些研究專注于提升這一類模型在某方面的效果,如多文章訓(xùn)練[21]、文章排序[22]等。這類方法在檢索階段需要使用一個(gè)傳統(tǒng)的檢索器,因此有一些工作嘗試使用神經(jīng)網(wǎng)絡(luò)模型來做檢索。Lee[23]等人提出用問題和文章編碼后的向量做檢索,同時(shí)優(yōu)化檢索任務(wù)和閱讀任務(wù),形成一個(gè)端到端的模型。在此基礎(chǔ)上,Guu[24]等人為這種端到端的模型提出了一種預(yù)訓(xùn)練方法,提升了其性能。
此外,還有一些特殊技巧被應(yīng)用于開放域問答中。如Seo[25]等人提出了PIQA,把維基百科中所有區(qū)間都編碼為向量,用向量相似度直接從這些區(qū)間中檢索出答案,避免了閱讀大量文本帶來的性能開銷。還有一些工作把知識(shí)圖譜融入檢索和閱讀中[26-27]。
在本節(jié),我們首先介紹作為基準(zhǔn)模型的開放域問答系統(tǒng),包含目前抽取式閱讀理解的常見做法和對(duì)某些特殊情況的處理,然后介紹幾種能夠改善系統(tǒng)魯棒性的數(shù)據(jù)增廣方法。
基準(zhǔn)模型采用檢索+閱讀的流水線形式,其中檢索器使用搜索引擎返回的結(jié)果,閱讀器在抽取式閱讀理解數(shù)據(jù)集上訓(xùn)練。抽取式閱讀理解是閱讀理解的一種特殊形式,可以形式化為如下問題: 給定一個(gè)問題Q,以及若干篇文章D1,D2,…,Dn,從這些文章中選擇一個(gè)片段a作為答案輸出,或者輸出“無(wú)答案”。目前,抽取式閱讀理解問題最好的解決方法是利用大規(guī)模的預(yù)訓(xùn)練模型。
以BERT[28]為例,如圖2所示,對(duì)于問題Q和文章Di,我們使用WordPiece[29]切分它們,得到符號(hào)序列Q=q1,q2,…,qm,Di=d1,d2,…,dl。把問題和文章拼起來,得到輸入序列[CLS]q1q2…qm[SEP]d1d2…dl[SEP],其中[CLS]和[SEP]是兩個(gè)特殊符號(hào),分別用于輸入的開頭和分隔問題與文章。然后,BERT模型將會(huì)處理這個(gè)序列,經(jīng)過embedding層和若干self-attention及全連接層后,輸出一組向量h0,h1,…,hn∈RH,與輸入序列中的符號(hào)一一對(duì)應(yīng)。之后,這些向量會(huì)分別通過兩個(gè)線性層及softmax層,得到每個(gè)符號(hào)是答案的開始位置或結(jié)束位置的概率:
這里假定答案的開始位置和結(jié)束位置的概率分布是相互獨(dú)立的。我們把Wstarthi+bstart,Wendhi+bend稱為i位置作為初始位置和結(jié)束位置的分?jǐn)?shù),記為si和ei。答案是某一區(qū)間[a,b]的概率為:
P([a,b])=Pstart(a)Pend(b)∝exp(sa+eb)
(3)
可以認(rèn)為文章中每個(gè)答案區(qū)間的分?jǐn)?shù)為開始位置和結(jié)束位置分?jǐn)?shù)之和。
由于輸入序列包含問題和文章,所以只需要考慮起始位置和結(jié)束位置都在文章對(duì)應(yīng)位置的區(qū)間。一般來說,答案通常不會(huì)太長(zhǎng),所以在進(jìn)行預(yù)測(cè)時(shí),還會(huì)剔除掉那些太長(zhǎng)的區(qū)間。另外,文章中不一定含有回答問題所必要的信息,所以模型需要針對(duì)這種情況給出“無(wú)答案”的預(yù)測(cè)。我們把包含[CLS]這個(gè)符號(hào)的區(qū)間作為一個(gè)特殊的“答案”。如果這個(gè)答案的概率是最高的,就認(rèn)為模型輸出了“無(wú)答案”。
在實(shí)際情況中,有的文章的長(zhǎng)度會(huì)超出預(yù)訓(xùn)練模型能處理的長(zhǎng)度上限(如512個(gè)符號(hào))。在這種情況下,需要采用滑動(dòng)窗口的形式把文章劃分為有重疊的若干段,如圖3所示。其中會(huì)有一些段落不含有答案,在訓(xùn)練時(shí)需要讓這些段落預(yù)測(cè)“無(wú)答案”。在閱讀完所有的文章后,需要把所有文章或段落預(yù)測(cè)出的答案合并起來,每個(gè)答案的分?jǐn)?shù)是它在所有文章段落中被預(yù)測(cè)的分?jǐn)?shù)的最大值。在下文中,本小節(jié)提到的模型記為Baseline。
圖3 文章長(zhǎng)度超過預(yù)訓(xùn)練模型能處理的上限時(shí)的滑動(dòng)窗口機(jī)制僅第2個(gè)窗口含有答案,用其他窗口訓(xùn)練時(shí)訓(xùn)練目標(biāo)是輸出“無(wú)答案”。
為了緩解上文提到的問答模型的問題,我們提出了若干種數(shù)據(jù)增廣的方法,期望模型在學(xué)習(xí)過這些增廣數(shù)據(jù)之后能夠避免上述的問題。
2.2.1 針對(duì)無(wú)上下文的答案的增廣
在實(shí)際場(chǎng)景中,如果某一個(gè)段落僅包含一個(gè)實(shí)體,且這個(gè)實(shí)體的類型和問題詢問的類型是匹配的,那么模型有很大的可能性會(huì)直接把這個(gè)實(shí)體預(yù)測(cè)為答案。但是這種情況是不合理的,因?yàn)槲恼聸]有提供任何與問題有關(guān)的信息。
為了避免這種情況,可以手工構(gòu)造出這樣的情況,并要求模型不預(yù)測(cè)這個(gè)實(shí)體。假定有一個(gè)實(shí)例,包含問題Q,一些文章D1,…,Dn,以及一些答案a1,…,am。我們構(gòu)造了這樣的實(shí)例,它的問題是Q,文章是a1,…,am,每篇文章都是一個(gè)原有的答案,答案為空。圖4(1)展示了一個(gè)替換的例子。對(duì)已有的所有數(shù)據(jù)做這樣的處理后,把所有新實(shí)例加入到原有的數(shù)據(jù)集中。這種數(shù)據(jù)增廣方法記為類似答案的文章(Answer-like Context,AC)。
2.2.2 針對(duì)缺少條件的文章的增廣
人類在閱讀文章并回答問題時(shí)通常會(huì)快速找到問題所隱含的條件,然后在文章中尋找能夠匹配上所有隱含條件的地方。如果缺少一個(gè)條件或條件錯(cuò)誤,一般會(huì)認(rèn)為無(wú)法回答此問題。例如,在問題“云南最高的山峰是什么?”中,“云南”“最高”“山峰”可以認(rèn)為是隱藏的條件,如果“云南”或其近義詞沒有在文章中出現(xiàn),就無(wú)法回答問題。目前的模型無(wú)法滿足這種需求,所以我們針對(duì)這種情況提出了一種增廣數(shù)據(jù)的方法。
假定一個(gè)實(shí)例含有問題Q,文章D1,…,Dn,以及答案a1,…,am。首先使用Stanford CoreNLP[30]對(duì)Q進(jìn)行分詞、命名實(shí)體識(shí)別和依存語(yǔ)法分析。然后,抽取出問題中所有的命名實(shí)體、名詞和所有形如“第……”“最……”的詞,這些詞被視為回答問題必需的條件,構(gòu)成條件集合P={p1,…,pl}。一般來說,一個(gè)問題通??梢猿槿〕?~4個(gè)條件,如果一篇文章中不含有任意一個(gè)條件,那么它幾乎不可能含有回答問題所需要的信息。把文章中每個(gè)條件都刪除掉,得到一個(gè)新的實(shí)例,包含問題Q,文章D1-P,…,Dn-P,以及空答案。然后新實(shí)例加入到已有的數(shù)據(jù)集中,記為條件刪除(Condition Deletion,CD)。圖4(2)給出了條件刪除的一個(gè)數(shù)據(jù)增廣示例。
圖4 類似答案的文章示例
2.2.3 針對(duì)與問題高度相關(guān)的句子的增廣
如果文章中含有與問題高度相似的句子但此句子又不含有真正的答案,那么這個(gè)句子中的一些區(qū)間(或詞語(yǔ))就很容易被預(yù)測(cè)為答案。為了解決這一問題,我們提出一種利用句子替換增廣數(shù)據(jù)的方法。
(4)
訓(xùn)練完成后,就可以檢索出與問題相似的所有句子。我們用Faiss[31],一個(gè)十分高效的開源向量相似度檢索與聚類庫(kù),進(jìn)行基于向量?jī)?nèi)積的檢索,為每個(gè)問題找到相似度最高的100個(gè)句子。
只要把文章中含有答案的句子替換成與問題高度相似且不含答案的句子,就可以認(rèn)為得到的新文章不足以回答問題。模型在用這樣的(問題,文章)訓(xùn)練之后就應(yīng)當(dāng)能夠避免直接用問題匹配與問題高度相關(guān)的句子。這種處理方式記為句子替換(Sentence Replacement,SR)。圖4(3)給出了句子替換的一個(gè)數(shù)據(jù)增廣示例。
但是,上述處理方法可能存在以下問題: 如果一個(gè)句子含有與答案重合度較高的一些片段,如答案為“古埃及人”,但原文章中有一個(gè)句子含有“古代埃及人”,這個(gè)句子就不會(huì)作為無(wú)答案的句子被替換掉,導(dǎo)致構(gòu)造的文章仍然能夠回答問題。為了處理這種情況,我們引入一種啟發(fā)式的匹配方法。假設(shè)答案長(zhǎng)度為n,統(tǒng)計(jì)它的n(n+1)/2個(gè)子串有哪些在句子中出現(xiàn)。如果在句子中出現(xiàn)的子串?dāng)?shù)量不少于2n-1,就認(rèn)為句子和答案是匹配的,應(yīng)當(dāng)被替換掉。這種處理方式記為近似句子替換(Approximate Sentence Replacement,ASR)。
最后,以上幾種數(shù)據(jù)增廣方法分別針對(duì)了幾種不同的問題,在實(shí)際場(chǎng)景中可以混用這幾種增廣方法,記為集成(Ensemble)。
本文主要專注于抽取式的閱讀理解和開放域問答,相關(guān)的數(shù)據(jù)集主要有:
(1) CMRC2017[1]是一個(gè)填空式的中文閱讀理解數(shù)據(jù)集,但人工標(biāo)注了少量抽取式的問題。其語(yǔ)料主要來源于《人民日?qǐng)?bào)》和《格林童話》。
(2) CMRC2018[2]是第一個(gè)標(biāo)準(zhǔn)的抽取式閱讀理解數(shù)據(jù)集,其文章來源于中文維基百科。
(3) DRCD[3]同樣是一個(gè)抽取式數(shù)據(jù)集,所有問題和答案都是繁體中文,文章取自繁體中文維基百科。我們使用OpenCC(1)https://github.com/BYVoid/OpenCC進(jìn)行繁簡(jiǎn)轉(zhuǎn)換。
(4) WebQA[4]是一個(gè)大規(guī)模的真實(shí)場(chǎng)景下的問答數(shù)據(jù)集,其問題主要來源于百度知道中的事實(shí)性的問題,都是在非受限的場(chǎng)景下提出的。用搜索引擎檢索問題,得到若干文章,并人工標(biāo)注了答案。
(5) DuReader[6]包含了許多從搜索引擎日志中獲得的高頻問題,包括事實(shí)型問題、觀念型問題和是否型問題。在百度搜索和百度知道中檢索這些問題,得到一些文章,并人工標(biāo)注答案。與其他數(shù)據(jù)集不同的是DuReader給出是的完整的文章,而不是單個(gè)段落。
為了能夠充分利用各個(gè)數(shù)據(jù)集,本文把這些數(shù)據(jù)集轉(zhuǎn)化為了統(tǒng)一的格式。同時(shí),為了與抽取式的問答模型兼容,我們刪除了答案沒有在給出的文章中出現(xiàn)的問答對(duì)。由于部分?jǐn)?shù)據(jù)集沒有提供測(cè)試集,因此在實(shí)驗(yàn)中統(tǒng)一把驗(yàn)證集和測(cè)試集合并為驗(yàn)證集。最終得到的數(shù)據(jù)集規(guī)模統(tǒng)計(jì)如表1所示。
表1 數(shù)據(jù)集規(guī)模統(tǒng)計(jì)信息
此外,為了評(píng)估模型在實(shí)際場(chǎng)景中的性能,我們利用這些數(shù)據(jù)集提供的問答對(duì)構(gòu)造了一個(gè)開放域問答的數(shù)據(jù)集OpenCQA,類似于Chen[20]等人提出的做法。首先忽略數(shù)據(jù)集給出的所有文章,對(duì)于數(shù)據(jù)集中的所有問題答案對(duì)(Q,a),在Bing(2)https://www.bing.com/搜索引擎中用Q檢索并抓取前十位的網(wǎng)頁(yè),抽取出其主要內(nèi)容作為文章D,與原有的問題Q和答案a合并構(gòu)造一個(gè)新的(Q,D,a)三元組。如果原有的答案a沒有在這些文章D中出現(xiàn),則把a(bǔ)替換為“無(wú)答案”。問題Q無(wú)法檢索出相關(guān)結(jié)果時(shí)直接丟棄此問答對(duì)。文章如果存在大量不可讀字符或中文字符占比小于一半,也會(huì)直接丟棄。為促進(jìn)中文問答系統(tǒng)的研究,我們公開發(fā)布了OpenCQA(3)https://github.com/jiajudu/openCQA數(shù)據(jù)集,包含約20萬(wàn)問題、答案,以及每個(gè)問題的參考文章。此外,為方便其他研究者,還把所有的閱讀理解數(shù)據(jù)集整合在了一起,并統(tǒng)一成相同的格式,也同時(shí)公開發(fā)布。
封閉域閱讀理解和開放域問答都使用EM和F1兩種指標(biāo)評(píng)測(cè)。假設(shè)問題有若干個(gè)可能的答案a1,…,an,模型給出的預(yù)測(cè)為a。EM和F1的計(jì)算方法如式(5)、式(6)所示。
其中,lcs為兩個(gè)字符串的最長(zhǎng)公共子串。計(jì)算前需要先去除這些答案中的標(biāo)點(diǎn)符號(hào)。
我們使用閱讀理解數(shù)據(jù)集訓(xùn)練了若干模型,分別使用了不同的數(shù)據(jù)增廣策略。然后,分別在閱讀理解驗(yàn)證集和OpenCQA驗(yàn)證集上評(píng)測(cè)了性能。所有的實(shí)驗(yàn)都借助Transformers庫(kù)[32]完成,預(yù)訓(xùn)練語(yǔ)言模型(4)https://huggingface.co/hfl/chinese-roberta-wwm-ext使用中文維基百科、新聞、問答等數(shù)據(jù)訓(xùn)練,利用了全詞Mask(Whole Word Masking)技術(shù),區(qū)分大小寫。微調(diào)時(shí)使用的學(xué)習(xí)率為3e-5,其中前10%的時(shí)間學(xué)習(xí)率由0線性上升至最大值,隨后線性下降至0。使用的優(yōu)化器為Adam,共訓(xùn)練2輪。模型使用了8張RTX 2080 Ti顯卡,batch size設(shè)置為48。其余參數(shù)均采用常見的默認(rèn)值。
此外,為了讓模型能夠處理是否型問題,我們?cè)诿總€(gè)段落前都添加兩個(gè)特別的符號(hào)“Yes”和“No”。如果應(yīng)該輸出是/否,就要求模型預(yù)測(cè)含有這兩個(gè)符號(hào)的區(qū)間。在訓(xùn)練句子和問題的相似度模型時(shí),每個(gè)問題都隨機(jī)采樣5個(gè)負(fù)例。在評(píng)估集成增廣方法時(shí),使用三種增廣方法分別構(gòu)造了三組額外的數(shù)據(jù),每組數(shù)據(jù)都隨機(jī)采樣出1/3的數(shù)據(jù),加入原有的訓(xùn)練集。表2給出了各種增廣策略對(duì)應(yīng)的數(shù)據(jù)規(guī)模以及在原數(shù)據(jù)集的基礎(chǔ)上增加的比例。
表2 數(shù)據(jù)增廣規(guī)模
在進(jìn)行開放域問答的評(píng)測(cè)時(shí),一個(gè)問題會(huì)對(duì)應(yīng)十篇文章,但是這些文章中可能會(huì)存在特別長(zhǎng)的段落。如果直接閱讀這些段落,就會(huì)消耗大量的計(jì)算資源。由于計(jì)算資源有限,我們把所有的段落用滑動(dòng)窗口切分為片段,僅取出512個(gè)片段閱讀。片段數(shù)量超過512時(shí),優(yōu)先選取每個(gè)段落靠前的片段,丟棄長(zhǎng)段落靠后的內(nèi)容。這樣模型閱讀的內(nèi)容會(huì)覆蓋所有段落,而又不在極長(zhǎng)段落上花費(fèi)過多資源。
與閱讀理解不同,OpenCQA中有許多無(wú)答案的例子。但是在使用不同的數(shù)據(jù)訓(xùn)練之后,不同的模型輸出“無(wú)答案”的概率是不同的。為了保證比較的公平性,我們引入了“分?jǐn)?shù)差”(5)https://github.com/huggingface/transformers/blob/v3.4.0/examples/question-answering/run_squad.py#L542這一概念。假設(shè)已經(jīng)獲得了文章中所有區(qū)間的最高得分sm和“無(wú)答案”的分?jǐn)?shù)snull,可以僅在sm>snull-τ時(shí)輸出一個(gè)非空的答案。這里τ是一個(gè)可以任意調(diào)整的變量。顯然τ減小時(shí),輸出“無(wú)答案”的概率Pnull增大。我們可以適當(dāng)?shù)厝∫恍│又?,得到EM-Pnull曲線(見圖5)和F1-Pnull曲線(見圖6)。曲線的最高點(diǎn)代表每個(gè)模型在調(diào)整τ后能達(dá)到的最優(yōu)性能,如表3左側(cè)兩列所示。曲線的最左側(cè)代表Pnull=0(即模型必須輸出一個(gè)非空答案)時(shí)的性能,如表3右側(cè)兩列所示。
表3 開放域問答性能比較 (單位: %)
從表3、圖5和圖6可以觀察到:
圖5 開放域問答各模型曲線
圖6 開放域問答各模型曲線
(1)Pnull=1時(shí),所有模型的EM和F1都相同,這是因?yàn)閿?shù)據(jù)集中無(wú)答案數(shù)據(jù)的比例是固定的。
(2)Pnull=0,即模型必須給出非空答案時(shí),我們提出的各種方法都能帶來一些提升,在EM上的提升更明顯(+1.2~2.2,集成方法+2.4),只有句子替換(SR/ASR)在F1指標(biāo)上提升較小,可能是因?yàn)榻x詞沒有被替換時(shí)問題仍然是可回答的。
(3)Pnull: 0→1時(shí),EM和F1都先上升后下降??梢钥吹絇null處于(0,1)之間時(shí),各個(gè)模型相比于基準(zhǔn)模型的提升更大(+3.0~5.3,集成方法+6.9~7.9,見表3左側(cè)兩列)。這說明數(shù)據(jù)增廣不僅能夠提升在可回答問題上的效果,還可以提高模型判斷問題是否可回答的能力。
(4) AC的EM/F1相比于基線模型增長(zhǎng)了4.69/4.75,我們對(duì)性能的增長(zhǎng)做了來源分析。性能的增長(zhǎng)來源于三方面: ①問題有答案且AC和基線模型均預(yù)測(cè)出了答案的情況下,AC貢獻(xiàn)了1.14/1.23的性能增長(zhǎng)。②在11.45%的問題上,AC把基線模型預(yù)測(cè)出的有答案改成了無(wú)答案,其中有5.22%的問題AC是正確的,貢獻(xiàn)了2.92/1.91的性能提升。盡管正確率不到一半,但由于發(fā)生錯(cuò)誤的那部分問題基線模型也沒有完全回答正確,所以總體貢獻(xiàn)仍然是正的。③在8.16%的問題上,AC把基線模型預(yù)測(cè)出的無(wú)答案改成了有答案,其中有6.08%的問題AC是正確的,貢獻(xiàn)了0.63/1.61的提升。因此我們同樣可以得到AC不僅提高了預(yù)測(cè)“無(wú)答案”的比例,在其他方面也有所貢獻(xiàn)。其他策略也有相似的貢獻(xiàn)分布,在此不再列出。
(5) 綜合EM和F1指標(biāo),集成三種方法的數(shù)據(jù)增廣能夠取得最好的效果,條件刪除(CD)是最好的單一數(shù)據(jù)增廣方法。
我們還分析了各種數(shù)據(jù)增廣方法在OpenCQA各個(gè)子數(shù)據(jù)集上的效果,如表4所示。實(shí)驗(yàn)結(jié)果表明,無(wú)論在哪個(gè)子數(shù)據(jù)集上,模型在可回答的問題上的EM和F1都有所提升,其中條件刪除(CD)仍然是最好的方法。在除WebQA外的數(shù)據(jù)集中,模型識(shí)別問題是否可回答的成功率也都有所提升。在WebQA上數(shù)據(jù)增廣會(huì)導(dǎo)致識(shí)別成功率下降,其原因主要是WebQA中幾乎的所有問題都有答案,數(shù)據(jù)增廣導(dǎo)致模型把部分問題預(yù)測(cè)為了“無(wú)答案”。
表4 各種數(shù)據(jù)增廣方法在OpenCQA的子數(shù)據(jù)集上的表現(xiàn) (單位: %)
最后,我們?nèi)斯ぴu(píng)測(cè)了本文提到的三種錯(cuò)誤情況(無(wú)上下文的答案;問題文章中限定詞不匹配;與問題高度相似的句子)的出現(xiàn)頻率。從基線模型判斷出錯(cuò)的例子中隨機(jī)選取了100個(gè),手工標(biāo)注了每個(gè)錯(cuò)誤例子是否與三種錯(cuò)誤情況相關(guān)。三種錯(cuò)誤情況分別對(duì)應(yīng)了其中17%、23%、9%的例子,總計(jì)占所有錯(cuò)誤例子的一半左右。
表5展示了各種模型在3.1節(jié)中構(gòu)造的閱讀理解數(shù)據(jù)集上的結(jié)果。模型有可能對(duì)于某些問題輸出“無(wú)答案”,但由于此數(shù)據(jù)集中所有問題都有答案,所以我們強(qiáng)制所有模型忽略“無(wú)答案”,必須輸出一個(gè)答案。從表5可見,各種數(shù)據(jù)增廣方法在閱讀理解這一任務(wù)上對(duì)性能影響不大,或者會(huì)使性能略微下降。這說明閱讀理解和開放域問答是兩個(gè)差別較大的任務(wù),OpenCQA將有助于更準(zhǔn)確地評(píng)估未來模型的效果。
表5 閱讀理解性能比較 (單位: %)
在這一部分,我們首先給出從驗(yàn)證集中選出的若干例子,證明數(shù)據(jù)增廣能夠有效地解決上述幾種問題。圖7列出了這些例子以及模型給出的答案和得分。在示例1中,與基線模型相比,加入由答案作為文章的實(shí)例(AC)后,模型不再把“喬戈里峰”預(yù)測(cè)為答案,原有的一些高分答案的分?jǐn)?shù)也大大下降。在示例2中,條件刪除(CD)模型能夠識(shí)別出“云南”和“東北”是不同的條件,降低了“白云峰”的得分。在示例3中,句子替換(SR)模型降低了作為干擾項(xiàng)的某抑制劑的得分??傊?,對(duì)模型輸出的答案分?jǐn)?shù)的觀察說明數(shù)據(jù)增廣達(dá)到了目的。
圖7 案例分析括號(hào)內(nèi)是答案的分?jǐn)?shù)
本文針對(duì)閱讀理解模型在實(shí)際場(chǎng)景中出現(xiàn)的幾種問題,提出了能夠增強(qiáng)中文開放域問答魯棒性的數(shù)據(jù)增廣方法。實(shí)驗(yàn)結(jié)果表明這幾種方法能夠提升模型在實(shí)際場(chǎng)景中的性能。本文還發(fā)布了一個(gè)開放域問答的數(shù)據(jù)集,用于評(píng)估中文問答系統(tǒng)的性能。
雖然在使用本文提出的幾種方法后,模型能夠避免犯某些錯(cuò)誤,但距離人類閱讀理解水平還有一定距離,仍然有很多錯(cuò)誤情況沒有解決。所以我們下一步將會(huì)進(jìn)一步地分析目前問答系統(tǒng)的弱點(diǎn),并針對(duì)問題進(jìn)行改進(jìn)。