【乾貨】Facebook剛剛開源DrQA項目,手把手教你做一個問答系統
最近,Facebook在GitHub上開源了一個基於維基百科的開放式問題問答系統DrQA,並持續更新中。
開源地址:
https://github.com/facebookresearch/DrQA/
DrQA是一個適用於開放式問答的閱讀理解系統。特殊的是,DrQA針對 「machine reading at scale」(大規模機器閱讀)的任務。在這種情況下,我們檢索的可能是龐大的非結構化文檔語料庫中,某個問題的答案。因此,系統必須將文檔檢索(查找相關文檔)與文本的機器理解(識別這些文檔的答案)相結合。
我們的DrQA實驗只關注事實性問題,同時使用維基百科作為文檔的唯一知識來源。維基百科是一個非常適合的,大規模的,豐富而詳細的信息來源。為了回答任何問題,系統必須先檢索超過500萬篇文章,尋找少數相關文章,然後仔細掃描,以確定答案。
要注意的是,DrQA將維基百科視為文章的一般集合,不依賴其內部的圖結構。其結果是,DrQA可以被直接應用於任何文檔的集合。
快速上手:安裝DrQA
DrQA需要Python 3.5或更高版本,也需要安裝PyTorch。其他依賴項列在requirements.txt中。
運行以下命令克隆存儲庫,並安裝DrQA:
git clone https://github.com/facebookresearch/DrQA.git
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://http://s3.amazonaws.com/fair-data/drqa/docs-tfidf-ngram%3D2-hash%3D16777216-tokenizer%3Dsimple.npz.gz
這裡P @ 5指的是答案部分出現在前5個文檔中的問題的百分比。
文檔閱讀器
在SQuAD上訓練的模型,在SQuAD設置中的評估結果:
鏈接:
HTTPS://http://s3.amazonaws.com/fair-data/drqa/single.mdl
在沒有NER / POS / lemma功能的遠程監督下訓練的模型,在完整維基百科環境中對多個數據集(測試集,開發集是SQuAD)進行的評估:
鏈接:
HTTPS://http://s3.amazonaws.com/fair-data/drqa/multitask.mdl
維基百科資料庫
我們將文檔存儲成了一個sqlite資料庫,其中drqa.retriever.DocDB提供了一個介面。
鏈接:
HTTPS://http://s3.amazonaws.com/fair-data/drqa/docs.db.gz
問答數據集
用於DrQA訓練和評估的數據集:
- SQuAD
訓練:
https://http://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json
開發:
https://http://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json
- WebQuestions
訓練:
http://http://nlp.stanford.edu/static/software/sempre/release-emnlp2013/lib/data/webquestions/dataset_11/webquestions.examples.train.json.bz2
測試:
http://http://nlp.stanford.edu/static/software/sempre/release-emnlp2013/lib/data/webquestions/dataset_11/webquestions.examples.test.json.bz2
實體:
https://http://s3.amazonaws.com/fair-data/drqa/freebase-entities.txt.gz
- WikiMovies:
訓練/測試/實體:
https://s3.amazonaws.com/fair-data/drqa/WikiMovies.tar.gz(以https://research.fb.com/downloads/babi/預期格式重新載入)
- CuratedTrec:
訓練/測試:
https://s3.amazonaws.com/fair-data/drqa/CuratedTrec.tar.gz(以https://github.com/brmson/dataset-factoid-curated預期格式重新載入)
推薦閱讀:
※科普一下GPL和開源軟體
※怎樣參與到全世界優秀的開源項目中?
※本周 Github 精選:13 款煉丹利器,有開源工具包也有超大數據集
※機器學習組件Accord.NET
※FluentConsole讓你的控制台酷起來