第 7 章

T5:统一范式的最后一块拼图

2019年秋天,谷歌大脑团队的一间会议室里,投影仪打出一张表格。左边一栏列着翻译、摘要、问答、情感分类、自然语言推理——六种NLP任务的名称。右边一栏,所有任务被改写成完全相同的格式:输入文本,输出文本。

Colin Raffel站在屏幕旁边。他没有说太多话。表格本身已经足够说明问题。在座的人都明白这张表格意味着什么。

十八个月前,BERT用双向编码器横扫了NLP领域的十一项基准测试,Google Research在“理解”这个战场上赢得了闪电战。

但那场胜利留下了一个工程上的后遗症:每一个被BERT征服的任务,都拖着一套独立的适配层。分类任务要接分类头,序列标注要接标注头,回归任务要接回归头。当BERT被部署到搜索、助手、翻译、云API四条产品线上时,实际运行的是四个不同的微调版本,每个版本有自己的代码库、超参数配置和运维脚本。BERT每往一个新业务场景扩展一次,就有一群工程师要重写一套适配层。

Google在2019年拥有数万名软件工程师,但这种人力消耗仍然不可持续。更深的尴尬在于逻辑层面:如果“理解语言”真的是一件事,为什么处理它的工具要被拆成几十个变体?

Raffel的表格给出了一个激进的回答:不需要。翻译可以被写成“将英语译为德语:That is good”,输出“Das ist gut”。摘要可以被写成“总结:[文档全文]”,输出摘要文本。问答可以被写成“问题:法国首都是什么?上下文:法国是欧洲国家,首都为巴黎”,输出“巴黎”。情感分类可以被写成“sst2句子:这部电影是杰作”,输出“正面”。

所有任务都被压扁成同一种格式。这就是T5——Text-to-Text Transfer Transformer——的核心设计。它来自一个近乎偏执的信念:如果语言处理的所有形式都可以被还原为“文本到文本”,那么处理语言的工具就应该只有一个模型、一套代码、一个损失函数。

不需要为翻译单独设计解码器,不需要为分类单独接softmax层。区别只在于你喂给模型什么前缀,以及你期待它吐出什么后缀。这个想法在2019年的NLP领域极其大胆。彼时整个领域正在经历BERT引爆的预训练加微调范式革命,每家实验室都在疯狂刷新各个任务的排行榜。很少有人停下来问一个更根本的问题:我们真的需要为每一个任务保留独立的输出架构吗?Raffel和他在Google Research的同事们问了这个问题。他们的回答是不需要。T5论文于2019年10月以预印本形式发布,标题平淡得几乎让人忽略它的野心——《探索迁移学习的极限:一个统一的文本到文本Transformer》(Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer)。但翻开正文第一页,你就知道这不是一篇普通的实验报告。

它不是在报告一个新模型,而是在宣布一种新的工作方式。论文的核心洞察可以概括为一句话:将所有基于文本的NLP任务统一为文本到文本格式,使得同一套模型、同一个训练目标、同一个解码过程可以无缝应用于翻译、摘要、问答、分类等截然不同的任务。这不是一次孤立的模型创新。这是Google在BERT闪电战之后,试图用单一技术范式收束整个NLP领域的第二次总攻。

第一次总攻用的是双向理解——BERT通过掩码语言模型实现了对上下文的同时编码,从而在理解类任务上碾压了GPT的单向自回归路线。第二次总攻用的则是统一框架——T5试图将理解和生成这两个长期分家的技术路线,塞进同一个Transformer的编码器-解码器架构里。

要理解这一步的战略意义,必须回头看2019年初的NLP格局。OpenAI在2018年6月发布了GPT-1,用十二层单向Transformer在多个任务上证明了自回归预训练的有效性。

Google在同年10月用BERT回击,用双向编码器在理解类任务上全面超越GPT。到2019年2月,OpenAI发布了GPT-2,将参数从一亿一千万膨胀到十五亿,并在语言生成的流畅性上展示出令人不安的能力——以至于他们最初拒绝公开完整模型,理由是担心被滥用。整个领域被劈成两条路线:一条是Google主导的理解优先,用BERT系的双向编码器做判别式任务;另一条是OpenAI主导的生成优先,用GPT系的自回归解码器做生成式任务。

