社会焦点

资源 | Facebook开源人工智能框架ParlAI:可轻松训练评估对话模型(2)

字号+ 作者: 来源: 2017-05-06

Actions 和 Observations 所有的 agent(包括 teacher)都以简单的格式互相对话——observation/action 对象(这是一个 python 字典)。这被用于传递 agent 之间的文本、标签和奖励。这和当在对话(行动)或听(观

  资源 | Facebook开源人工智能框架ParlAI:可轻松训练评估对话模型

Actions 和 Observations

所有的 agent(包括 teacher)都以简单的格式互相对话——observation/action 对象(这是一个 python 字典)。这被用于传递 agent 之间的文本、标签和奖励。这和当在对话(行动)或听(观察)时是同类对象,但是不同视角(在这些字段中有不同的值)。这些领域如下所述:

尽管'text'(文本)领域将几乎可能在全部交流(exchange)中被使用,但是技术上来说,基于你的数据集,这些领域中的每个都是可选的。

对于一个固定的监督式学习数据集(比如 bAbI)来说,一个典型的从数据集进行交流(exchange)例子可以像如下这样(该测试集不包含标签):

Teacher: {

  'text': 'Sam went to the kitchennPat gave Sam the milknWhere is the milk?',

  'labels': ['kitchen'],

  'label_candidates': ['hallway', 'kitchen', 'bathroom'],

  'episode_done': False

  }

  Student: {

  'text': 'hallway'

  }

  Teacher: {

  'text': 'Sam went to the hallwaynPat went to the bathroomnWhere is the milk?',

  'labels': ['hallway'],

  'label_candidates': ['hallway', 'kitchen', 'bathroom'],

  'episode_done': True

  }

  Student: {

  'text': 'hallway'

  }

  Teacher: {

  ... # starts next episode

  }...

代码

代码被设置进了几个主要目录:

  • core:它包含了框架的首要代码。

  • agents:包含了可以凭不同任务交互的代理(比如:机器学习模型)。

  • example:包含了不同循环的一些基本样例(构建词典、训练/评价、显示数据)。

  • tasks:包含了可来自于 ParlAI 的不同任务的代码。

  • mturk:包含了设置 Mechanical Turk 的代码和作为样例的 MTurk 任务。

  • 下面我们会更具体地说明每个目录,我们根据依赖项(dependency)来组织行文。

    Core 库

    core 库包含了如下文件:

  • agent.py:这个文件包含了一些可被你自己模型延展的基本 agent。

  • Agent:这是所有 agent 的基本类,实现了 act() 方法,该方法接受一个观察表(table)并且返回一个作为回复的表。

  • Teacher:它是 Agent 的子代,也实现了针对返回量度(returning metric)的报告方法。任务实现了 Teacher 这个类。

  • MultiTaskTeacher:它创造了一个基于「任务字符串」的 teacher 集,该集可以传递给 Teacher。在其中它创建了多个 teacher 并且在它们之间交替轮换。

  • create_task_teacher:它从一段给定的任务字符串中实例化了一个 teacher(比如「babi:task:1」或「squad」)。

  • build_data.py:用于设置任务数据的基本功能。如果你的文件系统需要不同的功能,你可以覆盖它。

  • dialog_teacher.py:包含了用于和固定交谈(chat)日志进行对话(dialog)的一个基本 teacher 类,同时它也包含了一个用于储存数据的数据类(data class)。

  • dict.py:包含了从观察中构建一般 NLP 风格字典的代码。

  • DictionaryAgent:在一个字典中跟踪索引和词频的 agent,可以将一个句子解析成它字典或 back 中的指数(indice)。

  • fbdialog_teacher.py:包含了一个 teacher 类,该类实现了一个 setup_data 函数,这个函数用 Facebook 的 Dialog 数据格式来解析数据。

  • metrics.py:计算对话的评价量度,比如对排名的量度等。

  • params.py:用 argparse 来为 ParlAI 解释命令行 argument。

  • thread_utils.py:用于 Hogwild 多线程(多重处理)的工具类/函数。

  • SharedTable:提供一个锁保护、记忆分享、类字典的用于追踪度量的的界面。

  • worlds.py:包含了一套用于内部开展任务的基本 world。

  • World:所有 world 的基本类,实现了 parley,shutdown,__enter__,和__exit__。

  • DialogPartnerWorld:用于双 agent 回合交流的默认 world。

  • MultiAgentDialogWorld:用于两到多个 agent 的循环(round-robin)回合 agent 交流。

  • HogwildWorld:当使用多线程(多重处理)时。这是用于设置一个对每个线程而言分别独立的 world 的默认 world。

  • Agents 目录

    agents 目录包含了已被认可进入 ParlAI 框架用于分享的 agent。目前有这些可用的目录:

  • drqa:这是一个很周全的 LSTM 模型,它叫「DrQA」(问答博士,论文地址:https://arxiv.org/abs/1704.00051)。它用 PyTorch 框架实现,在 SQuAD 数据集上,它得到的结果相比其它模型更具竞争力。

  • memnn:它是在 Lua Torch 中用于端到端记忆网络的代码。

  • remote_agent:连接 ZMQ 的任意 agent 的基本类(memnn_luatorch_cpu 就使用这个)。

  • ir_baseline:简单的信息检索基准(baseline),它用 TFIDF-权重匹配为候选者的反馈评分。

  • repeat_label:仅重复(repeating)发送给它的所有数据的基本类(如连接(piping)到一个文件、调试)。

  • 实例

    这个目录包含了部分基本循环的具体例子。

  • base_train.py:一个非常简单的例子,展示了一个使用默认 Agent 亲本类的训练/验证循环的轮廓。

  • display_data.py:使用 agent.repeat_label 来显示来命令行给出的特定任务的数据。

  • display_model.py:显示对一个给定模型在命令行给出的特定任务之上的预测。

  • eval_model.py:使用命名后的 agent 来计算一个命令行给出的特定任务的评价量度(evaluation metric)数据。

  • build_dict.py:使用 core.dict.DictionaryAgent 建立一个来自命令行给出的特定任务的 dictionary。

  • memnn_luatorch_cpu:展示了一些在几个数据集上训练端到端记忆网络的例子。

  • drqa:展示了如何在 SQuAD 训练集上训练一个周全的 LSTM「DrQA」模型(论文地址:https://arxiv.org/abs/1704.00051)。

  • 任务

    这个第一版本支持超过 20 种任务,包括 SQuAD、bAbI tasks、MCTest、WikiQA、WebQuestions、SimpleQuestions、WikiMovies、QACNN、QADailyMail、CBT、BookTest、bAbI Dialog tasks、Ubuntu、OpenSubtitles、Cornell Movie 和 VQA-COCO2014 等流行的数据集。

    我们的第一版包含以下数据集,见下图左栏;获取它们也非常简单,只需在命令行的选项中指定对应任务的名称即可,如右栏的数据集展示实用程序所示。查阅当前完整任务列表请访问:https://github.com/facebookresearch/ParlAI/blob/master/parlai/tasks/task_list.py

    转载请注明出处。


    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 案例 | 抑郁症、精神分裂,初中生家境优渥,父母为何不让吃药

      案例 | 抑郁症、精神分裂,初中生家境优渥,父母为何不让吃药

    • 实录 |12名女大学生被侵犯,色魔竟然是个老乞丐

      实录 |12名女大学生被侵犯,色魔竟然是个老乞丐

    • 微信群的多人语音和视频聊天功能,你要试试 | 有轻功 #081

      微信群的多人语音和视频聊天功能,你要试试 | 有轻功 #081

    • 为了不让你坐过站,香港人居然做了这款 App | AppWall 精选 #060

      为了不让你坐过站,香港人居然做了这款 App | AppWall 精选 #060