首页/新闻资讯/正文详情

ParlAI 众包问答数据采集任务(QA Data Collection)完整指南:用 Mephisto 批量构建“段落-问答对“训练数据

发布时间:2026/9/24 14:12:21 来源:云帆数科 栏目:资讯中心
ParlAI 众包问答数据采集任务(QA Data Collection)完整指南:用 Mephisto 批量构建“段落-问答对“训练数据
ParlAI 众包问答数据采集任务QA Data Collection完整指南用 Mephisto 批量构建段落-问答对训练数据【免费下载链接】ParlAIA framework for training and evaluating AI models on a variety of openly available dialogue datasets.项目地址: https://gitcode.com/gh_mirrors/pa/ParlAI本篇技术指南聚焦 ParlAI 仓库中的qa_data_collection众包任务它基于 Mephisto 框架让众包工人crowdsource worker阅读一段给定的文本段落然后针对该段落写出一组问题-答案question-and-answer pair最终沉淀为可用于训练阅读理解 / 问答模型的高质量数据。通过本文你将掌握该任务的完整运行流程、全部核心配置参数包括mephisto.blueprint.task_description_file、mephisto.blueprint.world_file、mephisto.teacher.task、mephisto.teacher.datatype等、底层的 ParlAI World 对话逻辑与 Teacher 数据流以及如何自定义 World 类或替换数据源来扩展你自己的数据采集任务。任务是什么让工人读段落、写问答qa_data_collection是一个 Mephisto 众包任务其核心目标是让众包工人阅读一段文字passage然后针对该段落编写一组问题与答案。任务定义位于 parlai/crowdsourcing/tasks/qa_data_collection/README.md任务入口脚本为 run.py。举例来说如果给工人展示如下段落At the time, there were many varying opinions about Christian doctrine, and no centralized way of enforcing orthodoxy. Constantine called all the Christian bishops throughout the Roman Empire to a meeting, and some 318 bishops (very few from the Western Empire) attended the First Council of Nicaea.(passage continues)工人可以据此写出问题Who called the bishops to the First Council of Nicaea?并给出答案Constantine called the bishops。这种段落 问题 答案的三元组正是 SQuAD 这类抽取式阅读理解数据集的标准形态——因此该任务天然适合作为定制化 QA 数据采集流水线为特定领域或特定风格的问答模型扩充训练语料。从源码结构看该任务目录下包含四个核心组成部分目录结构run.py任务启动脚本负责解析 Hydra 配置、构造 Teacher 与 World 并交给 Mephisto Operator 运行worlds.py定义聊天 World 类QADataCollectionWorld实现每轮对话的逻辑、任务结束条件与超时控制util.py提供get_teacher工具函数负责根据配置从 ParlAI 数据集中构造 Teacher数据提供方hydra_configs/conf/example.yaml任务的默认参数配置文件含 blueprint、architect、provider 等 Mephisto 配置task_config/task_description.html展示给工人的任务说明 HTML显示在聊天窗口左侧面板webapp/基于 React 的前端聊天界面负责渲染段落文本、问答对话流。任务如何运转一条从数据集到众包工人的完整数据流要真正理解该任务先看清它背后ParlAI Teacher → Mephisto World → Web 前端的三层数据流。整个任务的装配过程都发生在 run.py 的main()函数中解析配置hydra.main(config_pathhydra_configs, config_namescriptconfig)加载 Hydra 配置默认读取example.yaml并通过load_db_and_process_config(cfg)加载 Mephisto 数据库、规范化配置构造 Teacher调用util.py中的get_teacher(cfg)根据cfg.teacher.task与cfg.teacher.datatype构建数据提供方组装 World 参数world_opt {turn_timeout: cfg.turn_timeout, teacher: teacher}将超时时间与 Teacher 一起打包通过SharedParlAITaskState(world_optworld_opt, onboarding_world_optworld_opt)传给 Mephisto Blueprintparlai_chat启动任务创建Operator(db)调用operator.validate_and_run_config(run_configcfg.mephisto, shared_stateshared_state)校验并运行任务最后以operator.wait_for_runs_then_shutdown(skip_inputTrue, log_ratecfg.monitoring_log_rate)挂起监听按monitoring_log_rate默认 30 秒的频率打印任务监控日志直到所有任务运行完毕。其中world_opt里的teacher就是 World 每轮对话中出题的数据源。get_teacher的实现util.py非常巧妙它直接用 ParlAI 自身的ParlaiParser解析config.teacher中的键值对生成opt然后实例化一个RepeatLabelAgent作为占位 agent再通过create_task(opt, agent).get_task_agent()返回真正用于产出段落的 Teacher。这意味着该任务复用了 ParlAI 完整的数据集生态——任何 ParlAI 注册的 Teacher 都可以作为段落来源而不仅仅是默认的 SQuAD。在教师端默认的段落来源是 SquadQATeacher从源码可以看到它继承自AbstractWrapperTeacher其注释明确写道Wrapper Teacher over SQuAD to get only the passage, and ignore the question——即只取 SQuAD 的段落文本、忽略原有的问题把提问的职责完全交给众包工人从而避免工人受到原数据集问题的影响、鼓励产出多样化的问题。核心配置参数详解关联文档明确指出该任务有几个最值得关注的参数。下表整理了这些参数的完整语义、默认值与源码依据参数作用默认值 / 说明源码依据mephisto.blueprint.task_description_file指向描述数据采集任务的 HTML 文件该描述会显示在聊天窗口的左侧面板中向工人说明任务要求默认指向task_config/task_description.html见 example.yamltask_description.htmlmephisto.blueprint.world_filePython 模块路径包含聊天 World 的类定义用于设定每轮对话的逻辑、任务何时结束、关闭时的动作等如果存在 onboarding World也定义在同一模块中默认指向${task_dir}/worlds.pyworlds.pymephisto.teacher.task从中抽取段落的 ParlAI 数据集默认squad:SquadQATeacher只取段落、忽略原问题run.pymephisto.teacher.datatype上述数据集中抽取段落所使用的数据折fold默认train训练集同上turn_timeout工人单轮回答的最大响应时间超时将被踢出任务默认 300 秒run.pymonitoring_log_rate任务监控日志的输出频率秒默认 30 秒run.py特别需要说明的是mephisto.blueprint.world_file的扩展价值文档指出——如果你希望编写自己的 World 类而不新建一个 Blueprint 类只需修改这个参数指向你的模块即可。这极大降低了自定义任务的成本沿用默认的parlai_chatBlueprint负责消息收发、前端交互等通用逻辑你只需要替换对话逻辑这一层。完整配置示例解读任务的默认配置位于 hydra_configs/conf/example.yaml一份可运行的完整配置如下#package _global_ defaults: - /mephisto/blueprint: parlai_chat - /mephisto/architect: local - /mephisto/provider: mock mephisto: blueprint: world_file: ${task_dir}/worlds.py task_description_file: ${task_dir}/task_config/task_description.html custom_source_bundle: ${task_dir}/webapp/build/bundle.js num_conversations: 1 task: allowed_concurrent: 1 assignment_duration_in_seconds: 600 max_num_concurrent_units: 0 # 0 means infinite; set this to a positive integer to limit concurrent HITs and prevent crashes maximum_units_per_worker: 3 task_name: parlai-qa-example task_title: Test ParlAI QA Data Collection Task task_description: This is a ParlAI data collection task. task_reward: 0.3 task_tags: dynamic,question answering,testing teacher: task: squad:SquadQATeacher datatype: train逐段解读这份配置defaults段声明了三层 Mephisto 组件的默认实现——blueprint: parlai_chat通用聊天蓝本提供聊天式任务的所有基础能力、architect: local本地沙箱架构即任务在本地模拟运行、provider: mock模拟工人提供方不需要真实 MTurk 账户即可测试。这也是默认情况下任务以本地沙箱 模拟工人模式运行的原因适合先完整验证任务流程。mephisto.blueprint段world_file与task_description_file分别对应上文两个核心参数custom_source_bundle指向前端打包产物webapp/build/bundle.jsnum_conversations: 1表示每个工人只需完成 1 轮对话即 1 个段落。mephisto.task段任务级参数——allowed_concurrent: 1限制并发任务数assignment_duration_in_seconds: 600设定单次任务的总时限600 秒max_num_concurrent_units: 0表示并发单元数无限注释明确提醒改为正整数可以限制并发 HIT 数量、防止系统崩溃maximum_units_per_worker: 3限制每个工人最多完成 3 个 HITtask_name/task_title/task_description/task_tags用于在 MTurk 上展示任务信息标题、描述、搜索标签task_reward: 0.3设定每份任务的报酬0.3 美元。teacher段对应mephisto.teacher.task与mephisto.teacher.datatype默认从 SQuAD 训练集抽取段落。此外run.py中还有两个任务专属的脚本级参数值得注意turn_timeout工人每轮回答超时默认 300 秒超时即被踢出与monitoring_log_rate监控日志输出频率默认 30 秒。前者在world_opt中被传给 World作为agent.act(timeout...)的超时上限。深入源码World 的两轮对话如何完成一次数据采集任务的灵魂在 worlds.py 中的QADataCollectionWorld类。它继承自 ParlAI 众包世界的通用基类CrowdTaskWorld定义于 parlai/crowdsourcing/utils/worlds.py类的 docstring 明确指出World for recording a turkers question and answer given a context——即记录工人针对给定上下文提出的问题与答案并假设上下文来自某个任务的随机段落如 SQuAD、CBT 等。整个数据采集流程被建模为一次parley()ParlAI 中一轮对话的术语中的两个阶段阶段一给出段落索要问题。当self.question为空时World 从 Teacher 取回一个段落passage self.teacher.act()把段落原文放入消息的passage字段act[passage] passage[text]同时以act[text] Please provide a question given the passage.提示工人针对段落提问随后调用self.agent.act(timeoutself.opt[turn_timeout])阻塞等待工人的问题输入超时上限即配置中的turn_timeout默认 300 秒。阶段二收到问题索要答案。当self.question已就绪而self.answer为空时World 发送Thanks. And what is the answer to your question?提示工人为自己的问题作答再次以同样的超时等待答案答案到手后设置self.episodeDone True任务随即结束。在阶段一中消息被封装为act {episode_done: False} act[id] self.__class__.collector_agent_id其中collector_agent_id QA Collector是采集方在对话中的身份标识而工人的agent_id则被设置为QA Agent见__init__。两个阶段的消息都经过validate()来自 parlai/core/worlds.py校验后再observe给工人保证消息格式合法。World 模块还提供了 Mephisto 所要求的两个工厂函数worlds.pymake_world(opt, agents)返回QADataCollectionWorld(opt, agents[0])单工人任务取第一个 agentget_world_params()返回{agent_count: 1}声明每个任务世界只涉及 1 名工人。基类赋予的能力数据保存与任务审核继承的CrowdTaskWorldparlai/crowdsourcing/utils/worlds.py为采集到的数据提供了两个重要钩子prep_save_data(workers)在任务收尾时准备待保存数据默认结构为{custom_data: ..., worker_data: {}}其中custom_data由get_custom_task_data()提供——子类可重写该方法把采集到的 acts如self.question、self.answer、self.context以字典形式返回用于后续质检与数据分析review_work()支持程序化审核工人工作——源码注释展示了四种操作approve_work()通过、reject_work()拒绝、pay_bonus(1000)发放奖金、block_worker()拉黑工人。若在任务运行期尽早执行审核可以免去事后人工复核的大量工作。这意味着你可以在自己的 World 子类中重写get_custom_task_data来按需定制保存格式例如同时保存context、question、answer以及工人行为日志。前端界面段落如何展示给工人任务的前端基于 React 构建入口为 webapp/src/main.js核心组件有两个Passage组件把段落渲染为只读的ResizableTextArea绿色背景、无边框、可缩放并绑定logSelection事件——当工人在段落中拖选文本时选中的文字会输出到控制台为后续实现选中段落片段作为答案锚点等高级交互预留了能力MainApp组件通过ChatApp渲染聊天主界面左侧面板renderSidePane由DefaultTaskDescription展示任务说明taskConfig.task_description即task_description_file指定的 HTML与段落右侧为问答对话流onMessagesChange中检测到消息携带passage字段时会自动把段落写入 React state 并渲染到左侧面板——这与 World 在消息中塞入act[passage]的设计前后呼应。而任务说明 HTMLtask_config/task_description.html本身支持任意 HTML 内容默认内容向工人说明你将为给定的段落提供一个问题及对应的答案并提醒如果任务说明需要更复杂的交互更稳妥的做法是复制 Mephisto 仓库中的mephisto/abstractions/blueprints/parlai_chat/目录、覆盖相关组件后重新构建再用mephisto.blueprint.custom_source_bundle参数指定新构建产物。运行任务从本地沙箱到线上发布该任务遵循 ParlAI 众包任务的通用运行范式完整指引见 parlai/crowdsourcing/README.md 与 docs/source/tutorial_crowdsourcing.md。核心要点如下环境准备需要先通过 Poetry 安装 Mephisto避免与 ParlAI 产生依赖冲突然后进入任务目录运行# 安装 Mephisto使用 poetry避免依赖冲突 curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python # 在项目根目录执行 poetry install启动任务直接调用任务入口脚本即可默认加载hydra_configs/conf/下的example.yamlpython parlai/crowdsourcing/tasks/qa_data_collection/run.py查看全部可调参数追加-c job标志可以列出所有可用参数并按包名分组mephisto.blueprint、mephisto.task、teacher等python parlai/crowdsourcing/tasks/qa_data_collection/run.py -c job指定自己的 YAML 配置文件最简便的方式是在任务的hydra_configs/conf/子目录下新建一个文件如my_params.yaml然后运行python parlai/crowdsourcing/tasks/qa_data_collection/run.py confmy_params如果 YAML 文件位于任务目录之外需要将其存放在${CUSTOM_FOLDER}/conf/my_params.yaml路径下并追加--config-dir ${CUSTOM_FOLDER}参数。命令行直接覆盖参数无需修改 YAML 即可临时调整参数。例如把报酬从 0.3 改成 0.6、或更换段落数据集python parlai/crowdsourcing/tasks/qa_data_collection/run.py \ mephisto.task.task_reward0.6 \ teacher.taskcbt:CBTTask \ teacher.datatypevalid也可以使用mephisto/blueprintmy_blueprint_type直接指定 blueprint 类型。发布线上任务MTurk默认在本地沙箱architect: localprovider: mock运行。要发布真实的 MTurk HIT需追加 requester 名称并切换架构python parlai/crowdsourcing/tasks/qa_data_collection/run.py \ mephisto.provider.requester_name${REQUESTER_NAME} \ mephisto/architectheroku其中${REQUESTER_NAME}是你在配置 Mephisto 时指定的 MTurk requester 名称。数据保存位置默认情况下Mephisto 会把数据保存在mephisto_root_dir/data/data/runs/NO_PROJECT/project_id/task_run_id/assignment_id/agent_id/data其中mephisto_root_dir默认为/scratch/${USER}/mephisto后续版本可能改名NO_PROJECT与data子目录agent_id可以通过 Mephisto SQLite3 数据库中的workers表映射回 MTurk 的worker_id便于按工人维度追溯数据质量。MTurk 任务信息参数发布到 MTurk 时以下参数直接影响 HIT 的展示与搜索parlai/crowdsourcing/README.mdmephisto.task.task_titleHIT 标题出现在搜索结果中、mephisto.task.task_descriptionHIT 详情描述、mephisto.task.task_tags逗号分隔的搜索标签、mturk.worker_blocklist_paths软屏蔽工人 ID 列表文件路径多个路径用逗号分隔屏蔽逻辑见 parlai/crowdsourcing/utils/mturk.py。自定义与扩展把读段落写问答改造成你的数据采集方案基于源码分析围绕该任务做定制主要有三条路径成本从低到高更换段落数据源只改teacher.task与teacher.datatype。例如换用 CBT、CNN/Daily Mail 或其他任何 ParlAI 已注册的段落类数据集即可让工人基于不同领域的文本产出问答对。得益于util.py中get_teacher对 ParlAIcreate_task的复用任何 ParlAI Teacher 都可无缝接入。修改对话逻辑而不新建 Blueprint复制worlds.py中QADataCollectionWorld的模式自定义parley()的轮次例如要求工人先写问题、再写答案、最后自我评分然后通过mephisto.blueprint.world_file指向你自己的模块。这是文档明确推荐的扩展方式——无需触碰 Mephisto 的 Blueprint 层。深度定制前端与保存格式重写webapp/src/main.js中的组件例如基于已有的段落选词事件实现高亮选中答案并重写get_custom_task_data()自定义保存的数据结构更复杂的场景可复制并修改 Mephisto 的parlai_chatBlueprint 目录后用mephisto.blueprint.custom_source_bundle指定构建产物。小结qa_data_collection是 ParlAI 众包任务体系中最小而完整的示例之一它以一段段落为输入、以工人的问答对为输出通过parlai_chatBlueprint 承载聊天交互、以QADataCollectionWorld定义两轮对话状态机、用SquadQATeacher等 ParlAI Teacher 提供段落。理解了它的参数体系task_description_file、world_file、teacher.task、teacher.datatype等与Teacher → World → 前端的数据流你就能以它为模板快速搭建面向任意领域、任意交互形式的众包数据生产线。【免费下载链接】ParlAIA framework for training and evaluating AI models on a variety of openly available dialogue datasets.项目地址: https://gitcode.com/gh_mirrors/pa/ParlAI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

