基於維基百科的開放性問答系統

基於維基百科的開放性問答系統

來自專欄挖掘數據背後的價值13 人贊了文章

摘要

本文提出以Wikipedia作為唯一的知識源,來解決開放領域的問答:任何事實型問題的答案都是在Wikipedia文章中的一段文本。

這項海量機器閱讀的任務,需要同時面對2個挑戰:

1.文本檢索(找到相關的文章)

2.對文本的理解(從文章中識別答案的範圍)

我們的方法結合使用基於bigram hashing和tf-idf匹配檢索模塊,以及用於在Wikipedia段落中挖掘答案的多層RNN模型。

我們在多個已有的QA 數據集的實驗表明:

1)相比以往的方法,這兩個模塊都是非常有競爭力的

2)在這項具有挑戰性任務中,使用distant supervision對他們的聯繫進行多任務學習,是非常有效完整的辦法。

一、簡介

本文考慮的問題是,如何使用Wikipedia作為唯一知識源回答開放領域的事實型問題,就像人們在百科全書中尋找答案一樣。

Wikipedia是一個持續不斷發展並且包括各種詳細信息的知識源,如果可以善加利用,可以很好的促進機器的智能。跟知識庫(便於計算機處理,但對於開放領域的問答系統太過稀疏,比如Freebase和DB-Pedia)不同的是,Wikipedia包括人們關心的最新的知識,並且是為人類的設計的閱讀、而不是為機器設計的。

採用Wikipedia的文章作為知識源來做問答(QA),需要同時解決2個挑戰:

1)大規模開放領域的問答

2)機器對文本的理解

為了能夠回答任何問題,系統首先要從500萬篇文章中找到少量相關的文章,然後仔細的掃描這幾篇文章來找到答案。我們把這個定義為machine reading at scale(MRS)。

我們的工作把Wikipedia視為文章的集合,而不考慮他們內在的圖結構。這樣,方法可以更加通用化,可以用於一系列書、文檔甚至每日的報紙新聞。

像IBM的DeepQA這樣大規模的問答系統,它的回答依賴於各種不同的知識源,除了Wikipedia,還用到KBs,字典甚至新的文章以及書等等。

因此,系統回答的正確性嚴重依賴於在多個知識源中的信息冗餘。只有一個知識源的條件下,迫使我們模型在掃描文章的時候,需要非常的精確仔細,因為有些答案的線索可能只出現一次。這樣的挑戰,也因此推動了機器閱讀能力(機器理解子領域)的研究以及諸如SQuAD、CNN/Daily Mail、CBT這樣的數據集的建立。

然而,這些數據集都是假設已經有一小段的相關文本已經提供給模型了,這在構建開放領域的問題系統中是不現實的。

與此形成鮮明對比的,基於知識庫或者在文檔中採用信息檢索的方法,必須將搜索的結果作為解法的一部分。而MRS是在海量開放知識源中檢索的現實條件下來做機器理解(需要對文本的深度理解)。

在本文中,我們會展示如何使用多個現有的QA數據集來評估MRS。

我們開發了基於Wikipedia的強大的QA系統的DrQA系統,其組成包括:

(1)Document Retriever,採用bigram hashing以及tf-idf匹配實現,該模塊主要用於給定一個question之後,快速找到相關的文章的一個小集合

(2)Document Reader,基於多層RNN的機器理解模型,基於挖掘Document Retriever的文章小集合中的答案範圍。

DrQA系統

我們的實驗表明,Document Retriever比Wikipedia內置的搜索引擎效果好,並可以達到目前最好的SQuAD水準。最後,我們整個系統是用多個benchmark來評估的,特別是相比於單任務的訓練,採用多任務及distant supervision方法,其表現在所有數據集上都有所提高。

二、相關工作

根據每年舉行的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直接取一個好的結果。

三、我們的系統:DrQA

下面我們將介紹我們的系統DrQA,主要由兩部分組成:

1)Document Retriever模塊,用於找到相關的文章

2)Document Reader模塊,機器理解模型,用於從單個或小集合的,文檔中抽取答案

3.1 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進行處理。

3.2 Document Reader

我們的Document Reader是受最近神經網路模型在機器閱讀理解方面的優異表現而啟發,其思想跟(Hermann et al.,2015,Chen et al.,2016)提出的AttentiveReader是非常相似的。

