Tokenization(分词/词元化)
分词就是把一句话剪成一小块一小块,让模型能读懂——但它不是按照我们平时理解的『词』来切的,而是按统计规律切出来的碎片。
亦作、亦称:分词/词元化 · Tokenisation · Text Segmentation · tokenisation · subword tokenization · 词元化 · 子词分词
Tokenization 是大语言模型处理文本的第一步,决定了模型「看到」的是什么。理解分词机制,有助于掌握上下文窗口、多语言支持与推理效率的本质原因。
概述
Tokenization 是大语言模型处理文本的第一步,决定了模型「看到」的是什么。理解分词机制,有助于掌握上下文窗口、多语言支持与推理效率的本质原因。
概述:什么是 Tokenization
Tokenization 是将文本字符串映射为整数序列的过程,是模型读取自然语言的入口。
- token 是模型处理的最小单元,可以是一个词、一个子词片段、一个标点或一个字节
- 原始文本经分词器(tokenizer)转化为 token ID 列表,再通过词嵌入层转为向量
- 现代 LLM 统一使用子词分词,避免「未登录词」(OOV)问题
- 分词结果直接决定序列长度,进而影响上下文窗口的实际可用量
- tiktoken(GPT-4 使用 cl100k_base 词表,约 10 万 token)、SentencePiece(LLaMA 使用 32000 词表)是最常见的工业实现
工作原理:从文本到 Token ID
分词器的工作流程分为词表构建(离线)和编码推理(在线)两个阶段。
- 词表构建:在大规模语料上统计字符或子词的共现频率,迭代合并高频对,直到达到目标词表大小
- BPE(字节对编码):每轮合并出现频率最高的相邻符号对,GPT 系列采用此方案
- WordPiece:以最大化语料似然为合并准则(而非最高频率),BERT 采用此方案
- Unigram LM:从大词表出发逐步剪枝,选择使语料对数似然损失最小的子词集合,SentencePiece 支持此模式
- 编码推理:给定固定词表,对输入文本做最长前缀匹配或 Viterbi 解码,输出 ID 序列
主要类型与工具对比
不同分词策略和工具各有侧重,选型需结合模型架构与语言覆盖需求。
- 词级分词(Word-level):按空格/标点切分,词表大、OOV 率高,已基本被淘汰
- 字符级分词(Char-level):序列长、建模负担重,适合字节级模型(如 ByT5)
- 子词分词(Subword):主流方案,兼顾词表大小与序列长度,包含 BPE、WordPiece、Unigram 三大流派
- tiktoken:OpenAI 开源,支持 GPT-2/3/4 等词表,速度极快,不支持自定义训练
- SentencePiece:Google 开源,语言无关,直接处理原始字节流,LLaMA、T5、Gemma 均采用
- Hugging Face Tokenizers:统一 API,支持多种后端,与 Transformers 库深度集成
应用场景
Tokenization 贯穿 NLP 全链路,在以下场景中有直接影响。
- LLM 预训练与推理:分词质量影响模型对低频词、代码、数学符号的理解能力
- 上下文长度估算:API 计费和上下文限制均以 token 数为单位,需提前估算(英文约 0.75 词/token,中文约 1.5–2 字/token)
- 多语言模型:SentencePiece 的字节回退机制确保任意 Unicode 字符都能被编码,不丢字
- RAG 与向量检索:切片(chunking)策略需与分词颗粒度协调,避免语义单元被割裂
- 提示工程:了解分词边界有助于设计更高效的 prompt,减少无效 token 占用
与相邻概念的区别
分词常与中文 NLP 中的「分词」(Word Segmentation)及嵌入(Embedding)混淆。
- Tokenization vs. 中文分词(Word Segmentation):中文分词是识别词边界的任务(如 jieba),而 LLM 的 tokenization 是子词级操作,不依赖语言学词典
- Tokenization vs. Embedding:分词输出整数 ID(离散),嵌入层将 ID 映射为连续向量;两者是顺序的前后步骤
- Tokenization vs. Lemmatization/Stemming:词形还原/词干提取是词级语言学处理,现代端到端模型通常不需要显式执行
- Token vs. 词(Word):一个英文单词可能对应 1–3 个 token,中文汉字约 1–2 字/token,代码符号可能被拆得更碎
局限与常见误区
即使是成熟的子词分词方案,也存在不可忽视的局限性。
- 语言不公平:英文等拉丁语系 token 利用率远高于中文、阿拉伯文等,导致同等信息量消耗更多 token,API 成本更高
- 数字与数学低效:多位数字常被逐字符分割(如「12345」→ 3–5 个 token),影响数学推理
- 词表固定:分词器词表在训练后冻结,无法动态适应新词或新语言,领域迁移时可能出现低效编码
- 误区——token 等于词:英文中平均约 0.75 个词对应 1 个 token,中文约 1.5–2 个汉字对应 1 个 token,不能直接换算
- 误区——分词对模型透明:分词边界会影响模型对拼写、构词的感知,是「tokenization tax」问题的根源
发展脉络
分词技术随 NLP 范式演进经历了多次关键跃迁。
- 1994 年:Philip Gage 提出 BPE(Byte Pair Encoding) 作为数据压缩算法
- 2015 年:Sennrich、Haddow、Birch 将 BPE 引入神经机器翻译(NMT),首次用于 NLP 子词分割
- 2016 年:Google NMT(Wu 等)使用 WordPiece,开启大规模生产级子词分词时代
- 2018 年:BERT 发布,WordPiece 随之普及;Kudo & Richardson 发布 SentencePiece,实现语言无关分词
- 2019–2020 年:GPT-2/3 采用字节级 BPE,彻底消除 OOV;tiktoken 随 GPT-3.5/4 推出
- 2023 年至今:LLaMA、Gemma、Mistral 等开源模型广泛使用 SentencePiece,多语言大词表(128k+)成为新趋势
常见误解
日常交流中容易听到的简化说法,未必准确,但能帮助理解误解从何而来。
- 「分词就是把一句话剪成一小块一小块,让模型能读懂——但它不是按照我们平时理解的『词』来切的,而是按统计规律切出来的碎片。」
- 「一段话在 GPT 里可能只有 100 个 token,但在另一个模型里可能要 150 个,所以同样的内容换个模型就可能超出上下文限制。」
- 「中文分词比英文麻烦得多,因为汉字之间没有天然空格,模型得靠训练数据猜边界。」
相关术语
和本术语关联紧密的其他词条,便于串联理解。
延伸阅读
从知识库精选 3 篇文章,帮助深入理解该术语。
外部参考
维基百科:查看「Tokenization」词条本页内容为本站原创撰写;维基百科链接仅作延伸参考。