
分词(Tokenization)
分词是模型"读懂"文字的第一步——它把人类语言拆成模型能处理的最小单元(Token)。理解分词,才能理解为什么中英文的 Token 消耗不同、为什么模型会"读错"某些文字。

① 一句话定义
分词(Tokenization)是将人类可读的自然语言文本拆分成模型可处理的最小单元(Token)的过程。如果把 LLM 比作一个只能吃"小方块"的生物,分词器就是把一整块食物切成小块喂给它的刀——切的方式决定了模型能消化多少、花多少钱、出多少力。
注意区分两个容易混淆的概念:Token 是分词的结果(一个文本单元),Tokenization 是分词的过程(把文本变成 Token 序列的算法)。就像"单词"和"分词"的关系——单词是结果,分词是动作。
② 为什么重要
一、分词质量直接影响模型性能下限
如果一个分词器把"人工智能"拆成了"人"+"工"+"智"+"能"四个 Token,模型需要自己学会把这四个 Token 组合起来理解——这浪费了模型的"注意力资源"。一个好的分词器会把"人工智能"当成一个整体 Token,让模型直接在高层次上理解语义。这就是为什么不同模型即使架构相同、参数相同,分词器的差异也会导致性能差异。
二、分词直接决定 Token 消耗和 API 成本
同一个意思,不同语言、不同分词器的 Token 数可能相差一倍。"我喜欢学习AI"用中文可能是 5 个 Token,翻译成"I love learning AI"用英文可能是 4 个 Token,但要是变成"I am deeply passionate about studying artificial intelligence technologies"可能就是 12 个 Token。理解分词规律能帮你在写 Prompt 时主动优化成本。
三、分词的"盲区"是 LLM 的固有弱点之一
分词器的词典大小是有限的(通常是 3-10 万)。任何不在词典中的词会被拆分成子词甚至字符级别。这意味着:罕见的人名、专业术语、新造词汇、代码中的变量名,都会被无情切碎。当模型看到 Token 级别而非词级别的信息时,它的理解能力会显著下降。这也是为什么 LLM 有时候在专业领域表现不佳的原因之一——不是因为"不懂",而是因为"压根没以正确的方式看到"。而这个问题往往被忽略。
③ 核心机制
BPE 分词算法的通俗拆解
今天几乎所有主流 LLM(GPT、Claude、Llama 等)都使用字节对编码(Byte Pair Encoding,BPE)算法。你可以把它理解成一个"自学识字"的过程:
- 起点:字符级别——把每个 Unicode 字符当作一个 Token,假设词典大小 = 所有出现的字符数
- 统计:找最常一起出现的一对——扫描整个训练语料(可能是几万亿字符),统计每对相邻 Token 一起出现的次数。比如"学"+"习"出现了 10 亿次,"A"+"I"出现了 8 亿次
- 合并:最常出现的那一对合并为新 Token——把"学"+"习"合并成"习习",加入词典,替换训练语料中所有的"学"+"习"
- 重复——不断重复 2→3,直到词典达到预设大小(如 50,000 个 Token)或没有可合并的了
结果就是:常见词("喜欢"、"AI"、"the")被当作整体 Token,罕见词("氟代脱氧葡萄糖")被拆成更小的子词单元。
一个实际的分词演示
用 GPT-4 的分词器来实际拆分一段文字:
输入:"Transformer架构彻底改变了NLP领域"
BPE分词:Transformer | 架构 | 彻底 | 改变了 | NLP | 领域
Token数:6
输入:"Transformer architecture revolutionized NLP"
BPE分词:Transformer | architecture | revolution | ized | NLP
Token数:5
注意英文 "revolutionized" 被拆成了 "revolution" + "ized"——因为词典里有 "revolution" 但没有完整形式。这就是 BPE 在实际运行中的体现。
不同模型的分词器差异巨大
同一个句子,在不同模型的分词器下结果不同:GPT-4o 的分词器(o200k_base)有约 20 万 Token 的词典,对多语言支持更好;Claude 的分词器对长文本进行了特别优化;Llama 3 的分词器有 12.8 万 Token 的词典,比 Llama 2(3.2 万)扩大了 4 倍。这些差异直接导致了不同模型在处理同一任务时 Token 消耗不同。
④ 典型应用场景
场景 1:估算 Prompt 成本——写一个长 Prompt 之前,先跑一遍分词器看看 Token 数。如果是 3000 Token,用 GPT-4o 输入成本约 $0.0075。如果优化到 2000 Token,每次调用省 1/3。日调用百万次的话,这就是大钱。
场景 2:多语言产品设计——你的产品同时服务中文和英文用户。测试发现中文用户的平均 Prompt Token 只有英文的 60%,意味着中文用户的 API 成本显著更低。在定价和套餐设计时需要考虑这个差异。
场景 3:专业领域模型选型——你在做医疗 AI,发现很多医学术语被通用分词器切成了碎片。这时你可能需要一个针对医学文本扩充分词词典的领域模型,或者在 Prompt 中主动使用缩写和常见词来减少碎片化。
⑤ 常见误区
误区一:分词就是"按空格切词"——这是对英文的刻板印象。实际分词器要处理中文(无空格)、日文、阿拉伯文、代码、LaTeX、emoji 等各种输入。按空格切词只是最理想的简化情况。
误区二:所有模型的分词结果一样——完全不同。同一个句子在不同分词器下的 Token 数可以差 20-30%。跨模型对比 Token 消耗必须使用各自的分词器。
误区三:分词只是预处理,不影响模型能力——恰恰相反。分词错误会产生"连锁反应"——后续所有的 Embedding、注意力、生成都建立在一个被错误切分的序列上。这就像你用一把钝刀切菜,后面再怎么炒都不好吃。
📜 历史与来源
分词历史悠久:从 1950 年代编程语言的词法分析(Lexical Analysis),到 1990 年代 NLP 的规则分词,到 2016 年 Sennrich 等人将 BPE 引入 NLP 用于神经机器翻译,再到 2019 年 GPT-2 采用 BPE 分词器使其成为 LLM 标配。分词从"人工设计规则"进化到了"从数据中自动学习最优切分"。
故事一:GPT-4 为何不公开分词器?
故事一:GPT-4 为何不公开分词器?
OpenAI 在发布 GPT-4 技术报告时,明确表示不公开模型架构细节,包括分词器。这在研究社区引发了不满——许多研究者认为分词器是理解模型行为的基础工具,闭源不利于学术审计。但也有人理解:分词器设计包含了大量工程机密(如多语言处理的优化策略),公开等于给竞争对手提供了路线图。这个争议是"AI 应该有多开放"这个更大辩论的缩影。
故事二:中文分词的独特挑战
英文分词天然依赖空格作为词边界,中文没有这个奢侈。"南京市长江大桥"——是"南京市 / 长江 / 大桥"还是"南京 / 市长 / 江大桥"?中文分词 20 年来一直是 NLP 的经典难题。现代 BPE 分词器通过大规模数据统计一定程度上绕开了这个问题,但在人名、新词、歧义句上仍然表现不佳。这也是为什么通义千问等中文原生模型特别强调分词优化——它们的分词器在中文语料上训练得更充分。
「分词是模型"看见"文字的眼睛——如果分词器这把刀太钝,把完整的概念切成了碎片,再聪明的模型也要花额外力气来拼回去。理解分词,你就能理解 Token 消耗的底层逻辑,也就能在 Prompt 设计和成本优化上做出更聪明的决策。
」