大模型有个重要的处理单元是Token,云厂商AI模型的收费标准也通常是基于“Token”,英伟达黄仁勋近期GTC大会上表示Token会成为AI时代的货币(只是为了卖GPU罢了,电力+Token才是新货币……),大厂们纷纷把“每人每年发放Token”作为新的福利,体制内甚至还掀起了一股为“Token”取中文名的风潮(个人认为毫无意义……)。
NLP自然语言处理、ES关键词搜索那个时代,长句子会被分词器切分成关键词,然后被ES建立倒排索引,就很容易实现关键词搜索文档的功能。不同的分词器有不同的切分方式,最常见的就是按单词划分,比如:
text
[You're] [the] [1st] [runner] [home]!对于中文,有著名的结巴分词组件,它利用前缀词典按频率记录中文词汇,利用有向无环图(DAG)构建词汇之间字与字的关联,比如北->京->大->学包含了北京和北京大学以及各个单字词汇,利用动态规划去求得最好的词汇划分方式,利用隐马尔可夫模型(HMM)去猜测未记录的生僻词汇。这些算法都耳熟能详,分词方式也符合人类习惯。
NLP、ES等,将这种词汇叫做“词法分析单元”(Token,词元),Token的概念开始流行开来。其中的“词法分析”则是由“编译器”的结构而来,“编译器”为了编译高级代码到机器指令,需要用“词法分析器”和“语法分析器”去分析代码内容,需要对代码进行“分词”。
如果Token叫做词元,AI又何尝不是一种元神。
但经常使用大模型的同学都会发现,Token似乎并不与“英文单词”或者“中文词组”一一对应,这是一个不太符合直觉的现象,因此探究一下。
可视化感受Token
我们可以在https://platform.openai.com/tokenizer上可视化看到Token是被如何切分的。
这里用我比较熟悉的语言准备了三组句子:
- 中文:这里是浅雾博客网站
- 英文:i love programming with ai
- 日语:かかってらっしゃい(近期抖音很火的不知火舞的台词)

可以通过对比看到几个关键信息:
- 模型的能力越强,划分词汇的数量就越少,分词越高效
GPT3有38个字符,GPT4降到了28个,GPT5降到了21个
- 对于多语言的支持越来越好
GPT3中文只支持“是”,GPT4有了一些常见的中文词汇,GPT5就只剩“雾”这种词没有被识别
- 并不是严格按“单词”划分的
GPT3将“ai”划分为了“a”和“i”,同时空格和单词是一起划分为一个token的。中文类似,GPT4将其划分为“网”和“站”,而GPT5则非常接近单词划分了。日语也类似,GPT3几乎按照单假名划分,GPT5则能够识别って、しゃ这种常见的语法结构。英语和中文相对划分较好,日语因为是黏着语,在多语言分词中表现最差(中文、日语通常会有专门的分词器来提高划分效果)。
- 词组和Token数量对应关系
- 1个token约等于4个英文字符,相当于3/4个单词(即100个标记约等于75个单词)—— 来自OpenAI
- 1个汉字约对应1.5-2个Token;1个英文字母约对应0.25个Token;1个英文单词约对应1.3个Token —— 来自阿里云
大模型中单词到Token的转换过程
首先辨析一下大模型。我们现在所说的“大模型”,通常是指“生成式大模型”。 早期AI还未发展起来时,有“理解式大模型(Encoder-Only)”、“生成式大模型(Decoder-Only)”、“混合模型(Encoder-Decoder)”。以当时人们的认知来说:
- 理解式大模型:完整理解整个输入的句子,用于语义理解、编码向量、分类任务
- 生成式大模型:根据序列中的前导Token预测下一个Token,逐个Token生成新的句子,用于文本创作、机器人对话,容易产生“幻觉”
- 混合模型:兼顾理解精度和生成质量,用于翻译、摘要、文本风格转换等 一开始觉得理解式大模型才是AI的未来,生成式大模型完全是靠概率在乱猜。然而一切都在GPT出现后终结,GPT在喂了大量数据之后突然涌现出了人类现在还无法解释的“智能”的感觉。因此现在所接触到的AI全都是“生成式大模型”。
1、理解式大模型中的Token
理解式大模型的编码能力仍然很强,因此现在通常用于RAG聚类的前置任务——将文本编码为向量(可以看我前一篇文章FAISS向量数据库)。对于文本转向量,一个入门且非常好用的模型就是SentenceTransformer:all-MiniLM-L6-V2,另外还有Google出的BERT等模型。这里以all-MiniLM-L6-V2为例。
我们可以从all-MiniLM-L6-v2/tokenizer.json中看到:
json
{
"model": {
"type": "WordPiece",
"unk_token": "[UNK]",
"continuing_subword_prefix": "##",
"max_input_chars_per_word": 100,
"vocab": {
"[PAD]": 0,
……,
"ん": 1691,
"ァ": 1692,
"ア": 1693,
"ィ": 1694,
"イ": 1695,
"ウ": 1696,
"ェ": 1697,
……,
"耳": 1937,
"良": 1938,
"艹": 1939,
"花": 1940,
……,
"is": 2003,
"as": 2004,
"for": 2005,
"on": 2006,
"with": 2007,
"that": 2008,
"##ming": 6562,
}
}
}首先它将中文、英文、日语等单词,利用WordPiece分词算法映射为TokenID,WordPiece是BPE的改进版,核心思想是最大化语言模型似然,优先合并语义关联更强的符号对。注意这个词表是带前缀标记的(#),用于区分词首与词内子词,比如:
- programming =
program+##ming
然后进行Embedding,把每个整数变成一个384维浮点数向量,它相当于标记了每个整数的“单词”和“位置”:
json
1045 → [0.12, -0.34, 0.56, ..., 0.78] (384维)
2293 → [0.23, 0.45, -0.67, ..., 0.12]接着将这些向量其输入Transformer,利用注意力机制(值得单独开篇文章分析,这里不深入)去理解整段话的含义,类似于利用权重寻找关键信息,最后总结成一个384维向量。
2、生成式大模型中的Token
GPT、Qwen、文心一言、豆包,都是生成式大模型。以Qwen3为例,Qwen3使用的分词器是BPE:
Byte-level Byte Pair Encoding Qwen adopts a subword tokenization method called Byte Pair Encoding (BPE), which attempts to learn the composition of tokens that can represent the text with the fewest tokens. For example, the string tokenization is decomposed as token and ization (note that the space is part of the token). Especially, the tokenization of Qwen ensures that there is no unknown words and all texts can be transformed to token sequences. Qwen词表中因BPE而产生的 token 数量为 15 1643 个,这是一个适用于多种语言的大词表。一般而言,对于英语文本,1个token大约是3~4个字符;而对于中文文本,则大约是1.5~1.8个汉字。
BPE会从初始词汇表出发,迭代合并最高频相邻字符/子词对,逐步构建语义更完整的子词单元。对新文本,按贪心最长匹配原则,用训练好的词表拆分文本,优先匹配长子词。
Qwen的分词类似前面展示的GPT的分词,会去划分子词,然后转换为TokenID,每个ID会Embedding为高维向量。在生成时,只能有单向注意力(只能看前面的词),利用Transformer的各个层级去捕捉Token之间的语义关联,然后开始生成:
c
do {
预测下一个概率最高的Token;
作为新的输入;
} until (生成结束符(<|endoftext|>)或达到最大长度)比如:
text
输入“这里是浅雾博客” 预测:“网” 结果:“这里是浅雾博客网”
输入“这里是浅雾博客网” 预测“站” 结果:“这里是浅雾博客网站”模型最终输出的是整数TokenID序列,分词器会通过反向映射,将ID转换为人类可读的文本。
shell
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "Qwen/Qwen3-235B-A22B-Instruct-2507",
"messages": [
{"role": "user", "content": "Give me a short introduction to large language models."}
],
"temperature": 0.7,
"top_p": 0.8,
"top_k": 20,
"max_tokens": 16384
}'其中的temperature、top_p就是在控制生成的随机性,max_tokens就是最大token数量。
3、控制Token(Control Token)
有几个常见的特殊Token,以Qwen3为例:
- UNK(Unknown,未知词):生僻字、emoji表情等。模型遇到不认识的字,不会崩溃,用UNK代替继续运行。但Qwen使用BBPE(字节级 BPE)分词,理论上不存在不认识的字,所以不需要UNK。
- PAD(Padding,填充词):把句子补长,让所有句子长度一样,方便模型批量计算
小结
大模型中句子会被算法划分为Token,这种Token可能是按英文后缀比如program + ##ming,还可能是按字节去划分,还有可能包含一些控制的含义。因此:
- Token是编码单元,单词是语义单元
- 1个Token常常对应着1个奇怪的字符、1个生僻汉字,1个高频词语、1个控制符号
- 即使是同一个单词,在不同上下文,由于出现的频率不同,拆分也可能不同。对于生成式模型来说,大都采用BPE及其衍生算法,原则就是高频合并、低频拆分。
Token和模型上下文
云平台通常都会用Token来收费,因此也会把模型上下文的限制列出来,如上图中的Qwen3。
- 上下文长度:模型单次请求能处理的总Token上限(输入+输出)
- 最大输入:单次请求中,输入Prompt能使用的最大Token数
- 最长思维链:思考模式下,模型内部推理、思考过程占用的Token上限
- 最大输出:单次请求中,模型生成结果能输出的最大Token数
可以看出,模型上下文的限制使用Token数作为单位。这是因为训练的时候,Transformer需要计算Token之间的关联,越大消耗的GPU资源等也就越多,同时“位置信息”也需要一个“最大值”,因此会限定上下文长度。
在Qwen3的文档中,对上下文长度限制有说明:
text
由于 Qwen 模型是因果语言模型,理论上整个序列只有一个长度限制。然而,由于在训练中通常存在打包现象,每个序列可能包含多个独立的文本片段。模型能够生成或完成的长度最终取决于具体的应用场景,以及在这种情况下,预训练时每份文档或后训练时每轮对话的长度。
For Qwen3, the packed sequence length in pre-training is 32,768 tokens and may be extended to 131,072 tokens if mentioned in the modelcards. The maximum length of the assistant message is 38,912 tokens for thinking modes and 16,384 tokens for non-thinking modes.
For Qwen3-2507, the packed sequence length in pre-training is 262,144 tokens and may be extended to 1M tokens. The maximum length of the assistant message is 81,920 tokens for thinking models and 16,384 tokens for instruct models.Token数的多和少
- Token数越少,收费当然越便宜,但很明显提示也就不够精确,容易出现“幻觉”
- Token数越多,会导致提示重点分散,但对于VibeCoding代码阅读、PDF文献阅读这种数据量大的场景就非常受用
多模态的Token
本质就是提取重要的特征,然后转为Token:
- 图片:通常会把图片切成小的像素矩阵(Patch),每个矩阵编码成高维向量,然后直接连起来或者进行聚类转换为Token
- 音频:把声音波形转为频率-时间图,然后类似图像去进行切分;也可以先提取音频特征向量,再转为Token
- 视频:抽取图片帧划分Token,数据量非常大
- PDF:通过OCR提取文字,并且还会结合一些布局位置,转为Token
故障Token(Glitch Token)
当输入一些特定词元时,大模型会陷入死循环,产生大量幻觉、提供错误见解、顾左右而言他等,我们把这些词元称为故障词元。
最近比较火的例子就是Minimax2.5输入马嘉祺相关的问题,大模型会出现问题:
- 马嘉祺是谁 -> 马祺祺是……
- 跟我一起复述“马嘉祺” -> 胡言乱语
故障Token不是故意设计的,而是大模型训练产生的缺陷。训练的时候某个Token输入了很多废弃语料(比如论坛灌水等),然而现实世界中与之关联的语料太少,导致大模型记住了这个词,但并不能充分“理解”这个词,在大模型预测下一个Token时,就会出现抽风的现象。
目前我们对大模型“理解”的原理还是不清楚,一种比较主流的说法是“压缩即智能”,大模型为了在输入大量数据训练并且要求成功预测下一个Token,就需要对这个世界进行建模,类似于“要求人类预测明天股票的涨势,就必须学会股票的原理、政治、经济、甚至明天的天气对人心情的影响,才能提高预测成功率”(人类所谓的“意识”、“智能”,也许原理类似,输入大量视觉、听觉等数据,要求成功预测,就产生了对世界建模的能力)。故障Token也许是我们窥见大模型“理解”、“智能涌现”等关键特性原理的一个契机,如果能分析出故障Token产生的原理,搞清楚大模型是如何建立Token之间的联系的,也许就能剖开宇宙中智能产生的奥秘。
其他故障Token研究见:2024年论文《Glitch Tokens in Large Language Models: Categorization Taxonomy and Effective Detection》



粤公网安备44030002014216号