总览
本章节范围:把读者输入的字符串变成 Transformer block 能吃的张量
[s, h]的完整链路——切分 (tokenization) → 查表 (embedding) → 注入位置 (position encoding) 三步。 目标读者:工程师 / 研究者;假设已读 02-大模型是什么,了解全景数据流。
范围与边界
- 包含:为什么要 tokenize / 为什么 BPE / token id 到 $h$ 维向量的查表 / 为什么需要位置编码 / 绝对位置 (sinusoidal / learned) 与 RoPE 的基本概念。
- 不包含 (各项外链):
- 位置外推 / 长上下文 (YaRN / NTK / LongRoPE) → knowledge/03-长上下文/03-位置编码与外推
- 注意力变体 (ALiBi 的相对位置编码思路) → knowledge/03-长上下文/04-注意力机制变体
- Pre-LLM word embedding 范式 (word2vec / GloVe 的预训练机制) — 历史方法,仅在 03-token-embedding 末段一句话点到
- 多模态 tokenizer (vision / audio token) — 不在本章,后续若开多模态章再补
- Tokenizer 安全 / 对抗 (glitch token / prompt injection via 编码) — 工程话题,不在本章
名词定义
本章节子文档默认这些名词已定义,不再重复;父总览 1 总览 已定义的 (Token / Vocab / Embedding / Position encoding) 在此不重列。
| 名词 | 定义 |
|---|---|
| Subword tokenization | 把单词进一步切成子词单元的 tokenization 范式 (BPE / WordPiece / Unigram 都属此类),兼顾词表大小与序列长度 |
| BPE (Byte Pair Encoding) | 从字节频次起步,反复合并最频繁的相邻 token 对,直到达到目标词表大小;兼任训练时的合并规则学习与推理时的贪心编码 |
| Byte-level BPE | BPE 在 byte (而非 unicode codepoint) 层面操作,保证任何字节串可逆 encode, GPT-2 起的事实标准 |
| OOV (Out-Of-Vocabulary) | 输入里出现训练词表中不存在的词,word-level tokenizer 的根本缺陷;subword + byte-level 设计上消除 OOV |
| Embedding matrix | 形状 $[V, h]$ 的可学习参数矩阵,token id 通过查表 (gather/index) 得到 $h$ 维向量 |
| Weight tying (权重共享) | 输入端 token embedding 与输出端 LM head 共享同一份 $[V, h]$ 权重 (转置使用);GPT-2/3 用,Llama 1-3 全 untie, Qwen 规模阈值 (7B+ untie), DeepSeek-V3 不 tie——详见 03-token-embedding |
| Position encoding (位置编码) | 给序列每个位置注入"我在第几个" 的信息;没有它 self-attention 看不到顺序 |
| Sinusoidal PE | Transformer 原论文的位置编码方案,用不同频率的 sin / cos 给每个位置一个固定向量 |
| Learned absolute PE | 用一个可学习的 $[s_{\max}, h]$ 矩阵给每个绝对位置一个向量;GPT-1/2 用 |
| RoPE (Rotary Position Embedding) | 对 Q / K 在每个 2 维子空间做一个旋转,旋转角度随位置线性增长;让两个 token 的 attention 内积只依赖相对距离;现代主流 (Llama / Qwen / DeepSeek 等) |
@tbl-tokenize-glossary 本章共享名词
子文档索引
按"text → tensor" 数据流顺序排列,每篇配独占技术内核 + 负边界 (脑暴契约,各篇写作时不重新讨论):
| 篇 | 一句话 | 独占技术内核 (写到深) | 负边界 (不展开,外链) |
|---|---|---|---|
| 02-tokenization 与 BPE | 为什么不用 word / char, BPE 怎么算 | 单词 / 字符 tokenization 失败的具体原因 (OOV / 序列长度 / 形态学),BPE 训练算法 (merge rule),编码 (greedy), byte-level vs unicode-level, vocab size 与 seqlen 取舍 | 不展开 SentencePiece Unigram / WordPiece 实现,不讲 tokenizer 安全 (glitch token),不讲多语言分布失衡 |
| 03-token embedding | token id 怎么变成向量 | embedding matrix 形状与查表机制 (gather = one-hot × W),可学习参数与初始化,与 LM head 的 weight tying, embedding 空间几何直觉 | 不讲 word2vec / GloVe 预训练 (前 LLM 时代),不讲 embedding scale 优化技巧,不讲多模态 embedding |
| 04-位置编码 | attention 看不到顺序怎么办 | self-attention 排列不变性 (permutation-invariant),绝对位置 (sinusoidal / learned), RoPE 直觉 (Q/K 上的旋转 → 内积只依赖相对距离),为何 RoPE 取代绝对位置成为现代主流 | 不讲位置外推 (YaRN / NTK / LongRoPE → 长上下文章),不讲 ALiBi 等 attention bias 思路 (长上下文 04-注意力机制变体),不推 RoPE 完整公式 |
@tbl-tokenize-index 子文档索引 (含边界契约)
与外部专题的接缝
| 外链主题 | 在本章哪里引 | 目标 |
|---|---|---|
| 位置外推 (RoPE 公式 + YaRN + LongRoPE) | 04-位置编码 末段 | knowledge/03-长上下文/03-位置编码与外推 |
| ALiBi / 相对位置 attention bias | 04-位置编码 末段 | knowledge/03-长上下文/04-注意力机制变体 |
| weight tying 在训练目标中的作用 | 03-token-embedding 末段 | 06-预训练/02-语言建模目标 |
| 词表大小对 LM head 计算的影响 | 03-token-embedding 末段 | 06-预训练/02-语言建模目标 + 08-推理/05-量化简介 |
@tbl-tokenize-external 与外部专题的外链对照
参考资料
教学蓝本:
- Sebastian Raschka. Build a Large Language Model (From Scratch). Manning, 2024. Chapter 2.
- Andrej Karpathy. Let's build the GPT Tokenizer. https://www.youtube.com/watch?v=zduSFxRajkE
关键论文:
- Sennrich, Haddow, Birch. Neural Machine Translation of Rare Words with Subword Units. ACL 2016. https://arxiv.org/abs/1508.07909 (BPE for NMT)
- Vaswani et al. Attention Is All You Need. NeurIPS 2017. https://arxiv.org/abs/1706.03762 (sinusoidal PE)
- Radford et al. Language Models are Unsupervised Multitask Learners (GPT-2). OpenAI 2019. (byte-level BPE)
- Su et al. RoFormer: Enhanced Transformer with Rotary Position Embedding. 2021. https://arxiv.org/abs/2104.09864 (RoPE)
章内交叉引用:父总览 1 总览 给全章节地图与共享名词 / 形状约定。