11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

ParlAI:Facebook 开源的一个 AI 对话框架

  • 2017-05-18
  • 本文字数:1197 字

    阅读完需:约 4 分钟

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 )关注我们。

2017-05-18 19:003189
用户头像

发布了 1008 篇内容, 共 346.7 次阅读, 收获喜欢 330 次。

关注

评论

发布
暂无评论
发现更多内容

不服不行!阿里曝光内部高并发实战手册,Github星标98K

Java架构之路

Java 程序员 架构 面试 编程语言

产品经理问我:手动创建线程不香吗,为什么非要用线程池呢?

Java鱼仔

Java 线程池

都在说云原生,它的技术图谱你真的了解吗?

浪潮云

云原生

我要看 SICP 了!

十元

话题讨论 | 每逢佳节胖三斤,过完年你胖了吗?

石云升

话题讨论 减肥 2月春节不断更

RPC框架-dubbo:架构及源码分析-初篇

程序员架构进阶

微服务 dubbo 七日更 28天写作 2月春节不断更

架构师week13作业

Geek_xq

区块链在医疗领域应用所要面临哪些挑战

CECBC

区块链 医疗

新手如何靠区块链赚钱?

CECBC

区块链

区块链产品走向普及之不完全指南

CECBC

比特币 区块链

AI窥人(三):你想靠AI实现永生吗?

脑极体

为什么 Python 的 f-string 可以连接字符串与数字?

Python猫

Python 开源 编程语言 后端 C语言

字节跳动,三面我败了!但是我把经验记录了下来,倒下了一个我,还有千千万万个程序员!

Java架构之路

Java 程序员 架构 面试 编程语言

架构师week13总结

Geek_xq

场景化面试:在读多写少的情况下,如何优化 MySQL 的数据查询方案

面试官问

MySQL 数据库 面试 主从同步 读写分离

滴滴内部分享:如何提高代码的可读性,学习笔记

Java架构师迁哥

Linux 多线程详解 —— 什么是线程

赖猫

Linux 线程 Linux内核

Spring Boot(一):入门篇

海鸥云

spring Boot Starter

阿里架构师道延:我对技术架构的理解与架构师角色的思考

阿里巴巴中间件

阿里云 架构 云原生 架构师

连Python都不熟也能跑通AI人脸识别?“隐藏Boss”竟是它!

华为云开发者联盟

Python AI OpenCV 人脸识别 图像检测

iOS进阶模块(逆向安防)

ios 逆向

阿里内部人手一份!P8大佬也叫好的 高性能MySQL系列文档

Java架构之路

Java 程序员 架构 面试 编程语言

ZEGO全新语音聊天解决方案,4步搭建爆火的语音聊天室

ZEGO即构

十年再出发,Dubbo 3.0 Preview 即将在 3 月发布

阿里巴巴云原生

Java 微服务 云原生 dubbo 应用服务中间件

你真的了解什么是「暴力解法」吗 ...

宫水三叶的刷题日记

面试 算法 LeetCode 数据结构与算法 贪心算法

Spring RSocket:基于服务注册发现的 RSocket 负载均衡

阿里巴巴云原生

Java 开发者 云原生 API 应用服务中间件

实习记录:PB协议编写

YUKI0506

《TestNG》源码学习笔记

吴大山

【得物技术】Keep-alive 原理及业务解决方案

得物技术

大前端 标签 页面 得物技术 keepalive

ParlAI:Facebook开源的一个AI对话框架_Facebook_谢丽_InfoQ精选文章