Learn AI · 模型硬功底(由内而外)
第 10 课 / 经典论文 P09  ·  阶段三:统一框架与规模(Raffel et al., 2019)

T5:
把每个任务都改写成「一段文字进、一段文字出」
——你对 chat 模型用 prompt 干所有活的源头

上一课 GPT-3 告诉你:给几个例子就当场学会。但那时业界做 NLP 还是各任务各干各的——分类接一个分类头、翻译用 seq2seq、打分接一个回归头,每种任务一套架构、一套输出。 这一课 T5 问一个更狠的统一问题:能不能把翻译、分类、打分、摘要、问答……全都改写成同一种形状——一段文字进、一段文字出? 它回答你天天在做却没拆过的事:为什么我对着同一个 chat 模型,用 prompt 就能让它分类、抽取、打分、翻译,全不用换模型、换接口?
T5 的一句话:万物皆 text-to-text(文本到文本)。
把每个任务都改写成「字符串 → 字符串」:连「情感分类」的输出都不是一个类别 id,而是生成出「positive」这几个字;连「相似度打分 0–5」这种回归,也是生成出「3.2」这串字。 于是一个模型、一种 loss、一种解码,就能吃下所有任务。你今天对一个 chat 模型用 prompt 做分类 / 抽取 / 打分 / 翻译——本质就是 T5 立的这套「万物皆 text-to-text」。

一、立靶:任务各干各的世界,能不能统一成一种形状?

回看你学过的两条线:BERT(encoder-only)做分类要在顶上接一个分类头、做问答接一个抽取头,每个任务换一个输出结构;翻译 / 摘要那边走的是 seq2seq。 迁移学习(pre-train 一次、到处微调)已经是共识,但「微调成什么形状」却五花八门——每加一个任务,就要设计一套新的输出层和损失。

立靶:与其每个任务设计一套输出,不如把所有任务都「说成一句话」?

T5 的赌注:不再为任何任务定制输出头。无论翻译、分类、打分还是摘要,输入都是一段文字,输出也都是一段文字。 任务的区别,只靠输入开头的一个任务前缀(task prefix)来告诉模型——translate English to German:summarize:cola sentence:。 模型不知道「这是分类还是回归」,它只管:读进一串字,生成另一串字。

二、抽框架:text-to-text 三件套

每个任务都被压成同一个模子——任务前缀 + 输入文字 → 输出文字。看这张「翻译表」,注意最右列全是字符串,连数字、连类别都是「生成出来的字」:

任务改写成的输入(带任务前缀)输出(一串文字)
翻译translate English to German: That is good.Das ist gut.
情感 / 分类sst2 sentence: 这家店服务太差negative(生成的是,不是 id)
相似度(回归)stsb sentence1: ... sentence2: ...3.2(连分数都是生成出来的字符串
摘要summarize: 一长段新闻……三句话的摘要……
问答question: ... context: ...答案那段文字
关键:统一的是「形状」,不是「不训练」

别和上一课混了。GPT-3 统一的是「不更新权重」(冻结模型 + few-shot);T5 统一的是「输入输出的形状」——它仍然每个任务微调,只是所有任务都微调成同一种 text-to-text 格式,共用一套架构、一种交叉熵 loss、一种解码。 两条统一是互补的:T5 把「任务长什么样」统一了,后来的指令模型(FLAN-T5、InstructGPT)才能在这套统一形状上,把「任务前缀」升级成「自然语言指令」、再做到不微调也听话。

三、核心洞察:统一形状,换来三样东西

把所有任务捏成一个形状,看着像「为了优雅」,其实换来三个硬收益——也正是为什么今天的 chat 模型全走这条路。

统一形状带来说明
① 一套代码跑所有任务同一个模型、同一种 loss、同一种解码。加新任务=换个前缀、换批数据,不用再设计输出层。
② 任务之间能互相搭便车形状一样,就能把多个任务混在一起训(multi-task),一个任务学到的能力能迁移给另一个。
③ 终于能做「公平的受控对比」这是论文真正的贡献:有了统一接口,就能在同一把尺子下系统比较「架构 / 预训练目标 / 数据 / 规模」哪个改动真有用——这就是标题 Exploring the Limits 的意思:一篇巨大的受控 bake-off

第 ③ 点值得单独记住:T5 本质是一篇「先搭统一实验框架,再在上面做对照实验」的论文——和工程上做技术选型对比(bake-off)时先统一测试接口是同一个信条:先把接口统一,比较才有意义。

四、动手玩:把五种不同任务,全改写成「文字进、文字出」

点不同任务,看它被压成同一个形状的样子——尤其注意「分类」和「回归打分」的输出,都是生成出来的字符串,模型根本不知道任务类型。

选任务: 
输入 →
输出 →

五个任务、一个模子:前缀告诉模型「这是什么任务」,模型只管把一串字变成另一串字。这正是你对 chat 模型的体感——你从不「换模型做分类」,你只是换一句话开头

五、对照表(一):三条路怎么「做任务」

维度BERT(P05)GPT-3(P08)T5(本篇 P09)
架构encoder-onlydecoder-onlyencoder-decoder(回到原版 Transformer)
怎么适配任务任务头 + 微调冻结 + prompt 给例子统一 text-to-text + 微调
输出形状每任务一种(类别 / 跨度…)生成文字一律生成文字
统一了什么预训练(双向 MLM)不训练(few-shot)任务的形状(万物皆字符串)
对你的意义「先 pre-train 再微调」「prompt 塞例子就管用」「同一个模型、换句话就换任务」

为什么 T5 选 encoder-decoder?它做了受控对比:encoder 双向读懂输入、decoder 自回归生成输出,对「读一段、写一段」的任务(翻译 / 摘要 / 问答)最自然;其变体 prefix-LM(前半段双向、后半段单向)介于二者之间。结论是:在它的 text-to-text 设定下,encoder-decoder 综合最稳。

六、对照表(二):T5 是一篇「受控大实验」——顺手立了两块地基

在统一接口下,T5 把每个旋钮都拧了一遍做对比。两个对你最有用的结论:

旋钮T5 的选择 / 结论对照你已学的
预训练目标span corruption(片段损坏)胜出:随机遮掉连续的一小段词,用一个哨兵 token<X>)占位,让模型生成被遮掉的那段比 BERT 的 MLM(遮单个词、原位预测)更省、更贴合「生成」,也和 encoder-decoder 天生对味
训练数据自建 C4(Colossal Clean Crawled Corpus):把 Common Crawl 狠狠清洗后得到 ~750GB 干净文本呼应 GPT-2 的 WebText,也和搭 RAG 知识库时的选料信条一致——质 ≥ 量,清洗是地基
规模同一配方放大到 11B,越大越好(但成本陡升)把悬念交给下一阶段:到底怎么配最划算?

