mcpField
D
dataset-curation

dataset-curation

github.com/wshobson数据与数据库41.9k2.8k 次安装2 周前更新
代码仓库

关于 dataset-curation

dataset-curation 指导微调数据集的格式选择、模板处理、打包、合成数据混合和数据卡编制,适用于准备训练数据的团队。它把格式验证和数据卡作为训练启动前的检查门槛。

主要功能

  1. 01按微调方法选择数据格式
  2. 02正确应用聊天模板与损失掩码
  3. 03打包样本并检查序列边界
  4. 04控制合成数据与真实数据比例
  5. 05编制含来源和配置的数据卡

适用场景

  1. 01将指令或对话整理为训练 JSONL
  2. 02准备偏好优化或提示词数据
  3. 03训练前检查打包序列与模板
  4. 04记录数据来源并验证数据集是否就绪

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wshobson/agents --skill dataset-curation

安装后在 Claude Code 中输入/dataset-curation确认已加载。

附带文件references/formats-and-templates.mdreferences/synthetic-data.md

详细介绍

数据集整理

本技能假定 finetuning-method-selection 已将流程引导至此 —— 下一步是准备 数据,而不是选择方法。以下内容涵盖:按目标方法进行格式 选择、最常见的静默训练失败背后的模板/打包 机制、在不导致模型崩溃的前提下混合合成数据的 规则,以及在训练启动前收尾 Phase 2 的数据集卡片。

输入: 原始示例(演示、偏好 判断或任务提示词)以及来自 finetuning-method-selection 的 路由决策。 输出格式: 一个已格式化、已打包、已验证的 JSONL 数据集,以及一份完整的数据集卡片 —— 即 /finetune 在启动 训练前检查的 Phase 2 产物。

格式选择

方法形态行数
SFT,单轮Instruct(instruction/response 或 prompt/completion)约 1,000+ 下限
SFT,多轮Conversation / ChatML messages 列表约 1,000+ 下限
DPO / ORPO偏好对(prompt、chosen、rejected)因方法而异,见 preference-optimization
KTO非配对(prompt、completion、label)因方法而异,见 preference-optimization
GRPO / RLVR仅提示词(prompt + 验证器元数据)因方法而异,见 grpo-rlvr-training
  • 约 1,000+ 行是 SFT 的推荐下限, 而非目标值。低于此值,少数低质量 或重复示例可能主导梯度; 高于此值,则质量重于数量 —— 一个更小但已验证、已去重的集合 胜过更大但嘈杂的集合。

  • 以下为 ChatML 形态,供参考;其余四种 格式外加一条 ShareGPT 转换说明见 references/formats-and-templates.md:

    {"messages": [
      {"role": "user", "content": "..."},
      {"role": "assistant", "content": "..."}
    ]}
    

Chat 模板与损失掩码

在 任何拼接或打包之前应用目标模型的 chat 模板,绝不要在其后 —— 先打包原始文本再对打包后的块套用模板 会破坏轮次边界,导致角色标记 相对于每个示例出现在错误位置。

  • 仅在助手回复上训练。 在系统/用户 轮次以及模板自身的角色标记上掩码 损失(labels 张量中为 -100)—— 只有 助手轮次的内容 token 参与损失计算。

  • 模板/分词器不匹配是最大的静默 失败模式之一。 模型在训练时使用一个 chat 模板,但在服务或评估时使用另一个,会性能退化而不报错。验证训练时 使用的同一模板字符串在 推理和评估时也被应用。

  • 将数据集保持为 messages 形态,让 训练器套用模板并掩码 (当前 TRL 中为 assistant_only_loss=True)—— 预渲染为扁平文本字段会破坏 掩码所需的轮次边界。完整代码示例: references/formats-and-templates.md。训练前 做健全性检查 —— 仅解码未掩码的位置; 预期只有助手文本:

    keep = batch["labels"][0] != -100
    print(tokenizer.decode(batch["input_ids"][0][keep]))
    

打包

