什么是 Tokenization:从“切词”开始理解 NLP
大家好。我们直接进入正题。
Tokenization,中文常翻译成“令牌化”或“分词”。
说白了,就是把一段文本拆成一个个小单元的过程。
这个小单元叫什么呢?叫 (令牌)。
你可以把 Tokenization 想象成“切菜”。
你有一整根黄瓜(原始文本),你把它切成片()。
切片的大小,取决于你的菜谱(任务需求)。
就这么简单。
我的经验:我入行 NLP 时,觉得 Tokenization 就是调个库函数,没什么技术含量。直到有一次做多语言翻译模型,因为中英文混合文本的分词策略没选对,模型在“我喜欢iPhone”这句话上彻底崩了。从此我再也不敢小看这一步。
为什么需要 Tokenization?
你想想看,计算机能直接理解“我喜欢吃苹果”这句话吗?
不能。它只认识数字。
所以我们需要把文字转成数字。
但你不能把整句话直接映射成一个数。为什么?
因为句子太长,组合太多。你根本无法穷举所有可能的句子。
正确的做法是:先找到最小的有意义的单元。
然后为每个单元分配一个 ID。
Tokenization 就是帮你找到这些“最小有意义单元”的过程。
这样做的好处非常明显:
- 控制词汇表大小:不用穷举所有句子,只管理几万个 就够了。
- 处理未见过的文本:只要新句子里包含你见过的 ,就能处理。
- 降低计算复杂度:处理短 序列比处理整句子要高效得多。
- 捕捉语言规律:模型能学到词与词之间的共现关系。
核心结论:没有 Tokenization,NLP 模型就无法处理文本。它是文本与数值世界之间的桥梁。
Tokenization 在 NLP 流程中的位置
一次典型的 NLP 任务流程是什么样子的?
我来给你画个图。
从图上你能清楚地看到:
- 原始文本进入系统后,第一站就是 Tokenization。
- Tokenization 把文本变成 序列(其实就是一串数字 ID)。
- 序列送入模型(比如 Transformer),模型进行计算。
- 模型输出结果(也是 序列)。
- 最后通过 解码 把 序列转回人类可读的文本。
注意:我曾经见过不少同学,在训练模型时把大量精力放在调参上,但 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。
每个算法我都会给代码实现和避坑指南。
你准备好了吗?