T5 — Text-to-Text Transfer Transformer
是什么
T5(Text-to-Text Transfer Transformer)是 Google 2019 年的一个预训练模型,最大特色是把所有 NLP 任务统一成”输入文本 → 输出文本”的格式。日常类比:以前每种 NLP 任务都要专门训一个模型——翻译归翻译、分类归分类、摘要归摘要;T5 像一个万能助理,你说什么它都给文字回答。
你说:
translate English to German: hello它输出 hallo。你说 summarize: <长文章>,它输出几句摘要。
整个 T5 训练流水线只有一个 loss、一种数据格式、一个模型——这是它跟 bert(专门做”理解”)和 GPT(专门做”生成”)最大的不同。
为什么重要
不理解 T5,下面这些事都没法解释:
- 为什么 2020 年之后大家都在说”prompt”——T5 的”任务前缀”(task prefix)就是 prompt 的早期形态,启发了 gpt-3 之后的 instruction tuning 思路
- 为什么 LLaMA / Falcon / 各种开源大模型的训练语料都包含 C4——T5 论文清洗出的 750 GB 英文文本,已经成为行业标配
- 为什么后来再没人做架构对比实验了——T5 的 24 张消融表把”架构 / 数据 / 任务 / 大小”四个维度都翻了个遍,之后再没人做过同等规模的对比
- 为什么”统一格式”这个工程思路在 NLP 比在视觉先成熟——T5 给了一套标准答案
核心要点
T5 的全部秘诀可以拆成 三件事:
-
Encoder-Decoder 架构:输入由一个 encoder 双向理解(看全输入),输出由一个 decoder 因果生成(左到右)。这跟 bert encoder-only / GPT decoder-only 都不同——T5 同时具备”理解 + 生成”两种偏置。
-
Span Corruption 预训练:随机选一段连续文本(平均 3 个 token,总覆盖 15%)盖掉,让模型把被盖住的内容补回来。类比:拿一张报纸,遮住几个连续词组让你猜。这比 BERT 风格”逐 token 遮”更接近”理解段落”的能力。
-
Task Prefix(任务前缀):每个任务的输入前面加一段固定字符串告诉模型要做什么——
"translate English to German: "/"summarize: "/"cola sentence: "。前缀不是特殊 token,就是普通英文,会被 tokenizer 当成普通 subword。
剩下的”大模型 + 大数据”是 scaling 工程问题。三件事合起来就是 T5。
实践案例
案例 1:翻译
input : translate English to German: That is good.output : Das ist gut.模型靠前缀 "translate English to German:" 知道现在要做翻译。
案例 2:摘要
input : summarize: <一篇 ~1000 token 的新闻>output : <几句话摘要>输入是长文章,输出是短文本。loss 跟翻译完全一样——next-token cross-entropy。
案例 3:分类(CoLA 语法可接受性)
input : cola sentence: He goed home.output : unacceptable注意:分类的 label 也是文本("acceptable" / "unacceptable"),不是 logits。所有任务在 loss 层面同质——这是 text-to-text 范式最优雅的地方。
案例 4:回归(STS-B 语义相似度)
input : stsb sentence1: A man is playing. sentence2: A guy is dancing.output : 2.4连续值(0-5 相似度)被分成 21 个桶("0.0" / "0.2" / … / "5.0")当字符串输出。论文承认这是工程妥协。
踩过的坑
-
推理慢于 decoder-only:encoder-decoder 在生成第一个 token 之前要先跑一遍完整 encoder forward。生产推理上,T5-11B 的 p99 延迟比同尺寸 decoder-only 模型高 1.5-2 倍。
-
C4 清洗有偏:去脏话规则用了一个英文硬编码的列表,会过度过滤非裔英语方言(AAVE)和性少数语料。看似中立的过滤实际有强语言学偏差——“道德” vs “科学”的边界在数据清洗里很微妙。
-
task prefix 是 ad-hoc 的:
"translate English to German:"vs"translate to German:"哪个更好?论文没系统对比。后来的 prompt engineering 研究填了这个坑。 -
回归任务被强行离散化:连续值分桶变文本能跑通,但理论上损失精度。文本生成范式在严格回归任务上有先天弱点。
-
翻译略弱于专门系统:T5-11B 在 WMT En-De 上 32.1 BLEU,比专门优化翻译 + 回译数据增强的 Edunov 2018(33.8)弱。统一格式不等于通杀——领域 SOTA 仍属于专门系统。
适用 vs 不适用场景
适用:
- 多任务 NLP 系统,需要一个模型覆盖翻译 / 分类 / 问答 / 摘要——T5 一把梭
- 检索增强生成(RAG)的 reader 端——cross-attention 天然适合”输入大段 context、输出短答案”的形状
- 翻译 / 摘要的小模型 SOTA——Flan-T5-base(220M)在 X-Sum 等任务上仍优于同尺寸 decoder-only
- 有标注数据 + 想 finetune 的传统 NLP 流水线
不适用:
- 通用 chat / 对话——decoder-only(GPT 系列)在长对话上更强
- few-shot in-context learning(不 finetune 直接用 prompt)——T5 设计时假设有标注数据,没在这条路线上特化
- 严格回归输出(高精度相似度评分 / 数值预测)——文本生成范式天然不适合
- 推理延迟敏感的生产服务——encoder-decoder 慢于 decoder-only
历史小故事(可跳过)
- 2017:Vaswani et al. 发表 attention(Transformer),原始论文用的就是 encoder-decoder 做机器翻译
- 2018-10:bert 取 encoder-only + 双向 mask 路线,统治 NLP 理解任务
- 2018-06 / 2019-02:GPT-1 / GPT-2 取 decoder-only + 单向生成路线,预言”大模型”方向
- 2019-10:T5 发表——主张”两个都要”,encoder-decoder + span corruption + 大数据 + 大模型,配 24 张消融表
- 2020-05:gpt-3 用 175B decoder-only 实现 few-shot in-context learning,重新定义”transfer learning”
- 2021-10:mT5 把 T5 扩展到 101 种语言
- 2022-10:Flan-T5 在 T5 上加 instruction tuning,把”task prefix”思想发展成”自然语言指令”
- 2023-:LLaMA 等模型让 decoder-only 几乎一统江湖,但翻译 / 摘要 / RAG 等场景下 T5 路线仍有 niche
学到什么
零基础视角下,T5 教给我三件事最重要:
-
“统一接口”是软件工程的胜利:当一堆子问题形状各异时,先想能不能把”接口形状”先统一,再上模型。这跟 Unix “everything is a file” 是同一种思维——把异构复杂度藏到接口下面。
-
消融才是论文真正的贡献:T5 的 encoder-decoder / span corruption / C4 单看每一项都不是最早最 novel 的。它的贡献是 24 张表把整个设计空间扫了一遍,留下后人可以直接引用的工程数据。读 paper 要分清”作者的 novel claim”和”作者贡献的工程数据”——后者长期价值更高。
-
任何”最佳实践”都要问”在什么 scale 下”:T5 的”encoder-decoder 最佳”在 ≤ 11B 成立,gpt-3 175B decoder-only 又把故事改写一次。技术结论几乎都是 scale-dependent——读到任何”X 比 Y 好”,第一反应应该是”在什么参数 / 数据 / 任务规模下?“
延伸阅读
- 论文 67 页 PDF:Raffel et al. 2020 (arXiv 1910.10683)(Section 3 的消融表是核心)
- HuggingFace transformers 里的 T5 实现:
transformers/src/transformers/models/t5/(边读边对照论文很高效) - Flan-T5 论文:Chung et al. 2022——用 instruction tuning 把 T5 推到 zero-shot
- C4 数据集本体:TensorFlow Datasets 里搜
c4,可以本地复现 T5 的预训练语料
关联
- attention —— Transformer 注意力机制,T5 encoder-decoder 的基础
- bert —— encoder-only 路线,T5 直接对标的对手
- gpt-3 —— decoder-only 路线,T5 之后翻盘的对手
反向链接
- adafactor-2018 —— Adafactor — 把 Adam 的优化器内存从 O(d) 压到 O(√d)
- alphago —— AlphaGo — 击败围棋世界冠军
- atlas-2022 —— Atlas — 把检索器和生成器一起训练,11B 打 540B
- attention —— Attention Is All You Need
- bert —— BERT — 双向 Transformer 预训练
- blip2-2023 —— BLIP-2 — 用 188M 小桥接器把冻结的视觉模型和大语言模型拼起来
- dqn —— DQN — Deep Q-Network
- electra-2020 —— ELECTRA — 把猜词题改成判真假题,训练效率 4 倍
- flan-2021 —— FLAN — 用自然语言指令教模型学会”听话”
- gpt-3 —— GPT-3 — Language Models are Few-Shot Learners
- gshard-2020 —— GShard — 用注解让 600B 模型自动跨设备切片
- longformer-2020 —— Longformer — 滑窗加少数全局 token,把长文档喂进 Transformer
- ppo —— PPO — Proximal Policy Optimization
- realm —— REALM — 把检索器和 BERT 一起预训练的第一篇论文
- roberta-2019 —— RoBERTa — 把 BERT 重训一遍就能拿 SOTA
- t0-2021 —— T0 — 让 50 个人各写各的提示词,模型反而更会听新指令
- word2vec —— Word2Vec — 词向量奠基