不打包时,40–70% 的算力花在 填充上 —— 变长示例在固定序列长度下批处理,浪费了每个 示例长度与批次最大值之间的间隙。打包将多个示例 拼接为一个序列,直至最大长度,消除了大部分浪费。

  • 打包改变批次语义。 一个打包 序列可能包含多个原始示例,因此 一旦启用打包,“每 epoch 步数”以及任何以 示例数量为基准的 LR 调度都会变化 —— 需针对打包后序列数量 重新计算调度里程碑。

  • 强制要求:在扩展到完整运行前,解码并人工检查 5–10 个打包序列。 确认示例边界落在预期位置、 模板标记在每个子示例中完好无损,且 损失掩码在每个打包序列内仍仅针对助手。这不是可选项 —— 打包 bug 是静默的(损失曲线看起来正常),只会在 数小时后通过评估质量暴露:

    for seq in packed_dataset.select(range(10)):
        print(tokenizer.decode(seq["input_ids"]))
    

合成数据规则

  • 保留 ≥25% 真实数据作为崩溃防护。 在缺乏真实数据下限的情况下,用不断增加的 模型生成数据比例进行训练,会随着代际迭代 导致可测量的质量崩溃 — 25% 真实数据是守住底线的下限。 通用领域的回放样本 计入这一下限 — “真实”意味着“并非为该任务 由该学生模型生成”, 而不是“由人类撰写”。 一个在构造上完全合成的 数据集,可以仅通过回放 满足 ≥25% 的下限(参见 references/synthetic-data.md 中的 回放混合构造配方); 在数据集卡片中说明哪些样本 计为“真实”,而不是 让该下限在结构上 无法达成。
  • Magpie 和拒绝采样是 主力方法。 Magpie 从 模型自身的模板先验中提取提示词;拒绝采样 为每个提示词生成多个候选项,只保留 通过过滤器的那些。两者都优于朴素的 单次生成。
  • 有针对性的、感知学生模型的生成,其样本效率 比静态生成高 1.3–2 倍 — 针对 学生模型实际的失败模式,能用更少的 过滤后样本达到质量门槛。
  • 过滤后的典型接受率为 10–30%。 据此规划数据量 — 一个 10,000 行的 目标在 15% 接受率下需要约 65,000+ 次原始生成。
  • 生成方法排名、过滤器漏斗、回放 混合构造以及蒸馏模式: references/synthetic-data.md。

数据集卡片

每个进入训练的数据集都要有一张卡片 — 这是必需的 Phase 2 产物,/finetune 会在 启动前检查。卡片不是自由形式的文档; 它必须包含以下字段:

  • 来源 — 每一行来自哪里(真实 来源、合成方法,或两者兼有), 可追溯到 trace-to-training-data 的输出。
  • 计数 — 总行数,以及每个划分 (训练/评估/留出)的行数(如果有划分)。
  • 合成/真实比例 — 实测比例, 对照上文的 ≥25% 真实数据下限检查。
  • 去重方法 — 精确匹配、语义 (嵌入阈值),或两者兼有;参见 references/synthetic-data.md 中的过滤器 漏斗。
  • 使用的模板 — 确切的聊天模板 字符串/标识符,在推理和评估过程中保持一致 — 这正是将 eval-harness-first 运行 关联回检查点的依据。
  • 打包配置 — 是否使用了打包、 最大序列长度,以及确认已完成 上述 5–10 条序列的人工检查。

缺少这六个字段中任何一个的数据集都不 能进入 /finetune — 卡片是一道关卡,而不是 事后补写的总结。

Phase 2 退出检查清单

在移交给 /finetune 之前,请确认:

  1. 格式与方法匹配(见上表)。
  2. 模板在拼接之前应用。
  3. 损失仅对助手回合进行掩码。
  4. 解码并阅读了 5–10 条打包序列。
  5. 最终混合中真实数据 ≥25%。
  6. 数据集卡片完整 — 包含全部六个字段。

参考资料

  • references/formats-and-templates.md — 每种格式的 JSONL 示例、当前 TRL 掩码代码, 以及 ShareGPT 转换说明。
  • references/synthetic-data.md — 生成方法 排名、过滤器漏斗、回放混合构造, 以及教师→学生蒸馏模式。

相关技能:finetuning-method-selection 会路由到 此处;lora-qlora-recipes、vision-sft 和 preference-optimization 会使用本技能 产出的数据集;trace-to-training-data 是评分轨迹数据集的 来源;eval-harness-first 会对产出的检查点进行评分。

评论

支持 Markdown