合成数据工程:用大模型生成训练与评测数据
在垂直领域(医疗、法律、内部文档),我们往往面临“数据荒”。
- 没有足够的问答对来做微调。
- 没有足够的测试集来做 Evals。 这时候,合成数据 (Synthetic Data) 就成了救命稻草。 利用强模型(GPT-4)生成数据,去训练弱模型(Llama 3 8B),或者生成测试集,已经成为行业标准操作。
1. 生成微调数据 (Instruction Tuning Data)
1.1 Self-Instruct
这是 Alpaca 能够成功的秘诀。
- Seed Tasks: 手写 175 个种子任务。
- Generate: 让 GPT-3 根据种子任务,生成类似的指令和输入。
- Filter: 过滤掉重复的、低质量的。
- Output: 让 GPT-3 生成这些指令的输出。
1.2 Evol-Instruct (WizardLM)
单纯的生成可能太简单。 Evol-Instruct 让 LLM 进化指令:
- Deepening: 增加深度。
- Complicating: 增加约束条件。
- Breadth: 增加广度。 通过反复进化,生成的指令越来越复杂,逼近人类的高级认知。
2. 生成 RAG 评测集 (QA Pairs)
你有一堆 PDF,想测试 RAG 系统的准确率。 怎么搞?手动写 100 个问题?太累了。 使用 LLM 自动生成:
- Chunking: 把 PDF 切片。
- Generate Question: 给 LLM 一个 Chunk,让它基于此生成 3 个问题。
- Generate Answer: 让 LLM 基于 Chunk 回答这 3 个问题(作为 Ground Truth)。
- Review: (可选) 让另一个 LLM 检查 Question 和 Answer 是否匹配。
3. 工具推荐:Bonito / TextSynth
3.1 Bonito
一个专门用于将非结构化文本转化为微调数据集的模型。 它可以把一段乱七八糟的文本,转化成高质量的 (Instruction, Input, Output) 格式。
3.2 LangSmith Dataset Generator
LangSmith 内置了从文档生成测试集的功能。 上传 CSV/PDF,点击 Generate,自动产出 Golden Dataset。
4. 风险与控制
4.1 模型坍塌 (Model Collapse)
如果反复用 AI 生成的数据训练 AI,模型会不会变傻? 研究表明,如果不引入真实数据(Human Data),模型确实会退化,产生怪异的输出。 对策:始终保持一定比例的人类数据(如 10%)。
4.2 偏见放大
GPT-4 有偏见,它生成的数据也有偏见。 用这些数据微调的小模型,会继承甚至放大这些偏见。
合成数据工程将数据获取的成本从 $10/条(人工标注)降到了 $0.01/条(API 调用)。 它让小团队也能拥有海量的高质量数据。 未来的数据工程,不再是去满世界找数据,而是写 Prompt 让 AI 生产数据。