卡码笔记-最强八股文
首页
计算机基础
Python
C++
Java
Go
  • ChatGPT充值
  • Claude充值
  • 国内使用Claude
  • 中转站推荐
🔥大模型🔥
  • 大模型面经
  • Java面经
  • C++面经
大模型Github (opens new window)
代码随想录 (opens new window)
首页
计算机基础
Python
C++
Java
Go
  • ChatGPT充值
  • Claude充值
  • 国内使用Claude
  • 中转站推荐
🔥大模型🔥
  • 大模型面经
  • Java面经
  • C++面经
大模型Github (opens new window)
代码随想录 (opens new window)
  • 本栏必读

    • 卡码大模型专栏介绍
  • 大模型面经

  • 大模型动态

  • Claude学习专栏

  • 入门认知

  • Prompt与调用基础

  • RAG检索增强

  • Agent智能体

  • 微调认知

  • 部署与工程化

  • 多模态入门

  • Transformer原理

  • 手撕Transformer

  • 模型家族与Llama架构

# T5:Encoder-Decoder 的代表作,为什么翻译和摘要还在用

2019 年,Google 发布 T5(Text-To-Text Transfer Transformer),提出一个大胆的想法:

能不能把所有 NLP 任务都统一成「输入一段文本,输出另一段文本」?

  • 翻译:输入「translate English to German: I love you」,输出「Ich liebe dich」
  • 摘要:输入「summarize: [一篇长文]」,输出摘要
  • 情感分析:输入「sentiment: This movie is great」,输出「positive」

不管什么任务,都是 text-to-text——输入文本,输出文本。

T5 用标准 Transformer 的 Encoder-Decoder 架构实现这个想法,在几乎所有任务上都达到了 SOTA。

但今天,ChatGPT、Llama、GPT-4 全都是 Decoder-only 架构,T5 的 Encoder-Decoder 反而不是主流了。

那 T5 还有意义吗?什么场景下 T5 比 GPT 更合适?

# 一、T5 的核心设计:Text-to-Text 范式 + Encoder-Decoder 架构

# 1.1 Text-to-Text:万物皆可转换

T5 的核心思想是:所有 NLP 任务都可以表示成「输入文本 → 输出文本」的形式。

任务 传统做法 T5 的做法
翻译 输入:I love you
输出:我爱你
输入:translate English to Chinese: I love you
输出:我爱你
摘要 输入:[长文]
输出:摘要
输入:summarize: [长文]
输出:摘要
情感分类 输入:This movie is great
输出:label=1(正面)
输入:sentiment: This movie is great
输出:positive
问答 输入:question: 首都是哪?
context: 中国的首都是北京
输出:北京
输入:question: 首都是哪? context: 中国的首都是北京
输出:北京
文本生成 输入:Once upon a time
输出:续写
输入:generate: Once upon a time
输出:续写

关键点:任务类型通过 prefix(如 translate, summarize, sentiment)来区分,输出都是自由文本,不是固定的标签。

这和 BERT 完全不同:

  • BERT:分类任务接分类头,NER 任务接序列标注头,换任务要换头
  • T5:所有任务都是生成文本,模型架构不变

# 1.2 Encoder-Decoder 架构:标准 Transformer

T5 用的是标准 Transformer 的 Encoder-Decoder 架构,和原始论文《Attention is All You Need》一样。

# Encoder 部分:

  • Self-Attention:双向的,每个词都能看到整个输入序列
  • 输出:输入序列的语义表示(每个词一个向量)

# Decoder 部分:

  • Masked Self-Attention:单向的,每个词只能看左边(因果掩码)
  • Cross-Attention:从 Encoder 的输出中获取信息
  • 输出:逐词生成目标序列

数据流:

输入文本(如「translate English to Chinese: I love you」)
  ↓
Encoder(12 层 Transformer Encoder)
  ↓
语义向量(每个输入词一个向量)
  ↓
Decoder(12 层 Transformer Decoder,通过 Cross-Attention 读取 Encoder 输出)
  ↓
逐词生成输出文本(「我 爱 你」)
1
2
3
4
5
6
7
8
9

