什么是 Tokenization:从“切词”开始理解 NLP

大家好。我们直接进入正题。

Tokenization,中文常翻译成“令牌化”或“分词”。

说白了,就是把一段文本拆成一个个小单元的过程。

这个小单元叫什么呢?叫 (令牌)。

你可以把 Tokenization 想象成“切菜”。

你有一整根黄瓜(原始文本),你把它切成片()。

切片的大小,取决于你的菜谱(任务需求)。

就这么简单。

我的经验:我入行 NLP 时,觉得 Tokenization 就是调个库函数,没什么技术含量。直到有一次做多语言翻译模型,因为中英文混合文本的分词策略没选对,模型在“我喜欢iPhone”这句话上彻底崩了。从此我再也不敢小看这一步。

为什么需要 Tokenization?

你想想看,计算机能直接理解“我喜欢吃苹果”这句话吗?

不能。它只认识数字。

所以我们需要把文字转成数字。

但你不能把整句话直接映射成一个数。为什么?

因为句子太长,组合太多。你根本无法穷举所有可能的句子。

正确的做法是:先找到最小的有意义的单元。

然后为每个单元分配一个 ID。

Tokenization 就是帮你找到这些“最小有意义单元”的过程。

这样做的好处非常明显:

  • 控制词汇表大小:不用穷举所有句子,只管理几万个 就够了。
  • 处理未见过的文本:只要新句子里包含你见过的 ,就能处理。
  • 降低计算复杂度:处理短 序列比处理整句子要高效得多。
  • 捕捉语言规律:模型能学到词与词之间的共现关系。

核心结论:没有 Tokenization,NLP 模型就无法处理文本。它是文本与数值世界之间的桥梁。

Tokenization 在 NLP 流程中的位置

一次典型的 NLP 任务流程是什么样子的?

我来给你画个图。

NLP 模型处理流程 原始文本 “我爱NLP” Tokenization 切词 → 生成 ID 序列 [100, 200, 300] 模型处理 Transformer / RNN 输出解码 ID → 文本 输出文本 “I love NLP” Tokenization 位于“原始文本”与“模型处理”之间,是所有 NLP 任务的入口

从图上你能清楚地看到:

  1. 原始文本进入系统后,第一站就是 Tokenization。
  2. Tokenization 把文本变成 序列(其实就是一串数字 ID)。
  3. 序列送入模型(比如 Transformer),模型进行计算。
  4. 模型输出结果(也是 序列)。
  5. 最后通过 解码 把 序列转回人类可读的文本。

注意:我曾经见过不少同学,在训练模型时把大量精力放在调参上,但 Tokenization 策略却用的是默认参数。结果就是分词效果很差,模型怎么调都提不上来。Tokenization 的质量,直接决定了模型性能的上限。

的类型:不只是一种“切法”

不同的任务,需要不同的“切法”。

我用一个表格来对比常见的 类型:

类型 切分粒度 示例 优点 缺点
Word-level 单词 “我爱NLP” → [我, 爱, NLP] 直观,语义完整 词汇表大,未登录词处理难
Character-level 字符 “我爱NLP” → [我, 爱, N, L, P] 词汇表极小,无未登录词 序列超长,丢失词义信息
Subword-level 子词 “loved” → [love, ##ed] 平衡词汇表与语义 实现复杂,规则多

目前最主流的是 Subword-level Tokenization。

为什么?因为它找到了一个很好的平衡点。

词汇表不会太大(通常几万个),又能处理没见过的新词(通过拆成子词)。

像 BERT 用的 WordPiece, 用的 BPE,都是这个路子。

咱们后面的章节会深入讲它们。

Tokenization 的“潜规则”:你必须知道的事

做了这么多年 NLP,我总结了几条关于 Tokenization 的“潜规则”:

  • 不是所有语言都一样:中文需要分词,英文只需要按空格和标点切分。我做中文 NLP 时经常要面对“结巴分词(Jieba)”还是“按字符切”的抉择。
  • 特殊 很重要:[CLS], [SEP], [MASK], [UNK] 这些特殊 不是摆设。我见过新手忘记给模型添加 [UNK] ,结果模型遇到新词直接崩溃。
  • 序列长度有限制:大多数模型有最大序列长度(比如 512)。你要确保 Tokenization 后的序列长度不超过这个限制。
  • 一致性必须保证:训练时和推理时,用同一个 Tokenizer。不可以训练时用 BPE,推理时用不同的分词器。我曾经犯过这个错,结果上线后模型准确率骤降,排查了三天才找到原因。

一个小技巧:在处理文本之前,最好先用 tokenizer.tokenize() 看一眼实际输出。这会帮您及时发现预料之外的分词结果,避免在模型训练阶段才发现问题。

接下来的路怎么走?

好了,这一章我们讲清楚了 Tokenization 是什么、为什么需要它、它在整个 NLP 流程中的位置。

内容不少,但你只要记住一句话:

Tokenization 是 NLP 的第一步,也是决定模型成败的一步。

后面的章节,我会带你把各种 Tokenization 算法吃透。

从最基础的按字符切分,到主流的 BPE、WordPiece、Unigram 和 SentencePiece。

每个算法我都会给代码实现和避坑指南。

你准备好了吗?