十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ParlAI JsonFile 任务:零代码加载自定义 JSON 对话数据并快速训练评估

ParlAI JsonFile 任务:零代码加载自定义 JSON 对话数据并快速训练评估 NLP人工智能深度学习【免费下载链接】ParlAIA framework for training and evaluating AI models on a variety of openly available dialogue datasets.项目地址https://gitcode.com/gh_mirrors/pa/ParlAI点击查看免费下载导读ParlAI 内置的jsonfile任务Task允许你在不编写任何额外代码的情况下把任意文本型数据集对话、问答等放入一个遵循特定格式的 JSON/JSONL 文件直接交给 ParlAI 的展示、训练、评估脚本使用。本文将以 parlai/tasks/jsonfile/README.md 为主线深入讲解该任务的数据格式约定、命令行参数、三种标签label抽取模式并结合 parlai/tasks/jsonfile/agents.py、parlai/core/teachers.py 与 parlai/utils/conversations.py 的源码实现让你读完即可动手把自有数据集接入 ParlAI 流水线。JsonFile 任务是什么ParlAI 官方对jsonfile任务的定位非常明确只要你有一个可以放进文本文件里的对话dialogue、问答QA或其他纯文本数据集并且文件格式符合本文将要描述的约定就可以直接从中加载无需编写任何额外代码。这条零代码接入路径对以下场景特别有用快速验证一个新模型的训练流程但还没有为数据写专门的 Teacher手工构造几条样例数据做冒烟测试smoke test把从其他渠道导出的对话日志直接喂给 ParlAI 进行展示或评估在 parlai/scripts/display_data.py、parlai/scripts/train_model.py、parlai/scripts/eval_model.py 之间共享同一份实验数据无需为每种用途准备不同格式。从源码结构看jsonfile是 ParlAI 任务体系中最薄的一层封装它本质上只是把用户指定的文件路径透传给 ParlAI 核心的ConversationTeacher由后者完成 JSON 解析、轮次切分与标签构造详见 parlai/tasks/jsonfile/agents.py。一行命令快速上手README 给出了最直接的使用方式python parlai/scripts/display_data.py -t jsonfile --jsonfile-datapath /tmp/data.json其中-t jsonfile指定使用jsonfile任务。ParlAI 会把任务字符串解析到 parlai/tasks/jsonfile/agents.py 中注册的DefaultTeacher--jsonfile-datapath短参数-jfdp指向你的数据文件是必填参数。运行后ParlAI 会按训练train、验证valid、测试test三种 datatype 分别展示解析出的[text]与[labels]字段方便你立刻检查数据是否被正确切分。数据文件格式的官方参考示例位于本任务目录下的 example_data.json{ dialog: [ [ {id: partner1, text: hello!}, {id: partner2, text: hi back!}, {id: partner1, text: whats your fave color?}, {id: partner2, text: salmon is my fave!}, {id: partner1, text: nice! do you like eating salmon too?}, {id: partner2, text: yo when its sushi!} ] ]}数据格式详解Conversations 格式jsonfile直接复用 ParlAI 的Conversations 格式也称 Conversation 格式该格式的完整规范定义在核心 Teacher parlai/core/teachers.py 与工具类 parlai/utils/conversations.py 中。要点如下1. 每个对话必须独占一行文件按行读取每个对话实例episode必须是一行合法 JSON。源码中Conversations._load_raw逐行读取并json.loads解析见 parlai/utils/conversations.py所以如果数据被格式化为多行即使只是美化排版也无法加载。这一点在ConversationTeacher的 docstring 中被反复强调If the data is not on one line per dialogue, it will not load.2. 顶层结构与 dialog 数组每一行的 JSON 对象包含一个dialog键其值为数组的数组外层数组的每个元素代表一个 act pair一轮你来我往的回合对内层数组的每个元素是一个 turn 对象至少包含id说话人标识与text话语内容两个字段。例如一行可以包含多个回合对{ dialog: [ [{id: modelx, text: X1}, {id: modely, text: Y1}], [{id: modelx, text: X2}, {id: modely, text: Y2}] ] }注意上面的写法是美化后的展示形式实际文件中必须压缩成一行README 同目录的 example_data.json 给出了合法的一行格式。Conversation._build_turns会遍历episode[dialog]把每个 act pair 中的 turn 依次展开为扁平轮次列表见 parlai/utils/conversations.py。3. context 字段的处理顶层还可以携带context、metadata_path等附加信息但jsonfile场景下这些会被忽略或警告若顶层存在context键加载时会产生一条 warningAt least one of these conversations contains a context, which is not being used若dialog内部存在id为context的 turn也会产生 warning 并直接丢弃该轮见 parlai/core/teachers.py。因此最简单可靠的自有数据格式就是只有dialog键、每个 turn 只有id与text。三个核心命令行参数JsonTeacher.add_cmdline_args定义了三个参数见 parlai/tasks/jsonfile/agents.py参数短参数类型默认值说明--jsonfile-datapath-jfdpstr无必填数据文件路径未指定时JsonTeacher.__init__会直接抛出RuntimeError(jsonfile_datapath not specified)--jsonfile-datatype-extension-jfdtboolFalse若为True自动按 datatype 追加_train.jsonl/_valid.jsonl/_test.jsonl后缀--label-turns无strsecondspeaker用哪一方的发言作为标签取值firstspeaker/secondspeaker/bothdatatype 扩展名的使用场景当你的数据集按照 ParlAI 惯例拆分为三份文件data_train.jsonl、data_valid.jsonl、data_test.jsonl时可以这样用python parlai/scripts/display_data.py -t jsonfile \ --jsonfile-datapath /tmp/data \ --jsonfile-datatype-extension TrueJsonTeacher.__init__中对应的逻辑为datafile _ opt[datatype].split(:)[0] .jsonl见 parlai/tasks/jsonfile/agents.py即取 datatype 中:之前的部分如train、train:ordered都会得到train拼上.jsonl后缀。这与 ParlAI 其他任务如 fromfile、convai2按 datatype 分文件的惯例保持一致。label-turns三种标签抽取模式--label-turns是决定哪些轮次当作输入、哪些轮次当作标签的关键参数其语义继承自核心的ConversationTeacher见 parlai/core/teachers.py。以一段三回合对话为例{ dialog: [ [{id:modelx,text:X1},{id:modely,text:Y1},{id:modelx,text:X2},{id:modely,text:Y2},{id:modelx,text:X3},{id:modely,text:Y3}] ] }secondspeaker默认使用偶数位第二位发言者的话语作为标签生成样例X1 Y1、X2 Y2、X3 Y3组成一个 episode。默认不会生成Y1 X2、Y2 X3这类反向样例。firstspeaker使用奇数位第一位发言者的话语作为标签。为了让第一个回合也有可用的输入ConversationTeacher.setup_data会在轮次列表头部插入一个特殊占位轮次{text: __SILENCE__}见 parlai/core/teachers.py于是生成__SILENCE__ X1、Y1 X2、Y2 X3。both对同一段对话同时生成两套 episode先按firstspeaker规则生成一套再按secondspeaker规则生成一套数据量翻倍适合需要最大化利用对话数据的场景。这一行为在 tests/test_teachers.py 中有直接的单元测试验证测试label_turnsfirstspeaker时第一轮[text]必须是__SILENCE__、[labels]必须是Hi.。底层实现原理jsonfile的类继承链为JsonTeacher ── ConversationTeacher ── DialogTeacher ── FixedDialogTeacher ── Teacher其中JsonTeacher只做三件事见 parlai/tasks/jsonfile/agents.py检查并读取jsonfile_datapath缺失即报错若开启 datatype 扩展名拼出_train.jsonl等实际文件路径把结果写入opt[conversationteacher_datafile]交给父类ConversationTeacher处理并将任务显示名self.id设置为数据文件所在文件夹名 文件名。ConversationTeacher继承自DialogTeacher后者负责把数据包装为 ParlAI 的 Message 动作表action table并交给 Agent 消费见 parlai/core/teachers.py。解析流程的关键调用链是Conversations(path) # parlai/utils/conversations.py逐行加载 JSONL └─ Conversation(episode) # 展开 dialog 数组为轮次列表 └─ setup_data() # ConversationTeacher 中按 label_turns 切分 text/labels └─ DialogTeacher # 生成 Message 动作流支持 train/valid/test 与 :stream关于数据流streamingDialogTeacher会根据 datatype 是否包含:stream选择StreamDialogData或DialogData两种数据容器见 parlai/core/teachers.py因此jsonfile天然支持 ParlAI 的流式读取-dt train:stream可以避免一次性把大文件载入内存。注意:stream模式下 shuffle 会被关闭以保证顺序性。解析容错与限制ConversationTeacher对数据内容较为宽容——即使某条 turn 缺少text字段也只会在展示时出现text: Nonetests/test_teachers.py 专门覆盖了该情况不会崩溃。但需注意每个对话必须在一行内完成多行即加载失败dialog中每个 turn 至少应包含id与text不要在 turn 里写labels/eval_labels等字段——标签由label_turns自动构造手工指定的字段不会参与ParlaiDialogTeacher等教师类对eval_labels字段还有显式报错逻辑见 parlai/core/teachers.py虽然jsonfile走的是 Conversations 路径但保持数据纯净仍是推荐做法。完整实战从 JSON 数据到模型训练下面给出一个端到端示例把自有数据接入 ParlAI 的训练流程。第 1 步准备数据文件/tmp/my_data/data.jsonl每行一个对话{dialog: [[{id:user,text:你好},{id:bot,text:你好呀}],[{id:user,text:今天天气如何},{id:bot,text:天气很好适合出门。}]]} {dialog: [[{id:user,text:推荐一部电影},{id:bot,text:《星际穿越》很不错。}]]}第 2 步展示数据确认切分正确python parlai/scripts/display_data.py -t jsonfile --jsonfile-datapath /tmp/my_data/data.jsonl第 3 步训练模型可直接复用 ParlAI 自带的 transformer/generator 预设例如transformer/generatorpython parlai/scripts/train_model.py -t jsonfile \ --jsonfile-datapath /tmp/my_data/data.jsonl \ -m transformer/generator \ --model-file /tmp/my_model \ --batchsize 4 --num-epochs 5第 4 步交互体验或批量评估# 交互 python parlai/scripts/interactive.py -t jsonfile --jsonfile-datapath /tmp/my_data/data.jsonl -mf /tmp/my_model # 评估 python parlai/scripts/eval_model.py -t jsonfile --jsonfile-datapath /tmp/my_data/data.jsonl -mf /tmp/my_model如果你的数据按train/valid/test拆分成三份也可以配合--jsonfile-datatype-extension True让 ParlAI 按 datatype 自动选择对应文件。测试与质量保障jsonfile的行为由核心测试 tests/test_teachers.py 覆盖包括正常格式数据可被display_data正确解析test_good等用例turn 缺少text时展示为None而非崩溃test_no_textfirstspeaker标签模式下首轮输入为__SILENCE__test_firstspeaker_label。此外tests/test_zootasks.py 在遍历 zoo 模型任务时显式将jsonfile列入忽略名单原因很明确jsonfile没有内置数据集必须由用户在运行时通过--jsonfile-datapath指定外部文件因此不适合作为可独立复现的 zoo 任务——这恰恰印证了它轻量即插即用的设计定位。与相邻任务的取舍在 ParlAI 任务目录下还有几个与jsonfile定位相近的任务可作对比fromfile从 ParlAI 自有文本格式text/labels逐行标记加载数据适合已有 ParlAI 格式文件的情况wrapper对已有 Teacher 做包装适合需要在现有任务上叠加 mutator 或改写字段的场景jsonfile直接消费Conversations 格式的 JSON/JSONL格式更贴近真实对话日志天然支持多说话人、多回合适合数据就是一组对话记录的场景。如果你的数据恰好是 ParlAI 对话日志例如通过Conversations.save_conversations写入的.jsonl见 parlai/utils/conversations.py那么jsonfile与它天然兼容可以直接作为--jsonfile-datapath传入。小结jsonfile是 ParlAI 中最直接的数据接入快捷通道一条-t jsonfile --jsonfile-datapath 文件命令即可把 Conversations 格式的对话数据送入展示、训练与评估流程核心参数只有三个jsonfile-datapath、jsonfile-datatype-extension、label-turns且底层完全复用成熟稳定的ConversationTeacher与Conversations工具链。无论是快速原型验证还是把外部对话日志接入模型流水线它都能帮你省去编写 Teacher 的成本把精力集中在模型本身。赞分享NLP人工智能深度学习【免费下载链接】ParlAIA framework for training and evaluating AI models on a variety of openly available dialogue datasets.项目地址https://gitcode.com/gh_mirrors/pa/ParlAI点击查看免费下载相关推荐Xabber消息存档与历史记录完整备份方案Xabber消息存档与历史记录完整备份方案 Xabber作为一款开源的Android XMPP客户端提供了完善的消息存档与历史记录管理功能。本文将详细介绍如即时通讯移动开发ParlAI FromFile 任务零代码加载自定义文本数据集完整指南ParlAI FromFile 任务零代码加载自定义文本数据集完整指南 导读 ParlAI 框架内置了 fromfile 任务它允许你绕过为每个数据集编写NLP人工智能深度学习ParlAI Dialogue_QE 任务实战基于人机对话质量标注训练对话级评估指标ParlAI Dialogue_QE 任务实战基于人机对话质量标注训练对话级评估指标 导读 Dialogue_QE 是 ParlAI 内置的一个对话质量评估NLP人工智能深度学习上一篇如何用XXMI启动器一站式管理多款二次元游戏模组下一篇终极指南一站式管理6大二次元游戏模组XXMI启动器完整解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表