ParlAI (读作“par-lay”)是一个在各种公开提供的对话数据集上训练和评估 AI 模型的框架。它是用 Python 编写的(当前需要 Python 3),主要用于对话 AI 研究,其目标是为研究人员提供以下特性:
- 一个训练和测试对话模型的统一框架;
- 一次性在许多数据集上完成多任务训练;
- 无缝集成 Amazon Mechanical Turk ,用于数据收集和人工测评。
ParlAI 包含三个主要概念:
- world:定义环境(可以非常简单,只有两个代理相互交谈);
- agent:环境中的代理,如“学习者(learner)”(可以有多个学习者);
- teacher:一种和学习者交谈的代理类型,实现其中一种 ParlAI 任务。
在定义好 world 和其中的代理后,就可以运行一个主循环进行训练、测试或展示,它会调用 world.parley() 函数,如下图所示,左侧是 main 方法的示例框架,右侧是 parley() 的实际代码:
所有代理(包括 teacher)都使用一种格式—— observation/action 对象(一个 python 字典)——进行交谈。讲话(acting)或倾听(observing)都使用相同的对象类型,其中包含如下字段:
从技术上讲,其中每个字段都是可选的。
ParlAI 的代码包含如下几个主要的文件夹:
- core包含框架的主要代码;
- agents包含可以和不同任务交互的代理;
- examples包含不同循环的一些基本示例;
- tasks包含不同任务的代码;
- mturk包含设置 Mechanical Turk 的代码及 MTurk 任务样例。
第一个版本支持 20 多种任务,其中包括 SQuAD 、 bAbI tasks 、 MCTest 、 WikiQA 、 WebQuestions 、 SimpleQuestions 、 WikiMovies 、 QACNN & QADailyMail 、 CBT 、 BookTest 、 bAbI Dialog tasks 、 Ubuntu Dialog 、 OpenSubtitles 、 Cornell Movie 、 VQA-COCO2014 等数据集,如下图左侧所示:
在 ParlAI 中,选择一项任务非常简单,只要在命令行中指定即可,如上图右侧所示。如果指定的数据集以前没有使用过,那么 ParlAI 会自动下载它。ParlAI 把所有的数据集都同等看待,原则上,一个对话代理可以在上述任何数据集之间切换训练及测试。甚至,研究人员还可以一次指定多个任务,例如,通过命令行-t babi,squad
使用两个数据集,或者通过命令行-t #qa
一次指定所有 QA 数据集,或者使用-t #all
指定 ParlAI 中的所有任务。总之,ParlAI 的目标是让研究人员可以轻松地构建和评估丰富的对话模型。
ParlAI 的一个重要特性是无缝集成 Mechanical Turk,用于数据收集、训练和评估。在 ParlAI 中,Human Turkers 也被视为代理,因此,人 - 人、人 - 机器人或者多个人和机器人都可以在标准框架内交谈,根据需要交换角色,而不需要修改代理的代码。
ParlAI GitHub 页面上还提供了使用 PyTorch 和 Lua Torch 训练神经模型的示例,替换成 Theano 或 Tensorflow 也很简单。ParlAI 尚处于早期 Beta 测试阶段,感兴趣的读者可以下载安装。
感谢陈思对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论