跳到正文
AI 图鉴
04 自然语言处理与大模型入门本域第 1 篇

分词与 Token 化

模型不认识字,它只认识 token——切分方式悄悄决定了模型的能力与成本

定义

分词(Tokenization)是把一段连续文本切分成模型可处理的最小单位——token——的过程。每个 token 对应固定词表里的一个整数编号,模型真正读到的只是一串编号,而不是字符。切分粒度可以是字符、完整的词,或介于两者之间的子词。

直观理解

把文本送入模型,有点像搬家:标准沙发(常见词)可以整件搬走,异形家具(生僻词、罕见拼写)只能拆成零件分几趟运。拆得越碎,趟数越多,运费越高。同一句话在词表覆盖得好的语言里占的格子少,在覆盖差的语言里就要被切成更多碎片——token 越多,模型越慢,也越贵。

图 1

从原始文本到嵌入向量:分词器是唯一入口,也是模型看到世界的边界

图 2

同一个 BPE 词表下,各语言平均每个 token 覆盖的字符数:覆盖越差,同一段内容消耗的 token 越多

工作原理

  1. 01

    归一化与预切分

    先统一 Unicode 形式、处理大小写、空格与标点规则,把文本切成候选片段。这一步决定了标点、数字和空白是否单独成 token,也直接影响后续统计。

  2. 02

    统计子词切分(BPE / SentencePiece)

    BPE 从单个字符出发,反复把语料里最高频的相邻符号对合并成新单元,直到词表达到目标大小。SentencePiece 直接在原始字节/字符流上运行,不需要预先按空格分词,因而对中文、日文更友好。

  3. 03

    映射到整数 ID 与嵌入

    每个 token 查出词表里的编号,再经嵌入层变成向量送入网络。词表一旦固定,编号与嵌入就绑死:换分词器等于换掉整个输入接口,模型权重必须重训。

应用场景

  • 大模型输入输出:上下文长度与计费都以 token 计数,而非字数
  • 多语言与代码建模:子词让模型能拼出未登录词、罕见词形和标识符
  • 检索与索引:token 数决定倒排索引体积与召回成本
  • 多模态扩展:音频帧与图像 patch 也被切分并编码成序列 token

常见误区

  • token 既不是字也不是词。一个中文 token 常常覆盖不到一个字,而一个英文 token 可能包含前导空格——直接按字数估算 token 数会明显失真。
  • 不同模型的分词器不同,同一段文本的 token 数可以相差一倍以上。跨模型比较价格或上下文占用时,必须用各自的 tokenizer 实测。
  • 分词器定义了模型的输入边界,通常在预训练前就冻结。事后更换意味着全部嵌入与权重需要重训,代价极高。

关键术语

词表
全部 token 及其编号的固定集合
BPE
字节对编码,自底向上合并高频符号对
SentencePiece
直接在字符/字节流上运行的子词工具
未登录词 OOV
词表中没有、只能靠子词拼出的词

延伸阅读