給定一個含有l個token的問題 q(left{ q_{1} ,q_{2},...,q_{l}
ight}) 和包含n個段落的文檔集合,其中單個段落 p 包含m個token, left{ p_{1},p_{2},...,p_{m} 
ight} ,我們開發了一個RNN模型,然後依次應用到每個段落上,最後聚合所有的預測結果。我們的方法是這樣工作的:

段落編碼

首先我們把段落中的所有token pi 表示成特徵向量序列 pinRe^{d} ,然後作為RNN的輸入,

得到如下表示:

left{ p_{1},...,p_{m} 
ight}=RNNleft( left{ p_{1},...,p_{m} 
ight} 
ight)

其中, p_{i} 希望是可以將token p_{i} 的上下文信息編碼進去。我們採用多層雙向LSTM,然後在每層的隱藏單元最後串聯 p_{i}

特徵向量

包含以下幾部分:

word embedding: f_{emb}left( p_{i} 
ight)=E(p_{i})

我們用840B網上爬來數據訓練得到300維的Glove word embedding。

大部分的訓練完的word embedding保持不變,僅僅對最常用的1000個問題中包含的詞進行優化,因為像what,how,which,many等這些詞對QA系統來說非常重要。

完全匹配:

f_{exact-match}left( p_{i} 
ight)=II (p_{i}in q)

我們用3個簡單的二值特徵,表示段落中的 p_{i} 是否可以完全匹配question中的某個詞q,不管是原始,小寫或者lemma形式,這些簡單的特徵在實驗中效果非常顯著,在第五部分將會看到。

Token特徵:

f_{token}(p_{i})=(POS(p_{i}),NER(p_{i}),TF(p_{i}))

我們也增加了一些人工的特徵,這些特徵能夠反映token p_{i} 的一些上下文信息,包括詞性,命名實體名以及詞頻。

Aligned question embedding:

參考(Lee et al., 2016)以及其他最近的工作,最後一部分加入的是aligned question embedding:

a_{i,j} 建模了 p_{i} 和每個問題中的詞 q_{j} 的相似度。

特別的, a_{i,j} 的計算方式是word embedding的非線性映射的點乘:

a(·) 是一個ReLU非線性的單稠密層。跟完全匹配的特徵相比,這些特徵給意思相似但不同的詞加入了平滑的對齊。

問題編碼

問題的encoding簡單很多,我們只需要在所有詞向量

上應用RNN,然後把隱層單元合併到一個向量中去: left{ q_{1} ,...,q_{l}
ight}
ightarrow q ,q的具體計算為

其中 b_{j} 編碼了每個詞的重要性信息,我們用如下方式計算q:

其中,w是需要學習的權重向量。

預測

在段落層面,我們的目標是預測哪些範圍裡面的詞很有可能是答案。

以段落向量 left{ p_{1} ,p_{2},...,p_{m}
ight} 以及問題 q 作為輸入,簡單的訓練2個獨立的分類器來預測範圍的兩端。具體做法是,我們用雙線性項來捕捉 p_{i}q 的相似度並且計算每個詞作為開始和結束的可能性:

在預測期間,我們選擇最佳的範圍限制在詞 i i^{} 之間( ii^{} 滿足 ileq i^{}leq i+15 ,並且使得 P_{start}left( i 
ight)	imes P_{end}(i^{}) 最大)。為了使打分可以兼容多個檢索文檔的段落,我們採用非歸一化的指數,然後在所有候選段落里拿使分數最大的token範圍。

四、 數據

我們的工作依賴於三種類型的數據:

1)Wikipedia作為尋找答案的知識源

2)SQuAD數據集,作為訓練Document Reader的主要數據源

3)除了SQuAD之外,還用了CuratedTREC, WebQuestions和WikiMovies三個數據集來測試我們整個問答系統的能力,以及評估我們模型對於多任務學習以及distant supervision的學習能力。

數據集的統計數據見後面的表。

4.1 Wikipedia

我們用的是2016-12-21版的Wikipedia全量英文數據作為回答問題的知識源。對每一頁,我們僅抽取純文本,列表以及圖片信息會被過濾掉。在丟棄了了內部消歧、列表、索引和概要頁面之後,我們保留了5,075,182篇文章,包含9,008,962個獨特的未定義的token類型。

4.2 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數據集中的相關段落。

4.3 開放領域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中標題和第一部分包含電影的文章作為知識源的時候,也可以回答問題。

4.4 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給了一些例子,表2給出了統計數據。