Google当然看见了这条裂谷。T5的应对策略不是选边站,而是把两条路线都吞掉。它采用的不是GPT的纯解码器架构,也不是BERT的纯编码器架构,而是Transformer的原始完整形态——编码器-解码器架构。在T5的框架下,编码器负责理解输入,解码器负责生成输出。由于所有任务都被转化为文本到文本,编码器-解码器的分工变得极其自然:编码器处理你给的任何前缀和上下文,解码器生成你想要的任何答案。

这是一个优雅的暴力解。说它优雅,是因为它用一套逻辑消解了所有任务之间的架构差异。说它暴力,是因为它要求你把世界上所有的NLP任务都塞进同一个模子里——不管那个任务原本长得多么不像翻译。

情感分类的传统做法是在BERT的输出层上接一个两分类线性层,输出两个logits,取argmax。但在T5里,你得让模型直接生成字符串“positive”或“negative”。如果生成了“posiive”——拼错了——这个样本就算错。这意味着模型不仅要学会判断情感,还要学会正确拼写那个单词。对分类任务而言,这完全是多余的负担。

但这就是T5的赌注:多余的负担,换来的是一套统一到极致的工程管线。一旦你接受了所有任务都是文本到文本这个设定,部署和维护成本就断崖式下跌。一套代码,一个模型,一个推理接口。Google Cloud的AI Platform只需要托管一个T5模型,就能同时驱动翻译API、文本分析API、客服对话API。

Google搜索团队只需要维护一套推理流水线,就能让模型同时处理查询理解、文档摘要和直接回答——前提是你能把这三个任务分别写成不同前缀开头的文本串。

这个赌注的商业逻辑是碾压级别的。在2019年,一家中型互联网公司如果要自建NLP能力,通常需要维护三到五个不同的模型:一个BERT做分类和实体识别,一个GPT或LSTM做文本生成,可能还有一个专门的翻译模型。每个模型有自己的训练脚本、评估脚本、推理服务和运维监控。如果想把业务扩展到十种语言,每个模型还要再乘十。T5提出的愿景是,你只需要一个模型,用不同的前缀调用它。

这当然首先是一份给Google内部产品线的礼物。谷歌搜索在2019年10月25日正式宣布在英文搜索中部署BERT,提升了约十分之一的查询理解质量。但BERT只能理解,不能生成。当用户输入一个需要生成答案的查询——比如要求用三百字总结某个复杂概念——BERT可以把问题理解得精准无比,但它无法生成答案。

要生成答案,你需要另一个模型。T5的设计让“理解即生成”成为可能:同一个模型,在读入带有“总结”前缀的文档之后,直接输出一段摘要。对谷歌搜索而言,这意味着向直接回答功能迈出了关键一步——用户不需要点击链接,答案直接在搜索结果顶部生成。

但这套设计在Google内部也遭遇了阻力。一个被反复提出的质疑是:把分类任务强行变成生成任务,真的划算吗?

在GLUE基准测试上,T5-Large的表现确实可以媲美甚至略微超过同等规模的BERT。但为了达到这个成绩,它需要生成单词而非输出数字——这本身就消耗了更多算力。

推理阶段的每一次分类判断,BERT只需要跑一遍编码器然后乘一个矩阵;T5却需要跑一遍编码器再跑一遍解码器,逐词生成答案。对于高并发的在线服务场景,这多出来的解码步骤就是真金白银的GPU小时。Raffel的团队当然知道这一点。

他们在论文中坦率地讨论了这个问题,但他们的回应是:当模型规模足够大时,统一框架带来的数据效率和迁移能力,将超过特定任务架构优化带来的短期收益。这已经隐约透露出一种规模信仰——不是后来那种极端乐观的“只要模型够大一切问题都会消失”,而是一种更审慎的工程判断:当你的算力预算大到一定程度,统一性本身就是效率。

这种判断能否成立,最终取决于数据。T5论文的另一个核心贡献,是为这个统一框架配套了一个规模空前的预训练语料库——C4,全称Colossal Clean Crawled Corpus。这个名字本身就是一个宣言:我们要的是巨大且干净的语料。而“干净”这个词背后,是一场关于数据质量、偏见和知识覆盖面的隐秘战争。

C4的起点是Common Crawl——一个从2008年开始持续抓取全网网页的开放数据集。到2019年,Common Crawl每个月大约抓取二百亿个网页,原始数据总量以PB计。

