【乾貨】Facebook剛剛開源DrQA項目,手把手教你做一個問答系統

最近,Facebook在GitHub上開源了一個基於維基百科的開放式問題問答系統DrQA,並持續更新中。

開源地址:

github.com/facebookrese

DrQA是一個適用於開放式問答的閱讀理解系統。特殊的是,DrQA針對 「machine reading at scale」(大規模機器閱讀)的任務。在這種情況下,我們檢索的可能是龐大的非結構化文檔語料庫中,某個問題的答案。因此,系統必須將文檔檢索(查找相關文檔)與文本的機器理解(識別這些文檔的答案)相結合。

我們的DrQA實驗只關注事實性問題,同時使用維基百科作為文檔的唯一知識來源。維基百科是一個非常適合的,大規模的,豐富而詳細的信息來源。為了回答任何問題,系統必須先檢索超過500萬篇文章,尋找少數相關文章,然後仔細掃描,以確定答案。

要注意的是,DrQA將維基百科視為文章的一般集合,不依賴其內部的圖結構。其結果是,DrQA可以被直接應用於任何文檔的集合。

快速上手:安裝DrQA

DrQA需要Python 3.5或更高版本,也需要安裝PyTorch。其他依賴項列在requirements.txt中。

運行以下命令克隆存儲庫,並安裝DrQA:

git clone github.com/facebookrese

cd DrQA; pip install -r requirements.txt; python setup.py develop

注意:requirements.txt包含所有可能所需軟體包的一個子集。根據想要運行的內容,你可能需要安裝一個額外的軟體包(如spacy)。

如果你使用CoreNLPTokenizer或SpacyTokenizer,還需要分別下載Stanford CoreNLP jar和spaCy en模型。如果你使用Stanford CoreNLP,請在java CLASSPATH環境變數中使用jar ,或者用代碼以編程方式設置路徑:

import drqa.tokenizers

drqa.tokenizer.set_default(corenlp_classpath, /your/corenlp/classpath/*)

劃重點:默認的標記器是CoreNLP,因此你需要在CLASSPATH里運行README示例。

例如:export CLASSPATH = $ CLASSPATH:/ path / to / corenlp / download / *

為方便起見,如果沒有給出模型參數,則文檔閱讀器、文檔檢索器和管道模塊將嘗試載入默認模型。

經過訓練的模型和數據

要下載所有提供的用於維基百科問答的經過訓練的模型和數據,運行:

./download.sh

這會下載一個7.5GB的tar壓縮包(解壓後25GB),需要一些時間。

這會將數據默認存儲在各種模塊指定的文件路徑中的「data/」下。可以通過將DRQA_DATA環境變數指定到其他地方,修改這個頂級目錄。

默認目錄結構:

不同模塊的默認模型路徑也可以在代碼中進行修改,例如:

import drqa.reader

drqa.reader.set_default(model, /path/to/model)

reader = drqa.reader.Predictor() # Default model loaded for prediction

文檔檢索器

使用維基百科的TF-IDF模型(unigrams和bigrams,2 ^ 24 bin,簡單標記化),在多個數據集(測試集,開發集是SQuAD)上進行評估:

鏈接:

HTTPS://s3.amazonaws.com/fair-d

這裡P @ 5指的是答案部分出現在前5個文檔中的問題的百分比。

文檔閱讀器

在SQuAD上訓練的模型,在SQuAD設置中的評估結果:

鏈接:

HTTPS://s3.amazonaws.com/fair-d

在沒有NER / POS / lemma功能的遠程監督下訓練的模型,在完整維基百科環境中對多個數據集(測試集,開發集是SQuAD)進行的評估:

鏈接:

HTTPS://s3.amazonaws.com/fair-d

維基百科資料庫

我們將文檔存儲成了一個sqlite資料庫,其中drqa.retriever.DocDB提供了一個介面。

鏈接:

HTTPS://s3.amazonaws.com/fair-d

問答數據集

用於DrQA訓練和評估的數據集:

  • SQuAD

訓練:

https://rajpurkar.github.io/SQu

開發:

https://rajpurkar.github.io/SQu

  • WebQuestions

訓練:

http://nlp.stanford.edu/static

測試:

http://nlp.stanford.edu/static

實體:

https://s3.amazonaws.com/fair-d

  • WikiMovies:

訓練/測試/實體:

s3.amazonaws.com/fair-d(以research.fb.com/downloa預期格式重新載入)

  • CuratedTrec:

訓練/測試:

s3.amazonaws.com/fair-d(以github.com/brmson/datas預期格式重新載入)


推薦閱讀:

科普一下GPL和開源軟體
怎樣參與到全世界優秀的開源項目中?
本周 Github 精選:13 款煉丹利器,有開源工具包也有超大數據集
機器學習組件Accord.NET
FluentConsole讓你的控制台酷起來

TAG:Facebook | 開源項目 | 機器學習 |