在 ParlAI 中选择一个任务非常简单,只需要在命令行中指定它既可,如上图(右)所示。如果该数据集之前没有被使用过,那 ParlAI 将会自动下载它。因为在 ParlAI 中,所有的数据集的处理方式都是一样的(使用单个对话 API),所以原则上一个对话代理可以在这些数据集之间切换训练和测试。还不止于此,你可以简单地通过提供一个逗号分隔的列表来一次性指定许多任务(多任务),比如命令「-t babi,squad」可以使用这两个数据集,甚至还可以使用「-t #qa」命令一次性指定所有的 QA 数据集或使用「-t #all」一次性指定 ParlAI 中的每一个任务。我们的目标是使其可以轻松地创建和评估非常丰富的对话模型。 每个任务文件夹包含: build.py 文件,用于设置任务的数据(下载数据等,仅在第一次请求时完成,如果某个任务从未被使用,那么就不会下载它)。 agents.py 文件,包含了默认的或特定的教师(teacher)类别,可被 core.create_task 用来从命令行参数上实例化这些类别(如有需要)。 worlds.py 文件,是可选的,可用于需要定义新环境或复杂环境的任务。 要添加你自己的任务: (可选)实现 build.py 以下载任何所需的数据 实现 agents.py,至少包含一个 DefaultTeacher(扩展 Teacher 或它的一个衍生) 如果你的数据是 FB Dialog 格式的,那么属于 FbDialogTeacher 类别 如果不是 FB Dialog 格式: 如果你的数据是基于文本的,你可以使用扩展的 DialogTeacher,并因此要使用 core.data.TextData,在这种情况下,你仅需要编写你自己的 setup_data 函数,其可根据在 core.data 中所描述的格式而在数据之上提供一个 iterable. 如果你的数据使用了其它字段,那么就要编写你自己的 act() 方法,其提供了当你的任务每次被调用时的观察。 MTurk ParlAI 的一个重要方面是与 Mechanical Turk 的无缝集成,可用于数据收集、训练和评估。在 ParlAI 中,人类 Turker 也被视为代理(agent),因此在一个标准的框架中可以进行人-人、人-bot、多人和多 bot 群聊等形式的对话,也可以按照需求切换角色,而无需对代理的代码进行修改。这是因为 Turker 也可以使用观察/动作(observation/action)词典中的字段来通过同样接口的一个版本进行接收和发送。我们在这第一版中提供了两个示例——收集数据和人类对 bot 的评估。
mturk 库包含以下目录和文件: core:该目录包含了设置支持 MTurk 聊天接口的 AWS 后端的核心代码,以及用于 HIT 创建和许可的代码。 tasks:该目录包含了两个第一版提供的示例 MTurk 任务。 qa_data_collection:从 Turker 获取问题和答案,给出了 SQuAD 的一个随机段落 model_evaluator:在 Reddit 电影对话日志数据集上评估该信息检索基线模型 run_mturk.py:用于调用 mturk 核心代码的文件,包含用户指定的任务模块、对话日志模型代理、HIT 的数量和每个 HIT 的回报。 运行示例 MTurk 任务和代理: 在 run_mturk.py 中,去掉任务模块和你想使用的代理类别的注释 对于 create_hits 方法,如有需要,改变 num_hits 和 hit_reward。如果你想仅在 MTurk 沙箱中运行该样本,那么就将 is_sandbox 设置为 True;如果设置为 False,则就可让 Turker 来处理这个工作并得到报酬。 运行 python run_mturk.py 添加你自己的 MTurk 任务和对话模型: 在 mturk/tasks 目录为你自己的任务创建一个新的文件夹 部署 task_config.py,至少在 task_config 目录中包含以下字段: hit_title:关于该 HIT 包含的任务类型的一个短的描述性标题。在 Amazon Mechanical Turk 网站上,该 HIT 标题以搜索结果的形式呈现,并且出现在该 HIT 被提及的任何地方。 hit_deion:一个 deion(描述)包含了该 HIT 所包含的任务类型的详细信息。在 Amazon Mechanical Turk 网站上,该 HIT 描述出现在搜索结果的扩展视图中,并且也会出现在该 HIT 和分配(assignment)屏幕上。 hit_keywords:描述该 HIT 的一个或多个词或短语,用逗号隔开。在 Amazon Mechanical Turk 网站上,这些词被用于搜索 HIT。 worker_agent_id:一个指示 Turker 在对话中的作用的短名字 task_deion:一个详细的任务描述,将会出现在 HIT 任务预览页面,并会显示在聊天页面的左侧。支持 HTML 格式。 实现 agents.py,至少有一个从 Agent 扩展的代理类别。 编写你自己的 __init__() 方法以打包你的对话模型代理(具体示例可见 mturk/tasks/model_evaluator/agents.py 文件)。 编写你自己的 act() 方法,其会返回你的对话模型的响应,以及有助于 Turker 了解接下来应该做的事情的帮助文本。 在 run_mturk.py 文件中导入你的任务模块和代理类别,然后运行 python run_mturk.py 团队 (责任编辑:本港台直播) |