1. Whitespace / Word-level Tokenization(空格或词级分词)

最简单的分词方法:按空格或标点切割。

✔ 优点

  • 非常简单

✘ 缺点

  • 词表巨大(上百万)
  • 完全不能处理新词(OOV)
  • 不适合大型模型

📌 使用场景

早期 NLP(如传统机器学习、bag-of-words)


🔡 2. Character-level Tokenization(字符级分词)

将每个字符作为 token。

✔ 优点

  • 没有 OOV
  • 词表极小(几百个字符)

✘ 缺点

  • 序列长度极长,训练慢
  • 丢失词内部结构(较难学习语义)

📌 使用场景

  • 一些生成任务(字符语言模型)
  • 高频率的低资源语言

🧩 3. Subword Tokenization(子词级分词)——最主流

这是深度学习 NLP 的核心方法,平衡词级与字符级。

字符级分词:太长,训练慢
词级分词:词汇量巨大,遇到新词(OOV)很麻烦

3.1 Byte Pair Encoding (BPE)

目标:通过合并最常出现的子词对来构造一个子词词表。合并结束条件是最大合并次数 or 最终词表大小or pair出现至少 X 次才能合并

特点

  • 基于频率合并
  • ## 前缀
  • 可处理 OOV
  • 适用于大规模模型

使用模型

  • GPT-2 / GPT-3
  • RoBERTa
  • CLIP

BPE(字节对编码)或二元编码是一种简单的数据压缩形式,其中最常见的一对连续字节数据被替换为该数据中不存在的字节。后期使用时需要一个替换表来重建原始数据。

优点:可以有效地平衡词汇表大小和步数(编码句子所需的token次数)。

缺点:基于贪婪和确定的符号替换,不能提供带概率的多个分片结果


3.2 WordPiece

Google 为 BERT 设计的子词分词算法。

特点

  • 基于最大化语言模型似然(比 BPE 更精细)
  • 新子词带 ## 前缀
  • 更适合双向 Transformer

使用模型

  • BERT / ALBERT
  • Electra
  • DistilBERT

3.3 SentencePiece(Unigram Model & BPE)

无需空格的通用 tokenizer,特别适合多语言。

类型

  • Unigram Model(更流行)
  • BPE(SentencePiece 版本)

特点

  • 输入不用预处理(可以直接用原文 UTF-8)
  • 词表可学习空格(特殊的 <unk> / symbol)
  • 多语言 + 大规模数据首选

使用模型

  • T5
  • ALBERT(部分版本)
  • LLaMA(SentencePiece BPE)

🔠 4. Byte-level BPE(字节级 BPE)

用字节(0–255)作为基础符号,不直接使用 Unicode 字符。

特点

  • 完全没有 OOV
  • 字节级 → 与任何语言兼容(甚至代码)

使用模型

  • GPT-2
  • GPT-3
  • GPT-4/4o(tiktoken 也是基于 byte-level)

🔤 5. Unigram Language Model(SentencePiece)

将 token 表视为一个概率分布,逐渐删除低概率 token 直到达到词表大小。

特点

  • 比 BPE 更灵活(允许多种分解方式)
  • 在多语言语料上效果更好
  • 常用于 encoder-decoder 模型

使用模型

  • T5
  • mT5
  • XLNet(部分)

📘 6. Word-boundary-aware Tokenizers(中文分词器)

用于中文、日文、泰文等没有空格的语言。

常见:

  • Jieba(结巴)
  • THULAC
  • PKU Segmentation

但由于深度学习逐渐使用 subword 方法,这类分词器在大模型中越来越少用。


🧬 7. Tiktoken(OpenAI 的 Tokenizer)

为 GPT 系列设计的高效 tokenizer。

特点

  • Byte-level BPE 的优化版本
  • 极快(C 实现)
  • 对表情符号、罕见字符的处理更好
  • 专门为大模型的上下文长度扩展优化

使用模型

  • ChatGPT / GPT-4 / GPT-4o 全系列

🎯 什么时候用哪种?

场景 推荐 tokenizer
大模型(LLM) Byte-level BPE / Tiktoken / SentencePiece BPE
多语言模型 SentencePiece (Unigram)
BERT 类模型 WordPiece
小模型 / 快速训练 BPE
中文模型 SentencePiece 或 BPE(不需要分词)