01 从文本到 Token
- 理解为什么 LLM 不直接处理字符串。
- 会用 JavaScript 复现最小 BPE 合并过程。
- 知道 token 数量为什么影响上下文长度和费用。
模型只能处理数字。Tokenization 就是把文本切成模型词表里的最小单位,再映射成 token id。它不等于按字切,也不等于按词切,更像“常见片段复用”:常见的字符组合会被合并成一个 token。
BPE 的核心循环很简单:
把文本拆成字符↓统计相邻 token pair 出现次数↓合并出现最多的 pair↓重复多轮这样可以让高频片段变短,同时保留处理未知文本的能力。
参考项目里的对应实现思路
Section titled “参考项目里的对应实现思路”nanoGPT 的 Shakespeare 入门配置使用字符级 tokenization,方便先理解训练循环。build-nanogpt 后续会切到 GPT-2 tokenizer,让你看到真实模型词表如何影响训练。
最小代码实验
Section titled “最小代码实验”源码:labs/01-tokenization/index.mjs
这个实验用最少 JS 代码复现 BPE 的“统计高频相邻片段并合并”过程。
运行命令与预期输出
Section titled “运行命令与预期输出”运行:
npm run lab:01预期你会看到 BPE 合并表、编码后的 token 和解码结果。重点观察:lower low 编码后的 token 数少于原始字符数,但解码仍能还原原文。
- Token 不是语义单位。一个 token 可能是词、词缀、空格加词,也可能只是字节片段。
- 中文不一定一个字一个 token,取决于 tokenizer 和训练语料。
- 上下文窗口按 token 计数,不按字符计数。