RV1126B MIPI-CSI摄像头调试实战指南
RV1126B MIPI-CSI摄像头调试实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 14:12:21

APSIM 模型高级应用学习笔记|R 语言批量模拟|ClassicNG|参数优化|源码解析
APSIM 模型高级应用学习笔记|R 语言批量模拟|ClassicNG|参数优化|源码解析

APSIM模型有Classic和Next Generation两个系列模型,能模拟几十种农作物、牧草和树木的土壤-植物-大气过程,被广泛应用于精细农业、水肥管理、气候变化、粮食安全、土壤碳周转、环境影响、农业可持续性、农业生态等诸多与农业生产和科研有关的领域。APSIM… · 2026/9/24 14:12:21

Hugo Blox(blox-bootstrap)事件内容类型实战:event archetype 模板与 front matter 完整指南
Hugo Blox(blox-bootstrap)事件内容类型实战:event archetype 模板与 front matter 完整指南

静态站点前端开发工具 【免费下载链接】kit 🧱 Describe your site, AI builds it, you own it as Markdown. Snap together Tailwind blocks like Lego — landing pages, blogs, portfolios, docs & more. No AI slop. Free to deploy anywhere 👇… · 2026/9/24 14:12:14

C语言动态内存管理详解:从malloc到柔性数组
C语言动态内存管理详解:从malloc到柔性数组

