T0 — 让 50 个人各写各的提示词,模型反而更会听新指令
是什么
T0(T-Zero)是 2021 年 BigScience 合作项目放出的一个 11B 参数开源指令微调模型,配套发布了一整套数据和工具:
- 模型:T0 / T0+ / T0++(三个版本,权重全开放)
- 数据:P3(Public Pool of Prompts),约 2000 个提示词模板,覆盖 170 个数据集
- 工具:Promptsource,让 50 多个贡献者各自写自己的 prompt 版本
它和 flan-2021 是同一时期、同一思路(指令微调)的两条独立路线。FLAN 是 Google 内部一组人 137B 大模型的闭源结果;T0 是几十个机构合作、11B 小模型、全开源的反向证明——参数只有 FLAN 的 1/16,零样本表现却在多数任务上更强。
日常类比:FLAN 像一所学校请一位金牌老师写 10 套标准教案让学生背;T0 像让 50 个不同风格的老师每人写几版,学生见到的题面说法五花八门,反而更能听懂从未见过的新老师布置的题。
为什么重要
不理解 T0,下面这些事都没法解释:
- 为什么 HuggingFace 上出现一大批
bigscience/T0*的模型——它们是后来 BLOOMZ / mT0 / Flan-T5 等开源指令模型的直接前身 - 为什么”开源 LLM”运动在 2022 年能起势——T0 是第一个把模型 + 数据 + prompt 工具一次性开源的指令模型
- 为什么 prompt 工程开始变成”越多越好”而不是”打磨一句最完美的”——T0 论文用实验证明了这一点
- 为什么和 flan-2021 对比就能直接看到”提示多样性”的独立影响——参数和基座都不同,但只有 prompt 写法的覆盖度真的拉得开
核心要点
T0 的方法可以拆成 四步:
-
选基座:用 T5-LM-adapted(11B)——T5 已经在 C4 上预训练,再用语言建模目标多训了一段,让它习惯”接着往下写”。这一步常被忽略,直接拿原版 T5 微调效果会差很多。
-
众包写 prompt:通过 Promptsource 工具,让 50 多个志愿者各自给同一个数据集写多个 prompt 模板。同一个 NLI 任务,可能有人写”判断前提是否蕴含假设”,有人写”前提是 X,假设是 Y,关系是哪一种”。每个数据集中位数约 10 个 prompt。
-
任务划分:把数据集按任务类型分成 8 个训练 cluster + 4 个留出 cluster。训练用的不包括留出 cluster——这是判断”零样本”是否成立的硬规则。
-
混合微调 + 零样本评测:把所有训练 prompt 拼成一个大池子混合采样,对 11B T5-LM 做监督微调。评测在留出 cluster 和 BIG-Bench 14 个任务上只给指令、不给示例。
关键发现一句话:每个任务的 prompt 数量从 1 增到 8 时,零样本性能稳定上升——多样性比单 prompt 质量更重要。
一个 P3 里同一任务的多 prompt 示例:
任务:NLI(自然语言推理)
prompt 模板 A:"Premise: {premise} Hypothesis: {hypothesis} Does the premise entail the hypothesis?"答案:Yes / No / Maybe
prompt 模板 B:"Suppose {premise} Can we infer that {hypothesis}?"答案:Yes / No / Maybe
prompt 模板 C:"Read: {premise} Question: Is it true that {hypothesis}?"答案:Yes / No / Maybe模型在训练里见过这三种说法,等评测时遇到第四种没见过的提问方式,仍能答对——这就是零样本泛化。
实践案例
案例 1:和 FLAN 的 1/16 参数对比
| 维度 | FLAN(Google) | T0(BigScience) |
|---|---|---|
| 基座参数 | LaMDA-PT 137B | T5-LM 11B |
| prompt 来源 | 团队 10 人手写 | 50+ 志愿者众包 |
| 每任务 prompt 数 | 约 10 个 | 中位数约 10 个,但风格差异更大 |
| 训练任务数 | 60+ 数据集,10 cluster | 170 数据集,8 训练 cluster |
| 数据 / 代码 | 闭源 | 全开(Apache 2.0) |
| 留出任务表现 | 强 | 9/11 任务超 GPT-3 175B、多任务持平或胜 FLAN |
T0 论文的潜台词:不是参数大小决定零样本能力,是 prompt 写法的多样性 + 任务覆盖度。
案例 2:直接用 T0 推理(无需写代码)
from transformers import AutoTokenizer, AutoModelForSeq2SeqLMtok = AutoTokenizer.from_pretrained("bigscience/T0pp")m = AutoModelForSeq2SeqLM.from_pretrained("bigscience/T0pp")
prompt = "Is the sentiment of this review positive or negative?\nReview: The food was cold and the staff was rude."ids = tok(prompt, return_tensors="pt").input_idsout = m.generate(ids)print(tok.decode(out[0], skip_special_tokens=True))# negative模型从未在这种完整提问句上见过这家餐厅评论,但因为它见过几百种”判断情感”的说法,新的说法也能听懂。
案例 3:Promptsource 的工程价值
Promptsource 不只是 prompt 文件,它把每个 prompt 当成带版本控制的代码:
- 每个 prompt 是 Jinja 模板 + 输出字段
- 用 YAML 元数据记录作者、原始数据集字段、是否参与训练
- web 界面让贡献者直接预览渲染结果
这套工程实践后来被 LangChain / DSPy 等 prompt 框架借鉴。
踩过的坑
-
基座必须是 T5-LM-adapted,不是原版 T5:原版 T5 用 span-corruption 预训练,对”接着写完整句子”不熟。直接拿原版 T5 跑指令微调,零样本能力大幅下降。这个细节论文里只在附录提了一句,复现时常踩。
-
prompt 数量不均:P3 里有的数据集有 20+ 个 prompt,有的只有 2-3 个。论文做了消融但没法完全控制——后续工作(如 flan-collection-2023)显式做平衡。
-
只训了英语:T0 在多语种上零样本极差。BigScience 后续做了 mT0 / BLOOMZ 才补齐多语种。
-
留出 cluster 的划分有主观性:什么算”未见任务”取决于怎么分类。T0 和 FLAN 用了不同的 cluster 切法,零样本数字不能直接比,要看具体任务族。
适用 vs 不适用场景
适用:
- 想做开源指令微调的起点——P3 数据集 + Promptsource 工具直接拿来用
- 研究”prompt 多样性 vs 模型大小”哪个更重要——T0 vs FLAN 是天然对照实验
- 学指令微调入门——开源、规模适中、文档全
不适用:
- 需要多轮对话能力——T0 是单轮指令,不是 ChatGPT 那种对话历史
- 需要 RLHF 风格的偏好对齐——T0 只做了 SFT,没有 RM 和 PPO 这两步
- 需要中文 / 多语种——用 BLOOMZ 或 mT0 替代
历史小故事(可跳过)
- 2021 年 4 月:BigScience 启动,HuggingFace + 法国 IDRIS 超算 + 30+ 机构合作训大模型
- 2021 年 9 月:Google FLAN 论文挂出 arXiv,证明指令微调让 137B 模型零样本变强
- 2021 年 10 月:BigScience 几乎同时发 T0——11B 参数、全开源、靠 prompt 多样性反超
- 2022 年 5 月:BLOOM 176B 模型训完,T0 的指令微调流程被迁移到 BLOOM 上得到 BLOOMZ
- 2023 年:开源指令模型一发不可收(LLaMA + Alpaca + Vicuna 等),T0 的 P3 + Promptsource 工程范式深入人心
学到什么
- 指令微调的核心是 prompt 多样性,不是参数规模——同样思路下 11B 能打 175B
- 开源不只是放权重:T0 同时放了模型 + 数据集 + 写数据的工具 + 评测脚本,整套可复现
- 多人众包写 prompt 比少数人精雕细琢更稳——这其实是和 flan-2021 最关键的方法学差异
- 基座的预训练目标决定下游上限:T5-LM-adapted 这个不起眼的步骤,是 T0 能成立的隐性前提
延伸阅读
- 论文:arXiv 2110.08207
- 模型权重:huggingface.co/bigscience/T0pp
- 数据集:huggingface.co/datasets/bigscience/P3
- 工具:github.com/bigscience-workshop/promptsource
- BigScience 全景:bigscience.huggingface.co
- flan-2021 —— 同期 Google 的闭源对照
- gpt-3 —— T0 论文里被反超的 175B 基线
关联
- flan-2021 —— 同期同思路的闭源版;对比能看清”prompt 多样性”的独立贡献
- gpt-3 —— T0 的零样本对比基线;175B 在多个任务上输给 11B T0
- t5 —— T0 的基座(LM-adapted 版本);T5 的 encoder-decoder 架构是 T0 的物理身体
- instruct-gpt —— 在 T0/FLAN 之后再加 RLHF,催生 ChatGPT
- bloom —— 同一 BigScience 项目的 176B 模型;BLOOMZ 是用 T0 流程做的指令版