🔮 T5 把「形状」统一了,又用受控实验确认「放大就涨」,但没回答「规模、数据、算力到底该按什么比例配」。这正是下一篇 Scaling Laws(P10)Chinchilla(P11) 要量化的事。

七、映射到你的项目

你工作里的东西其实就是这篇论文的什么
对同一个 chat 模型,用 prompt 做分类 / 抽取 / 打分 / 翻译,从不换模型就是 text-to-text 统一框架——「万物皆字符串变换」,今天 chat 范式的底座在这篇
你用 LLM 给对话/输出打分(LLM-as-judge),让模型生成一个分数(如「7/10」)就是 T5 把回归也变成「生成数字字符串」(STS-B 打分)的同一招——分数是生成出来的字,不是回归头算的
你 prompt 开头那句「你是一个…请把以下…」就是 T5 任务前缀(task prefix)的后代;指令微调(FLAN-T5 直接基于 T5)就是把前缀升级成自然语言指令
你做技术选型对比(bake-off),先统一测试接口再对比方案和 T5 同一方法论:先搭统一的评测框架,受控对比才公平——这篇论文本身就是一次巨型 bake-off
你搭 RAG 知识库时强调「清洗 > 堆量」就是 T5 造 C4(清洗 Common Crawl)的信条:数据质量是地基

八、检索练习(关掉上文,凭记忆答)

1. T5 的 text-to-text 框架,统一的是什么?
2. T5 和 GPT-3 的「统一」差别在哪?
3. T5 预训练用的目标是什么?

九、常见问题 FAQ

把这一课接到你真实工作上的几个关键问。点开看答。

把分类、回归都变成「生成字符串」,不会更慢、更不准吗?

会牺牲一点点:生成「positive」要逐 token 解码,比一个分类头直接出一个类别 id 略慢;回归用「生成数字串」也不如真回归头精确。但 T5 用实测证明:这点损失换来的「统一性 + 通用性」远更值——一套代码、一种 loss、任意加任务、任务间能迁移。

这就是为什么今天的 chat 模型全押了 text-to-text:在「极致单任务性能」和「一个模型什么都能干」之间,通用性赢了。你用 LLM 做打分(而不是训一个回归模型),吃的就是这笔交易。

T5 的「任务前缀」和我写的 prompt / 指令,是一回事吗?

是它的祖先,但还不等于。T5 的前缀是固定的短标签translate English to German:),而且模型是被微调过来认这些前缀的——你不能随便换措辞。你今天写的是自然语言指令,模型不微调也能听懂。

中间那一步关键演化叫 instruction tuning(指令微调):把成千上万任务都写成「自然语言指令 + text-to-text」去微调,模型就学会「听任意指令」。第一个标志性成果 FLAN-T5 就直接长在 T5 上。所以链条是:T5 任务前缀 → FLAN 指令微调 → InstructGPT(P15)/ 今天的 chat。

既然 decoder-only(GPT 那套)后来赢了,为什么 T5 选 encoder-decoder?

在 T5 的设定(每任务微调、读一段输入写一段输出)里,encoder-decoder 综合最稳:encoder 用双向把输入读透,decoder 自回归生成——天生适配翻译 / 摘要 / 问答这类「输入→输出」任务。论文里它确实优于同等算力的 decoder-only。

后来 decoder-only 成主流,是因为目标变了:要的是「一个冻结模型、靠 prompt 通吃、还能 few-shot」(GPT-3 路线),decoder-only 更简单、更好放大、对「续写式」交互更顺。不是 encoder-decoder 错了,是赛道从「每任务微调」换到了「一个通用对话模型」。两套架构今天都还在用(很多翻译 / 摘要专用模型仍是 encoder-decoder)。

本课主源

读原典:Raffel et al. — Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer(T5, 2019)

建立直觉首选:Google AI Blog — Exploring Transfer Learning with T5;想看后续演化,搜 FLAN-T5(指令微调如何长在 text-to-text 上)。

阶段三开篇:T5 统一了「任务的形状」。下一步 P10 Scaling Laws / P11 Chinchilla:把「放大就涨」量化成「规模 × 数据 × 算力到底怎么配最划算」。

我是你的老师,随时提问。 比如:「span corruption 和 BERT 的 MLM 到底差在哪?」「为什么说 LLM-as-judge 打分就是 T5 那招?」 「instruction tuning 和 in-context learning 是一回事吗?」——别带着模糊往下走。

参考:
Raffel et al., Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer, 2019/2020.