DeepQa建在Keras的頂部。我們認為Pytorch是NLP研究的更好平台。我們將DeepQa重新寫入了一個名為Allennlp的Pytorch圖書館。 DeepQa將不再有發展。但是,我們對Allennlp感到非常興奮 - 如果您對自然語言處理進行深入學習,則應檢查一下!
DEEPQA是一個具有深度學習的高級NLP任務的圖書館,尤其是專注於各種問題的回答。 DEEPQA建立在Keras和TensorFlow的頂部,可以將其視為這些系統的接口,使NLP更容易。
具體來說,該庫為普通keras / tensorflow提供了以下好處:
DEEPQA是使用Python 3構建的。建立兼容環境的最簡單方法是使用Conda。這將建立一個虛擬環境,其確切版本的Python用於開發以及運行DEEPQA所需的所有依賴項。
下載並安裝Conda。
使用Python 3創建Conda環境。
conda create -n deep_qa python=3.5
現在激活Conda環境。
source activate deep_qa
安裝所需的依賴項。
./scripts/install_requirements.sh
將PYTHONHASHSEED設置為可重複的實驗。
export PYTHONHASHSEED=2157
現在,您應該能夠使用pytest -v測試安裝。恭喜!現在,您有一個DEEP_QA的開發環境,該環境使用CPU支持的TensorFlow。 (有關GPU支持,請參見sumplion.txt,以獲取有關如何安裝tensorflow-gpu信息)。
要使用DEEPQA存儲庫的克隆訓練或評估模型,建議的入口點是使用run_model.py腳本。該腳本的第一個參數是一個參數文件,以下更多內容。第二個參數決定了行為,即訓練模型或針對測試數據集評估訓練的模型。第二個參數的當前有效選項是train和test (省略參數與通過train相同)。
參數文件指定您正在使用的模型類,模型超參數,培訓詳細信息,數據文件,數據生成器詳細信息以及許多其他內容。您可以在示例目錄中查看示例參數文件。您可以通過查看文檔來獲取有關哪些參數可用的概念。
實際培訓模型將需要您需要提供的輸入文件。我們有一個伴隨庫,DEEPQA實驗,該實驗最初旨在生成輸入文件和運行實驗,可用於為我們擁有的大多數任務生成所需的數據文件。我們正在朝著將數據處理代碼直接放入DEEPQA中,因此無需進行DEEPQA實驗,但是目前,使用DEEPQA實驗最容易地以正確的格式獲取培訓數據文件。
如果您將DEEPQA用作您自己的代碼中的庫,則運行模型仍然很簡單。您可以自己執行run_model.py操作:
from deep_qa import run_model, evaluate_model, load_model, score_dataset
# Train a model given a json specification
run_model("/path/to/json/parameter/file")
# Load a model given a json specification
loaded_model = load_model("/path/to/json/parameter/file")
# Do some more exciting things with your model here!
# Get predictions from a pre-trained model on some test data specified in the json parameters.
predictions = score_dataset("/path/to/json/parameter/file")
# Compute your own metrics, or do beam search, or whatever you want with the predictions here.
# Compute Keras' metrics on a test dataset, using a pre-trained model.
evaluate_model("/path/to/json/parameter/file", ["/path/to/data/file"])
其餘的用法指南,示例等與在存儲庫的克隆中工作時相同。
要在DEEPQA中實現一個新模型,您需要對TextTrainer進行子類。有關於這一點必要的文件;特別是請參見“抽象方法”部分。有關功能齊全的模型的簡單示例,請參見簡單的序列標記器,該標記器具有約20行實際實現代碼。
為了訓練,加載和評估自己寫過的模型,只需將附加參數傳遞給上面的功能,然後從JSON規範中刪除model_class參數。例如:
from deep_qa import run_model
from .local_project import MyGreatModel
# Train a model given a json specification (without a "model_class" attribute).
run_model("/path/to/json/parameter/file", model_class=MyGreatModel)
如果您正在執行新任務,或具有不同輸入/輸出規範的任務的新變體,則可能還需要實現Instance類型。該Instance處理從文件中讀取數據,並將其轉換為可用於培訓和評估的Numpy陣列。每個輸入/輸出規格只需要一次一次。
DEEPQA具有針對各種任務的最先進方法的實現。這是其中的一些:
此代碼可以輕鬆地對以下數據集進行實驗:
請注意,當前大多數此類數據處理代碼都生活在DEEPQA實驗中。
如果您使用此代碼並認為可以改善某些內容,則非常歡迎拉動請求。打開問題也可以,但是我們可以更快地做出回應以提取請求。
該代碼按照Apache 2許可證的條款發布。