训练一个能听懂人话的 AI,最难的一步是什么?不是模型架构,不是算力——是 数据。更具体地说,是 指令数据:那种“帮我写一封辞职信”“用小学生能听懂的话解释相对论”的 prompt-response 对。OpenAI 能做出 ChatGPT,靠的是大量人工标注员手写指令、手写答案,成本高得离谱。但如果你没有这笔预算呢?答案你可能已经猜到了:让 AI 自己教自己。这就是 Self-Instruct 和 Evol-Instruct 要做的事。但它们不是随便让 AI 生成一堆数据就完事了——这里面有精心设计的生成、过滤、进化机制。我第一次看到 Self-Instruct 这个标题时,脑子里冒出的想法是:“这不就是 AI 左脚踩右脚上天吗?”但仔细读完论文,发现这事没那么简单。

为什么人工标注指令数据这么贵?
很多人以为,训练 ChatGPT 最贵的是那几千张 GPU。其实 数据标注才是真正的隐形成本。OpenAI 在 InstructGPT 论文里提到,他们雇了大约 40 名标注员,花了几个月时间,才写出几万条高质量指令数据。这些标注员要遵循复杂的规范:多样性、安全性、有用性、格式……而且指令必须覆盖真实用户可能问的各种奇葩问题。你可能会想,那直接从网上爬对话数据不行吗?不行,因为网上的对话大多是闲聊、低质量、重复的,根本不具备“指令遵循”所需的清晰结构和多样性。所以,指令数据短缺成了大模型平民化的最大瓶颈。直到 2022 年底,一篇论文提出了一个大胆的想法:Self-Instruct。
Self-Instruct:让 AI 自己出题自己答
Self-Instruct 的核心思想很简单:给大语言模型(LLM)一小批 种子任务(比如 175 个手工编写的指令),然后让它批量生成更多的新任务,再自己生成对应的答案,最后用这些数据去训练一个更听话的模型。这听起来像左脚踩右脚,但背后有一套严密的流程,确保生成的数据足够多样、质量够高。
- 从种子池抽取示例:每次生成新指令时,从当前任务池中随机抽取 8 个已有任务作为上下文示例,让模型“照着样子”发明新任务。这 8 个示例确保了生成方向不会跑偏。
- 生成新指令:LLM 根据这些示例,输出一个全新的任务指令。这个指令可能是“将下列句子翻译成法语”,也可能是“用一个笑话解释什么叫递归”。
- 判断任务是否需要输入:有些任务只需要指令(比如“写一首诗”),有些需要额外输入(比如“把以下文本概括成一句话”)。模型会先判断任务类型,再决定后续生成什么。
- 生成实例:对于“需要输入”的任务,模型先生成输入字段,再生成对应输出;对于“不需要输入”的任务,直接生成输出。这就得到了完整的
instruction-input-output三元组。 - 过滤低质量数据:这是最关键的一步。自动生成的数据必然包含大量垃圾——重复的、太短的、太长的、跟已有任务高度相似的。论文用了 ROUGE-L 相似度去重,还过滤掉包含特定关键词(如“图片”“视频”)的指令,因为纯文本模型无法处理。只有通过过滤的数据才能加入任务池,继续下一轮生成。
这套流程像滚雪球一样,从 175 个种子开始,最终生成了 52K 条指令数据,用来训练 Stanford Alpaca 模型。52K 数量不算大,但足以让一个 7B 的 LLaMA 模型展现出不错的指令遵循能力。这让我意识到:数据质量比数量重要得多。那些被过滤掉的数据,可能比留下的多好几倍。
Evol-Instruct:不仅要出题,还要出难题
2023 年,WizardLM 团队提出了 Evol-Instruct。他们发现,Self-Instruct 生成的指令太“平”了,缺乏挑战性。而现实世界中,用户的问题往往很复杂:“先总结这篇文章,然后对比其中两种观点,最后用表格列出优缺点”——这种多步推理、带格式约束的指令,Self-Instruct 很难自动生成。于是他们想:能不能让 AI 把简单的指令进化成复杂的指令?就像给指令“升级打怪”。
Evol-Instruct 从一批简单的初始指令出发(这些初始指令可以来自 Self-Instruct 或手工编写),然后通过 提示工程 让 LLM 对指令进行“演化”。演化分为两种类型:
- 深度进化(In-Depth Evolving):让指令变得更复杂。具体包括五种操作:添加约束(“写一篇 500 字的文章,且不能使用字母 e”)、加深层次(“先解释概念,再举例,最后指出常见误解”)、具体化(“用小学生能听懂的话解释”改为“用 8 岁小孩能听懂的话解释,且不能出现专业术语”)、增加推理步骤(“回答这个问题并给出推导过程”)、让问题更全面(“不仅要给出答案,还要分析可能出现的边界情况”)。
- 广度进化(In-Breadth Evolving):生成全新的、有创意的指令,提升话题覆盖面。比如从“写一封辞职信”演化出“写一封辞职信,但语气要像《指环王》里的甘道夫”。
每次进化后,还有一个 指令淘汰机制:如果进化后的指令跟原始指令一模一样(说明进化失败),或者生成的信息对模型来说太难(比如要求处理图片),或者指令包含无意义占位符,就会被丢弃。合格的指令进入下一轮进化,如此迭代多次,指令的复杂度会像滚雪球一样越来越高。
WizardLM 团队用 Evol-Instruct 从初始的 70K 指令开始,最终生成了 250K 条复杂指令数据。用这些数据训练出的 WizardLM,在复杂推理任务上的表现明显优于只用 Self-Instruct 数据训练的模型。这让我想通了一个点:指令数据的核心不是“像人写的”,而是“能逼出模型的推理能力”。简单的指令只能训练出听话的鹦鹉,复杂的指令才能训练出会思考的助手。
一张表看清 Self-Instruct 和 Evol-Instruct 的区别
| 维度 | Self-Instruct | Evol-Instruct |
|---|---|---|
| 核心思路 | 从种子任务批量生成新任务 | 从简单指令进化出复杂指令 |
| 输入数据 | 少量手工种子任务(175 条) | 大量简单指令(可来自 Self-Instruct) |
| 生成方式 | 通过示例让模型发明新任务 | 通过提示让模型改写指令,增加复杂度 |
| 复杂度控制 | 依赖种子多样性,无法自动提升 | 主动提升难度,支持深度/广度进化 |
| 过滤机制 | ROUGE-L 去重、关键词过滤、长度过滤 | 淘汰无变化、不可行、格式错误指令 |
| 典型产出 | 52K 指令(Alpaca) | 250K 复杂指令(WizardLM) |
| 适用场景 | 快速构建通用指令遵循模型 | 提升模型在复杂推理、多步任务上的表现 |
为什么 AI 教 AI 并没有那么完美?
这两种方法看起来很美,但实际用起来坑不少。我踩过几个:
- 生成的数据有偏见:LLM 从种子任务或进化提示中学习,会放大原有的偏见。如果种子任务都是英文、西方文化背景,生成的指令也会偏向这些,导致模型对其他语言或文化理解不足。
- 幻觉会传染:如果生成答案时模型自己就编造了错误信息,这些错误数据会被用来训练下一代模型,造成“错误强化”。
- 难度失控:Evol-Instruct 可能把指令进化得过于复杂,甚至超出模型本身的能力范围,导致生成的答案质量极差,训练出的模型反而更糟。
- 多样性假象:虽然生成的指令数量多,但仔细看可能只是表面变化,深层任务类型并没有真正拓展。比如从“写一封辞职信”进化到“写一封辞职信,语气像莎士比亚”,本质上还是“写辞职信”。
有一次,我用 Self-Instruct 生成了几万条指令,训练后发现模型特别爱用“Sure, I can help with that”开头,原因就是种子数据里人工标注员总爱这么写,模型学得挺快,但变通能力为 0。后来我意识到,数据过滤必须针对这些“模板化”模式做专门处理,否则模型会学得八股味十足。
FAQ:关于指令数据生成的三个常见误解
“让 AI 生成数据,再用这些数据训练 AI,这不是循环论证吗?”
不是。因为生成数据的 AI 和 被训练的 AI 是同一个模型的不同版本,或者不同模型。关键是:生成数据时用的是更强的模型(比如 GPT-4),然后用这些数据训练一个更小的模型(比如 LLaMA 7B)。强模型把自己的知识“蒸馏”到弱模型里,弱模型变强了,但强模型并没有因此变弱。这更像老师教学生,而不是左脚踩右脚。
“是不是数据越多越好?”
不是。Self-Instruct 论文中实验发现,数据量超过一定阈值后,模型性能提升趋于平缓,甚至可能因为低质量数据混入而下降。52K 对于 Alpaca 来说已经足够,再往上加,需要更精细的过滤。
“Evol-Instruct 一定能提升模型能力吗?”
不一定。如果进化后的指令难度超过了模型能处理的上限,生成的答案可能充满错误,训练出的模型反而在原有任务上退化。所以,难度控制是 Evol-Instruct 成功的关键,通常需要人工抽样检查进化质量。
我现在的判断
Self-Instruct 和 Evol-Instruct 解决的是指令数据生成的两个不同维度的难题:多样性和复杂性。Self-Instruct 擅长低成本铺开覆盖面,Evol-Instruct 擅长在深度上做文章。目前最实用的做法可能是 两者结合:先用 Self-Instruct 生成大量基础指令,再挑出一部分用 Evol-Instruct 进化成复杂指令,最后混合训练。但无论哪种方法,人工审核和过滤都是必不可少的一环——完全靠 AI 教 AI 跑出来的模型,往往会在某些边界情况上表现得很诡异,就像一个只会背题库的学生,遇到没见过的题型就露馅。指令数据的未来,不是 AI 取代人,而是 AI 帮人省掉 80% 的脏活累活,剩下的 20% 关键决策,还得人来把关。
进阶阅读:原始论文与关键资源
- Self-Instruct 论文:Yizhong Wang 等,2022 年 12 月
- Self-Instruct 官方代码
- WizardLM / Evol-Instruct 论文:Can Xu 等,2023 年 4 月
- WizardLM 官方仓库
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/156.html