但任何人都知道,互联网文本的原始状态是一团巨大的垃圾:自动生成的SEO页面、满屏的JavaScript渲染残渣、重复内容、色情与暴力文本、数不清的菜单、导航栏、版权声明、评论区里的无意义重复。如果直接拿这堆东西训练一个语言模型,它学会的第一件事大概是复读“登录注册忘记密码”。

T5团队对Common Crawl的2019年4月快照进行了系统性的清洗。这个清洗过程本身就是一本关于“什么算是知识”的暴力编辑手册。

过滤规则包括:移除任何包含“javascript”一词的页面,因为这类页面通常是前端代码而非自然语言;移除所有包含特定脏词列表的页面,这个列表被设计得极其宽泛,宁可错杀;用语言检测工具langdetect过滤掉非英语页面——C4的第一个版本是纯英语语料库;去掉所有短于三个句子的文档,因为它们通常是导航页或无意义片段;通过去重算法消除重复段落;移除所有包含“lorem ipsum”这类排版占位符文本的页面。

经过这一系列过滤后,C4从原始Common Crawl的约二十TB压缩数据中提取出了约七百五十GB的清洗后英文文本。这是一个惊人的缩减率——大约只有原始数据的百分之三到四被保留下来。换句话说,互联网文本的百分之九十六以上,在T5团队的眼中不属于清洁的英语自然语言。

这就是T5范式背后最隐秘的暴力:它不仅在任务形式上施加了统一,在“什么是合法训练数据”的定义上也施加了极其武断的过滤。那些被过滤掉的页面里,当然有大量真正的垃圾——但有没有可能,某些非标准的英语变体、某些混合语言的社区对话、某些包含少数群体俚语的讨论,也被语言检测器和脏词过滤器一并扫除了?

C4的构建后来在学术界引发了持续的讨论和批评。研究者发现,C4中的文本在地理分布上严重偏向美国和西欧;非裔美国人英语的表达方式被语言检测器以较高概率误判为非英语;来自印度、尼日利亚等英语为官方语言但使用形态与英美有异的国家的网页,也被大量过滤。

这不是阴谋,这是默认设定:当你的目标是构建一个干净的英语语料库时,干净的边界必然是由主导语言的精英书写习惯划定的。

但站在2019年底的Google视角,这场数据清洗战争是必须打赢的。BERT的训练数据主要是英文维基百科和BooksCorpus——前者是人类知识的精选版本,后者是已出版书籍的文本。这两个语料库的规模加在一起不过二十GB左右。

T5想要证明统一框架的威力,就必须在规模上再上一个数量级。C4的七百五十GB语料,使得T5的预训练数据量是BERT的三十倍以上。这个数字差,在那个时间点上,本身就是一种论证:如果你还在用维基百科训练模型,你已经出局了。

有了统一框架,有了清洗后的海量数据,剩下的问题就是:多大的模型?T5团队对这个问题的处理方式,预示了此后两年整个领域的军备竞赛逻辑。他们训练了五个版本:T5-Small、T5-Base、T5-Large、T5-3B、T5-11B——参数量从六千万一路膨胀到一百一十亿。

这是一套系统性的规模实验,从可以在单张GPU上运行的小玩具一直覆盖到需要专用TPU集群才能训练的巨兽。T5-11B是当时公开可用的最大模型之一。

它不是在炫耀算力,而是在证明一个核心论点:文本到文本的统一框架,随着模型规模的增加,展现出优于单任务架构的规模收益。论文里那张著名的曲线图显示,在翻译、摘要、问答、分类等多个任务上,T5的性能随参数量增加而持续提升,且没有出现明显的平台期。这让Google内部的决策者看到了一个清晰的工程经济账:训练一个一百一十亿参数的大模型,然后用它驱动十种产品,比训练十个十亿参数的小模型分别驱动十种产品,总体上更省算力、更省人力、也更容易迭代。

但这套逻辑在产业层面引发的后果,超出了Google的控制。T5的论文、代码和四个预训练版本——Small到3B,11B版本后来以T5-XXL的名义发布——在2019年底至2020年初全部公开。

