摘要
本文提出以Wikipedia作為唯一的知識源來解決開放領域的問答:任何事實型問題的答案都是在Wikipedia文章中的一段文字。這項海量機器閱讀的任務,需要同時面對2個挑戰,一是文字檢索(找到相關的文章),二是對文字的理解(從文章中識別答案的範圍)。我們的方法結合使用了基於bigram hashing以及tf-idf匹配檢索模組以及用於在Wikipedia段落中挖掘答案的多層RNN模型。我們在多個已有的QA 資料集的實驗表明:
1)相比以往的方法,這兩個模組都是非常有競爭力的;
2)在這項具有挑戰性任務中,使用distant supervision對他們的聯絡進行多工學習是非常有效完整的辦法。
1.簡介
本文考慮的問題是如何使用Wikipedia作為唯一知識源回答開放領域的事實型問題,就像人們在百科全書中尋找答案一樣。Wikipedia是一個持續不斷髮展並且包括各種詳細資訊的知識源,如果可以善加利用,可以很好的促進機器的智慧。跟知識庫(便於計算機處理,但是對開放領域的問答系統來說,太過稀疏,比如Freebase和DB-Pedia)不同的是,Wikipedia包括人們關心的最新的知識,並且是為人類的閱讀(而不是為機器)設計的。
採用Wikipedia的文章作為知識源來做問答(QA),需要同時解決2個挑戰:一個是大規模開放領域的問答,一個是機器對文字的理解。
為了能夠回答任何問題,系統首先要從500萬篇文章中找到少量相關的文章,然後仔細的掃描這幾篇文章來找到答案。我們把這個定義為machine reading at scale(MRS)。我們的工作把Wikipedia視為文章的集合,而不考慮他們內在的圖結構。這樣,我們的方法可以更加通用化,可以用於一系列書、文件甚至是每天更新的報紙新聞。
像IBM的DeepQA這樣大規模的問答系統,它的回答依賴於各種不同的知識源:除了Wikipedia,還用到KBs,字典甚至新的文章以及書等等。因此,系統回答的正確性嚴重依賴於在多個知識源中的資訊冗餘。只有一個知識源的條件下,迫使我們模型在掃描文章的時候,需要非常的精確仔細,因為有些答案的線索可能只出現一次。這樣的挑戰,也因此推動了機器閱讀能力(機器理解的子領域)的研究以及諸如SQuAD、CNN/Daily Mail、CBT這樣的資料集的建立。
然而,這些資料集都是假設已經有一小段的相關文字已經提供給模型了,這在構建開放領域的問題系統中是不現實的。與此形成鮮明對比的是,基於知識庫或者在文件中採用資訊檢索的方法,必須將搜尋的結果作為解法的一部分。而MRS是在海量開放知識源中檢索的現實條件(並沒有作非常理想化的假設)下來做機器理解(需要對文字的深度理解)。
在本文中,我們會展示如何使用多個現有的QA資料集來評估MRS(通過開放領域的系統在全部已有的QA資料集上回答問題)。我們開發了DrQA系統,它基於Wikipedia的強大的QA系統,其組成包括:
(1)Document Retriever,採用bigram hashing以及tf-idf匹配實現,該模組主要用於給定一個question之後,快速找到相關的文章的一個小集合;
(2)Document Reader,基於多層RNN的機器理解模型,用於挖掘Document Retriever的文章小集合中的答案範圍。圖1給出了DrQA系統的圖示。
我們的實驗表明,Document Retriever比Wikipedia內建的搜尋引擎效果好,Document Reader可以達到目前最好的SQuAD水準。最後,我們整個系統是用多個benchmark來評估的。特別是,相比於單任務的訓練,採用多工以及distant supervision方法,其表現在所有資料集上都有所提高。
圖一
2.相關工作
根據每年舉行的TREC比賽的設定,開放領域的QA最開始是被定義為在非結構化文件中尋找答案。隨著KB的發展(比如WebQuestions,SimpleQuestions,又比如自動抽取的KBs,OpenIE triples 和 NELL),最近基於KB的QA有了許多新的改進。然而,KB固有的侷限(不夠完整以及固定的資料格式)促使研究人員迴歸到最初的設定,即從原始資料中去尋找答案。
重新審視這個問題的第二個動機,是因為隨著最近新的深度學習框架的出現(比如attention-based and memory-augmented neural networks以及新的訓練評測資料集的開放,這些資料集包括QuizBowl,包含新聞文章的CNN/Daily Mail,包含兒童書的CBT以及基於Wikipedia的WikiReading和SQuAD),機器的文字閱讀理解(比如通過閱讀一小段文字或者故事來回答問題)有了長足的進步。本文的目的是想測試下這些新方法在開放領域的QA中表現如何。
採用Wikipedia作為知識源的QA之前已經有過嘗試。Ryu et al. (2014) 實驗過只採用Wikipedia的模型,他們將文章內容和其他多個基於不同型別的半結構化知識(比如資訊框,文章結構,類別結構,定義等)實現的答案匹配模組結合在一起使用。類似的,Ahn et al. (2004) 將Wikipedia和其他的文件一起檢索來使用。Buscaldi and Rosso (2006)也嘗試在Wikipedia中挖掘知識。他們沒有將其作為尋找問題答案的知識源,而是用它來驗證QA返回的結果的正確性。並使用Wikipedia分類來確定一組符合預期答案的模式。在我們的工作中,我們只考慮文字的理解,並且只用了Wikipedia作為唯一的知識源,以便將重點放在大規模的閱讀理解上。
許多發展多年的完整的QA處理方法流不是用Web資料(QuASE),就是用Wikipedia的資料(Microsoft的AskMSR,IBM的 DeepQA,YodaQA),後者是開源,因此可以復現用於比較效果。AskMSR是一個基於搜尋引擎的QA系統,它依賴於“資料冗餘而不是對問題或候選答案進行復雜的語言學分析”,也就是說,它不像我們一樣專注於機器理解。DeepQA是一個非常複雜的系統,它依賴於包括文字文件在內的非結構化資訊以及諸如KB,資料庫和本體的結構化資料來生成候選答案或對證據進行投票。YodaQA是以DeepQA為藍本的開源系統,同樣結合使用網站、資訊提取、資料庫和Wikipedia。相比於這些方法,我們的閱讀理解由於使用的是單個知識源,因此更具挑戰性。
在機器學習以及NLP中,多工學習以及任務遷移有著豐富的歷史。有些工作試圖通過多工學習將多個QA訓練集合併到一起,這樣,
(1)通過task transfer實現跨資料集的提升;
(2)提供一個通用的系統,可以回答不同型別的問題,因為答案不可避免的分佈在不同的資料集上。
Fader et al. (2014)用WebQuestions、TREC和WikiAnswers作為評測,以四個知識庫作為知識來源,通過多工學習在後兩個資料集上獲得了提升。Bordes et al. (2015)以Freebase作為知識源採用 distant supervision合併了WebQuestions和SimpleQuestions,結果顯示在兩個資料集上都是略微提升,但是隻採用一個訓練,另一個作為測試的話,結果卻很差,這說明task transfer確實是非常有挑戰性的任務。(Kadlec et al., 2016)也得到類似的結論。我們的工作也是類似的想法,不過做了特別的限制,必須先檢索,再理解,而不是用KB直接取一個好的結果。
3.Facebook的DrQA系統
下面我們將介紹Facebook的系統DrQA,主要由兩部分組成:
(1)Document Retriever模組,用於找到相關的文章
(2)Document Reader模組,機器理解模型,用於從單個或小集合的,文件中抽取答案
Document Retriever
參考傳統的QA系統,我們採用非機器學習的文字檢索系統來縮小我們的檢索範圍,然後把注意力集中在這些可能相關的文章閱讀理解來尋找答案。相比於內建的基於ElasticSearch的Wikipedia Search API,簡單的倒排查詢結合term vector model打分的效果在很多型別的問題上的效果要更好。文章和問題通過tf-idf作為權重的bag-of-word向量來衡量相關性。後來我們通過加入n-gram特徵,把小範圍的詞序考慮進來,進一步改進系統。我們最好的系統是用bigram計數以及(Weinberger et al., 2009)提出的雜湊方法(用murmur3 hash將bigram對映到224個bin中),同時保留了速度和記憶體的效率。
我們採用Document Retriever作為整個系統的第一部分,對任何問題,設定返回5篇Wikipedia的文章。這些文章在後續的Document Reader進行處理。
Document Reader
我們的Document Reader是受最近神經網路模型在機器閱讀理解方面的優異表現而啟發,其思想跟(Hermann et al., 2015;Chen et al., 2016)提出的AttentiveReader是非常相似的。
給定一個含有l個token的問題 q 和包含n個段落的文件集合,其中單個段落 p 包含m個token,我們開發了一個RNN模型,然後依次應用到每個段落上,最後聚合所有的預測結果。我們的方法是這樣工作的:
段落編碼
首先我們把段落中的所有token pi 表示成特徵向量序列 ,然後作為RNN的輸入,得到如下表示:
其中,pi希望是可以將token pi的上下文資訊編碼進去。我們採用多層雙向LSTM,然後在每層的隱藏單元最後串聯pi
特徵向量包含以下幾部分:
word embedding:
我們用840B網上爬來資料訓練得到300維的Glove word embedding。大部分的訓練完的word embedding保持不變,僅僅對最常用的1000個問題中包含的詞進行優化,因為像what,how,which,many等這些詞對QA系統來說非常重要。
完全匹配:
我們用3個簡單的二值特徵,表示段落中的pi是否可以完全匹配question中的某個詞q,不管是原始,小寫或者lemma形式,這些簡單的特徵在實驗中效果非常顯著,在第五部分將會看到。
Token特徵:
我們也增加了一些人工的特徵,這些特徵能夠反映token的一些上下文資訊,包括詞性,命名實體名以及詞頻。
Aligned question embedding:
參考(Lee et al., 2016)以及其他最近的工作,最後一部分加入的是aligned question embedding: , 建模了和每個問題中的詞的相似度。特別的,的計算方式是word embedding的非線性對映的點乘:
是一個ReLU非線性的單稠密層。跟完全匹配的特徵相比,這些特徵給意思相似但不同的詞加入了平滑的對齊。
問題編碼
問題的encoding簡單很多,我們只需要在所有詞向量上應用RNN,然後把隱層單元合併到一個向量中去:,q的具體計算為,其中編碼了每個詞的重要性資訊,我們用如下方式計算q:
其中,w是需要學習的權重向量。
預測
在段落層面,我們的目標是預測哪些範圍裡面的詞很有可能是答案。以段落向量以及問題q作為輸入,簡單的訓練2個獨立的分類器來預測範圍的兩端。具體做法是,我們用雙線性項來捕捉和q的相似度並且計算每個詞作為開始和結束的可能性:
在預測期間,我們選擇最佳的範圍限制在詞和之間( 和滿足 ,並且使得最大)。為了使打分可以相容多個檢索文件的段落,我們採用非歸一化的指數,然後在所有候選段落裡拿使分數最大的token範圍。
4 資料
我們的工作依賴於三種型別的資料:
(1)Wikipedia作為尋找答案的知識源;
(2)SQuAD資料集,作為訓練Document Reader的主要資料來源;
(3)除了SQuAD之外,還用了CuratedTREC, WebQuestions和WikiMovies三個資料集來測試我們整個問答系統的能力,以及評估我們模型對於多工學習以及distant supervision的學習能力。資料集的統計資料見後面的表2。
Wikipedia
我們用的是2016-12-21版的Wikipedia全量英文資料作為回答問題的知識源。對每一頁,我們僅抽取純文字,列表以及圖片資訊會被過濾掉。在丟棄了了內部消歧、列表、索引和概要頁面之後,我們保留了5,075,182篇文章,包含9,008,962個獨特的未定義的token型別。
SQuAD
SQuAD(The Stanford Question Answering Dataset)是一個基於Wikipedia的用於機器閱讀理解的資料集。該資料集包含87000個訓練樣例以及10000個開發樣例。每個樣例包括從一篇Wikipedia文章中抽取的段落以及相關的人為編寫的問題。答案永遠是在段落中的某一部分,如果模型預測的答案匹配上了,就會給予肯定。目前用了2個評估指標:EM(字元完全匹配)和F1 score,衡量了token級別的加權平均後的準確和召回率。
接下來,在給定的相關段落中,(相關段落的定義可以參考Rajpurkar et al.,2016),我們用SQuAD來訓練以及評估我們的Document Reader。對於基於Wikipedia的開放領域的問題,我們只用SQuAD資料集的開發集合中的QA對,我們要求系統在沒有相關段落的情況下找到正確答案的範圍,也就是模型的查詢範圍是整個Wikipedia,而不是標準SQuAD資料集中的相關段落。
開放領域QA的評測資源
SQuAD是目前最大的通用QA資料集。SQuAD的問題收集過程是通過給人展現一個段落,然後人工編寫的。這樣這些問題的分佈是非常特殊的。因此,我們計劃在其他資料集上來訓練和評估我們開放域的QA系統,這些資料集可以是不同的方式構建的(不一定是從維基百科尋找回答)。
CuratedTREC
這個資料集是TREC QA任務中,Baudiˇs and ˇ Sediv`y (2015)定下的benchmark收集的。我們用的大的版本,包含從TREC1999, 2000, 2001 and 2002中抽取的2180個問題。
WebQuestions
在(Berant et al.,2013)有介紹。這個資料集是用於Freebase作為知識源來回答問題。它是用Google suggest API來爬取問題,然後用Amazon Mechanical Turk來回答問題。我們使用實體名稱將每個答案轉換為文字,以便資料集不需要引用Freebase ID,純粹由純文字問題答案對組成。
WikiMovies
在(Miller et al., 2016)有介紹。包含96,000個電影相關的問題答案對。最開始是從OMDb和MovieLens資料集中建立的,這些樣例的構建是為了驗證只採用Wikipedia中標題和第一部分包含電影的文章作為知識源的時候,也可以回答問題。
Distantly Supervised Data
上面提供的所有QA資料集都包含訓練資料,但CuratedTREC,WebQuestions和WikiMovies只包含問答對,而不是像SQuAD中有關聯文件或段落,因此不能用於直接訓練Document Reader。借鑑(Mintz et al., 2009)之前的用distant supervision (DS)來抽取關係的工作,我們寫了個方法,將段落自動關聯到這些訓練樣例,然後將這些示例新增到我們的訓練集中。
表1
方法如下:
首先,我們執行Document Retriever檢索得到跟question相關的top 5篇Wikipedia文章。文章的段落中沒有完全包含答案的丟棄,字元少於25或者多於1500個字元的段落丟棄。問題中包含命名實體的,如果在段落中不包含該實體的,丟棄。對剩下的所有段落,我們對匹配到答案的所有位置,用一個大小為20個token的視窗來跟question做unigram和bigram計算重疊度來進行打分,保留分數最高的5個段落。如果都是非0重疊的段落,那麼這個樣例丟棄;否則就加到DS訓練集中。表1給了一些例子,Table2給出了統計資料。
SQuAD生成額外的DS資料,尋找答案的範圍,我們不僅可以是在已提供的段落中,也可以在該段落同一頁或者不同頁。我們觀察到大約一半的DS樣例都來自SQuAD中使用的文章以外的頁面。
表 2
這部分,我們首先給出Document Retriever以及Document Reader單獨的評測結果,然後再給出結合使用後,DrQA的評測結果。
表3
找到相關的文章
我們首先測試了Document Retriever 模組在所有QA資料集上的表現。如表 3所示,我們對比了3.1章節中描述的另外兩種辦法(用Wikipedia Search Engine檢索包含答案的文章)。具體而言,我們計算了系統返回top5個頁面中至少有一個包含正確答案的比例,結果顯示我們這個簡單的方法在所有資料集上都要比Wikipedia Search的效果好,尤其是採用了bigram hashing之後。我們同樣對比了Okapi BM 25以及採用bag-of-word詞向量計算餘弦距離的方法,兩者的效果都比我們的方法差。
表 4
Reader在SQuAD上的評測
接下來,我們在標準SQuAD資料集上,對Document Reader模組進行評估。
評估細節:我們用3層128個隱層單元的雙向LSTM對段落和問題encoding,用Stanford CoreNLP toolkit工具包進行分詞,生成詞根、詞性、命名實體識別。
最後,所有的訓練樣例根據段落長度排序,然後根據每組32個來分組。我們採用(Kingma and Ba,2014)提到Adamax來進行優化。將p = 0.3的應用於word embedding和LSTM的所有隱藏單元。
結果和分析:表 4展示了我們在開發集和測試集上的評測結果。SQuAD自建立以來一直是一個非常有競爭力的benchmark,表中我們僅羅列了系統的最佳表現的資料。我們的系統在測試集上可以達到70.0%完全匹配以及79.0% F1 scores。截止本文寫作的時候,我們的系統超過所有公佈的結果,並且可以跟SQUAD排行榜上的最佳演算法匹敵。並且,我們覺得我們的模型比絕大多數的系統要簡單。我們對段落token的特徵向量進行斷融分析。如表5所示,所有的特徵對我們系統最終的效果都有幫助。去掉對齊的question embedding feature,我們系統依然能打到超過77%的F1 score。但是,如果同時去掉和 ,系統的效果就會差很多。
所以我們得出這樣的結論:這兩個特徵在問題的本質釋義以及答案的上下文的特徵表達上起到類似但相互補充的作用。
表 5
全量FullWikipedia問答
最後,我們對整個系統DrQA(面向開放領域的QA系統)在第4章節中介紹的4個資料集上進行了評測。我們分別試了3個版本的DrQA來評估採用distant supervision以及跨訓練集的多工學習帶來的影響:
1.SQuAD:Document Reader模型只用SQuAD作為訓練集,其他的資料集用來評估測試
2.Fine-tune (DS):Document Reader模型先在SQuAD上訓練,然後分別用其他資料集的distant supervision (DS)訓練集來進行優化
3.Multitask (DS):同時用SQuAD以及其他DS的訓練集了訓練Document Reader模型
對於整個Wikipedia,我們用了streamlined模型(沒有用CoreNLP解析的或者)。我們發現,雖然這些特徵在SQuAD上提供了精確段落情況下的閱讀有幫助,但是在整體系統中卻沒有實際的提升。此外,WebQuestions和WikiMovies提供了候選答案的列表(例如,用於WebQuestions的160萬個Freebase實體字串),並且我們在預測期間限制答案範圍必須在此列表中。
結果: 表 6顯示了評測結果。與機器理解(給定了正確的段落)和沒有約束限制的QA(可以使用冗餘資源)相比,我們的任務要困難許多,儘管如此,DrQA仍然在所有的四個資料集中給出了合理的表現。
表6
我們感興趣的是,有一個系統,單純使用Wikipedia作為知識源就可 以回答任何問題。僅使用SQuAD進行訓練的單一模型在四個資料集上的表現均優於使用distant supervision的多工模型。然而,單獨在SQuAD上進行訓練時的表現並不差,表明任務轉移其實是有一定作用的。然而,從SQuAD到Multitask(DS)的大部分改進可能並非來自任務遷移,因為使用DS對每個資料集單獨進行優化也有改進,表明這是在同一領域中引入額外資料是有幫助的。儘管如此,我們目前能找到的最佳模型就是多工的DS系統。
我們跟之前已經在CuratedTREC以及WebQuestions上發表過結果的無約束多知識源(不侷限於Wikipedia)的QA系統YodaQA進行比較。雖然我們的任務要困難許多,但是令人欣慰的是我們系統的表現並沒有比CuratedTREC(31.3 vs 25.4)差太多。在WebQuestions上差距表現的明顯一些,可能是因為YodaQA直接使用了WebQuestions基於的Freebase的結構資訊。
DrQA在SQuAD上的表現與其在表4中Document Reader在機器理解上的表現相比,出現大幅下降(從69.5到27.1),因為我們現在給的查詢範圍是整個維基百科,而不是單個段落。如果給定正確的段落,我們的表現可以達到49.4,表明非常熱門的句子會帶來很多錯誤的候選段落。儘管Document Retriever表現得不錯(77.8%檢索到正確答案,參見表3)。 值得注意的是,大部分下降來自SQUAD問題本身。 它們是以特定的段落作為背景而寫的,因此當去掉上下文後,它們的表述可能帶有歧義。 除了SQuAD以外,專門為MRS設計的其他資源可能還需要進一步研究。
6 結論
我們研究了大規模資料的閱讀理解問題——僅使用Wikipedia作為唯一知識源來回答開放領域的問題。 我們的研究結果表明,MRS是研究人員關注的一項非常具有挑戰性的任務。 機器理解系統本身並不能解決整個問題。 為了提供了一個有效的完整系統,我們的方法整合了搜尋、distant supervision和多工學習多項技術。 並且通過在多個benchmark上評估個別元件以及的完整系統顯示了我們方法的有效性。
未來的工作將主要集中在兩塊來提高我們的DrQA系統:
1)Document Reader目前的訓練是基於單獨的段落,未來在訓練中,會直接多個相關段落或者文件。
2)訓練端到端的Document Retriever和Document Reader管道流,而不是分開訓練。
關於作者
範雄雄,達觀資料推薦演算法工程師。復旦大學計算機技術專業碩士,曾在愛奇藝BI部門開發多款大資料產品;對推薦系統、資料探勘、使用者畫像、大資料處理有較深入的理解和實踐經驗。