Token令牌

Token 是大语言模型的基础输入输出单元,模型看不懂汉字、单词、标点,它只认识一串串数字,token 就是文本和数字之间的桥梁。
一句话:文本 →分词器 (tokenizer) →token ID 数字列表,送入模型;模型输出 token ID 列表 →分词器 →还原成人类可读文本。
一、token定义
token 不是字,也不是词,是子词 (sub‑word)。分词器会把句子切成一段段片段,可以是:

完整单词(英文)
半个单词、词根词缀
一个汉字、半个汉字片段(中文)
标点符号、空格、换行符、特殊标记

示例(GPT 类分词器效果)

英文句子:I love large language models
切分:I love large language models →5 个 token
中文句子:今天天气很不错
大多情况:今天 天气 很 不错 →4 个 token;复杂长句一个汉字也会拆成 2 个 token。
  • 英文:1token ≈ 4 个字母,≈0.75 个英文单词
  • 中文:1 个汉字≈1~2 个 token,平均 1.5token / 汉字
  • 标点、空格、换行全部会占 token。

1000 汉字的中文 prompt,大概要 1300‑1600 token。

二、两种阶段:输入 token、输出 token(自回归)
大模型生成是一个 token 一个 token 往外吐,不能一次性输出整段文字。
举个例子,提问:1+1等于几?

用户文本编码成输入 token 序列:["1","+","1","","","",""]
Prefill阶段:把全部输入 token 一次性喂给模型,计算注意力,生成 KV 缓存,预测第一个输出 token:2
把刚输出的2追加到上下文,再输入模型,预测下一个 token:\n
循环往复,直到产出特殊结束 token </s>,停止生成。
关键点:每一轮解码,只输出 1 个 token,所以长回答会慢。

三、中文场景常见坑
1、中文非常耗 token:同样字数,中文消耗 token 远大于英文。1000 英文单词≈1300token;1000 汉字≈1500token。做 RAG 的时候文档不要直接堆,尽量做摘要压缩,不然很容易打满上下文窗口。
2、生僻字、繁体字、emoji 会大量消耗 token,一个 emoji 可能拆成 2‑4 个 token。
3、换行、大量空格、制表符,都会占用 token,写 prompt 不要乱加多余换行空格。
4、不同模型分词器不一样!
Qwen、Llama、GLM 分词器词表不一样,同样一句话,不同模型算出来 token 数量不同。不能拿 OpenAI 的 token 计算器直接套本地开源模型。本地推理必须使用模型自带的 tokenizer。

 
posted @ 2026-08-08 16:55  梁涛999  阅读(74)  评论(0)    收藏  举报