Hugging Face的Transformers库在第一时间接入了T5,提供了一行代码加载模型的接口。对于全球的学术实验室和初创公司而言,这意味着他们突然拥有了一套比BERT更强大、且覆盖理解加生成全能力的免费工具包。一个只有两块GPU的博士生,下载T5-Base权重,花一个下午微调,就能在自己的数据集上得到一个质量可观的翻译模型或摘要模型。

这是一次无意的技术扩散。Google发布T5的出发点,和发布BERT时如出一辙——巩固自己在NLP基础研究领域的绝对影响力,吸引全球研究者基于Google的技术栈进行二次开发,从而将Google的范式变成全世界的范式。这个策略在BERT身上取得了空前成功:到2020年,已有超过一百五十篇论文以BERT为基线或改进对象,BERT成为NLP实验中无处不在的基线。

T5的开源延续了这一策略,但它的后果更加深远。BERT只是一个理解引擎,你拿到它之后,还得自己搭生成系统。

T5是一个全套解决方案:你只需要决定输入什么前缀、输出什么后缀,模型帮你搞定一切。这意味着,Google在无意中为即将爆发的开源大模型运动提供了核心武器。2022年到2023年间涌现的大量开源模型——FLAN-T5系列、各种T5变体——几乎都是直接在T5的基座上微调而来。

当GPT-3在2020年6月以闭源API的形式发布时,开源的T5系列成为那些无法获得OpenAI API的开发者最后的阵地。Google种下了统一范式的种子,却在几年后发现,这颗种子在对手的花园里也长得枝繁叶茂。

但在2019年底,这个后果还只是一个遥远的低音。当时的主角是会议室里的决策。

Google的高管层需要做出一个判断:在BERT已经占领了NLP理解类任务的前提下,是否应该全力推动T5成为内部所有文本处理业务的统一底座?支持派的核心论点是效率和可维护性。

Google搜索每天处理数十亿次查询,Google翻译服务超过一百种语言,Google Cloud的AI API被数百万开发者调用。如果这些产品各用各的模型,维护成本是不可持续的。T5的统一框架承诺将模型版本的数量减少一个数量级。对一家以组织世界上信息为使命的公司来说,减少内部信息系统的复杂度本身就是巨大的商业价值。

反对派的理由同样硬核:成本。T5的编码器-解码器架构在做推理时的计算量,是同参数量BERT的两倍左右。对于翻译和摘要这类必须生成的场景,这个成本是合理的,因为无论如何你都需要一个解码器。但对于情感分类、命名实体识别、垃圾邮件检测这类高频任务,用T5取代BERT意味着凭空增加一倍的推理成本。以谷歌搜索为例,每天处理数十亿次查询,其中相当一部分需要实时理解查询意图和网页内容——如果这部分推理成本翻倍,那就是一年数千万到上亿美元的额外电费和硬件折旧。这场辩论没有明确的胜负。

实际上,Google采取了一条折中路线:T5被深度整合到了Google Cloud的AI Platform中,作为文本生成和多任务处理的推荐方案;BERT及其变体继续保持在大规模理解类任务中的主力地位;而在Google搜索的公开部署中,BERT仍然是核心,T5更多扮演实验性和补充性的角色。

这不是技术路线的全面更替,而是一种实用主义的双轨制。但从长期来看,这个双轨制本身就是一种不稳定均衡——当模型规模继续膨胀、算力成本继续下降、统一框架的边际收益继续增大时,分裂的架构迟早会向统一架构收敛。

T5在2020年初正式发布后,在学术界引发的反响是爆炸性的。它很快成为文本生成任务的首选基线,尤其是在可控文本生成领域——研究者发现,通过在输入前缀中加入控制指令,T5展现出令人惊喜的任务分解能力。

这已经隐隐指向了后来被称为指令微调的技术方向:如果模型能理解用自然语言写成的指令,并在不同任务之间泛化,那么“所有任务都是文本到文本”这个框架的想象力边界,就远远超出了最初的翻译和摘要。

事实上,T5的哲学在Google内部催生了后续一系列重要的工作。2021年发布的FLAN直接沿用了T5的架构,并在大量用自然语言指令描述的任务上进行了微调,证明模型可以在训练期间从未见过的全新任务上取得不错的零样本表现。2022年的T5X和后来的UL2进一步将统一框架扩展到更多样化的预训练目标。这些工作的共同祖地,都是2019年秋天Raffel在谷歌大脑会议室里投出的那张表格——左边一栏是六种任务,右边一栏全是文本到文本。

