尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

ParlAI MultiLIGHT 任务实战:基于 LIGHT 的多角色群聊数据格式、Teacher 体系与模型评测指南

发布时间:2026/9/24 13:58:31

资讯中心
01
ARTICLE

ParlAI MultiLIGHT 任务实战:基于 LIGHT 的多角色群聊数据格式、Teacher 体系与模型评测指南

ParlAI MultiLIGHT 任务实战:基于 LIGHT 的多角色群聊数据格式、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点击查看免费下载MultiLIGHT 是 ParlAI 中一个面向三方异步角色扮演对话的多角色聊天任务Multi-party chat数据源自 LIGHT 环境每个参与者被分配一个角色character进行扮演。本文将以 parlai/tasks/light_multiparty/README.md 为骨架结合 agents.py、build.py 等源码与测试数据系统讲解 MultiLIGHT 的数据格式、三类 Teacher 的用法与全部命令行参数、上下文构造原理、自定义评测指标以及配套发布模型的评测命令。读完本文你将能够直接运行parlai dd查看该数据集的任意 Teacher 输出理解__SILENCE__、__START__等特殊标记的语义并复现项目页中报告的困惑度PPL评测。MultiLIGHT 数据集的渲染示例projects/multilight/DatasetExample.png三个角色在 LIGHT 环境中进行带地点、人物设定的异步对话。一、任务背景从双人对话走向多角色群聊传统对话研究大多聚焦于两两双人对话而 MultiLIGHT 要解决的是多于两个说话者共处一个场景的日常群聊问题。其数据在 LIGHT 环境中采集每位参与者领到一个角色如海盗船上的船长、年轻水手围绕指定的地点与人物设定展开异步对话。任务列表 task_list.py 中对它的定义是idMultiLIGHTtasklight_multipartytagsAll、ChitChatdescriptionMulti-party async conversation between 3 role-playing characters3 个角色扮演人物之间的多方异步对话任务目录parlai/tasks/light_multiparty/下包含 4 类文件README.md任务说明、__init__.py、agents.pyTeacher 核心实现、test.py自动化测试以及test/目录下为每个 Teacher 生成的 train/valid/test 三段 YAML 样本数据。该任务对应的论文为 MultiLIGHT 一文项目页 projects/multilight/README.md 标注的 arXiv 编号为 2304.13835。论文指出多角色场景要求模型具备两项双人训练模型通常缺失的能力决定何时开口deciding when to talk基于多个角色设定生成连贯话语producing coherent utterances grounded on multiple characters。MultiLIGHT 数据集的发布正是为了在群聊场景下带来显著的模型能力提升。二、数据获取与底层格式2.1 自动下载与版本校验与多数 ParlAI 任务一致数据由 Teacher 在初始化时自动触发下载逻辑集中在 build.py数据集名称DATASET_NAME parlai_multilightbuild.py数据包parlai_multilight.tar.gz并带有 SHA1 校验值cbc20e4fa7a551c0efec4a4129e75335d3f3586797d6f767e320403079f4a6b2build.py确保下载内容完整可信数据版本1.0通过build_data.built(dpath, version)判断是否需要重新构建若检测到旧版本会先清除再重新下载build.py。因此你无需手动下载任何文件直接运行任务命令即可数据会落盘到--datapath默认data/下的parlai_multilight/目录。2.2 原始 JSONL 数据与字段结构Teacher 读取的原始数据是 JSONL 文件每行一个完整对话 episode路径为datapath/parlai_multilight/{fold}.jsonl其中 fold 由DatatypeHelper.fold(opt[datatype])归一化得到如train、valid、test见 agents.py。每个对话 episode 的核心字段如下可从测试样本 light_multiparty_train.yml 中直接观察到字段含义characters参与对话的角色名列表例如[young boy, boat captain, captain]messages[]按时间顺序排列的话语序列每条含speaker、timestamp等speaker/speaker_id当前话语的说话者姓名与其在characters中的 1-based 序号location场景地点name如 Pirate Ship与description场景描述文本personas[]每个角色的name与其persona角色设定描述quality_tier该 episode 的数据质量层级1 高 / 2 低workers_quality_check[]每个说话者对应的 worker 质量层级Teacher 会据此为每条话语计算speaker_worker_tier2.3 数据质量分级episode 与 speaker 双维度过滤为了兼顾数据规模与质量MultiLIGHT 在两个粒度上标注了质量层级见 agents.py 的参数说明episode 层级--episode-quality-tiers控制哪些对话作为训练样本speaker 层级--speaker-quality-tiers控制哪些说话者产生的话语参与训练。可用的层级为1高质量与2低质量两者默认值均为1,2即默认全量使用。注意只有训练集划分带有质量层级标注valid与test划分仅包含 tier 1 数据。_get_data_quality_tiers()agents.py会校验传入值非 1/2 的层级直接触发断言错误。在setup_data中episode 层级过滤在对话级别执行conv[quality_tier] not in self.episode_quality_tiers则跳过而 speaker 层级过滤在 utterance 级别执行通过conv[workers_quality_check][speaker_id - 1][worker_tier]取到当前说话者的质量层级见 agents.py 与 agents.py。三、Teacher 体系三种任务设置的实现任务目录下 agents.py 定义了完整的 Teacher 类层级。项目页 projects/multilight/README.md 明确指出本任务提供三种类型的 Teacher两种聚焦话语/对话内容一种聚焦预测下一说话者。3.1 Teacher 类继承关系DialogTeacher └── BaseTeacher抽象基类封装公共逻辑与全部参数 ├── AllSpeakersTeacher # 所有角色的全部话语 │ ├── SpeakerPredictionTeacher # 预测下一说话者 │ └── DefaultTeacher # 默认入口 AllSpeakersTeacher └── SingleSpeakerTeacher抽象 ├── FirstSpeakerTeacher # 角色 0索引 0 ├── SecondSpeakerTeacher # 角色 1索引 1 └── ThirdSpeakerTeacher # 角色 2索引 2BaseTeacher在__init__中完成数据构建build(opt)、fold 归一化与 datafile 拼接并一次性读取全部参数缓存为实例属性随后调用DialogTeacher.__init__agents.py。它本身是抽象类源码注释明确标注Do NOT use directly!。3.2 AllSpeakersTeacher训练模型生成任意角色的下一句话AllSpeakersTeacheragents.py的任务设置是给定截至当前轮次的历史上下文含说话者标记预测下一条话语而不管下一轮由哪个角色开口。其id为multilight_dialogue_:all_speakers。它把setup_data产出的消息组装为text由get_extra_context_before可选的地点/人物设定full_context历史话语get_extra_context_after可选的时间步/当前说话者提示用--utterance-delimiter拼接而成agents.py。同时按speaker_worker_tier过滤掉质量不达标的话语样本。运行示例来自项目页parlai dd即 ParlAI 的 display_data 脚本对应 display_data.py# 展示全部角色话语 Teacher并在上下文中加入地点与人物设定 parlai dd -t light_multiparty --add-location-to-context true --add-personas-to-context true观察测试样本 light_multiparty_train.yml 可以看到text随轮次逐句累积例如text: captain: Greetings to both of you. young boy: Hi Captains! It is so nice out on the ocean today! boat captain: Well I imagine this ship holds many secrets! labels: - young boy: It does! I saw a ghost on it last night!每条样本都携带location、personas、speaker、speaker_id、timestep、quality_tier等字段供模型或上层代码使用。该划分的规模可在 yml 文件尾部看到num_episodes: 293264、num_examples: 293264每个 episode 对应一个训练样本。3.3 SingleSpeakerTeacher固定扮演单一角色 静默标记SingleSpeakerTeacheragents.py只让模型扮演某一个固定角色First/Second/Third 分别对应角色索引 0/1/2回答若轮到该角色发言他会说什么。当该轮实际由其他角色发言时标签变为静默标记__SILENCE__从而让模型同时学习何时不开口。这是 MultiLIGHT 最独特的设置。关键实现点is_this_speaker_turn()通过get_utterance_speaker_id()判断当前话语的说话者是否为指定角色agents.py非本角色轮次时generate_silence_label()生成形如young boy: __SILENCE__的标签开启--include-speaker-in-label时带说话者前缀见 agents.py上下文只保留自该角色上一轮发言以来的增量片段full_context[(last_speaker_trun 1):]避免把该角色自己的上一句话重复喂入agents.py每个 episode 的第一条样本仍会附带地点/人物等 extra contextagents.py后续轮次则只给增量上下文该 Teacher 特有的temp_history字段存放时间步 当前说话者提示用于在推理时追加提示而不污染完整历史agents.py。运行示例# 让模型扮演第一个角色索引 0学习何时发言、何时沉默 parlai dd -t light_multiparty:FirstSpeakerTeacher --add-location-to-context true --add-personas-to-context true从测试样本 light_multiparty_FirstSpeakerTeacher_train.yml 可以看到典型的标签交替# 第一轮轮到 young boy 发言 labels: - young boy: Hi Captains! It is so nice out on the ocean today! episode_done: false # 第二轮young boy 没说话标签为静默标记 labels: - young boy: __SILENCE__注意这类 Teacher 的episode_done通常为false因为同一对话的多轮会作为连续样本流式产出直到对话结束才标记true。静默样本的随机丢弃dropout--silence-token-dropout可在训练时按概率丢弃静默样本缓解沉默标签占比过高导致的类别不平衡。默认值为0保留全部静默样本取1则完全丢弃源码在__init__中断言其必须落在[0, 1]区间agents.py。若因 dropout 跳过了某 episode 的开头Teacher 会通过episode_needs_reset标志在下一轮重置 episode 边界agents.py保证数据流自洽。3.4 SpeakerPredictionTeacher预测下一轮由谁开口SpeakerPredictionTeacheragents.py将任务重构为分类问题给定历史上下文预测下一个说话者是谁。其id为SpeakerPrediction。实现要点标签被改写为说话者名字候选集label_candidates为全部角色名get_speaker_names即各persona[name]见 agents.py开启--include-speaker-in-label时会先把标签中的说话者前缀剥离并断言前缀与实际 speaker 一致确保数据格式正确再取纯话语文本作为当前轮内容_label_textagents.py新增参数--add-current-turn默认False为true时把当前轮的话语内容也追加到上下文末尾让模型在看到这句话的前提下预测其说话者agents.py。运行示例# 预测下一轮说话者候选为全部角色名 parlai dd -t light_multiparty:SpeakerPredictionTeacher --add-location-to-context true --add-personas-to-context true四、Teacher 命令行参数全解以下参数全部由 agents.py 中add_cmdline_args声明按所属 Teacher 分组列出。除特殊标注外均为BaseTeacher通用参数参数类型默认值说明--episode-quality-tiersstr1,2参与训练的 episode 质量层级1 高 / 2 低逗号分隔valid/test 仅有 tier 1--speaker-quality-tiersstr1,2参与训练的说话者质量层级同上--utterance-delimiterstr\n上下文中每条话语之间的分隔符如A: Hello\nB: Hi there--use-start-tokenboolFalse是否在对话开头放置开始标记并把第一句话也作为训练样本--start-tokenstr__START__对话开始标记的具体 token--include-speaker-in-labelboolTrue标签是否带说话者前缀如Rachel: Hi而非Hi--include-speaker-in-contextboolTrue上下文是否带说话者前缀如Rachel: Hi而非Hi--add-speaker-to-context-endboolFalse是否把当前说话者追加到上下文末尾源码 help 文本写作 Defaults to True实际默认值为False以代码为准--speaker-token-delimiterstr:说话者名称与话语内容之间的分隔符--include-timestep-in-contextboolFalse是否在每条历史话语前附带相对时间步--add-current-timestep-to-contextboolFalse是否在上下文末尾追加当前轮的时间步--add-personas-to-contextboolFalse是否把全部角色的扁平化人物设定前置到上下文--add-location-to-contextboolFalse是否把场景地点描述前置到上下文以下为SpeakerPredictionTeacher专属参数agents.py参数类型默认值说明--add-current-turnboolFalse是否把当前轮话语文本也包含进输入上下文以下为SingleSpeakerTeacher系专属参数agents.py参数类型默认值说明--silence-tokenstr__SILENCE__表示所选角色本轮未发言的静默标记--silence-token-dropoutfloat0静默样本丢弃概率取值范围[0,1]0全部保留1全部丢弃五、上下文构造细节人物、地点、时间步与说话者标记5.1 扁平化标记Persona / Locationflatten_personas与flatten_location把结构化的人物设定与地点描述转换为带起止标记的纯文本agents.py__personas__ young boy: I am the son of the ships captain. ... boat captain: I am the captain of the worlds biggest boat. ... __end-personas____location__ Pirate Ship: A majestic, shimmering, black pirate ship sits upon the water. ... __end-location__这两段文本通过get_extra_context_before前置到对话历史之前agents.py仅在对应开关--add-personas-to-context/--add-location-to-context为真时启用。注意项目页中的示例命令均显式开启这两个开关这是与论文一致的推荐配置——模型需要人物与场景信息才能生成 grounded 的话语。5.2 相对时间步原始 JSONL 中的timestamp是绝对时间戳Teacher 会以每条对话第一条话语的时间为基准将其转换为HH:MM:SS的相对时间_format_timestepagents.py例如测试样本中的timestep: 00:00:03、00:00:22。当--include-timestep-in-context开启时说话者提示变为形如speaker ts :的格式get_speaker_promptagents.py--add-current-timestep-to-context则把当前轮的时间步追加到上下文末尾get_extra_context_afteragents.py。5.3 对话开始处理当--use-start-token为True时每条对话在上下文最前端放置__START__并把第一句话也作为一条训练样本否则第一句话只被当作后续轮次的上下文而跳过对应逻辑见 agents.py。六、自定义评测指标MultiLIGHT 的 Teacher 通过custom_evaluation提供了任务专属指标无需额外脚本即可在评测时自动统计AllSpeakersTeacheragents.py仅在--include-speaker-in-label开启时生效speaker_acc预测的说话者前缀与真实说话者的精确匹配准确率ExactMatchMetricspeech_f1剔除说话者前缀后话语正文部分的 unigram F1F1Metric。模型输出按--speaker-token-delimiter默认为:切分前半段视为预测的说话者后半段视为话语正文若输出中没有分隔符则记为__NO_SPEAKER__以判定说话者预测错误。SingleSpeakerTeacheragents.pyself_speaker_acc模型该说话/该沉默二分类是否正确——通过判断输出文本中是否出现--silence-token实现self_speaker_precision/self_speaker_recall/self_speaker_f1同一二分类任务经ConfusionMatrixMetric.compute_metrics见 torch_classifier_agent.py计算出的混淆矩阵派生指标以True即应当发言为正类。七、预训练模型与评测命令项目页 projects/multilight/README.md 发布了三个配套模型模型路径zoo说明zoo:multilight/utterance_3B/model最优纯话语模型在 LIGHT、LIGHT Wild 与 MultiLIGHT 上多任务训练约 3B 参数论文人类评测所用zoo:multilight/utterance_400m/model同配置的小规模纯话语模型约 400M 参数zoo:multilight/speaker/model预测下一说话者的专用模型论文人类评测所用评测命令数据集自动下载无需额外准备parlai eval_model -mf zoo:multilight/utterance_3B/model \ --task light_multiparty \ --add-location-to-context true \ --add-personas-to-context true两个话语模型在全部角色 Teacher 上的困惑度PPL如下数据来自项目页话语模型PPLzoo:multilight/utterance_3B/model13.25zoo:multilight/utterance_400m/model15.08注意评测时务必保持与训练一致的上下文开关--add-location-to-context、--add-personas-to-context因为模型已针对该输入格式微调若关闭这些开关输入分布变化会直接影响困惑度结果。八、自动化测试验证任务目录下的 test.py 基于 ParlAI 的AutoTeacherTest工具见 testing.py对 6 个 Teacher 做了端到端回归测试class TestDefaultTeacher(AutoTeacherTest): task light_multiparty class TestSpeakerPredictionTeacher(AutoTeacherTest): task light_multiparty:SpeakerPredictionTeacher class TestFirstSpeakerTeacher(AutoTeacherTest): task light_multiparty:FirstSpeakerTeacher class TestSecondSpeakerTeacher(AutoTeacherTest): task light_multiparty:SecondSpeakerTeacher class TestThirdSpeakerTeacher(AutoTeacherTest): task light_multiparty:ThirdSpeakerTeacher运行方式python -m pytest tests/tasks/ -k light_multiparty -q该测试会自动校验 Teacher 产出的消息字段text、labels、episode_done、id等与test/目录下 YAML 快照的一致性。test/中为每个 Teacher 生成的*_train.yml、*_valid.yml、*_test.yml既是回归基准也是理解各类 Teacher 输出格式最直接的样例例如 light_multiparty_FirstSpeakerTeacher_train.yml 展示了__SILENCE__标签light_multiparty_train.yml 展示了全角色话语的累积式上下文。测试命名上TestSpeakersTeacher与TestSpeakerPredictionTeacher指向同一任务字符串从源码结构看这属于测试代码中的小笔误不影响各 Teacher 本身的覆盖。结语MultiLIGHT 是 ParlAI 任务库中少数专门面向多角色群聊的数据集任务AllSpeakersTeacher覆盖生成任意角色下一句SingleSpeakerTeacherFirst/Second/Third覆盖固定扮演某角色并学会沉默SpeakerPredictionTeacher覆盖预测下一说话者。配合--add-location-to-context、--add-personas-to-context、--include-timestep-in-context等开关你可以灵活组合出多种上下文形态--episode-quality-tiers/--speaker-quality-tiers则提供了数据质量控制手段。若需深入自定义直接阅读 agents.py 并参考 projects/multilight/README.md 中发布的模型与评测配置即可。赞分享NLP人工智能深度学习【免费下载链接】ParlAIA framework for training and evaluating AI models on a variety of openly available dialogue datasets.项目地址https://gitcode.com/gh_mirrors/pa/ParlAI点击查看免费下载相关推荐React Router v7 集成 React Scan 完全指南两种接入方式与源码级原理解析React Router v7 集成 React Scan 完全指南两种接入方式与源码级原理解析 本篇指南讲解如何在 React Router v7 框架下将NLP人工智能深度学习SpacetimeDB 事务与原子性详解Reducer 自动事务、嵌套调用与手动事务管理SpacetimeDB 事务与原子性详解Reducer 自动事务、嵌套调用与手动事务管理 导读 本文围绕 SpacetimeDB 官方文档 TransactNLP人工智能深度学习ParlAI 多会话长期对话MSC任务实战指南数据集、Teacher 参数、长上下文模型与评测ParlAI 多会话长期对话MSC任务实战指南数据集、Teacher 参数、长上下文模型与评测 导读 多会话长期对话Multi Session ChatNLP人工智能深度学习上一篇如何高效封装企业级组件Geeker-Admin组件库设计指南下一篇Vue.js Modal配置与属性详解掌握30个自定义选项的高级用法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。