跳转到内容

01 从文本到 Token

  • 理解为什么 LLM 不直接处理字符串。
  • 会用 JavaScript 复现最小 BPE 合并过程。
  • 知道 token 数量为什么影响上下文长度和费用。

模型只能处理数字。Tokenization 就是把文本切成模型词表里的最小单位,再映射成 token id。它不等于按字切,也不等于按词切,更像“常见片段复用”:常见的字符组合会被合并成一个 token。

BPE 的核心循环很简单:

把文本拆成字符
统计相邻 token pair 出现次数
合并出现最多的 pair
重复多轮

这样可以让高频片段变短,同时保留处理未知文本的能力。

nanoGPT 的 Shakespeare 入门配置使用字符级 tokenization,方便先理解训练循环。build-nanogpt 后续会切到 GPT-2 tokenizer,让你看到真实模型词表如何影响训练。

源码:labs/01-tokenization/index.mjs

这个实验用最少 JS 代码复现 BPE 的“统计高频相邻片段并合并”过程。

运行:

Terminal window
npm run lab:01

预期你会看到 BPE 合并表、编码后的 token 和解码结果。重点观察:lower low 编码后的 token 数少于原始字符数,但解码仍能还原原文。

  • Token 不是语义单位。一个 token 可能是词、词缀、空格加词,也可能只是字节片段。
  • 中文不一定一个字一个 token,取决于 tokenizer 和训练语料。
  • 上下文窗口按 token 计数,不按字符计数。