查看原文
其他

EMNLP 2017|Facebook 人工智能研究院:ParlAI: 一个对话研究软件平台

热爱学习的 读芯术 2019-05-05

你和“懂AI”之间,只差了一篇论文


很多读者给芯君后台留言,说看多了相对简单的AI科普和AI方法论,想看点有深度、有厚度、有眼界……以及重口味的专业论文。


为此,在多位AI领域的专家学者的帮助下,我们解读翻译了一组顶会论文。每一篇论文翻译校对完成,芯君和编辑部的老师们都会一起笑到崩溃,当然有的论文我们看得抱头痛哭。


同学们现在看不看得懂没关系,但芯君敢保证,你终有一天会因此爱上一个AI的新世界。


读芯术读者论文交流群,请加小编微信号:zhizhizhuji。等你。

这是读芯术解读的第80篇论文



EMNLP 2017 System Demonstrations

ParlAI: 一个对话研究软件平台

ParlAI: A Dialog Research Software Platform

Facebook 人工智能研究院

Facebook AI Research


【摘要】我们介绍一款Python实现的用于对话研究的开源软件平台ParlAI(发音为“par-lay”),可在http://parl.ai上找到。它的目标是提供一个用于共享、训练和测试对话模型的统一框架;整合亚马逊土耳其机器人用于数据收集、人类评估和在线/增强学习;与其他模型比较,并改进现有的体系结构的机器学习模型知识库。在第一个版本中支持了超过20个任务,包括一些流行的数据集,如SQuAD,bAbI任务,MCTest,WikiQA,QACNN,QADailyMail,CBT,bAbI对话,Ubuntu,OpenSubtitles和VQA。集成了诸如记忆网络、seq2seq和attentive LSTMs等神经模型。


1 引言


语言的目的是为了完成沟通,这通常包括两个或更多的交流者之间的对话(Crystal,2004)。因此,试图解决对话问题是自然语言处理团体内研究人员的一个基本目标。从机器学习的角度来看,出于各种原因,构建一个能够对话的学习代理也是一个基本原则,这是因为其主要解决方案涉及到实现该领域的大多数子目标,并且在很多情况下,这些子任务对任务都有直接影响。


一方面,对话可以看作是一个单一的任务(学习如何说话),而另一方面,作为上千个需要不同技能的相关任务,它们都使用相同的输入和输出格式。预订餐馆,谈论体育或新闻,或回答事实或基于感知的问题的任务都属于对话。因此,执行任务迁移的方法对于最终目标来说是至关重要的。记忆、逻辑和常识推理、计划、从交互中学习、学习组合性和其他AI子目标也都在对话中有清晰的角色。


然而,为了实现这些研究目标,我们需要软件工具来统一不同的对话子任务和能从中学习的代理。在个别数据集上工作可能会导致研究孤立,在这种情况下,对数据集特定质量的过度拟合无法泛化以解决其他任务。例如,不能泛化推广的方法如WebQuestions (Berant et al ., 2013)是因为他们只针对知识库本身;SQuAD (Rajpurkar et al., 2016)是因为他们预测开始和结束的上下文指标(见第7节);或者bAbI (Weston et al., 2015),这是因为它们使用支持事实或利用其模拟的本质。


