← 返回笔记列表
深度学习 第 44 / 49 篇

深度学习:词典生成 — Token、特殊符号与 BPE 算法

查看“深度学习”专题目录(44/49)
本文目录 11 个小节

1. 基本概念

概念说明
Token分词器定义的输入输出单位,可为词、子词、字符或字节片段
词典(Vocabulary)模型支持的所有 Token 的集合

不同模型词典不同(ChatGPT 和 DeepSeek 的词典不同)。


2. 用现成的词典

找一本《汉语大辞典》或《四六级单词表》,加一些符号即可。

分词原则:最大匹配优先——尽量用词典里最长的词。

"自然语言处理" 
  有整词 → 一个 Token
  没有   → 拆成"自然语言"+"处理"

优点:简单、可控。
缺点:覆盖率有限,新词、专有名词、拼写错误、口语无法处理。

现代 NLP 模型通常不完全依赖人工词典。


3. 特殊 Token

这些 Token 不是人类语言,是为训练设计的:

Token全称作用
<UNK>Unknown代表词典外的未知 Token
<BOS>Begin Of Sequence序列开头
<EOS>End Of Sequence序列结束(模型输出它就停止生成)
<SEP>Separation区分两个输入序列

模型可自定义特殊 Token,如带思考的大模型用 <think>...</think> 标记思考内容。


4. 词典大小的设计

词典大小问题
较小可能把同一文本切成更多 token,影响序列长度与效率;字节级 BPE 不必因此产生大量 UNK
太大(大模型十几万)参数多、计算和存储开销大

权衡:太小→能力差;太大→效率低。


5. 字节对编码(BPE)

5.1 动机:词根思想

英文单词几十万个,全部加入词典太多。人类靠词根推断:

认识 high → 推断 higher、highest
认识 low  → 推断 lower、lowest

如果模型也学词根 low, high, er, est,词典就小很多。BPE 按相邻符号的统计频率合并,可能得到类似词根的子串,但不执行语言学词根分析,也不保证合并结果都有独立语义。

5.2 BPE 算法步骤

输入:语料 + 目标词典大小(例:15)

初始化:

  1. 每个单词后加 </w>(词结束标记)
  2. 按字母切分,字母和 </w> 都进词典

迭代合并(直到词典达到目标大小):

  1. 统计所有相邻 token 对的出现次数
  2. 合并出现最多的那一对,生成新 token
  3. 记录合并规则

5.3 例子(词典大小 = 15)

步骤合并出现次数
1i + g → ig9 次
2e + r → er最多
3er + </w> → er</w>—
4hi + g → hig—
5hig + h → high—

5 次合并后词典达到 15 个 token,停止。

5.4 用 BPE 分词

拿到词典 + 合并规则后,分词过程:

1. 先把单词按字符拆分
2. 应用合并规则逐层合并
3. 返回 token 在词典中的序号

例:输入 "higher lower"
  → 分词结果 [14, 12, 8, 9, 7, 12]

6. 总结

Token:NLP 处理的最小单元
词典:模型支持的所有 Token

词典来源:
  人工词典(简单但覆盖有限)
  → BPE 自动构建(主流)

特殊 Token:
  UNK(未知)、BOS(开头)、EOS(结束)、SEP(分隔)

BPE 算法:
  词根思想 → 高频相邻字符逐步合并 → 生成词典 + 合并规则
  好处:词典可控、覆盖新词、泛化好

分词时:字符拆分 → 应用合并规则 → 返回序号

参考资料

继续学习本专题