1. 引言在C语言的学习过程中,内存管理始终是一个绕不开的核心话题。很多初学者在编写程序时,往往只关注逻辑是否正确,却忽略了内存的分配与释放。实际上,动态内存管理是C语言中极为重要的一环,它直接关系到程序的稳定性… · 2026/9/24 14:48:01

低空空域智能管控怎么做?物理AI+数字孪生完整技术架构解析
低空空域智能管控怎么做?物理AI+数字孪生完整技术架构解析

低空空域智能管控的最优物理AI方案,不应只是“无人机监控大屏”,而应该是一套能够完成空域数字化、实时感知、航线规划、仿真推演、风险预测、智能调度和应急处置的闭环系统。按照城市级数字孪生能力、空域数据融合、飞行器实时感知、仿真预测、多机协同… · 2026/9/24 14:47:47

G6 径向布局(Radial Layout)实战指南:同心圆分层、节点防重叠与聚类排序
G6 径向布局(Radial Layout)实战指南:同心圆分层、节点防重叠与聚类排序

G6 径向布局(Radial Layout)实战指南:同心圆分层、节点防重叠与聚类排序 【免费下载链接】G6 ♾ A Graph Visualization Framework in JavaScript. 项目地址: https://gitcode.com/gh_mirrors/g6/G6 径向布局(Radial Layou… · 2026/9/24 14:47:47

