T5(Text-to-Text Transfer Transformer)是 Google 于 2020 年提出的一种统一架构的预训练语言模型,其核心思想是:将所有 NLP 任务统一建模为文本到文本(Text-to-Text)的问题。
一、T5 模型概述
特性 | 内容 |
---|---|
提出团队 | Google Research (Colin Raffel 等) |
论文名称 | Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer |
架构 | 基于 Transformer 的 Encoder-Decoder |
统一方式 | 输入、输出全部是文本 |
模型名称 | T5 = Text-To-Text Transfer Transformer |
二、T5 的核心思想:一切皆是文本转换
T5 将不同的 NLP 任务转换为“文本到文本”的格式:
任务类型 | 输入示例 | 输出示例 |
---|---|---|
文本分类 | sst2: this movie is great! | positive |
翻译 | translate English to German: How are you? | Wie geht es dir? |
文本摘要 | summarize: The US president ... | The president spoke ... |
文本生成 | write a sentence about cats: | Cats are playful pets. |
QA 问答 | question: Where is Eiffel Tower? context: ... | Paris |
这种统一形式使得 T5 可以用 一种架构做所有任务,非常适合多任务学习和迁移学习。
三、模型架构(基于标准 Transformer)
T5 架构类似于标准 Transformer 的 Encoder-Decoder 结构,包括:
-
Encoder:处理输入文本(token 级别)
-
Decoder:自回归地生成输出文本(逐词预测)
它使用了许多改进技巧(如 Pre-LN、相对位置编码、LayerNorm 等)。
四、预训练任务:Span Corruption
T5 使用了自定义的 “填空式预训练任务”,叫做 Span Corruption:
-
随机遮盖输入文本中的连续 span(不是单个词)
-
用一个占位符
<extra_id_0>
替代该 span -
模型学习预测被遮盖的 span 内容
示例:
输入:
The <extra_id_0> walked in the <extra_id_1>.
原始句子:The cat walked in the house.
输出:
<extra_id_0> cat <extra_id_1> house <extra_id_2>
相比 BERT 的 MLM(单 token 预测),T5 预训练方式更适合生成任务。
五、T5 模型版本(参数规模)
模型版本 | 参数量 | 备注 |
---|---|---|
T5-Small | 60M | 适合教学和小型任务 |
T5-Base | 220M | 类似 BERT-base |
T5-Large | 770M | 类似 BERT-large |
T5-3B | 3B | 更强的表达能力 |
T5-11B | 11B | 非常强大,需大显存支持 |
六、使用 T5(以 Hugging Face Transformers 为例)
1. 安装依赖
pip install transformers
2. 文本摘要示例
from transformers import T5Tokenizer, T5ForConditionalGeneration
tokenizer = T5Tokenizer.from_pretrained("t5-small")
model = T5ForConditionalGeneration.from_pretrained("t5-small")
text = "summarize: The US president gave a speech about healthcare reform..."
inputs = tokenizer(text, return_tensors="pt", max_length=512, truncation=True)
summary_ids = model.generate(inputs.input_ids, max_length=50)
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
print(summary)
3. 文本分类示例
text = "sst2: this movie is absolutely wonderful!"
inputs = tokenizer(text, return_tensors="pt")
outputs = model.generate(inputs.input_ids)
print(tokenizer.decode(outputs[0]))
# 输出可能为:positive
七、T5 的优缺点
优点
-
任务统一性强:一句话搞定所有 NLP 任务
-
适合生成类任务:如摘要、翻译、问答、改写
-
结构通用性强:Encoder-Decoder 架构适应性广
-
支持大规模多任务预训练
缺点
-
推理速度慢(Decoder 是自回归的)
-
占显存大,不如 Encoder-only 模型(如 BERT)高效
-
文本分类等简单任务可能效率偏低
八、T5 在实际任务中的应用
应用场景 | 使用方式 |
---|---|
多语言翻译 | 通过 translate <src> to <tgt>: ... 构造输入 |
文本生成 | 使用 generate text: ... |
关键词提取 | 使用 extract keywords: ... |
法律摘要生成 | 输入法律文本,加上 summarize: 任务标记 |
情感分析 | sst2: + 文本,输出 positive / negative |
九、改进版本和变种
模型 | 特点 |
---|---|
mT5 | 多语言版本,支持100+语言 |
ByT5 | 字符级 T5,不用 tokenizer |
T5.1.1 | 更强正则化、Dropout 调整 |
FLAN-T5 | 加入指令微调,效果大幅提升 |
十、总结
项目 | 内容 |
---|---|
核心理念 | 所有 NLP 任务皆转为 Text-to-Text |
架构 | Encoder-Decoder Transformer |
预训练 | span masking + text generation |
应用 | 分类、生成、翻译、摘要、问答、句子重写等 |
工具 | transformers 库支持良好,可直接部署 |