但T5也暴露了一条它自己无法跨越的鸿沟。这条鸿沟不是架构上的,而是认知上的。一个能把所有任务都转化为文本生成的模型,它学会的是形式的统一,不是事实的统一。

T5可以非常流畅地生成一段关于药物相互作用的三句话摘要,但这三句话在医学上是否正确,框架本身完全没有保证。它可以回答“北京奥运会哪一年举办”这样的封闭问题——这类问题的答案在训练语料中高频出现,模型靠记忆就能复现——但当你问它一个涉及具体药物相互作用的安全性问题时,它同样会自信地生成一段文本,而这段文本可能致命。

这不是T5独有的问题,而是所有基于统计学习的大语言模型的通病。但T5的统一框架让这个问题变得更加显眼:当你宣称一个模型可以做一切时,人们就真的会用它来做一切——包括那些一旦出错就后果严重的事情。而模型本身并不知道自己不知道什么。它只是一个被训练来最大化下一个词概率的概率分布,对真和假没有内在表征。

Google的研究者对此心知肚明。T5论文中有一整节讨论模型生成的事实准确性问题,但给出的解决方案是审慎的——不是架构层面的根本解决,而是靠更好的训练数据和更大的模型来缓解。

这里的潜台词是:我们相信,当数据足够大、模型足够强时,事实性错误会减少。这和OpenAI在同一时期信奉的规模法则遥相呼应。区别在于,OpenAI把规模当作唯一答案,而Google试图用工程化的框架设计来引导规模的力量。

两者的分歧,很快将在GPT-3的轰鸣声中变成一条公开的战线。到2020年春天,T5已经完成了它在技术史上的亮相。它留下的最深刻印记,不是在某个基准排行榜上刷出的数字,而是一种思维方式的转变。在T5之前,为每个任务设计最适合的模型是NLP领域的默认信条。T5之后,用一个模型做所有事变成了新的一阶原则,所有后续的研究——从GPT-3的提示学习到ChatGPT的指令跟随——都默认了这个原则,尽管实现路径各不相同。它也完成了Google的阶段性战略目标。在BERT闪电战夺取了理解高地之后,T5补齐了生成这一翼。

Google Research现在拥有了从理解到生成的完整技术栈,并且通过开源将这套技术栈变成了全球学术界的基础设施。从商业竞争的角度看,这是在OpenAI面前筑起的一道制度性护城河:当全世界的开发者都在使用Google开源的模型和框架时,OpenAI的商业化API就失去了锁定开发者的能力。

但这道护城河的基石,恰恰也是它的漏洞所在。因为开源,T5的架构和代码被全世界的竞争者拆解、吸收、改造。Meta、微软,甚至后来的中国科技公司,都在T5的基础上开发出了自己的统一框架变体。

而OpenAI在2020年6月发布的GPT-3,用一千七百五十亿参数和闭源API的形式,绕过了开源社区的护城河,直接从开发者口袋里赚取调用费。谷歌的开源策略在学术影响力上大获全胜,却在商业变现的赛道上为对手留下了空当。

T5发布一年多后,一位曾参与T5开发的工程师在Google内部的技术论坛上写了一段话。

他说,T5教会了我们如何用一套代码处理所有NLP任务,但它没能教会我们如何让模型在面对一个它不了解的问题时,坦率地说“我不知道”。它被训练成永远有答案——而这一点,恰好是所有大语言模型最深层的原罪。

这段话没有被收录进任何一篇论文,但它精确地定义了T5之后整个领域面临的核心矛盾。形式的统一已经完成。代码的统一已经完成。管线的统一已经完成。但“知道”和“假装知道”之间的界限,依然像一条模糊的行政分界线,横亘在每一个生成文本的后面。

此时,一个问题已经无可回避:如果更大的规模、更多的数据、更统一的框架,都无法解决可靠性的问题,那么下一张牌是什么?OpenAI的回答正在加州的机房里日夜训练,准备用纯粹的规模暴力给出一个截然不同的答案。那个答案将不再试图区分理解和生成,不再为任务设计前缀,甚至不再假装自己知道什么是事实。它将只做一件事:预测下一个词。然后,让世界自己去判断那些词的真假。