# 1.3 与 BERT 和 GPT 的对比

BERT GPT T5
架构 Encoder-only Decoder-only Encoder-Decoder
预训练任务 MLM(填空) CLM(预测下一个词) Span Corruption(填空变体)
输入形式 单句或句对 单句 带 prefix 的文本
输出形式 每个词的向量 逐词生成 逐词生成
擅长任务 分类、匹配 生成、对话 翻译、摘要、问答
任务切换方式 换分类头 换 prompt 换 prefix

T5 的独特之处:

  • 用 Encoder 理解输入(和 BERT 类似)
  • 用 Decoder 生成输出(和 GPT 类似)
  • 通过 Cross-Attention 让 Decoder 读取 Encoder 的理解结果

# 二、T5 的预训练任务:Span Corruption

T5 的预训练任务叫 Span Corruption,是 BERT 的 MLM 的变体。

# 2.1 和 BERT MLM 的区别

BERT MLM:

  • 随机遮住 15% 的词,用 [MASK] 替换
  • 目标:预测被遮住的词是什么

T5 Span Corruption:

  • 随机遮住 15% 的词,用 <X> 这样的 sentinel token 替换
  • 一次可以遮住连续的多个词(span)
  • 目标:用 Decoder 生成被遮住的内容

例句:

原始:I love eating hot pot very much
遮蔽输入:I love <X> hot pot <Y>
Decoder 目标:<X> eating <Y> very much <Z>
1
2
3

为什么这样设计?

  1. Span Corruption 更接近实际生成任务:翻译、摘要都是生成连续的文本,不是逐词填空
  2. Decoder 学会了「从 Encoder 的理解中提取信息并生成」,这是翻译和摘要需要的能力

# 2.2 预训练数据:C4 语料库

T5 用的是 C4(Colossal Clean Crawled Corpus):

  • 从 Common Crawl 爬取的网页
  • 经过严格清洗(去低质量、去重复、去非英语)
  • 总量:750GB 文本

比 BERT 的 Wikipedia + BookCorpus(16GB)大了 40 倍。

# 三、T5 的 Encoder 和 Decoder 如何协作

# 3.1 Encoder 的任务:理解输入

Encoder 接收完整的输入文本(包括 prefix 和内容),用双向 Self-Attention 理解整个序列。

例如翻译任务:

输入:translate English to Chinese: I love you
1

Encoder 经过 12 层 Self-Attention 后,输出每个词的语义向量:

[translate] → 向量1
[English] → 向量2
[to] → 向量3
[Chinese] → 向量4
[:] → 向量5
[I] → 向量6
[love] → 向量7
[you] → 向量8
1
2
3
4
5
6
7
8

这些向量包含了整个输入的语义信息。

# 3.2 Decoder 的任务:生成输出

Decoder 从 <BOS> 开始,逐词生成目标文本。

关键是 Cross-Attention:

  • Decoder 的 Query 来自当前生成的词
  • Key 和 Value 来自 Encoder 的输出

生成第一个词「我」时:

  • Decoder 的 Query:<BOS> 的向量
  • Decoder 的 Key 和 Value:Encoder 输出的 8 个向量
  • Cross-Attention 计算:<BOS> 和哪些输入词最相关?(应该关注「I」)
  • 生成:「我」

生成第二个词「爱」时:

  • Decoder 的 Query:「我」的向量
  • Decoder 的 Key 和 Value:仍然是 Encoder 输出的 8 个向量
  • Cross-Attention 计算:「我」和哪些输入词最相关?(应该关注「love」)
  • 生成:「爱」

Decoder 的每一步都能"回头看" Encoder 理解的输入,这是 Encoder-Decoder 架构的核心优势。

# 3.3 与 Decoder-only(GPT)的区别

GPT 的 Decoder 只能看已生成的输出:

  • 生成「我」时,只能看 <BOS>
  • 生成「爱」时,只能看 <BOS> 我
  • 输入「I love you」也在同一个序列里,但 Decoder 的因果掩码让它只能「从左往右」看

