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许可证的条款发布。