在本文中,我们介绍了一个软件平台,ParlAI(发音为“parlay”),它为研究人员提供了一个统一的训练和测试对话模型的框架,特别是多任务的训练或对多个任务的评估,以及与亚马逊土耳其机器人的无缝集成。第一个发行版本支持超过20个任务,包括许多流行的数据集,见图1。其中包括了用PyTorch和Lua Torch (http://pytorch.org/ and http://torch.ch/)训练神经模型例子。使用Theano (http://deeplearning.net/software/theano/)或Tensorflow (https://www.tensorflow.org/)代替也是也很简单。


图1 ParlAI第一个发行版本的任务


ParlAI的首要目标是建立一个以团体为基础的平台,方便访问这两项任务和学习算法,以推动该领域的发展。这个论文详细描述了我们的目标,并给出了平台的技术概述。


2 目标


ParlAI目标如下:


一个用于开发对话模型的统一框架。ParlAI的目标是将对话数据集输入格式统一到机器学习代理的单一格式,并尽可能地标准化评估框架和度量标准。研究人员可以将他们的新任务和他们的代理训练代码提交到知识库中,以便与他人共享,以帮助重现性,并更好地支持后续研究。


包含许多不同技能的通用对话。ParlAI包含了一个真实和模拟语言数据集的无缝结合,并且通过使得多任务模型像单个任务一样易于构建,从而鼓励多任务模型开发和评估。这应该减少模型设计对特定数据集的过度拟合,并鼓励执行任务迁移模型,这是通用对话代理的重要前提。


真正地与人对话。ParlAI允许通过亚马逊土耳其机器人来在与人的实时对话中进行收集、训练和评估,并通过与对话代理进行对话,从而方便地与人进行对话,见图2。这也使得能在不同的研究群体中进行土耳其实验的比较,而这在之前是很困难的。


图2 ParlAI中MTurk实时聊天来手机QA数据集


迈向一个一般通用对话模型。我们的目标是激发新任务和代理的构建,从而迈向一个可行的对话模型领域。因此,每一个进入知识库的新任务都应该朝着这个共同目标努力,而不是仅仅被看作是独立研究的一部分。


3 ParlAI的通用特性


ParlAI由许多任务和可以用来解决这些问题的代理组成。ParlAI中的所有任务都有一个单一格式(API),它可以将任何代理应用到任何任务,或者一次性完成多个任务。这些任务包括固定的监督/模仿学习数据集(即会话日志)和交互式(在线或增强学习)任务,以及真实的语言和模拟任务,这些都可以在它上面无缝训练。ParlAI还支持其他媒体,例如图像以及用于视觉问题回答的文本(Antol et al., 2015)或视觉标注对话 ( Das et al,2017)。在第一次使用时,ParlAI自动下载任务和数据集。一个或多个Turkers将被被嵌入到一个环境中(任务)来收集数据,训练或评估学习代理。


第一个发布版本中包括用PyTorch和Lua Torch训练的例子。ParlAI使用ZeroMQ而不是Python,与语言进行对话(比如Lua Torch)。在代码中内置支持批训练和hogwild训练。图3给出了一个训练代理的例子。


图3 ParlAI显示数据(顶部)的主函数和world.parley调用(底部)代码


4 世界、代理和教师


ParlAI的主要概念(类)是世界、代理和教师:


  •  世界——环境。这可能因为非常简单而不同,例如两个代理对话,更复杂,例如在交互环境中使用多个代理。


  • l代理——一种可以在世界上行动(特别是说)的代理。一个代理要么是学习者(即机器学习系统),要么是一个硬编码的机器人比如一个设计用来与学习者交互的机器人,或者一个人(例如一个Turker)。


  • l教师——一种与学习者进行交流的中介,目的是为了教代理,例如,在图1中实现了其中一项任务。


在定义了一个世界和其中的代理之后,可以运行一个主循环来进行训练、测试或显示,这将调用函数world.parley()来运行世界的一段时间。图3给出了显示数据的示例代码,运行的输出在图4中。


 图4 给定任务的示例输出显示数据 (对应代码参见图3)


5 行为和观察


所有的代理(包括教师)以一种单一的通用格式相互交流——观察/行为对象(一个python字典),见图5。它用于在代理之间传递文本、标签和奖励。在对话(行为)和监听(观察)中使用相同的对象类型,但是在字段中使用不同的值。因此,该对象从agent.act()中返回,并传递给agent.observe (),参见图3。


图5 ParlAI中观察/行为字典是中心消息传递对象:代理发送此消息去说,而接收消息将观察其他说话者和环境。


消息的字段如下:


  • 文本:一个讲话行为。


  • 身份:说话者的身份。


  • 奖励:分配给信息接收者者的实值奖励。


  • 片段完成:表明对话结束。对于有监督的数据集,还可以使用一些额外的字段。


  • 标签:说话者期望收到的一组回答,例如,QA数据集的正确答案。


  • 标签候选:教师提供的一组可能的回答方式,例如:多选择数据集或排名任务。


  • 文本候选:来自学习者的排序候选预测。用于评估排序指标,而不是仅仅评估文本字段中的单个回答。


  • 度量标准:教师可以在其性能上与学习代理指标进行沟通。


最后,其他媒体也可以用多个附加字段来支持:


  • 图像:一个图像,例如用于视觉回答或视觉对话的数据集。


由于该字典是可扩展的,我们可以随着时间的推移添加更多的字段,例如音频和其他感官数据,以及除语言行为之外的其他行为。


根据数据集的不同,这些字段中的每个字段都是可选的,不过文本字段很可能会在几乎所有的交流中使用。图6显示了一种来自于ParlAI训练集的典型的交流。


图6 来自一个ParlAI训练集的一个典型交流,它包括使用观察/行动dict(测试集不包括标签)消息传递。这里显示是bAbI数据集。


6 代码结构


ParlAI代码基有五个主要目录:


  • core核心:平台的主要代码。


  • agents代理:包含可以与世界/任务交互的代理(例如学习模型)。


  • examples示例:包含不同的主函数(显示数据、训练和评估)。


  • tasks任务:包含在ParlAI中可用的不同任务的代码。


  • mturk:包含土耳其机器人设置和简单土耳其机器人任务代码。

 

6.1 核心


核心库包含以下文件:


  • agents.py:定义了所有代理的代理基类Agent base(实现了observe()和act()方法)、教师Teacher类(报告度量标准),以及用于多任务训练的多任务教师类MultiTaskTeacher。


  • 对话teacher.py:用固定聊天记录进行对话的教师基类base teacher class。


  • worlds.py:定义世界基类、用于两个对话者的DialogPartnerWorld,以及用于两个以上的MultiAgentDialogWorld,两个可以包装选择环境的容器:用于批处理的BatchWorld,以及适用于跨多个线程进行训练的HogwildWorld。


  • dict.py:用于构建语言字典的代码。


  • metrics.py:计算精确的匹配、F1和排名的评估指标。


  • params.py:使用参数解析来对ParlAI的命令行参数进行解释。

 

6.2 代理


代理目录包含机器学习代理。目前在这个目录中可用包括:


  • drqa:一个attentive LSTM模型DrQA(Chen et al.,2017)在PyTorch中实现,在其SQuAD上(Rajpurkar et al., 2016)有很有竞争力。


  • 记忆网络memnn:在Lua火炬中,端到端记忆网络(Sukhbaatar et al., 2015)的代码。


  • 远程代理remote agent:用于连接ZeroMQ的任何代理的基础类。


  • 序列到序列seq2seq:基本的GRU序列到序列模型(Sutskever et al., 2014)。


  • 红外基线ir baseline:信息检索(IR)基线,用加权TFIDF进行匹配(Ritter et al., 2011)。


  • 重复标签repeat label:只重复发给它的所有数据的基类(例如用于调试)。

 

6.3 示例


这个目录包含不同的主主函数例子。


  • display_data:显示来自命令行上提供的特定任务的数据。


  • display_model:显示所提供模型的预测。


  • eval_model:针对给定任务的给定模型的计算评估指标。


  • train_model:执行一个给定的任务和模型的标准训练过程,包括日志记录,训练和验证之间的交替。


例如,一个人可以从bAbI任务中显示10个随机的例子(Weston等人,2015):


python display data.py -t babi -n 10


同时展示多任务的bAbI和SQuAD(Rajpurkar等人,2016)


python display data.py -t babi,squad


在Movies Subreddit上评价一个IR基线模型:


python eval model.py -m ir baseline -t‘#moviedd-reddit’ -dt valid


在SQuAD数据集上,批大小为32,训练一个attentive LSTM模型的例子:


python train model.py -m drqa -t squad -b 32

 

6.4 任务


在第一个发布版本支持20多个任务,包括流行的数据集如SQuAD (Rajpurkar et al .,2016),bAbI任务(Weston et al., 2015)Q,QACNN和QADailyMail (Hermann et al .,2015),CBT (Hill et al., 2015),bAbI对话任务(Bordes and Weston, 2016),Ubuntu (Lowe et al., 2015)和VQA (Antol et al. ,2015)。第一个版本中的所有数据集都显示在图1中(所有的数据集描述和参考都在http://parl.ai的README.md和任务list.py)。


这些任务分为五个类别:


  • 问题回答(QA):最简单的对话形式之一,每个发言人只有一个回合。任何智能的对话代理都应该能够回答问题,并且它可以构建许多类型的问题(以及数据集),提供一组非常重要的测试。问题回答特别有用,因为如果数据集被标记为QA,并且问题基本明确,那么评估比其他形式的对话更简单。


  • 句子填空(Cloze测试):代理必须在对话中的下一个话语表达中填充一个缺失的词。同样,这是一个专门的对话任务,但是它的优点是数据集很便宜,而且评估很简单,这就是为什么社区已经建立了几个这样的数据集。


  • 目标导向对话:一个更现实的任务类是在对话结束时达到目标。例如,一个客户和一个旅行代理讨论航班,一个发言者推荐去看另一个电影等等。


  • 闲聊:对话任务可能没有明确的目标,而更多的是讨论——例如两个人讨论体育,电影或共同兴趣。


  • 可视化对话:对话通常是基于世界上的物理对象,所以对话任务还包括图像以及文本。在ParlAI中选择一个任务就像在命令行中指定它一样简单,如在图4的数据集显示工具中所示。如果数据集以前没有使用过,那么ParlAI将自动下载它。因为所有的数据集都以相同的方式在ParlAI中进行处理(使用一个对话API,参见第五节),一个对话代理可以在其中任何一个之间切换训练和测试。重要的是,你可以通过简单地提供一个逗号分隔的列表来指定多个任务(多任务处理),例如命令行参数-t babi,aquad,使用这两个数据集,或者甚至是一次性的所有QA数据集(-t #qa),或者一次(-t #all)所有任务。其目的是使得构建和评估丰富的对话模型变得容易。


每个任务都包含在以下标准文件的文件夹中:


  • build.py:用于为任务设置数据的文件,包括在第一次请求时下载数据。


  • agent.py:包含教师类,在任务世界中生存的代理。


  • world.py:可选地添加用于定义新/复杂环境的任务。


要添加新任务,必须实现build.py以下载任何必需的数据和对教师的agent.py。如果数据由固定的日志/对话脚本组成,例如在许多有监督的数据集(SQuAD, UUbuntu等等),那么编写的代码就很少。对于需要定义交互环境的更复杂的设置,可以实现新的世界和/或教师。


6.5 土耳其机器人


ParlAI的一个重要部分是与土耳其机器人无缝集成进行数据收集、训练或评估。人类的Turker(human Turkers)也被看作是ParlAI的代理,因此人—人、人—-机器人、或在群聊中多人聊天机器人都可以在标准框架内进行对话,在不需要代码更改的情况下切换到所需的角色。这是因为Turkers也通过同样的界面来接收和发送:使用观察/行为字段。我们在第一个版本中提供了两个例子:


(1) qa收集器qa_collector:一个与Turkers进行对话的代理,在给定一个上下文段的基础上收集问题答案对,以构建一个QA数据集,见图2。


(2) 模型评估器model_evaluator:一个代理,在给定的任务中,从机器人的性能中收集关于机器人性能的评级。


运行一个新的MTurk任务需要实现和运行一个主文件(如run.py),并为您希望与之交谈的世界和代理(s)定义几个特定的任务参数。对于数据收集任务,代理应该提出问题,并询问Turker问题的答案,请参见图2。其他参数包括任务描述、Turker在任务中的角色、描述任务的关键字、点击次数和对Turkers的奖励。在启动真正的任务之前,你可以在沙盒模式下运行。


对于在线训练或评估,Turker可以与您的机器学习代理进行交流,例如LSTM、记忆网络或其他实现技术。新的任务可以被登记到知识库中,这样研究人员就可以共享数据收集和数据评估过程,并进行复制实验。


7 演示实验


为了演示ParlAI的作用,我们在表1中给出了DrQA的结果,这是一个 attentive LSTM体系结构,在SQuAD和bAbI任务中都有单一任务和多任务的训练,据我们所知,这样的组合在之前的任务方法中都没有出现过。


表1 采用ParlAI的DrQA在bAbI 10K和SQuAD(精确匹配度量)上的测试精度。使用了文本中包含答案的bAbI任务的子集。


这个实验同时显示了ParlAI的强大(建立这个实验是多么的容易)和当前方法的局限性。几乎所有在SQuAD中表现很好的方法都被设计成从给定的环境中预测一个短语(他们在训练中被标记为开始和结束索引)。因此,这些模型不能应用于所有的对话数据集。例如,一些bAbI任务包括是否是/否问题,“是”和“否”不会出现在上下文中。这说明研究人员不应该将模型集中在单个数据集上。ParlAI不提供启动和结束标签索引,由于ParilAI的API只是对话,见图5。这是一个深思熟虑的选择,不鼓励这样的数据集过于适合/专门化。然而,由于给的信息少了,这也导致了性能下降(由于我们现在不知道真正答案的位置,我们随机选择任何上下文的开始和结束索引短语来匹配给定的训练集的答案,在某些情况下这是独一无二的)(66.4 EM与69.5 EM,见(Chen et al., 2017),仍在许多现有的性能良好的方法的范围内,见https://stanford-qa.com)。


总的来说,虽然DrQA可以解决一些bAbI任务,并在SQuAD中表现出色,但它与bAbI的最佳性能方法并不匹配(Seo et al., 2016; Henaff et al., 2016),多任务处理没有用。因此,ParlAI向社区提出了一个挑战,即寻找能从很多对话集训练中获益的一般通用学习算法。


8 相关软件


现在有许多独立的对话数据集,以及用于个别模型的训练代码。许多人以略微不同的方式(不同的格式,不同类型的监督)来构建框架,而ParlAI试图将这片支离破碎的局面统一起来。


一些现有的软件平台在它们大范围内是相关的,而不是它们的专业领域。OpenAI的Gym和Universe(https://gym.openai.com/和https://universe.openai.com/)是用来开发和比较强化学习(RL)算法的工具包。Gym用于像Pong或Go这样的游戏,而Universe则是用于在线游戏和网站。既不关注对话,也不关注我们所做的监督数据集。


CommAI (https://github.com/facebookresearch/CommAI-env)是一个框架,它使用文本通信通过增量发展,测试越来越复杂的技能 (Mikolov et al .,2015)来实现人工总体智能的目标。CommAI在一个增强学习设置中,只包含合成数据集,而不是像我们在这里所做的真正的自然语言数据集。在这方面,它对ParlAI有不同的焦点,ParlAI强调了与真正对话有关的更直接的任务,而不是直接对机器智能进行评估。


9 结论和展望


ParlAI是一个框架,允许研究团体分享现有和新的对话和代理任务,以及通过土耳其机器人来收集和评估代理人和人类之间的对话。我们希望这个工具能够对对话代理进行系统的开发和评估,帮助进一步推进对话技术水平,并使整个领域受益。


论文下载链接:

http://www.aclweb.org/anthology/D/D17/D17-2014.pdf


留言 点赞 发个朋友圈

我们一起探讨AI落地的最后一公里


长按识别二维码可添加关注

读芯君爱你


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存