T5 的 Decoder 能通过 Cross-Attention 随时回头看 Encoder 理解的输入:

  • 生成「我」时,Cross-Attention 可以关注输入的「I」
  • 生成「爱」时,Cross-Attention 可以关注输入的「love」
  • 输入和输出是分开的两个序列,Decoder 可以灵活地「对齐」输入和输出

这是为什么翻译任务更适合 Encoder-Decoder——源语言和目标语言的词序不同,需要 Decoder 灵活地从 Encoder 输出中「抽取」对应的信息。

# 四、T5 的变体:T5-Small / Base / Large / XL / XXL

T5 有 5 个版本,从小到大:

模型 参数量 Encoder 层数 Decoder 层数 d_model 显存占用
T5-Small 60M 6 6 512 ~1GB
T5-Base 220M 12 12 768 ~3GB
T5-Large 770M 24 24 1024 ~10GB
T5-3B 3B 24 24 1024 ~30GB
T5-11B 11B 24 24 1024 ~100GB

特点:

  • Small 和 Base 适合快速实验和资源受限场景
  • 3B 和 11B 在很多任务上接近或超过 GPT-3(175B)

# 五、T5 为什么在翻译和摘要上有优势

# 5.1 输入和输出是不同语言/格式

翻译任务:

  • 输入:英语句子
  • 输出:中文句子

摘要任务:

  • 输入:一篇长文(可能几千词)
  • 输出:100 词的摘要

这类任务的特点是:输入和输出不是同一种语言、不是同一种长度。

Encoder-Decoder 架构天然适合:

  • Encoder 专门理解输入(不管多长、什么语言)
  • Decoder 专门生成输出(可以和输入长度、语言完全不同)
  • Cross-Attention 让 Decoder 灵活地从 Encoder 输出中「抽取」对应信息

Decoder-only(GPT)呢?

  • 输入和输出在同一个序列里:translate English to Chinese: I love you <SEP> 我 爱 你
  • Decoder 的因果掩码让它只能「从左往右」看,不能像 Cross-Attention 那样灵活对齐

在翻译任务上,T5(Encoder-Decoder)比 GPT-3(Decoder-only)效果更好。

# 5.2 Encoder 可以用双向注意力

翻译任务需要理解整个源语言句子的语义,双向注意力比单向注意力更准确。

例如翻译「I didn't go because I was sick」:

  • 双向理解:「didn't go」和「was sick」互相呼应,语义是因果关系
  • 单向理解(GPT):看到「didn't go」时还没看到「was sick」,可能理解不到位

T5 的 Encoder 用双向 Self-Attention,能完整理解源语言;Decoder 再根据理解的语义生成目标语言。

# 5.3 更适合固定输入-输出格式的任务

T5 的 text-to-text 范式适合输入和输出格式固定的任务:

  • 翻译:源语言 → 目标语言
  • 摘要:长文 → 短摘要
  • 问答:问题 + 上下文 → 答案

GPT 的自回归生成适合开放式生成:

  • 对话:不知道会聊多久、聊什么
  • 续写:不知道会生成多长的文本
  • 代码生成:不知道需要多少行

如果你的任务是「输入一段固定格式的文本,输出另一段固定格式的文本」,T5 更合适。

# 六、T5 的后续改进

# 6.1 mT5:多语言版本

mT5(multilingual T5)在 101 种语言的语料上预训练,支持跨语言翻译。

例如:

输入:translate Chinese to Spanish: 我爱你
输出:Te amo
1
2

mT5 的 Encoder 能理解 101 种语言,Decoder 能生成 101 种语言,一个模型搞定所有语言对的翻译。

# 6.2 FLAN-T5:指令微调版本

FLAN-T5 是 T5 的指令微调版本(类似 ChatGPT 对 GPT-3 的关系)。

在 1800+ 个任务上用指令格式微调,让模型更听话、更通用:

  • 输入:Translate this to French: I am happy
  • 输出:Je suis heureux

FLAN-T5 在 Zero-Shot 任务上比原始 T5 强很多。

# 6.3 T5-XXL:11B 参数的大模型

