← 课程库
语言模型与架构模块二 · 基本定义代码14 分钟

分词与词元:BPE、词表、tokenization

模型眼里没有「字」,只有 token id

学完这节你能:
  • 理解 token / 词表 / token id 的关系
  • 说清 BPE 为什么能兼顾「词表大小」与「未登录词」
  • 会读一段最简 tokenization 代码

模型不认识汉字或字母,它只认识整数 id。把文本切成一个个「词元(token)」、再查词表映射成 id,这一步叫 tokenization。它决定了序列多长、参数多大。

为什么不用「一个字一个 token」或「一个词一个 token」

  • 字级:词表小,但序列变得很长,模型要处理更多步。
  • 词级:序列短,但词表爆炸,且遇到没见过的词(未登录词 OOV)就歇菜。
  • 子词级(BPE 等):折中——常见词整体成一个 token,罕见词拆成子词片段,既控制词表大小,又能拼出任何词。

🔑 BPE(Byte-Pair Encoding)核心思想:从字符开始,反复把「出现最频繁的相邻符号对」合并成一个新符号,直到词表达到设定大小。高频词被合并成整体,低频词留成碎片。

BPE 合并直觉
初始:l o w e r
「e r」最常见 → 合并成「er」:l o w er
「l o」常见 → 合并:lo w er …
最终常见词整体化,生僻词由子词拼出,不会 OOV。
最简 tokenization 示意(真实用 tiktoken / sentencepiece)
text = "low lower"
# 假设词表:{'low':10, 'er':11, ' ':5}
tokens = ['low', ' ', 'low', 'er']   # 分词
ids = [10, 5, 10, 11]                # 查词表 → id
# 模型真正吃进去的是 ids,而不是文字
自测BPE 子词分词最主要解决了什么问题?
// 带走一句话

文本 →(分词)token →(查词表)id 才进模型;BPE 用子词兼顾词表大小与未登录词。

独立练习

做到这些,才算完成本节

  1. 在本地运行代码,打印每个关键张量的 shape。
  2. 关闭示例后从空文件重写核心部分,并补一个异常或边界测试。
学习记录

记录本节阅读进度

建议先独立回答自测。读完记录不等于已经掌握。

继续下一课
← 上一课
语言 vs 图像 / 代码:离散序列 vs 密集像素
下一课 →
大语言模型是什么:生成与理解两种范式

学完不要急着赶进度:去练习自测,或完成对应的阶段实验