跳转到内容

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 的全部秘诀可以拆成 三件事

  1. Encoder-Decoder 架构:输入由一个 encoder 双向理解(看全输入),输出由一个 decoder 因果生成(左到右)。这跟 bert encoder-only / GPT decoder-only 都不同——T5 同时具备”理解 + 生成”两种偏置。

  2. Span Corruption 预训练:随机选一段连续文本(平均 3 个 token,总覆盖 15%)盖掉,让模型把被盖住的内容补回来。类比:拿一张报纸,遮住几个连续词组让你猜。这比 BERT 风格”逐 token 遮”更接近”理解段落”的能力。

  3. 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")当字符串输出。论文承认这是工程妥协。

踩过的坑

  1. 推理慢于 decoder-only:encoder-decoder 在生成第一个 token 之前要先跑一遍完整 encoder forward。生产推理上,T5-11B 的 p99 延迟比同尺寸 decoder-only 模型高 1.5-2 倍。

  2. C4 清洗有偏:去脏话规则用了一个英文硬编码的列表,会过度过滤非裔英语方言(AAVE)和性少数语料。看似中立的过滤实际有强语言学偏差——“道德” vs “科学”的边界在数据清洗里很微妙。

  3. task prefix 是 ad-hoc 的"translate English to German:" vs "translate to German:" 哪个更好?论文没系统对比。后来的 prompt engineering 研究填了这个坑。

  4. 回归任务被强行离散化:连续值分桶变文本能跑通,但理论上损失精度。文本生成范式在严格回归任务上有先天弱点。

  5. 翻译略弱于专门系统: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-10bert 取 encoder-only + 双向 mask 路线,统治 NLP 理解任务
  • 2018-06 / 2019-02:GPT-1 / GPT-2 取 decoder-only + 单向生成路线,预言”大模型”方向
  • 2019-10:T5 发表——主张”两个都要”,encoder-decoder + span corruption + 大数据 + 大模型,配 24 张消融表
  • 2020-05gpt-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 教给我三件事最重要:

  1. “统一接口”是软件工程的胜利:当一堆子问题形状各异时,先想能不能把”接口形状”先统一,再上模型。这跟 Unix “everything is a file” 是同一种思维——把异构复杂度藏到接口下面。

  2. 消融才是论文真正的贡献:T5 的 encoder-decoder / span corruption / C4 单看每一项都不是最早最 novel 的。它的贡献是 24 张表把整个设计空间扫了一遍,留下后人可以直接引用的工程数据。读 paper 要分清”作者的 novel claim”和”作者贡献的工程数据”——后者长期价值更高。

  3. 任何”最佳实践”都要问”在什么 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 — 词向量奠基