资源 | Facebook开源人工智能框架ParlAI:可轻松训练评估对话模型
2017-05-06 编辑:
选自GitHub
机器之心编译
参与:吴攀、晏奇
Facebook 近日在 GitHub 上开源了一个可用于在多种开放可用的对话数据集上训练和评估人工智能模型的框架 ParlAI,机器之心在本文中对这一项目的 README.md 内容进行了编译介绍。项目地址如下:
官网地址:http://parl.ai
GitHub:https://github.com/facebookresearch/ParlAI
ParlAI(读音为 par-lay)是一个用于对话人工智能研究的框架,是用 Python 实现的。该框架的目标是为研究者提供:
一个用于训练和测试对话模型的统一框架
一次性在许多数据集上进行多任务训练
无缝集成 Amazon Mechanical Turk,以便数据收集和人工评估
这第一个版本支持超过 20 种任务,也囊括了许多流行的数据集,比如 SQuAD、bAbI tasks、MCTest、WikiQA、WebQuestions、SimpleQuestions、WikiMovies、QACNN & QADailyMail、CBT、BookTest、bAbI Dialog tasks、Ubuntu Dialog、OpenSubtitles、Cornell Movie 和 VQA-COCO2014。
还包括使用 PyTorch 和 Lua Torch 训练神经模型的示例,其包含了在 GPU 上的批训练或在 CPU 上的 hogwild 训练。另外使用 Theano 或 TensorFlow 也是很直接的。
我们的目标是让那些在它们之上训练的任务和智能体能够以一种基于社区的方式成长。
这个版本还是早期的 Beta 版,使用过程中可能会有一些冒险,或遇到一些难题。
目标
用于评估模型的统一框架
可按需下载任务/数据集,且为它们提供了同样简单的接口
统一的数据集输入和评估框架/标准
agents/ 目录鼓励研究者提交他们的训练代码,以便在该 repo 中分享
协助重现
最终目标是实现通用的对话,包括许多不同的技能
无缝地组合模拟的和真实的语言任务
鼓励多任务模型的开发和评估
有助于减少模型在特定数据集上的过拟合
最终目标是实现与人类的真实对话
通过 Mechanical Turk,在与人类的实时对话上训练和评估
只需简单的设置,就可以连接 Mechanical Turk 上的人类与你的对话代理
允许比较不同研究组的 Turk 实验
能够引导一个可与人类交互的对话模型的数据集配置
激励构建将进入本 repo 的新数据集
特性
所有的数据集都像自然对话:单一格式/API
既有固定数据集(会话日志),也有交互式任务(在线/RL)
既有真实任务,也有模拟任务
支持其它媒体,比如 VQA 中的视觉
可以使用 Mechanical Turk 来运行/收集数据/评估
Python 框架
PyTorch 的训练示例
可使用 zmq 与其它非 Python 的工具箱对话,给出了 Lua Torch 的示例
支持模型的 hogwild 训练和批训练
基本示例
从「1k training examples」bAbI 任务的任务 1 中展示 10 个随机样本:
python examples/display_data.py -t babi:task1k:1
同时在 bAbI 任务的多任务与 SQuAD 数据集上展示 100 个随机样本:
python examples/display_data.py -t babi:task1k:1,squad -n 100
在 Movies Subreddit 数据集的验证集上评估 IR 基线模型:
python examples/eval_model.py -m ir_baseline -t "#moviedd-reddit" -dt valid
给出该 IR 基线模型的预测:
python examples/display_model.py -m ir_baseline -t "#moviedd-reddit" -dt valid
在「10k training examples」bAbI 任务 1 上训练一个简单的基于 CPU 的记忆网络,其使用了 Hogwild(需要 zmq 和 Lua Torch),有 8 个线程(Python 进程):
python examples/memnn_luatorch_cpu/full_task_train.py -t babi:task10k:1 -n 8
在 SQuAD 数据集上训练一个「注意 LSTM」模型,其中批大小为 32(PyTorch 和 regex)
python examples/drqa/train.py -t squad -b 32
要求
ParlAI 目前支持 Python3。
核心模组的依赖内容参见 requirement.txt。其中部分模型(在 parlai/agents 中)有进一步要求,比如需要 PyTorch 或 Lua Torch——所有这些模组的要求都可以参见 requirements_ext.txt 这个文档。
安装 ParlAI
首先,复制该 repository,然后进入复制的目录。
链接安装:运行 python setup.py develop 来将复制的目录链接到你的 site-packages。如果你打算根据你的运行修改任何的 parlai 代码或者提交一个 pull request,特别是如果你想在 repository 上添加另外的任务的话,那么我们推荐上述安装过程。所有需要的数据都将被下载到 ./data,而且,如果要求任何模型的文件(目前仅是 memnn 模型),它们都将被下载到 ./downloads。
复制后的安装内容(仅将 parlai 用作一个依赖项):运行 python setup.py install 来将内容复制到你的 site-packages 文件夹。所有数据都会被默认下载到 python 的 site-packages 文件夹中(你可以通过命令行来改写路径),不过一旦对代码作出了任何改动,你都需要重新运行一次安装。如果你仅想将 parlai 作为一个依赖项使用(比如用于访问任务或核心代码),那么目前这样就可以了。但是如果你想要清除下载的数据,那么删除 site-packages/parlai 中的 data 和 downloads 文件夹(如果可以的话)。
Worlds, agents 和 teachers
ParlAI 中的主要概念(类):
world——它定义了环境(它可以非常简单,可以仅两个代理相互对话)。
agent——这是世界里的一个代理,比如一个学习器。(存在很多学习器。)
teacher——这是一种可以和学习者对话的代理,它用于实现前面提到的任务。
在定义完 ParlAI 中的 world 和 agent 之后,一个主 loop 可被用来训练、测试或显示,它叫做 world.parley() 函数。我们在左边的面板中给出了个实例的主要骨架,parley() 函数真实的代码写在右侧面板。