本文属于《Ai大模型训练教程》系列,详解如何用大模型生成训练数据:自指令扩展任务、自蒸馏生成多候选答案、规则过滤与LLM打分提升质量,并给出训练/评测隔离、去重与语义检索等数据污染防控方案,提供可直接落地的数据生成流水线与执行清单。
为什么要用大模型生成训练数据(以及它的边界)
在“Ai大模型训练教程”系列中,数据始终是训练效果的上限。现实项目里,高质量人工标注数据昂贵、迭代慢、覆盖不全,尤其在对话、工具调用、企业知识问答、代码助手等场景,需求变化快,靠纯人工采集很难跟上。
用大模型生成训练数据的核心价值在于:
- 快速扩容:将少量种子任务扩展为大量多样化样本。
- 覆盖长尾:补齐罕见问题、边缘指令、复杂组合任务。
- 可控合成:按难度、风格、格式、领域进行定向生成。
但边界也非常清晰:合成数据可能带来幻觉、偏见、模板化、泄漏、重复,甚至造成训练后的模型“学会错误”。因此本文聚焦更实操的四件事:
1) 自指令(Self-Instruct)如何生成多样任务
2) 自蒸馏(Self-Distillation)如何把强模型能力转移到目标模型
3) 过滤与打分如何保证数据“可训练”
4) 数据污染如何识别与防控,避免评测失真与训练投毒
端到端流程总览(可直接照搬落地)
建议把“用大模型造数据”做成一条可重复跑的流水线:
- 定义目标能力与数据规格:任务类型、输入输出格式、拒答策略、工具调用协议等
- 准备种子集:少量高质量、覆盖面尽可能广的指令/问题
- 自指令扩展任务池:让大模型生成更多“指令/问题”与场景设定
- 生成答案(可多样采样):用强模型生成多版本回答/推理/工具调用轨迹
- 过滤与打分:规则过滤 + LLM-as-a-judge + 质量分类器
- 去重与污染检测:近重复、模板化、基准泄漏、PII/敏感信息
- 构建训练集与配比:按难度、领域、长度、任务类型分桶采样
- 训练与回归评测:离线基准 + 在线 A/B + 失败案例回流
下文逐段拆开讲,尽量提供可操作的提示词、规则与示例。
自指令(Self-Instruct):从少量种子生成大量“任务/指令”
自指令的思路是:先让模型生成“问题/指令”,再让模型回答。关键在于:生成的指令必须“可执行、可评估、足够多样”,否则你得到的只是大量同质数据。
1) 种子集怎么选:少但要“代表性强”
建议 50~300 条起步,覆盖:
- 任务形态:问答、总结、改写、对比、推理、表格抽取、代码、工具调用
- 难度梯度:简单事实 → 多约束指令 → 多步推理/规划
- 输出格式:JSON、Markdown、要点列表、函数签名、SQL 等
- 风格约束:正式/口语、长度限制、要引用来源/不允许编造等
种子不是越多越好,重点是任务空间覆盖。后续通过自指令扩展数量。
2) 指令生成提示词模板(可直接用)
目标:给出种子指令,让模型“变体扩展”,并强制多样性与可执行性。
可用提示词(你可替换领域和格式要求):
- 角色:你是数据生成器
- 输入:若干示例指令
- 输出:新指令列表(只输出指令,不要答案)
- 约束:不重复、覆盖不同领域/难度/写法、必须可执行
示例:
请基于以下指令示例,生成 50 条全新指令。要求:
1) 不得与示例重复或仅做同义改写;
2) 覆盖至少 8 种任务类型(解释/总结/对比/推理/抽取/写作/纠错/规划等);
3) 每条指令必须包含清晰输入条件与输出格式要求;
4) 至少 20% 为中文、20% 为英文,其余可混合;
5) 输出 JSON 数组,每个元素包含 fields: {"instruction","task_type","difficulty","output_format"}。
为什么要 task_type/difficulty/output_format?因为后面分桶采样、配比训练、评测切片都要用。
3) 让指令“更像真实用户”:加入场景与约束
真实用户往往带约束、上下文、错误输入、缺信息。你要主动生成这些:
- 场景化:客服、投研、HR、法务、运维、教学
- 噪声:口语、省略、错别字、断句
- 多轮:上一轮结果作为下一轮输入
- 资源限制:时间/预算/字数/输出必须可解析
做法:在指令生成阶段加入“场景分层”。例如先让模型生成场景卡(persona + 背景 + 目标),再基于场景卡生成指令。
自蒸馏(Self-Distillation):把强模型的“会做”变成你的“能学”
自蒸馏常见两种:
- 蒸馏答案风格/策略:强模型生成高质量回答,学生模型学习其输出分布
- 蒸馏推理过程/工具轨迹:强模型给出步骤、调用、检查点,学生模型学会更稳定的解题路径
在落地项目里,自蒸馏最重要的是三点:多样采样、偏好对齐、避免错误强化。
1) 多样采样:同一指令生成多候选
对同一 instruction,用不同温度/不同系统提示/不同思维风格生成 K 个候选答案(如 K=4~8)。
- 温度:0.2(保守)+ 0.7(多样)
- 风格:简洁版/详细版/结构化 JSON 版
- 约束:必须遵循你的输出协议(例如工具调用 schema)
这样做的好处是:后续可以用“过滤打分”选择最优,也能构造偏好数据(DPO/IPO)。
2) 构造偏好对(用于 DPO/偏好学习)
你需要 (prompt, chosen, rejected)。来源:
- 同 prompt 的多候选中,judge 选最好作为 chosen,最差作为 rejected
- 或者让模型生成“正确/错误”两类对照(但要小心刻意造错导致分布不自然)
建议:优先使用“同源候选自然差异”,比“刻意制造坏答案”更贴近真实错误。
3) 用“纠错蒸馏”避免错误强化
最常见坑:强模型也会错,合成数据把错扩大。
可加入纠错轮:
1) 先生成答案 A
2) 再让同一个或另一个更强 judge 检查 A:列出问题
3) 基于问题生成修订答案 A'
4) 只保留 A',或将 (A → A') 作为“自我修复”训练样本
这对数学、代码、结构化抽取尤其有效。
过滤与打分:让数据从“能看”变成“能训”
合成数据的质量控制要分层:硬规则过滤解决明显垃圾,打分模型/评审模型解决语义质量。
1) 硬规则过滤(第一道闸门)
建议至少做这些:
- 格式校验:JSON 必须可解析;字段齐全;禁止额外文本
- 长度控制:过短无信息、过长浪费上下文;按任务设 min/max
- 敏感信息与 PII:手机号、身份证、邮箱、地址、公司机密关键词
- 拒答策略一致性:该拒答时必须拒答;不该拒答时不要推脱
- 重复与模板:n-gram 重复率过高、固定开头结尾套话
示例(结构化输出校验):
- 若 output_format=JSON:用解析器 parse,失败直接丢弃
- 若要求字段:{answer, steps, citations},缺字段丢弃
2) LLM-as-a-Judge 打分(第二道闸门)
让评审模型按维度打分,返回可用的数值与理由(理由可不入库或仅用于审计)。
常用维度:
- 正确性/一致性:是否自相矛盾、是否胡编
- 指令遵循:格式、语气、边界条件
- 可用性:是否可执行、是否给出具体步骤
- 安全性:是否包含违规引导、隐私泄露
建议打分输出 JSON,便于阈值过滤:
- total_score 0-10
- correctness 0-10
- instruction_following 0-10
- format_valid 0/1
- safety_risk 0-3
过滤策略示例:
- format_valid=1 且 safety_risk<=1 且 total_score>=7 才入库
- 若 correctness<6 但其他高:进入“待修复队列”,触发纠错蒸馏
3) 结合“参考答案/可验证信号”的自动打分
只靠 judge 容易出现“评审偏好”与“同源偏差”。能自动验的尽量自动验:
- 代码:单元测试/编译/静态检查
- SQL:在样例库跑查询是否通过
- 结构化抽取:用规则/字典校验字段范围
- 计算题:用计算器/脚本对最终数值核对
经验:可验证任务的合成数据最值得投入,因为能建立稳定的闭环。
数据污染防控:避免“训练集/评测集泄漏”与“自我复制”
数据污染会让你误以为模型变强了,实际只是“见过题”。在系列课程的实战部分,这一点往往决定项目成败。
1) 污染的几种常见类型
- 基准泄漏:合成指令无意中复刻了公开评测题(或你内部评测集)
- 训练-评测交叉:你把线上真实用户问题也拿去做评测,但后来又进了训练
- 模型自我复制:用同一个模型生成数据再训练同架构,导致风格单一、错误模式固化
- 检索污染:生成时联网/检索把评测答案或内部文档原文带入训练
2) 训练/评测隔离的工程措施(强烈建议)
- 数据分区与权限:train/valid/test 三个桶物理隔离(不同路径/不同库/不同权限)
- 样本指纹:对 prompt/answer 做哈希(含规范化),任何进入 train 的样本都登记
- 评测集黑名单:评测 prompt 的 n-gram/embedding 指纹入库,训练入库前做近邻检索
落地建议:
- 用 MinHash 或 SimHash 做文本近重复拦截(成本低)
- 再用 embedding 向量库做语义近邻(拦截“改写型泄漏”)
3) 防止“自我复制”的数据策略
- 多源教师模型:不同供应商/不同版本的强模型混合生成,减少同源偏差
- 加入人类数据与真实日志:哪怕比例不高(10%~30%),也能显著改善分布
- 风格扰动:同任务强制多种表达、不同结构,避免模板化
4) 防止“数据投毒/后门”
如果你允许外部数据或用户贡献数据,必须考虑投毒:
- 触发词后门(例如出现某短语就输出特定内容)
- 恶意插入错误事实
建议措施:
- 对指令/回答做敏感触发词扫描与异常模式检测
- 对同一来源的样本做配额与抽检
- 训练前做“触发词回归测试集”,专门检测后门行为
一个可复用的“数据生成作业单”(照着做)
下面给出一个更贴近工程的执行清单,你可以把它当作本篇的落地模板。
H3 1) 定义数据 schema(示例)
建议每条样本至少包含:
- id
- instruction
- input(可空)
- output
- task_type
- difficulty
- output_format
- source(seed/self_instruct/distill)
- judge_scores(可选)
这样后续才能做切片分析:哪个 task_type 拉胯、哪个 difficulty 过多。
H3 2) 自指令生成任务池
- 输入:200 条种子
- 输出:新增 5000 条指令
- 规则:每个 task_type 至少 300 条;difficulty 分布 3:5:2(易:中:难)
H3 3) 生成答案与多候选
- 每条指令生成 4 个候选
- 其中 1 个低温(0.2)确保稳定,3 个中温(0.7)提高多样性
H3 4) 过滤与打分
- 硬过滤:格式、长度、PII、重复
- judge 打分:total>=7 且 correctness>=7
- 可验证任务:跑测试,不通过直接丢弃或进修复
H3 5) 去重与污染检测
- 对 instruction 做 MinHash 去重(阈值比如 Jaccard>0.9)
- 对 instruction embedding 检索评测黑名单(topK=20,相似度>0.92 直接拦截)
H3 6) 组装训练集配比
一个常用配比示例(可按你的任务调整):
- 40% 通用指令遵循(多样任务)
- 30% 你的核心业务任务(领域问答/流程)
- 20% 工具调用/结构化输出(可解析、可执行)
- 10% 纠错与拒答(安全与鲁棒性)
常见失败模式与修复建议
1) 生成的指令太像“考试题”:加入真实场景卡、噪声与多轮上下文;从真实日志抽象模板再扩展。
2) 回答大量“正确但空泛”:judge 维度加入“可操作性/具体性”,并在提示词要求给步骤/例子/边界条件。
3) 格式经常不合规:在生成阶段强制“仅输出 JSON”,并增加解析失败重试(最多 2 次);失败则丢弃。
4) 模型训练后变啰嗦或话术化:过滤模板化、加入“简洁优先”偏好对;训练集混入高质量短答案。
5) 评测指标虚高:立刻排查污染;用隔离的隐藏测试集与时间切分(按日期)评测。
小结:合成数据的关键不是“生成”,而是“选择与隔离”
在 Ai 大模型训练落地中,用大模型生成训练数据是一把效率极高的工具,但真正决定效果的是:
- 用自指令生成“足够真实且多样”的任务
- 用自蒸馏把强模型的解题策略稳定迁移
- 用过滤打分把数据质量提升到可训练水平
- 用污染防控保证评测可信、迭代方向正确
如果你把本文的流水线跑通,哪怕从几百条种子开始,也能在 1~2 个迭代内搭出一个可持续增长的数据引擎,为后续的 SFT、DPO 乃至工具学习打下基础。
Prev:多模态大模型怎么训:图文对齐数据、视觉编码器冻结策略与损失设计