webnovel-writer 冲突设计实战:从一句核心冲突到整卷危机链的完整工作流
webnovel-writer 冲突设计实战:从一句核心冲突到整卷危机链的完整工作流

webnovel-writer 冲突设计实战:从一句核心冲突到整卷危机链的完整工作流 【免费下载链接】webnovel-writer 基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200 万字量级 连载创作。 项目地址: htt… · 2026/9/24 14:47:47

工业 AI 项目Sim‑to‑Real鸿沟,公共产业载体可以补齐哪些中间环节
工业 AI 项目Sim‑to‑Real鸿沟,公共产业载体可以补齐哪些中间环节

Sim‑to‑Real(仿真到现实鸿沟)是工业 AI、具身智能赛道老生常谈的技术难题。模型在仿真环境指标表现优秀,部署到真实工厂、真实硬件之后,受光照、摩擦、噪声、设备公差影响,效果出现明显跳水。对于中小 AI 团队、硬件… · 2026/9/24 14:47:47

LanceDB 清理操作统计:RemovalStats 接口深度解析(Node.js SDK)
LanceDB 清理操作统计:RemovalStats 接口深度解析(Node.js SDK)

向量数据库数据库人工智能后端 【免费下载链接】lancedb Developer-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less. 项目地址: https://gitcode.com/gh_mirrors/la/lancedb 点击查看 免费下载 LanceDB 的 Node.js&#xf… · 2026/9/24 14:47:41

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码