大模型里的 Token 是什么?为什么中英文 Token 数量差异很大,各家 API 又为什么按 Token 计费?
模型架构
口语版讲法(约2分钟)
- 一句话定义:分词器切出来的最小处理单位
- 比喻:token 是乐高积木,模型按块干活
- 中文比英文费 token,根源在词表偏英文
- 计费本质:算力消耗与 token 数成正比,输出更贵
- 埋钉子:BPE 词表怎么训、词表大小的权衡
Token 是大模型处理文本的最小单位。大模型其实不认识「字」或「单词」,它拿到一段文本后,会先用分词器,也就是 Tokenizer,按照一个提前训练好的词表把文本切成一个个小片段,这些片段就是 token。它可能是一个完整的英文单词,可能是半个词,也可能是一两个汉字。模型的输入长度、输出长度、上下文窗口的限制,全都是拿 token 来数的。 打个比方,token 就像乐高积木:模型不管你搭的是什么句子,它只按积木块的数量来干活。切分规则一般用 BPE 这类算法,思路是高频片段合并成一整块,比如 the 这种高频词自己就是一个 token;低频的生僻内容就拆碎,比如 tokenization 会被拆成 token 加 ization 两块。 这里有个对中文用户很实际的问题:同样意思的一段话,中文往往比英文更费 token。因为主流模型的词表大多是在英文为主的语料上训练的,英文高频词能整词进词表,大概一个单词一点几个 token;而汉字太多,很多字进不了词表,只能拆到更碎的字节级,早期模型一个汉字要一到两个 token。所以同样 8K 的窗口,装英文文档比装中文装得多,调 API 的费用也更高。不过新一代国产模型专门扩充了中文词表,这个差距在缩小。 至于为什么各家都按 token 计费,本质是 token 数直接对应算力消耗。模型每处理一个 token 都要做一遍完整计算,尤其是生成阶段,答案是一个 token 一个 token 往外蹦的,每蹦一个都要跑一次完整的前向计算,所以你会看到 API 定价里输出通常比输入贵好几倍。字符数、单词数都反映不了真实成本,只有 token 数和算力是对齐的。 顺着这个话题再深挖的话,BPE 词表是怎么一步步合并训练出来的、词表开多大合适,其实都很有讲究,会直接影响中文的 token 效率和推理成本,这块可以继续聊。
关键一句:Token 是分词器切出的最小处理单位,模型算力消耗与 token 数成正比,这是按 token 计费的根本原因。
面试官可能的追问
- 【场景切入】你要给公司做成本预算:每天 1 万次调用,平均每次输入 500 个汉字、输出 300 个汉字,你怎么估算一天大概消耗多少 token?
- 【概念辨析】Token、字符、单词这三个概念有什么区别?为什么模型的上下文长度不用字符数来定义,而要用 token 数?