2.3 文本编码与语言模型 前面两节我们讲清楚了 Transformer 的积木与组装方式。本节把这些积木用到文本上,看一条字符串如何变成 Transformer 能消化的张量,又如何演化出 BERT、GPT、LLaMA 等当代大语言模型。 一、从字符串到 token:分词 Transformer 不能直接吃字符串,必须先切成 token。中文里 token 可能是一个字、一个词或子词(subword);英文里可能是「play」「ing」两个 token 组成「playing」。
前面两节我们讲清楚了 Transformer 的积木与组装方式。本节把这些积木用到文本上,看一条字符串如何变成 Transformer 能消化的张量,又如何演化出 BERT、GPT、LLaMA 等当代大语言模型。
Transformer 不能直接吃字符串,必须先切成 token。中文里 token 可能是一个字、一个词或子词(subword);英文里可能是「play」「ing」两个 token 组成「playing」。
| 算法 | 思路 | 代表 |
|---|---|---|
| BPE(Byte Pair Encoding) | 从字符开始,迭代合并最高频的相邻对 | GPT-2、GPT-3、LLaMA |
| WordPiece | 类似 BPE,但用似然而非频率选择合并 | BERT |
| Unigram | 反向:从大词表开始逐步删除低频项 | T5、ALBERT |
| SentencePiece | 把 BPE/Unigram 扩展到任意语言,含空格处理 | 多语言模型 |
LLaMA、Qwen、Mistral 等当代大模型几乎都用 BPE 或 SentencePiece 的变体,词表大小通常在 3 万到 15 万之间(GPT-4 的词表 cl100k_base 约 10 万,Qwen2 约 15 万)。
切完 token 后,每个 token 是一个整数 ID。下一步是用一个嵌入矩阵 E \in \mathbb{R}^{V \times d} 把它变成稠密向量:
其中 V 是词表大小,d 是隐藏维度。这一步本质是查表(lookup),无计算开销但有大量参数——LLaMA-7B 中 embedding 占了约 26 亿参数(占总参数的 37%)。
很多模型还会做 embedding scaling:
这个缩放是为了让 embedding 与后续位置编码加和时数值量级匹配,避免位置编码信号被淹没。
按 2.2 节的方式,把 token embedding 与位置编码相加:
这一步把「这个 token 是什么」与「它在第几个位置」两个信息打包到一起,送进 Transformer 主干。
BERT(Bidirectional Encoder Representations from Transformers)是 Google 2018 年提出的 Encoder-Only 模型。它的设计哲学是:
输入: "The [MASK] sat on the mat" 目标: 预测 [MASK] = "cat"
BERT 的输出是每个 token 的上下文相关表示,可以直接接任务头做分类、问答、命名实体识别等理解类任务。
但 BERT 不能直接生成文本——它是双向的,无法用于「给定前文预测下一个词」的自回归生成。这是 Encoder-Only 模型的根本局限。
GPT(Generative Pre-trained Transformer)走的是相反路线:
输入: "The cat sat on the" 目标: 预测下一个 token = "mat"
这个目标看似简单,却让模型在生成中学会理解——要准确预测下一个词,模型必须学到语法、语义、世界知识、推理能力。
GPT 的输出是「下一个 token 的概率分布」,可以反复采样得到完整序列:
"The cat sat on the" → 预测 "mat" "The cat sat on the mat" → 预测 "." "The cat sat on the mat." → 预测 "<EOS>" 结束
这种自回归生成能力是 GPT 系列以及所有当代大语言模型(LLaMA、Qwen、Mistral)的根基。
GPT 系列每一次迭代主要靠三件事:
| 维度 | 演化方向 |
|---|---|
| 规模 | 参数从 1.17 亿(GPT-1)→ 1750 亿(GPT-3)→ 万亿级(GPT-4 估计) |
| 数据 | 从 WebText 几 GB → CommonCrawl 数 TB → 多模态图文 |
| 训练目标 | 单纯 NTP → 加入指令微调 → 加入 RLHF 人类对齐 |
GPT-3 的贡献是揭示了「Scaling Law」——损失随参数、数据、算力呈幂律下降,没有明显饱和。这把整个研究界推向了「堆规模」的范式。
GPT-3.5/4 的贡献是「对齐」——通过指令微调与 RLHF,让大模型从「会接话」变成「会回答问题、会拒绝有害请求、会跟随人类意图」。这部分我们在第7章详解。
LLaMA、Qwen、Mistral 等开源模型都是 Decoder-Only + NTP,但在工程细节上各有创新:
LLaMA 引入了几个被广泛复用的工程改进:
LLaMA 3 进一步扩大了词表(128K)、训练数据(15T token)并支持多语言、长上下文。
Qwen2/Qwen2.5 的特色:
Mistral 7B 用 Sliding Window Attention(滑窗注意力)让每个 token 关注局部窗口,再通过堆叠层让信息跨窗口传递,平衡了效率与全局性。Mixtral 8x7B 进一步用 MoE(Mixture of Experts) 把参数量提到 47B 但激活参数只有 13B,推理成本接近 14B 模型。
GLM 用了一种「自回归空白填充」预训练目标,介于 BERT 的 MLM 与 GPT 的 NTP 之间,天然支持双向理解 + 单向生成。GLM-4 系列在国内多模态生态中也是重要一员。
回顾第1章给出的 MLLM 三段式抽象:
其中 LLM 这部分几乎全部来自上面这些 Decoder-Only 大语言模型:
这意味着多模态大模型的能力上限,很大程度上继承自底层 LLM。LLM 的指令跟随、推理、知识水平,直接决定了多模态模型的「天花板」。
这也是为什么 2023 年后多模态大模型的能力跟着 LLM 一起飞跃——LLM 的进步被「免费」地传导到了多模态。
最后我们把从字符串到 LLM 输出的完整数据流画一遍:
多模态大模型做的事情,本质上就是在这条流水线的最前端,再插一个「视觉编码器 + 投影器」,把图像 patch 也变成 token 喂进来。具体怎么做,是第3、4、5章的主题。
文本编码经历了「分词 → embedding → 加位置编码 → Transformer 编码」四步。BERT 走双向理解路线,GPT 走单向生成路线,当代大模型几乎全是 Decoder-Only + RoPE + SwiGLU + RMSNorm 的组合。这些 LLM 既是文本任务的强者,也是多模态大模型的中枢底座。
下一节(2.4)我们速览 LLaMA 3、Qwen2.5、Mistral、GLM 等当代文本骨干的最新形态。