BPE 分词 - 离散与连续的边界辨析
BPE 分词 - 离散与连续的边界辨析
核心命题:BPE 词表为何是有限给定的?Rick 用”高维向量取值连续,对应词义应该无限”的直觉切进 LLM 架构中最容易混淆的边界——tokenizer 的离散符号空间和 embedding 的连续向量空间是两个不同层。词表大小的硬约束不来自输入,而来自输出端 softmax。
Rick 的关键追问
[!quote] Rick 的关键介入 在 BPE 方向上,为什么词表数量是给定的、有限的?我理解如果是向量化,高维向量中每个维度的取值都可以是连续的,所以对应的词义应该是无限的才对
这条追问的价值不在答案,而在它精确命中了一个常见误读:把”模型的语义表达能力”和”模型的输入 / 输出符号集合”混为一谈。绝大多数普及材料把 BPE 描述成”模型用到的词典”,但没说清楚词典只规约了离散符号的范围,不约束语义空间的精度。
离散层与连续层的分工
整个管线:
原始文本 →(BPE 分词)→ token ID 序列(离散整数)→(embedding 查表)→ 向量序列(连续高维)→ Transformer 计算
- “高维向量取值连续,词义无限”的直觉描述的是 embedding 之后的事——这一空间确实连续,模型在其中的注意力 / 前馈计算也都是连续的。
- 经过多层 Transformer 后,同一 token 的表征会根据上下文被推到完全不同的向量位置(bank 在 “river bank” vs “bank account” 里的表征差异巨大)。模型的语义表达能力不受词表大小限制。
BPE 词表解决的是另一个问题——输入端的离散化 + 输出端的概率分布。
输入端:为什么必须离散化
embedding 层物理上是 [vocab_size, d_model] 的查找表。token ID 是整数索引。如果词表无限大,查找表也要无限大——存储上不可能。
为什么不直接喂连续表征?原始文本本身就是离散的(字符序列 / 字节序列),不像图像或音频那样存在天然连续信号。必须在某个粒度做离散到连续的跳板,跳板本身必须有限。
输出端:词表大小的硬约束
更硬的约束在输出端:
[!quote] Rick 的关键介入 这一步是必须的吗?或者说,我们只需要预测下一个最大概率的 token / 字节就可以了,实现这个目标一定需要穷尽计算所有候选吗?还是可以通过其他算法来实现?或者考虑放弃求全局最优,提前收敛?
这条追问把”全词表 softmax”的合理性问题摆到桌面。
模型生成时,最后一层向量通过 [d_model, vocab_size] 的 LM head 投影,得到每个 token 的分数,再做 softmax 归一化。每生成一个 token,必须对词表所有候选计算分数。vocab_size = 128K 时每步生成做一次 128K 维矩阵乘 + softmax。词表”无限”则 softmax 数学上不存在。
替代路径存在但都有代价:
- 分层 softmax:树状词表,复杂度从 O(V) 降到 O(log V)。质量损失通常较小但不为零。
- Negative sampling / NCE:Word2Vec 时代的近似——只对负样本子集计算损失。训练时可行,推理时不直接适用。
- Adaptive softmax:按频率分组,高频组小、低频组大。
- 最近邻近似 / LSH / PQ:在 embedding 空间里找 top-k 候选,避免计算所有内积。
- Speculative decoding:小模型起草、大模型校验。校验仍需 full softmax。
- Sparse 预测头:只对子集计算 logits。
工程现实是:现代大模型里 LM head 的计算占比已经很小,Transformer 层堆叠才是主导成本。在质量损失和算力收益之间,全 softmax 仍是默认选择。词表大小是 trade-off 的支点——越大序列越短但参数和每步 softmax 越贵;越小则相反。
中文的字节级路径:UTF-8 的物理惩罚
[!quote] Rick 的关键介入 继续讨论,字节级 对于中文来说可行吗?
物理事实:UTF-8 编码下,英文字母 1 字节、中文汉字 3 字节。
序列长度膨胀比对:
- 英文:BPE token → 字节 大约展开 3-5 倍。
- 中文:BPE token → 字节 大约展开 2.5-3 倍(因为 BPE 对中文压缩率本来就不高,每个常见汉字几乎就是一个独立 token)。
序列长度上中文字节级别的惩罚倍数其实和英文差不多——这与”中文 3 字节所以惩罚更重”的直觉相反。
但更深的问题在语义层:
- “你” 的 UTF-8 编码是
0xE4 0xBD 0xA0。三个字节中任何一个单独拿出来毫无语义——0xE4只是 UTF-8 编码协议的前缀标记。 - 英文字节与字符近似一一对应(
0x61= “a”),模型在字节级别直接看到有意义的语言单元。 - 中文则需要模型先学会 UTF-8 协议本身(识别 3 字节序列边界与组合方式),再学会”三个字节合起来是哪个字符”——等于在语言建模之前强加了一层编码协议学习任务。
英文的字节模型 ≈ 字符级模型。中文的字节模型则需要额外承担”反向解码 UTF-8”的负担。这是字节级路线在中文场景的真实代价。
提问方法论:用直觉冲突倒推架构边界
这场对话的可复用模式:
- 用一个看起来不一致的直觉作为切入点(连续向量空间 vs 有限词表);
- 不接受 AI 的标准教科书回答,追问到能定位”约束究竟来自哪个组件”;
- 用追问形式逼出”必须 / 可以 / 是 trade-off”的层级——把模糊的”为什么必须如此”分解为可分别讨论的几种约束。
这是 Rick 对技术理解的标准要求:能给出”工程现状是 X,理论上还有 Y、Z 可选,目前选 X 是因为 trade-off 落在哪里”——而非单一答案。
关联节点
- c02 - Tokenization 与词表工程 — 分词技术母节点。
- Tokenization — 概念节点。
- Embedding — 离散到连续的跳板。
- Softmax — 输出端硬约束的具体函数。
- c01 - 认知重构:从确定性系统到概率系统 — 全 softmax 与概率系统的连接。