T5-XXL(11B 参数)在很多任务上和 GPT-3(175B 参数)打平,证明了 Encoder-Decoder 架构的参数效率更高。

同样参数量,T5 比 GPT 效果更好(在翻译和摘要任务上)。

# 七、T5 vs GPT:什么时候该用哪个

场景 推荐模型 原因
翻译 T5 / mT5 Encoder-Decoder 更适合源语言和目标语言的对齐
摘要 T5 输入长、输出短,Encoder 双向理解更准确
问答(输入=问题+长文) T5 Encoder 理解长文,Decoder 生成答案
对话 GPT / ChatGPT Decoder-only 更适合开放式生成
续写 GPT 自回归生成天然适合续写
代码生成 GPT / Codex 代码是自回归的(从上往下写)
分类、匹配 BERT 或 T5 BERT 微调更快,T5 可以用 text-to-text 范式

简单规则:

  • 如果输入和输出格式差别大(如翻译、摘要),用 T5
  • 如果输入和输出是同一种语言、开放式生成(如对话、续写),用 GPT
  • 如果资源受限、需要快速部署,用 T5-Small 或 BERT

# 八、T5 没有成为主流的原因

虽然 T5 在翻译和摘要上有优势,但今天的大模型主流是 Decoder-only,原因有三个:

# 8.1 用户需求更偏向开放式生成

ChatGPT 火了之后,用户发现:他们更需要的是「对话、写作、创意生成」,而不是「翻译、摘要」。

对话和写作是开放式的,没有固定的输入-输出格式,Decoder-only 更灵活。

# 8.2 Decoder-only 的架构更简单

Encoder-Decoder 有两组参数(Encoder 和 Decoder),训练和推理都更复杂。

Decoder-only 只有一组参数,架构简洁、训练效率高、推理更快。

# 8.3 规模定律在 Decoder-only 上更明显

OpenAI 的研究发现:Decoder-only 模型的能力随参数量增长更快。

同样参数量,GPT-3(175B Decoder-only)比 T5-XXL(11B Encoder-Decoder)在更多任务上效果更好。

# 九、总结

T5 的核心是 text-to-text 范式 + Encoder-Decoder 架构:

  • 所有任务统一为「输入文本 → 输出文本」
  • Encoder 用双向 Self-Attention 理解输入
  • Decoder 用 Cross-Attention 从 Encoder 输出中提取信息并生成

T5 的优势:

  • 翻译、摘要等任务上比 GPT 效果更好
  • Encoder-Decoder 更适合输入和输出格式差别大的任务
  • 参数效率更高(11B 的 T5 打平 175B 的 GPT-3)

T5 没有成为主流的原因:

  • 用户需求更偏向开放式生成(对话、写作)
  • Decoder-only 架构更简洁
  • 规模定律在 Decoder-only 上更明显

什么时候用 T5:

  • 翻译、摘要、问答等输入输出格式差别大的任务
  • 资源受限、需要小模型快速部署
  • 垂直领域的文本转换任务

下一篇我们讲 MoE(Mixture of Experts)——稀疏模型为什么越来越流行,DeepSeek 和 Mixtral 为什么都选 MoE。


相关文章:

  • BERT:双向编码的代表(理解 Encoder)
  • GPT:自回归成为主流(理解 Decoder)
  • Transformer 整体架构(理解 Encoder-Decoder 协作)
Last Updated: 10/24/2026, 10:55:19 AM

评论

验证登录状态...

侧边栏 侧边栏
夜间模式 夜间
卡码简历 卡码简历
代码随想录 代码随想录
卡码投递表 卡码投递表🔥
2026实习校招群 2026群
添加客服微信 2026实习校招客服微信 PS:通过微信后,请发送姓名-学校-年级-2026实习/校招
支持卡码笔记 支持卡码笔记
鼓励/支持/赞赏Carl 卡码笔记赞赏码
1. 如果感觉本站对你很有帮助,也可以请Carl喝杯奶茶,金额大小不重要,心意已经收下
2. 希望大家都能梦想成真,有好的前程,加油💪