SQuAD生成額外的DS數據,尋找答案的範圍,我們不僅可以是在已提供的段落中,也可以在該段落同一頁或者不同頁。我們觀察到大約一半的DS樣例都來自SQuAD中使用的文章以外的頁面。

表2

五、實驗

這部分,我們首先給出Document Retriever以及Document Reader單獨的評測結果,然後再給出結合使用後,DrQA的評測結果。

表3

5.1 找到相關的文章

我們首先測試了Document Retriever 模塊在所有QA數據集上的表現。

如表3所示,我們對比了3.1章節中描述的另外兩種辦法(用Wikipedia Search Engine檢索包含答案的文章)。

具體而言,我們計算了系統返回top5個頁面中至少有一個包含正確答案的比例,結果顯示我們這個簡單的方法在所有數據集上都要比Wikipedia Search的效果好,尤其是採用了bigram hashing之後。

我們同樣對比了Okapi BM 25以及採用bag-of-word詞向量計算餘弦距離的方法,兩者的效果都比我們的方法差。

表4

5.2 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。但是,如果同時去掉 f_{alinged}f_{exact-match} ,系統的效果就會差很多。

所以我們得出這樣的結論:這兩個特徵在問題的本質釋義以及答案的上下文的特徵表達上起到類似但相互補充的作用。

表 5

5.3 全量FullWikipedia問答

最後,我們對整個系統DrQA(面向開放領域的QA系統)在第4章節中介紹的4個數據集上進行了評測。

我們分別試了3個版本的DrQA來評估採用distant supervision以及跨訓練集的多任務學習帶來的影響:

SQuAD:Document Reader模型只用SQuAD作為訓練集,其他的數據集用來評估測試

Fine-tune (DS):Document Reader模型先在SQuAD上訓練,然後分別用其他數據集的distant supervision (DS)訓練集來進行優化

Multitask (DS):同時用SQuAD以及其他DS的訓練集了訓練Document Reader模型

對於整個Wikipedia,我們用了streamlined模型(沒有用CoreNLP解析的 f_{exact-match}

或者 f_{token} )。

我們發現,雖然這些特徵在SQuAD上提供了精確段落情況下的閱讀有幫助,但是在整體系統中卻沒有實際的提升。

此外,WebQuestions和WikiMovies提供了候選答案的列表(例如,用於WebQuestions的160萬個Freebase實體字元串),並且我們在預測期間限制答案範圍必須在此列表中。

表 6

結果:表6顯示了評測結果。

與機器理解(給定了正確的段落)和沒有約束限制的QA(可以使用冗餘資源)相比,我們的任務要困難許多,儘管如此,DrQA仍然在所有的四個數據集中給出了合理的表現。

我們感興趣的是,有一個系統,單純使用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設計的其他資源可能還需要進一步研究。

六、結論

我們研究了大規模數據的閱讀理解問題——僅使用Wikipedia作為唯一知識源來回答開放領域的問題。

我們的研究結果表明,MRS是研究人員關注的一項非常具有挑戰性的任務。

機器理解系統本身並不能解決整個問題。為了提供了一個有效的完整系統,我們的方法集成了搜索、distant supervision和多任務學習多項技術, 並且通過在多個benchmark上評估個別組件以及的完整系統顯示了我們方法的有效性。

未來的工作將主要集中在兩塊來提高我們的DrQA系統:

1)Document Reader目前的訓練是基於單獨的段落,未來在訓練中,會直接多個相關段落或者文檔。

2)訓練端到端的Document Retriever和Document Reader管道流,而不是分開訓練。

原文title

ReadingWikipedia to Answer Open-Domain Questions

原文作者

Danqi Chen,Computer Science,Stanford University,

danqi@cs.stanford.edu

Adam Fisch, Jason Weston & Antoine Bordes,Facebook AI Research,

fafisch,jase,abordesg@fb.com

本文譯者

范雄雄,達觀數據推薦演算法工程師。

復旦大學計算機技術專業碩士,曾在愛奇藝BI部門開發多款大數據產品,對推薦系統、數據挖掘、用戶畫像、大數據處理有較深入的理解和實踐經驗。


推薦閱讀:

厲害了,我的幣!」比特幣「詞條位列2017年維基百科訪問量第九名
谷歌在訓練AI編寫維基百科,然而這事兒並不簡單
推古天皇[編輯]維基百科,自由的百科全書
嫦娥[編輯] 維基百科,自由的百科全書
競爭也是去中心化——對維基百科封鎖BCH文章的隨筆

TAG:維基百科 | 中文維基百科 | 科技 |