跳转到内容

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 的方法可以拆成 四步

  1. 选基座:用 T5-LM-adapted(11B)——T5 已经在 C4 上预训练,再用语言建模目标多训了一段,让它习惯”接着往下写”。这一步常被忽略,直接拿原版 T5 微调效果会差很多。

  2. 众包写 prompt:通过 Promptsource 工具,让 50 多个志愿者各自给同一个数据集写多个 prompt 模板。同一个 NLI 任务,可能有人写”判断前提是否蕴含假设”,有人写”前提是 X,假设是 Y,关系是哪一种”。每个数据集中位数约 10 个 prompt。

  3. 任务划分:把数据集按任务类型分成 8 个训练 cluster + 4 个留出 cluster。训练用的不包括留出 cluster——这是判断”零样本”是否成立的硬规则。

  4. 混合微调 + 零样本评测:把所有训练 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 137BT5-LM 11B
prompt 来源团队 10 人手写50+ 志愿者众包
每任务 prompt 数约 10 个中位数约 10 个,但风格差异更大
训练任务数60+ 数据集,10 cluster170 数据集,8 训练 cluster
数据 / 代码闭源全开(Apache 2.0)
留出任务表现9/11 任务超 GPT-3 175B、多任务持平或胜 FLAN

T0 论文的潜台词:不是参数大小决定零样本能力,是 prompt 写法的多样性 + 任务覆盖度

案例 2:直接用 T0 推理(无需写代码)

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tok = 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_ids
out = 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 框架借鉴。

踩过的坑

  1. 基座必须是 T5-LM-adapted,不是原版 T5:原版 T5 用 span-corruption 预训练,对”接着写完整句子”不熟。直接拿原版 T5 跑指令微调,零样本能力大幅下降。这个细节论文里只在附录提了一句,复现时常踩。

  2. prompt 数量不均:P3 里有的数据集有 20+ 个 prompt,有的只有 2-3 个。论文做了消融但没法完全控制——后续工作(如 flan-collection-2023)显式做平衡。

  3. 只训了英语:T0 在多语种上零样本极差。BigScience 后续做了 mT0 / BLOOMZ 才补齐多语种。

  4. 留出 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 工程范式深入人心

学到什么

  1. 指令微调的核心是 prompt 多样性,不是参数规模——同样思路下 11B 能打 175B
  2. 开源不只是放权重:T0 同时放了模型 + 数据集 + 写数据的工具 + 评测脚本,整套可复现
  3. 多人众包写 prompt 比少数人精雕细琢更稳——这其实是和 flan-2021 最关键的方法学差异
  4. 基座的预训练目标决定下游上限:T5-LM-adapted 这个不起眼的步骤,是 T0 能成立的隐性前提

延伸阅读

关联

  • 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 流程做的指令版

反向链接

  • flan-2021 —— FLAN — 用自然语言指令教模型学会”听话”
  • gpt-3 —— GPT-3 — Language Models are Few-Shot Learners
  • t5 —— T5 — Text-to-Text Transfer Transformer