Transformer 的提出是 NLP 领域的里程碑,其 Encoder-Decoder 结构为后续模型提供了基础架构。注意力机制的引入彻底改变了模型处理序列数据的方式。
主要针对任务:
维度 | NLU(自然语言理解) | NLG(自然语言生成) |
---|---|---|
核心目标 | 理解人类语言 → 从文本中提取语义、意图、结构信息 | 生成人类语言 → 将结构化数据或语义转化为自然语言文本 |
输入 | 自然语言文本(如用户提问、评论、语音转文字等) | 结构化数据(如数据库、知识图谱、数值、中间表示等) |
输出 | 结构化语义信息(如意图、实体、情感、分类标签、逻辑形式等) | 自然语言文本(如回答、摘要、报告、对话回复、故事等) |
典型任务 | - 意图识别<br>- 命名实体识别(NER)<br>- 情感分析<br>- 文本分类<br>- 语义解析<br>- 问答理解 | - 机器翻译<br>- 文本摘要<br>- 对话生成<br>- 报告生成<br>- 故事创作<br>- 代码注释生成 |
技术重点 | 语义解析、上下文建模、消歧、信息抽取、表示学习 | 语言建模、流畅性控制、一致性保持、风格迁移、内容规划 |
模型倾向 | BERT、RoBERTa、ERNIE 等 Encoder 架构更适合 | GPT、T5、LLaMA、BART 等 Decoder 或 Seq2Seq 架构更适合 |
应用场景 | 智能客服意图识别、搜索关键词理解、舆情监控、语音助手前端 | 聊天机器人回复、自动写稿、AI写作、语音合成前端文本生成 |
类比 | 👂 “听懂人话” | 💬 “说人话” |
✅ 三大主流架构路线:
Encoder-Only(代表:BERT)
- 结构:仅使用 Transformer 的 Encoder 层堆叠。
- 预训练任务:掩码语言模型(MLM),即随机遮盖部分词并预测。
- 优势领域:自然语言理解(NLU)任务,如分类、问答、命名实体识别等。
- 开创者:Google。
Decoder-Only(代表:GPT 系列)
- 结构:仅使用 Transformer 的 Decoder 层(去掉 Encoder-Decoder Attention)。
- 预训练任务:标准语言模型(LM),即自回归预测下一个词。
- 优势领域:自然语言生成(NLG),如文本续写、对话、创作等。
- 发展特点:通过“大力出奇迹”——扩大参数规模 + 海量语料,演变为当今主流大语言模型(LLM)的基座。
- 开创者:OpenAI。
Encoder-Decoder(代表:T5)
- 结构:完整保留 Transformer 的 Encoder 和 Decoder。
- 预训练任务:文本到文本(Text-to-Text),将所有任务统一为“输入文本 → 输出文本”格式。
- 优势领域:适用于需要输入输出映射的任务,如翻译、摘要、问答等。
- 开创者:Google。
目录
1.Encoder-Only:BERT
🌟 BERT 简介
- 全称:Bidirectional Encoder Representations from Transformers
- 发布方:Google 团队
- 发布时间:2018 年
- 论文:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》
🏆 技术突破与成就
- 首次实现双向上下文建模:通过 MLM(Masked Language Model) 预训练任务,使模型能同时利用左右上下文信息,突破了传统单向语言模型(如 GPT)的限制。
- SOTA 性能:在包括 GLUE、MultiNLI 在内的 7 个 NLP 评测任务上刷新纪录,性能全面超越此前模型。
- 里程碑意义:标志着 “预训练 + 微调”范式 正式成为 NLP 领域主流方法。
🔄 后续影响与生态
- BERT 自身迭代:如 BERT-wwm、BERT-large、RoBERTa(Facebook)、ALBERT(Google)等持续优化版本。
- 衍生模型涌现:
- MacBERT:改进 MLM 任务,用近义词替换 [MASK] 提升训练一致性。
- BART:虽属 Encoder-Decoder 架构,但受 BERT 启发,融合双向编码与自回归解码。
- 工业界广泛应用:搜索、推荐、客服、信息抽取等领域大量采用 BERT 或其变体。
1.1.思想延承
Seq2Seq(Sequence-to-Sequence,序列到序列)模型。
BERT 是一个统一了多种思想的预训练模型。其所沿承的核心思想包括:
- Transformer 架构。正如我们在上一章所介绍的,在 2017年发表的《Attention is All You Need》论文提出了完全使用 注意力机制而抛弃 RNN、LSTM 结构的 Transformer 模型,带来了新的模型架构。BERT 正沿承了 Transformer 的思想,在 Transformer 的模型基座上进行优化,通过将 Encoder 结构进行堆叠,扩大模型参数,打造了在 NLU 任务上独居天分的模型架构;
- 预训练+微调范式。同样在 2018年,ELMo 的诞生标志着预训练+微调范式的诞生。ELMo 模型基于双向 LSTM 架构,在训练数据上基于语言模型进行预训练,再针对下游任务进行微调,表现出了更加优越的性能,将 NLP 领域导向预训练+微调的研究思路。而 BERT 也采用了该范式,并通过将模型架构调整为 Transformer,引入更适合文本理解、能捕捉深层双向语义关系的预训练任务 MLM,将预训练-微调范式推向了高潮。
接下来,我们将从模型架构、预训练任务以及下游任务微调三个方面深入剖析 BERT,分析 BERT 的核心思路及优势,帮助大家理解 BERT 为何能够具备远超之前模型的性能,也从而更加深刻地理解 LLM 如何能够战胜 BERT 揭开新时代的大幕。
1.2.模型架构
BERT 的模型架构是取了 Transformer 的 Encoder 部分堆叠而成,其主要结构如图3.1所示:
BERT 是专为 NLU(自然语言理解)任务设计的预训练模型
- 输入:文本序列(单句或句对)
- 输出:任务特定标签(如情感分类的“积极/消极”、实体标签、问答位置等)
- 应用场景:文本分类、命名实体识别、句子关系判断、阅读理解等。
BERT ≠ Seq2Seq 模型(重要纠正)
- 虽然 BERT 基于 Transformer 架构,但仅使用 Encoder 部分,没有 Decoder,不具备自回归生成能力。
- Seq2Seq 模型需同时具备 Encoder + Decoder(如 T5、BART、原始 Transformer),用于输入序列 → 输出序列的任务(如翻译、摘要)。
- BERT 本质是 “Sequence-to-Representation” 模型 → 输入序列 → 输出上下文语义向量。
任务适配机制:添加轻量级预测头(Prediction Heads)
- BERT 预训练后,通过在顶层添加不同结构的“任务头”适配下游任务:
- 分类任务 → 使用 [CLS] 向量 + 线性层 + Softmax → 输出类别概率(如2维情感标签)
- 序列标注 → 每个 token 向量 + 线性层 → 输出每个位置的标签
- 问答任务 → 预测答案起始/结束位置的 token
- 这些预测头参数少,在微调阶段与 BERT 主干一起训练,实现高效迁移。
- BERT 预训练后,通过在顶层添加不同结构的“任务头”适配下游任务:
模型整体既是由 Embedding、Encoder 加上 prediction_heads 组成:
BERT 将输入文本经分词 → 编码为词向量 → 经多层 Transformer Encoder 提取上下文语义 → 顶层接任务头 → 输出预测概率,完成 NLU 任务。
BERT 采用 WordPiece 作为分词方法。WordPiece 是一种基于统计的子词切分算法,其核心在于将单词拆解为子词(例如,"playing" -> ["play", "##ing"])。其合并操作的依据是最大化语言模型的似然度。对于中文等非空格分隔的语言,通常将单个汉字作为原子分词单位(token)处理。
1️⃣ 输入处理:Tokenizer → input_ids
输入原始文本(如:“这部电影太棒了!”)
通过 Tokenizer(如 WordPiece) 分词并映射为词汇表 ID →
input_ids
同时生成:
attention_mask
:标识哪些 token 是真实内容(非 padding)
token_type_ids
(句对任务):区分句子 A 和句子 B(如问答、NLI)✅ 注:Tokenizer 机制与 Transformer 一致,后续章节默认省略此部分。
2️⃣ Embedding 层:input_ids → hidden_states
将
input_ids
映射为稠密向量(词嵌入):
Token Embedding:词表中每个 token 的向量表示
Position Embedding:位置编码(BERT 使用可学习的位置嵌入,非正弦函数)
Segment Embedding(句对任务):区分不同句子
三者相加 → 得到初始
hidden_states
(维度 = 隐藏层大小,如 768 / 1024)
3️⃣ Encoder 块:堆叠 N 层 Transformer Encoder Layer
每层包含:
Multi-Head Self-Attention:捕捉 token 间全局依赖关系
Feed Forward Network (FFN):非线性变换增强表达能力
LayerNorm + Residual Connection:稳定训练、缓解梯度消失
所有层参数共享架构,逐层深化语义表示
🔹 BERT 两种标准规模:
模型版本
Encoder 层数
隐藏层维度
注意力头数
总参数量
BERT-Base
12 层
768
12
~110M
BERT-Large
24 层
1024
16
~340M
📈 参数量 = Embedding 参数 + Encoder 参数 + Pooler/Head 参数
大模型 → 更强语义建模能力,但计算开销更大4️⃣ 任务预测头(Prediction Heads)→ 输出概率
根据任务类型,取不同位置的
hidden_states
输入预测头:➤ 分类任务(如情感分析):
取 [CLS] token 的最终隐藏状态(代表整句语义)
输入线性层(
Linear(hidden_size → num_labels)
)经 Softmax → 输出各类别概率(如 [0.1, 0.9] → “积极”)
➤ 序列标注(如 NER):
取 每个 token 的最终隐藏状态
每个 token 过独立线性层 → 输出该位置标签概率
➤ 问答任务(如 SQuAD):
取每个 token 隐藏状态 → 分别预测“起始位置”和“结束位置”的得分 → Softmax 得概率
prediction_heads 其实就是线性层加上激活函数,一般而言,最后一个线性层的输出维度和任务的类别数相等,如图3.3所示:
而每一层 Encoder Layer 都是和 Transformer 中的 Encoder Layer 结构类似的层,如图3.4所示:
1.3.预训练任务
一、BERT 的核心创新:预训练任务的革新
BERT 相较于传统 Transformer 架构模型,最大的突破不在于结构,而在于提出了两个全新的预训练任务:
MLM(Masked Language Model,掩码语言模型)
NSP(Next Sentence Prediction,下一句预测)
这两个任务使模型能更好地学习双向语义关系和句子间关系,从而显著提升语言理解能力。
二、预训练-微调范式的价值
核心优势:预训练与微调分离,一次预训练 + 低成本微调 = 适配多种下游任务。
即使预训练成本极高,只要微调成本低,整体性价比依然极高。
因此,扩大模型规模 + 海量语料预训练成为提升模型能力的关键路径。
三、预训练数据的要求与挑战
数据规模要求极高(数亿甚至更多 token)。
人工标注数据无法满足规模需求 → 必须依赖无监督语料(如互联网文本)。
传统方法使用LM(Language Model):利用上文预测下文,天然适配无监督数据。
四、LM 的局限性:缺乏双向语义建模
LM 只能从左到右建模,忽略右侧上下文对当前词的影响。
虽然 Transformer 有位置编码,但不等于真正双向语义建模。
对比 BiLSTM 的成功,说明双向建模对语义理解至关重要。
五、MLM 的提出:解决双向建模 + 无监督训练的矛盾
MLM 思想:模拟“完形填空”,随机遮蔽部分词,让模型根据上下文预测被遮词。
优势:
利用双向上下文(左右词都可见)→ 真正实现双向语义建模。
仍可使用无监督语料 → 兼容海量数据训练。
示例:
输入:
I <MASK> you because you are <MASK>
输出:
love
,wonderful
总结一句话:
BERT 通过 MLM 和 NSP 预训练任务,在无监督海量数据上实现了双向语义建模,突破了传统 LM 的单向限制,为预训练-微调范式奠定了高效、通用的基础。
由于模型可以利用被遮蔽的 token 的上文和下文一起理解语义来预测被遮蔽的 token,因此通过这样的任务,模型可以拟合双向语义,也就能够更好地实现文本的理解。同样,MLM 任务无需对文本进行任何人为的标注,只需要对文本进行随机遮蔽即可,因此也可以利用互联网所有文本语料实现预训练。例如,BERT 的预训练就使用了足足 3300M 单词的语料。
✅ 一、MLM 的固有缺陷:预训练-微调不一致
问题本质:
LM(语言模型) 是“自回归”的,训练与推理一致 → 输入上文 → 预测下文。
MLM 在训练时人为插入
<MASK>
,但在下游任务中没有<MASK>
标记 → 模型在微调/推理时看到的是完整句子。这种输入分布不一致,会导致模型在下游任务中表现下降。
📌 关键矛盾:训练时依赖“遮蔽+预测”,推理时无遮蔽 → 模型学到的表征可能不适用于真实场景。
✅ 二、BERT 对 MLM 的改进策略:动态遮蔽机制
为缓解上述问题,BERT 采用 “15% token 被选中遮蔽,但具体处理方式多样化” 的策略:
处理方式 |
概率 |
目的 |
---|---|---|
替换为 |
80% |
主要训练目标,学习上下文预测能力 |
替换为随机 token |
10% |
强迫模型不依赖“只有遮蔽才需预测”,保持对所有 token 的语义建模能力 |
保持原词不变 |
10% |
最关键改进:让模型在“看到原词”的情况下仍需预测它 → 消除预训练与微调输入不一致的问题 |
改进效果:
- 模型被迫对每一个 token 都建模其上下文语义分布,而非只关注被遮蔽位置。
- 提升了模型的句子整体表征能力。
- 随机替换比例低(仅10%),不影响语言理解主任务,但增强了鲁棒性。
💡 设计哲学:通过“噪声注入”和“分布对齐”,让模型更通用、更贴近真实下游任务。
心思路是要求模型判断一个句对的两个句子是否是连续的上下文。例如,输入和输入可以是:
入:
Sentence A:I love you.
Sentence B: Because you are wonderful.
输出:
1(是连续上下文)
输入:
Sentence A:I love you.
Sentence B: Because today's dinner is so nice.
输出:
0(不是连续上下文)
通过要求模型判断句对关系,从而迫使模型拟合句子之间的关系,来适配句级的 NLU 任务。同样,由于 NSP 的正样本可以从无监督语料中随机抽取任意连续的句子,而负样本可以对句子打乱后随机抽取(只需要保证不要抽取到原本就连续的句子就行),因此也可以具有几乎无限量的训练数据。
在具体预训练时,BERT 使用了 800M 的 BooksCorpus 语料和 2500M 的英文维基百科语料,90% 的数据使用 128 的上下文长度训练,剩余 10% 的数据使用 512 作为上下文长度进行预训练,总共约训练了 3.3B token。其训练的超参数也是值得关注的,BERT 的训练语料共有 13GB 大小,其在 256 的 batch size 上训练了 1M 步(40 个 Epoch)。而相较而言,LLM 一般都只会训练一个 Epoch,且使用远大于 256 的 batch size。
可以看到,相比于传统的非预训练模型,其训练的数据量有指数级增长。当然,更海量的训练数据需要更大成本的算力,BERT 的 Base 版本和 Large 版本分别使用了 16块 TPU 和 64块 TPU 训练了 4天才完成。
1.4.下游任务微调
🎯 一、BERT 的历史地位:确立“预训练-微调”范式
核心贡献:BERT 是首个大规模成功实践“预训练 + 微调”两阶段范式的模型,标志着 NLP 从“任务专用小模型”迈向“通用大模型 + 低成本适配”的新时代。
范式核心思想:
第一阶段(预训练):
使用海量无监督语料(如维基百科、图书语料等)
通过 MLM + NSP 学习通用语言理解能力
第二阶段(微调):
使用少量标注数据
低成本更新参数 → 快速适配下游任务
✅ 关键价值:预训练获得的“通用语义能力”能高效迁移到多种下游任务,极大降低每个任务的开发与训练成本。
⚙️ 二、BERT 的工程设计:支持多任务迁移的通用接口
为实现“一个模型适配所有任务”,BERT 在输入输出层做了高度通用化设计:
1. 引入特殊标记 <CLS>
(Classification Token)
位置:每个输入序列的开头
作用:聚合整句语义 → 作为句级表征
应用:
NSP 任务:用
<CLS>
向量判断句子关系下游分类任务(如情感分析、文本分类):直接取
<CLS>
向量接分类头
2. 微调机制灵活统一
参数更新方式:与预训练一致(梯度下降),但:
数据量更少
batch_size 更小
学习率更低 → 小幅微调,避免灾难性遗忘
结构适配简单:
文本分类:替换最后的 prediction head(分类层)
序列标注(如NER):取各 token 的隐层输出 → 接 CRF 或线性层
生成任务(如摘要):Encoder 输出 + Decoder(如接 Transformer Decoder 或指针网络)
💡 设计理念:保持主干模型(Transformer Encoder)不变,仅调整“头部”(head),实现“一次预训练,处处可微调”。
1.5.优化
📊 RoBERTa vs ALBERT 对比总表(基于 BERT 的两大优化路径)
对比维度 | RoBERTa(Facebook) | ALBERT(Google) |
---|---|---|
核心目标 | 增强模型性能:通过更大数据、更优训练策略,榨干 BERT 架构潜力 | 压缩模型参数:在保持/超越性能前提下,大幅降低参数量,提升效率与可部署性 |
模型结构 | 与 BERT 完全一致(BERT-large: 24层, 1024 hidden, 340M 参数) | 基于 BERT 结构,但引入参数分解 + 层间共享,结构更“瘦高” |
预训练任务改进 | ✅ 移除 NSP<br>✅ 动态 Masking(训练时动态遮蔽)<br>✅ 仅保留 MLM | ✅ 替换 NSP → SOP(Sentence Order Prediction)<br>✅ 保留 MLM<br>(SOP 比 NSP 更难,强调语序) |
训练数据规模 | 160GB(10x BERT)<br>新增 CC-NEWS、OPENWEBTEXT、STORIES 等 | 与 BERT 相近(未强调扩大数据),重点在结构优化 |
训练策略优化 | ✅ 更大 batch size(8K vs BERT 256)<br>✅ 更长训练步数(500K steps)<br>✅ 全程 512 长度训练 | 未强调训练策略改进,重点在模型压缩 |
Tokenizer 优化 | ✅ BPE 词表扩大至 50K(BERT 为 30K) → 提升编码效率与覆盖 | 未改动 Tokenizer,沿用 WordPiece |
参数优化技术 | ❌ 未压缩参数,反而因更大词表略微增加 | ✅ Embedding 分解:E=128 → H=1024,参数从 V×H → V×E + E×H<br>✅ 层间参数共享:24层共享1组参数 |
参数量对比 | ≈ 355M(略高于 BERT-large 340M,因词表扩大) | 大幅下降:<br>- ALBERT-base: 12M(vs BERT-base 110M)<br>- ALBERT-xlarge: 59M(vs BERT-large 340M) |
性能表现 | ✅ 全面超越 BERT,刷新 GLUE/SQuAD 等多个 SOTA<br>✅ 成为 BERT 系最热门预训练模型之一 | ✅ 参数更小,性能持平或略优<br>(如 ALBERT-xlarge 59M > BERT-large 340M) |
训练/推理效率 | ⚠️ 训练成本极高(1024×V100×1天),但推理效率与 BERT 相当 | ⚠️ 训练/推理更慢:虽参数少,但需串行过 24 层共享 Encoder → 计算步数未减少 |
工业落地价值 | ✅ 学术/工业界广泛采用,作为强基线模型<br>✅ 证明“数据+训练策略”对性能的关键作用 | ⚠️ 因推理慢、结构复杂,工业落地受限<br>✅ 为“模型压缩+宽网络”提供重要思路 |
对后续模型影响 | ✅ 动态 Masking、大 batch、长训练成为标配<br>✅ 证明 NSP 无用 → 后续模型普遍弃用 | ✅ SOP 任务启发后续句间关系建模<br>✅ 参数共享/分解影响 TinyBERT、MobileBERT 等轻量模型 |
一句话总结 | “大力出奇迹”——用更多数据、更久训练、更优策略,把 BERT 榨干到极致 | “四两拨千斤”——用结构巧思压缩参数,小身板扛大性能,虽慢犹荣 |
2.Encoder-Decoder:T5
在上一节,我们学习了 Encoder-Only 结构的模型,主要介绍了 BERT 的模型架构、预训练任务和下游任务微调。BERT 是一个基于 Transformer 的 Encoder-Only 模型,通过预训练任务 MLM 和 NSP 来学习文本的双向语义关系,从而在下游任务中取得了优异的性能。但是,BERT 也存在一些问题,例如 MLM 任务和下游任务微调的不一致性,以及无法处理超过模型训练长度的输入等问题。为了解决这些问题,研究者们提出了 Encoder-Decoder 模型,通过引入 Decoder 部分来解决这些问题,同时也为 NLP 领域带来了新的思路和方法。
在本节中,我们将学习 Encoder-Decoder 结构的模型,主要介绍 T5 的模型架构和预训练任务,以及 T5 模型首次提出的 NLP 大一统思想。
2.1.T5
T5(Text-To-Text Transfer Transformer)是由 Google 提出的一种预训练语言模型,通过将所有 NLP 任务统一表示为文本到文本的转换问题,大大简化了模型设计和任务处理。T5 基于 Transformer 架构,包含编码器和解码器两个部分,使用自注意力机制和多头注意力捕捉全局依赖关系,利用相对位置编码处理长序列中的位置信息,并在每层中包含前馈神经网络进一步处理特征。
T5 的大一统思想将不同的 NLP 任务如文本分类、问答、翻译等统一表示为输入文本到输出文本的转换,这种方法简化了模型设计、参数共享和训练过程,提高了模型的泛化能力和效率。通过这种统一处理方式,T5不仅减少了任务特定的模型调试工作,还能够使用相同的数据处理和训练框架,极大地提升了多任务学习的性能和应用的便捷性。接下来我们将会从模型结构、预训练任务和大一统思想三个方面来介绍 T5 模型。
2.2.模型架构
如图3.8所示,T5(Text-to-Text Transfer Transformer)模型从整体架构上可分为 Tokenizer 模块 和 Transformer 主干网络 两大部分。
Tokenizer 模块 负责将原始输入文本转换为模型可处理的数值化表示,主要包括分词(Tokenization) 与 词元编码(Token Encoding) 等预处理步骤。T5 通常采用 SentencePiece 实现的无监督子词分词器,支持开放词汇表,能有效处理未登录词。
Transformer 主干网络 采用标准的编码器-解码器(Encoder-Decoder)结构,由多个堆叠的 Encoder Layer 和 Decoder Layer 组成。每一层(Layer)又可视为一个“Block”,内部通常包含:
- 多头自注意力机制(Multi-Head Self-Attention)
- 前馈神经网络(Feed-Forward Network, FFN)
- 层归一化(Layer Normalization)与残差连接(Residual Connection)
这种模块化、堆叠式的 Block 设计赋予了 T5 极强的结构灵活性——开发者可根据任务复杂度、计算资源或数据规模,灵活调整 Encoder 和 Decoder 的层数(如 T5-Small、Base、Large、XL、XXL 等变体),实现性能与效率的平衡,正如“乐高积木”般可自由组合扩展。
T5 模型的 Encoder 和 Decoder 部分都是基于 Transformer 架构设计的,主要包括 Self-Attention 和前馈神经网络两种结构。Self-Attention 用于捕捉输入序列中的全局依赖关系,前馈神经网络用于处理特征的非线性变换。
和 Encoder 不一样的是,在 Decoder 中还包含了 Encoder-Decoder Attention 结构,用于捕捉输入和输出序列之间的依赖关系。这两种 Attention 结构几乎完全一致,只有在位置编码和 Mask 机制上有所不同。如图3.9所示,Encoder 和 Decoder 的结构如下:
T5 的 Self-Attention 机制和 BERT 的 Attention 机制是一样的,都是基于 Self-Attention 机制设计的。Self-Attention 机制是一种全局依赖关系建模方法,通过计算 Query、Key 和 Value 之间的相似度来捕捉输入序列中的全局依赖关系。Encoder-Decoder Attention 仅仅在位置编码和 Mask 机制上有所不同,主要是为了区分输入和输出序列。如图3.10所示,Self-Attention 结构如下:
与原始 Transformer 模型不同,T5 模型的LayerNorm 采用了 RMSNorm,通过计算每个神经元的均方根(Root Mean Square)来归一化每个隐藏层的激活值。RMSNorm 的参数设置与Layer Normalization 相比更简单,只有一个可学参数,可以更好地适应不同的任务和数据集。RMSNorm函数可以用以下数学公式表示:
其中:
- xi 是输入向量的第 i 个元素
- γ 是可学习的缩放参数
- n 是输入向量的维度数量
- ϵ 是一个小常数,用于数值稳定性(以避免除以零的情况)
这种归一化有助于通过确保权重的规模不会变得过大或过小来稳定学习过程,这在具有许多层的深度学习模型中特别有用。
2.3.预训练任务
T5 模型的预训练任务是一个关键的组成部分,它能使模型能够学习到丰富的语言表示,语言表示能力可以在后续的微调过程中被迁移到各种下游任务。训练所使用的数据集是一个大规模的文本数据集,包含了各种各样的文本数据,如维基百科、新闻、书籍等等。对数据经过细致的处理后,生成了用于训练的750GB 的数据集 C4,且已在 TensorflowData 中开源。
我们可以简单概括一下 T5 的预训练任务,主要包括以下几个部分:
- 预训练任务: T5模型的预训练任务是 MLM,也称为BERT-style目标。具体来说,就是在输入文本中随机遮蔽15%的token,然后让模型预测这些被遮蔽的token。这个过程不需要标签,可以在大量未标注的文本上进行。
- 输入格式: 预训练时,T5将输入文本转换为"文本到文本"的格式。对于一个给定的文本序列,随机选择一些token进行遮蔽,并用特殊的占位符(token)替换。然后将被遮蔽的token序列作为模型的输出目标。
- 预训练数据集: T5 使用了自己创建的大规模数据集"Colossal Clean Crawled Corpus"(C4),该数据集从Common Crawl中提取了大量干净的英语文本。C4数据集经过了一定的清洗,去除了无意义的文本、重复文本等。
- 多任务预训练: T5 还尝试了将多个任务混合在一起进行预训练,而不仅仅是单独的MLM任务。这有助于模型学习更通用的语言表示。
- 预训练到微调的转换: 预训练完成后,T5模型会在下游任务上进行微调。微调时,模型在任务特定的数据集上进行训练,并根据任务调整解码策略。
通过大规模预训练,T5模型能够学习到丰富的语言知识,并获得强大的语言表示能力,在多个NLP任务上取得了优异的性能,预训练是T5成功的关键因素之一。
2.4.统一思想
T5模型的一个核心理念是“大一统思想”,即所有的 NLP 任务都可以统一为文本到文本的任务,这一思想在自然语言处理领域具有深远的影响。其设计理念是将所有不同类型的NLP任务(如文本分类、翻译、文本生成、问答等)转换为一个统一的格式:输入和输出都是纯文本。
例如:
- 对于文本分类任务,输入可以是“classify: 这是一个很好的产品”,输出是“正面”;
- 对于翻译任务,输入可以是“translate English to French: How are you?”, 输出是“Comment ça va?”。
T5通过大规模的文本数据进行预训练,然后在具体任务上进行微调。这一过程与BERT、GPT等模型类似,但T5将预训练和微调阶段的任务统一为文本到文本的形式,使其在各种任务上的适应性更强。
我们可以通过图3.11,更加直观地理解 T5 的大一统思想:
对于不同的NLP任务,每次输入前都会加上一个任务描述前缀,明确指定当前任务的类型。这不仅帮助模型在预训练阶段学习到不同任务之间的通用特征,也便于在微调阶段迅速适应具体任务。例如,任务前缀可以是“summarize: ”用于摘要任务,或“translate English to German: ”用于翻译任务。
T5的大一统思想通过将所有NLP任务统一为文本到文本的形式,简化了任务处理流程,增强了模型的通用性和适应性。这一思想不仅推动了自然语言处理技术的发展,也为实际应用提供了更为便捷和高效的解决方案。
3.Decoder-Only:GPT
在前两节中,我们分别讲解了由 Transformer 发展而来的两种模型架构——以 BERT 为代表的 Encoder-Only 模型和以 T5 为代表的 Encoder-Decoder 模型。那么,很自然可以想见,除了上述两种架构,还可以有一种模型架构——Decoder-Only,即只使用 Decoder 堆叠而成的模型。
事实上,Decoder-Only 就是目前大火的 LLM 的基础架构,目前所有的 LLM 基本都是 Decoder-Only 模型(RWKV、Mamba 等非 Transformer 架构除外)。而引发 LLM 热潮的 ChatGPT,正是 Decoder-Only 系列的代表模型 GPT 系列模型的大成之作。而目前作为开源 LLM 基本架构的 LLaMA 模型,也正是在 GPT 的模型架构基础上优化发展而来。因此,在本节中,我们不但会详细分析 Decoder-Only 代表模型 GPT 的原理、架构和特点,还会深入到目前的主流开源 LLM,分析它们的结构、特点,结合之前对 Transformer 系列其他模型的分析,帮助大家深入理解当下被寄予厚望、被认为是 AGI 必经之路的 LLM 是如何一步步从传统 PLM 中发展而来的。
首先,让我们学习打开 LLM 世界大门的代表模型——由 OpenAI 发布的 GPT。
3.1.GPT
GPT,即 Generative Pre-Training Language Model,是由 OpenAI 团队于 2018年发布的预训练语言模型。虽然学界普遍认可 BERT 作为预训练语言模型时代的代表,但首先明确提出预训练-微调思想的模型其实是 GPT。GPT 提出了通用预训练的概念,也就是在海量无监督语料上预训练,进而在每个特定任务上进行微调,从而实现这些任务的巨大收益。虽然在发布之初,由于性能略输于不久后发布的 BERT,没能取得轰动性成果,也没能让 GPT 所使用的 Decoder-Only 架构成为学界研究的主流,但 OpenAI 团队坚定地选择了不断扩大预训练数据、增加模型参数,在 GPT 架构上不断优化,最终在 2020年发布的 GPT-3 成就了 LLM 时代的基础,并以 GPT-3 为基座模型的 ChatGPT 成功打开新时代的大门,成为 LLM 时代的最强竞争者也是目前的最大赢家。
本节将以 GPT 为例,分别从模型架构、预训练任务、GPT 系列模型的发展历程等三个方面深入分析 GPT 及其代表的 Decoder-Only 模型,并进一步引出当前的主流 LLM 架构——LLaMA。
3.2.模型框架
Decoder Only
✅ 核心观点:
- GPT 采用 Decoder-Only 结构,而 BERT 使用 Encoder 结构。这使得 GPT 更适合自然语言生成(NLG)和序列到序列(Seq2Seq)任务,而 BERT 更擅长自然语言理解(NLU)任务。
✅ 输入处理流程:
- 输入文本 → Tokenizer 分词 → 转为
input_ids
。 input_ids
→ Embedding 层 → 加入 Sinusoidal 位置编码(非可训练,与 BERT 不同)→ 得到hidden_states
。
✅ Decoder 层结构特点(与原始 Transformer 对比):
- GPT 的 Decoder 层 没有 Encoder-Decoder Attention,仅保留 带掩码的自注意力层(Masked Self-Attention),确保每个 token 只能关注其左侧(历史)token。
- LayerNorm 前置:先 LayerNorm,再 Attention,再残差连接 → 不同于原始 Transformer 的“后置 LN”。
- 自注意力机制中,Q、K、V 均来自当前输入,而非 Encoder 输出。
- MLP 层使用 一维卷积核(非传统线性层),但效果相近。
✅ 输出过程:
- 经过 N 层 Decoder → 最终
hidden_states
→ 线性层映射到词表维度 → 生成目标 token 序列。
📌 一句话总结:
GPT 采用仅含掩码自注意力的 Decoder 结构,配合前置 LayerNorm 和 Sinusoidal 位置编码,专为自回归文本生成设计,与 BERT 的双向 Encoder 结构形成鲜明对比。
3.3.预训练任务
Decoder-Only 的模型结构往往更适合于文本生成任务,因此,Decoder-Only 模型往往选择了最传统也最直接的预训练任务——因果语言模型,Casual Language Model,下简称 CLM。
CLM 可以看作 N-gram 语言模型的一个直接扩展。N-gram 语言模型是基于前 N 个 token 来预测下一个 token,CLM 则是基于一个自然语言序列的前面所有 token 来预测下一个 token,通过不断重复该过程来实现目标文本序列的生成。也就是说,CLM 是一个经典的补全形式。例如,CLM 的输入和输出可以是:
input: 今天天气
output: 今天天气很
input: 今天天气很
output:今天天气很好
因此,对于一个输入目标序列长度为 256,期待输出序列长度为 256 的任务,模型会不断根据前 256 个 token、257个 token(输入+预测出来的第一个 token)...... 进行 256 次计算,最后生成一个序列长度为 512 的输出文本,这个输出文本前 256 个 token 为输入,后 256 个 token 就是我们期待的模型输出。
在前面我们说过,BERT 之所以可以采用预训练+微调的范式取得重大突破,正是因为其选择的 MLM、NSP 可以在海量无监督语料上直接训练——而很明显,CLM 是更直接的预训练任务,其天生和人类书写自然语言文本的习惯相契合,也和下游任务直接匹配,相对于 MLM 任务更加直接,可以在任何自然语言文本上直接应用。因此,CLM 也可以使用海量的自然语言语料进行大规模的预训练。
3.4.GPT发展
自 GPT-1 推出开始,OpenAI 一直坚信 Decoder-Only 的模型结构和“体量即正义”的优化思路,不断扩大预训练数据集、模型体量并对模型做出一些小的优化和修正,来不断探索更强大的预训练模型。从被 BERT 压制的 GPT-1,到没有引起足够关注的 GPT-2,再到激发了涌现能力、带来大模型时代的 GPT-3,最后带来了跨时代的 ChatGPT,OpenAI 通过数十年的努力证明了其思路的正确性。
下表总结了从 GPT-1 到 GPT-3 的模型结构、预训练语料大小的变化:
模型 | Decoder Layer | Hidden_size | 注意力头数 | 注意力维度 | 总参数量 | 预训练语料 |
---|---|---|---|---|---|---|
GPT-1 | 12 | 3072 | 12 | 768 | 0.12B | 5GB |
GPT-2 | 48 | 6400 | 25 | 1600 | 1.5B | 40GB |
GPT-3 | 96 | 49152 | 96 | 12288 | 175B | 570GB |
📌 GPT 系列演进核心脉络总结
1️⃣ GPT-1:开山之作,但能力有限
结构:首个 Decoder-Only 预训练模型,沿用 Transformer Decoder,12 层,768 维隐藏层,1.17亿参数。
数据:仅用 5GB 的 BooksCorpus。
表现:与 BERT-base 规模相当,但效果不如 BERT → 未成为主流。
意义:验证了 Decoder-only 架构用于预训练的可行性。
2️⃣ GPT-2:规模跃升 + 零样本探索
改进:
模型扩大:最大版本 48 层,1600 维,15亿参数。
数据扩大:自建 WebText 数据集(40GB)。
结构优化:Pre-Norm(前置 LayerNorm) → 提升训练稳定性。
核心创新:提出 Zero-shot(零样本)学习 —— 不微调,直接用自然语言指令让模型完成任务。
局限:Zero-shot 效果仍不理想 → 模型能力尚不足以支撑。
3️⃣ GPT-3:大模型时代开启者
规模爆炸:1750亿参数,训练数据达 570GB(清洗自 45TB 原始数据)。
硬件需求:需 1024 张 A100 训练约 1 个月。
结构微调:引入 稀疏注意力 以应对计算压力。
核心突破:
Few-shot(少样本学习) / In-context Learning(上下文学习):
在输入中提供 3~5 个示例,引导模型理解任务。
效果远超 Zero-shot,接近或超越微调模型。
颠覆传统“预训练+微调”范式,极大降低应用门槛。
意义:
首次展现 “涌现能力”(Emergent Ability)。
奠定 LLM(大语言模型)时代基础。
成为后续所有主流大模型(如 ChatGPT、LLaMA、GLM)的起点。
4️⃣ 后续演进:ChatGPT 与 LLM 爆发
三阶段训练范式:预训练 → 指令微调 → 人类反馈强化学习(RLHF)→ 诞生 ChatGPT。
引发全球大模型热潮 → LLaMA、ChatGLM、Claude、Gemini 等百花齐放。
下一章预告:深入剖析当前主流架构 —— LLaMA。
4.LLaMA
LLaMA模型是由Meta(前Facebook)开发的一系列大型预训练语言模型。从LLaMA-1到LLaMA-3,LLaMA系列模型展示了大规模预训练语言模型的演进及其在实际应用中的显著潜力。
4.1.模型框架
与GPT系列模型一样,LLaMA模型也是基于Decoder-Only架构的预训练语言模型。LLaMA模型的整体结构与GPT系列模型类似,只是在模型规模和预训练数据集上有所不同。如图3.13是LLaMA模型的架构示意图:
🧠 LLaMA 模型处理流程总结
1️⃣ 输入编码阶段
Tokenizer 编码:
输入文本 → 分词 → 转化为input_ids
(整数序列,对应词表索引)。Embedding 层:
input_ids
→ 映射为高维词向量(Word Embedding),表示语义信息。Positional Embedding:
加入位置编码 → 使模型感知词序和上下文位置(与 GPT 类似,可能使用旋转位置编码 RoPE,但文中未明确)。
✅ 输出:hidden_states
= 词向量 + 位置向量 → 包含语义与位置信息的初始表示。
2️⃣ Decoder 层处理(核心计算)
LLaMA 由多个 Decoder Block 堆叠而成,每个 Block 包含两大核心模块:
🔹 A. Masked Self-Attention 层
目的:计算当前 token 与历史 token 的关联强度(自回归生成)。
流程:
从
hidden_states
线性变换生成 Query、Key、Value。计算注意力分数(Attention Score)→
Softmax(QKᵀ / √d)
.使用 掩码(Mask) → 确保每个位置只能关注左侧(历史)token。
加权求和:
Attention = Attention_Score × Value
。
作用:捕捉上下文依赖,决定“当前词应关注哪些历史词”。
🔹 B. MLP 层(前馈神经网络)
结构:
第一层 FC:升维 → 引入非线性(如 SwiGLU 激活,LLaMA 特色,文中未提但实际使用)。
第二层 FC:降维 → 恢复原始维度。
作用:对注意力输出进行非线性特征变换,增强模型表达能力。
📌 注意:LLaMA 实际使用 Pre-Norm 结构(LayerNorm 在 Attention/MLP 之前),文中虽未强调,但这是与原始 Transformer 的重要区别。
3️⃣ 输出生成阶段
经过 N 个 Decoder Block → 最终
hidden_states
。线性输出层:映射到词表维度 → 得到每个词的概率分布(logits)。
解码策略:通过 贪婪搜索、采样、Beam Search 等方法 → 生成最终输出序列。
✅ 体现 LLaMA 强大的 自回归文本生成能力。
🆚 与 GPT 的对比(隐含信息)
模块 |
LLaMA |
GPT(原始) |
---|---|---|
结构 |
Decoder-Only |
Decoder-Only |
Attention |
Masked Self-Attention |
Masked Self-Attention |
Position Encoding |
很可能使用 RoPE(旋转位置编码) |
使用 Sinusoidal 编码 |
MLP |
使用 SwiGLU(高效激活) |
使用 GeLU + 线性/卷积 |
Norm 结构 |
Pre-Norm(稳定训练) |
GPT-2/3 起也改用 Pre-Norm |
目标 |
高效、开源、可复现的 LLM |
商业闭源、追求极致性能 |
4.2.发展历程
特性 / 模型版本 | LLaMA-1 (2023.02) | LLaMA-2 (2023.07) | LLaMA-3 (2024.04) |
---|---|---|---|
发布时间 | 2023年2月 | 2023年7月 | 2024年4月 |
参数规模 | 7B / 13B / 30B / 65B | 7B / 13B / 34B / 70B | 8B / 70B(400B 在训) |
是否开源 | ✅ 全系列开源 | ✅ 除34B外全部开源 | ✅ 8B / 70B 开源 |
预训练数据量 | >1T tokens | 2T tokens | >15T tokens(LLaMA-2 的 7 倍+) |
上下文长度(Context) | 2,048 tokens | 4,096 tokens(翻倍) | 8,192 tokens(8K) |
Tokenizer 词表大小 | ~32K | ~32K | 128K(编码效率更高) |
核心技术改进 | 基础高效 Decoder 架构 | ✅ 引入 GQA(分组查询注意力)<br>✅ 强化安全与对话微调(Chat 版本) | ✅ 更大词表 + 更高效 Tokenizer<br>✅ 多语言 & 多任务能力大幅提升<br>✅ 更强推理与代码能力 |
训练硬件(最大模型) | 65B:2048×A100 80G,~21天 | 70B:未公开详细配置 | 70B+:未公开,推测使用 H100 集群 |
社区影响 | ⭐ 开源引爆社区,成为微调基准模型 | ⭐⭐ 商用友好许可 + Chat 微调版推动落地 | ⭐⭐⭐ 多语言、长文本、高效率,树立新开源标杆 |
主要优势 | 轻量高效、性能优异、完全开源 | 更长上下文、GQA 提升推理效率、对话能力强 | 超大数据+高效编码+长上下文,综合能力全面领先 |
5.GLM
GLM 系列模型是由智谱开发的主流中文 LLM 之一,包括 ChatGLM1、2、3及 GLM-4 系列模型,覆盖了指令理解、代码生成等多种应用场景,曾在多种中文评估集上达到 SOTA 性能。
ChatGLM-6B 是 GLM 系列的开山之作,也是 2023年国内最早的开源中文 LLM,也是最早提出不同于 GPT、LLaMA 的独特模型架构的 LLM。在整个中文 LLM 的发展历程中,GLM 具有独特且重大的技术意义。本节将简要叙述 GLM 系列的发展,并介绍其不同于 GPT、LLaMA 系列模型的独特技术思路。
5.1.模型框架
GLM 最初是由清华计算机系推出的一种通用语言模型基座,其核心思路是在传统 CLM 预训练任务基础上,加入 MLM 思想,从而构建一个在 NLG 和 NLU 任务上都具有良好表现的统一模型。
在整体模型结构上,GLM 和 GPT 大致类似,均是 Decoder-Only 的结构,仅有三点细微差异:
使用 Post Norm 而非 Pre Norm。Post Norm 是指在进行残差连接计算时,先完成残差计算,再进行 LayerNorm 计算;而类似于 GPT、LLaMA 等模型都使用了 Pre Norm,也就是先进行 LayerNorm 计算,再进行残差的计算。相对而言,Post Norm 由于在残差之后做归一化,对参数正则化的效果更强,进而模型的鲁棒性也会更好;Pre Norm相对于因为有一部分参数直接加在了后面,不需要对这部分参数进行正则化,正好可以防止模型的梯度爆炸或者梯度消失。因此,对于更大体量的模型来说,一般认为 Pre Norm 效果会更好。但 GLM 论文提出,使用 Post Norm 可以避免 LLM 的数值错误(虽然主流 LLM 仍然使用了 Pre Norm);
使用单个线性层实现最终 token 的预测,而不是使用 MLP;这样的结构更加简单也更加鲁棒,即减少了最终输出的参数量,将更大的参数量放在了模型本身;
激活函数从 ReLU 换成了 GeLUs。ReLU 是传统的激活函数,其核心计算逻辑为去除小于 0的传播,保留大于 0的传播;GeLUs 核心是对接近于 0的正向传播,做了一个非线性映射,保证了激活函数后的非线性输出,具有一定的连续性。
5.2.预训练任务
GLM(General Language Model) 的核心创新点 —— 一种融合 自编码(MLM)与自回归(CLM) 思想的新型预训练任务。以下是结构化、深入浅出的总结与扩展:
🧠 GLM 核心创新总结:“掩码 + 自回归重建” 的通用语言建模
✅ 1. 任务名称与目标
GLM = General Language Model(通用语言模型)
目标:设计一种统一的预训练范式,既能胜任理解类任务(NLU),又能胜任生成类任务(NLG),打破 BERT(仅理解)与 GPT(仅生成)的界限。
✅ 2. 核心机制:自回归式空白填充(Autoregressive Blank Filling)
GLM 不是简单地“填一个词”,而是:
🔹 第一步:随机遮蔽连续片段(Span Masking)
类似 BERT 的 MLM,但遮蔽的是连续多个 token(一个片段),而非单个 token。
例:
原句:I love you because you are wonderful
遮蔽后:I <MASK> because you <MASK>
🔹 第二步:自回归重建被遮蔽内容
模型不仅要根据上下文预测被遮蔽片段的内容(MLM 思想),
还要在每个遮蔽片段内部,按顺序逐 token 生成(CLM 思想)。输出格式示例:
<MASK> - love you; <MASK> - are a wonderful person
💡 这意味着:模型必须“先猜这个空该填什么主题”,再“像写作文一样把这个空的内容按顺序写出来”。
✅ 3. 融合两大思想的优势
思想 |
代表模型 |
GLM 如何融合 |
带来的好处 |
---|---|---|---|
自编码 (MLM) |
BERT |
利用双向上下文预测被遮蔽片段 |
→ 增强语义理解能力,适合 NLU 任务 |
自回归 (CLM) |
GPT |
在遮蔽片段内顺序生成,强制模型逐词推理 |
→ 增强生成连贯性,适合 NLG 任务 |
📌 结果:一个模型,双向理解 + 单向生成 → 真正通用的语言建模能力。
✅ 4. 实际效果与优势
性能超越同体量 BERT:在 NLU 任务(如分类、问答)上表现更优。
天然支持生成任务:无需结构大改,即可用于文本生成、摘要、对话等。
统一架构:避免为不同任务训练不同模型(如 BERT + GPT),降低部署与维护成本。
✅ 5. 技术意义:迈向“统一语言模型”的重要一步
GLM 的提出,标志着从“任务专用模型”向“通用语言能力模型”演进的关键尝试:
它证明了:通过设计更聪明的预训练任务,可以让一个模型同时擅长“理解”和“生成” —— 这正是后来 ChatGLM、GLM-130B、GLM-4 等强大模型的起点。
通过将 MLM 与 CLM 思想相结合,既适配逐个 token 生成的生成类任务,也迫使模型从前后两个方向学习输入文本的隐含关系从而适配了理解类任务。使用 GLM 预训练任务产出的 GLM 模型,在一定程度上展现了其超出同体量 BERT 系模型的优越性能:
不过,GLM 预训练任务更多的优势还是展现在预训练模型时代,迈入 LLM 时代后,针对于超大规模、体量的预训练,CLM 展现出远超 MLM 的优势。通过将模型体量加大、预训练规模扩大,CLM 预训练得到的生成模型在文本理解上也能具有超出 MLM 训练的理解模型的能力,因此,ChatGLM 系列模型也仅在第一代模型使用了 GLM 的预训练思想,从 ChatGLM2 开始,还是回归了传统的 CLM 建模。虽然从 LLM 的整体发展路径来看,GLM 预训练任务似乎是一个失败的尝试,但通过精巧的设计将 CLM 与 MLM 融合,并第一时间产出了中文开源的原生 LLM,其思路仍然存在较大的借鉴意义。
5.3.发展历程
特性 / 模型版本 | ChatGLM-6B<br>(2023.03) | ChatGLM2-6B<br>(2023.06) | ChatGLM3-6B<br>(2023.10) | GLM-4-9B<br>(2024.01) |
---|---|---|---|---|
发布时间 | 2023年3月 | 2023年6月 | 2023年10月 | 2024年1月 |
参数规模 | 6B | 6B | 6B | 9B(GLM-4 主模型未开源) |
是否开源 | ✅ 是 | ✅ 是 | ✅ 是 | ✅ 开源轻量版 GLM-4-9B<br>(主模型 GLM-4 闭源) |
预训练语料量 | 1T tokens | >1T tokens(未公布具体) | 更多样化数据 + 更多训练步数 | 1T tokens(多语言) |
上下文长度 | 2K | 32K(大幅提升) | 32K(维持) | 8K(GLM-4 主模型支持 128K) |
模型架构 | 原生 GLM 架构<br>(自回归空白填充) | 转向 LLaMA 架构<br>引入 MQA<br>预训练任务改为 CLM | 同 ChatGLM2<br>(架构无变化) | 基于 GLM-4 架构<br>(推测为改进版 LLaMA + GQA/MLA) |
核心技术亮点 | - 首个中文开源对话 LLM<br>- 基于 GLM 预训练 + SFT/RLHF | - 上下文扩展至 32K<br>- 引入 MQA 提升推理效率<br>- 放弃 GLM 任务,改用 CLM | - 多能力 SOTA(语义/数学/代码/推理)<br>- 支持函数调用 & 代码解释器<br>- 可用于 Agent 开发 | - 性能对标 GPT-4(英文基准)<br>- 支持完整工具调用能力<br>- 与 GLM-4 同训练管道<br>- 超越 Llama-3-8B |
训练策略改进 | 基础 SFT + RLHF | 更大规模预训练 + 架构优化 | 更优数据 + 更多步数 + 策略优化 | 高效训练管道 + 多阶段对齐 |
应用价值 | 中文 LLM 研究起点 | 长文本处理能力突破 | 支持智能体(Agent)开发 | 轻量级但功能完整,适合生产部署 |
备注 | 奠定中文开源生态基础 | 架构“去 GLM 化”,向主流靠拢 | “大力出奇迹”式数据与训练优化 | 智谱战略转型:主模型闭源,轻量版保持开源 |