详细解释
Synthetic Data(合成数据 / 人工生成数据) 一句话定义:真实数据不够?买不起?有隐私拿不到?别等——让 LLM/仿真器自己跟自己下棋生成无限量的训练样本,用这些「人工造的数据」去 SFT 小模型/做 RAG 评测/微调检索器,成本是人工标注的 1/10 至 1/100,质量在很多任务上已经和人工打平甚至超过。合成数据不是什么新鲜事(ImageNet 时代 GAN 就在造图像了),但 LLM 时代它的重要性被无限放大——因为 LLM 既是合成数据的消费者(需要数据训练),也是合成数据的生产者(能自己写数据),形成了正向飞轮。
OpenAI 在 GPT-4o 之后的多个模型、谷歌 Gemini 2、以及国内的 Qwen 2.5 / DeepSeek V3 等 2024 年后发布的新模型,官方披露的训练数据里合成数据占比已经普遍达到 30% 至 50%,个别垂直能力(如代码、数学推理)的合成数据占比甚至超过 80%。学术界最著名的案例是斯坦福 2023 年的 “Textbooks Are All You Need” 系列:用 GPT-4 合成的 7B token 高质量代码教科书数据训练出的 1.3B 参数的 phi-1 模型,在 HumanEval 上和用 10 倍真实数据训练的 10B 参数模型打平,证明了「数据质量远大于数据数量,合成数据可以质量极高」。
唯元智创 的 Synthetic Data Studio 提供了三种开箱即用的生成流水线:(1) Teacher-Student 蒸馏模式——上传 100 条人工标注种子数据,自动让强模型(GPT-4o / Claude Opus)按风格扩写 1 万条带打分的合成样本;(2) 对抗自博弈模式——让两个模型互相当「出题老师」和「答题学生 + 评审」,自动生成越来越难的推理链样本;(3) 结构化表格模式——上传数据库 schema 和 10 条样例行,自动生成百万行符合统计分布的仿真数据库数据用于测试。
合成数据的四大主流生成范式对比
| 范式 | 核心思路 | 适合任务 | 质量上限(相对人工) | 成本倍数(相对人工) | 典型工具 |
|---|---|---|---|---|---|
| ① 规则模板生成(Rule-based / Template) | 人工写 10-100 个 Jinja2 模板 + 变量槽位,按统计分布填充变量生成无限条 | 意图分类、命名实体识别、FAQ、简单结构化 | 60% 至 75%(格式完美但多样性差) | 1/50 至 1/100 | 自研脚本、Faker、Snorkel |
| ② Teacher-Student 知识蒸馏 | 强模型(Teacher,如 GPT-4o)对「无标注输入」打标/写推理链/写完整回答 → 得到(输入, 强模型输出)对 → 训练小模型(Student) | SFT 数据、推理链(CoT)、代码生成、RAG 评测集 | 85% 至 95%(和 Teacher 质量正相关) | 1/20 至 1/5 | Distilabel、Argilla、SynthLab |
| ③ 自博弈 / 对抗生成(Self-Play / GAN) | 两个模型/同一个模型两个角色互相对抗:A 出难题/难样本,B 解答/分类,A 再根据 B 的弱点出更难的样本,循环 | 数学推理、代码、红队攻击样本、Guardrails | 90% 至 105%(可能超过人工——因为能生成人工想不到的边角样本) | 1/10 至 1/3 | AlphaZero 风格框架、LLM-Arena、Self-Instruct |
| ④ 物理仿真 / 多模态渲染(Simulation) | 用 Unity/Unreal/Blender 或专用物理引擎(如 CARLA 自动驾驶)在虚拟环境中渲染图像/点云/视频 + 自动生成精确标签 | 自动驾驶、机器人视觉、医疗影像、3D 物体识别 | 90% 至 99%(标签精度 100% 完美无噪声) | 1/50 至 1/5(前期仿真环境搭建成本高) | CARLA、Unity Perception、BlenderProc |
合成数据落地的三个「质量控制」铁则(造垃圾数据不如不造)
铁则 1:永远用「种子集 + 质量过滤器 + 多样性校验」三段式流水线,不要把 LLM 随手生成的东西直接喂模型。90% 的团队第一次用合成数据都踩了这个坑——让 GPT-4 扩写了 1 万条 SFT 数据直接训练,结果小模型推理能力反而降了 5%,因为合成数据里有 15% 的错误样本和 30% 的重复模式。正确的三段式:
- 第一段 种子集(Seed Set):人工高质量标注 50 至 200 条「黄金样本」,要求覆盖所有任务维度,且正确率 100%。这是 Teacher 学习的风格蓝本,种子脏了后面全废。
- 第二段 生成(Generation):LLM 基于种子集风格扩写,但每次生成时必须同时输出「自评分 1-5 分 + 置信度」。
- 第三段 过滤(Filtering):三层过滤:(a) 自评分 <4 的直接丢弃;(b) 输入和任何一条已有样本的 cosine ≥0.95(重复/近似重复)丢弃;(c) 随机抽 5% 让另一个强模型(不同厂商)独立打分,低于 4 分的整批打回重生成。过了这三层,合成数据的错误率通常能压到 2% 以内,和人工标注的 1% 至 3% 差不多。
铁则 2:合成数据和真实数据的混合比例要按任务类型调整,不是越高越好。经验推荐比例表:
- 低阶任务(分类、NER、简单 FAQ):合成数据可以占 80% 甚至 90%,只要种子集够好,质量几乎不掉
- 中阶任务(客服多轮对话、代码补全、长摘要):合成 40% 至 60% + 真实 40% 至 60%,合成比例再高会导致输出风格「太像机器人」缺少真实多样性
- 高阶任务(复杂推理、创意写作、开放式咨询):合成 10% 至 30% 封顶,其余必须真实,合成比例过高会导致模型只会「套模板」而缺少真实创造力和多样性
铁则 3:合成数据必须通过「数据污染检测」,绝不允许把测试集/评测集的信息泄露进合成训练集。这是很多团队训练出「Benchmark 分数虚高、上线就崩」的根本原因——合成数据的 Teacher 模型在生成时,因为它本身见过 MMLU / GSM8K 等 Benchmark 的题目,生成时会无意识泄漏出来,导致 Student 模型在这些公开 Benchmark 上分数暴涨,但实际能力没涨。防污染做法:每条合成数据生成后,必须和你所有评测集(内部+公开)做 n-gram 重叠率检测,任何 13-gram 重合就整段删除;更狠的做法是「合成数据 Teacher 用老版本模型,评测用最新版本模型」,确保 Teacher 生成时不可能见过新评测集。