大模型不认识"字",它只认识token。Tokenizer是人类语言和模型之间的翻译器。
BPE算法
Byte Pair Encoding:初始化把每个字符当一个token,统计相邻token对频率,合并频率最高的对,重复直到达到目标词汇量。“lower"可能被分成[“low”,“er”]。
不同模型的差异
GPT用tiktoken,词汇量约10万。Qwen对中文优化,一个汉字通常1-2个token。Llama词汇量只有32K,中文效率低,同样内容消耗更多token。
这也是为什么用Llama处理中文时,实际可用上下文窗口比英文短。
对应用的影响
计费按token,不同Tokenizer导致同样文本不同花费。上下文窗口按token算不是按字符。代码任务中某些Tokenizer分词效率差,消耗更多token。
实用技巧
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o")
print(len(enc.encode("你好世界")))
处理中文为主选Qwen的Tokenizer,比Llama更节省token。
选型建议
模型选型没有标准答案,取决于具体场景。几个关键维度:
- 效果:在你的任务上的准确率/质量,建议用真实数据跑benchmark;
- 速度:推理延迟和吞吐量,直接影响用户体验和成本;
- 成本:API调用费用或自部署的硬件成本;
- 生态:社区支持、工具链、文档质量。
实际操作中,建议先用API快速验证效果,再决定是否自部署。
量化和压缩
模型太大装不进显存?几个压缩方案:
- GPTQ:训练后量化,4bit量化后模型大小减少75%,效果损失很小;
- AWQ:激活感知量化,对重要通道保留高精度,效果比GPTQ略好;
- GGUF:llama.cpp的量化格式,CPU推理也能用;
- 蒸馏:用大模型的输出训练小模型,效果接近但参数量小一个数量级。