实测DeepSeek分词机制:你的输入如何变成计费Token?

图片

什么是token

token 是DeepSeek模型处理文本的基本单位,也是API计费的核心依据。虽然可理解为“字词”,但实际分词规则比表面更复杂,通常 1 个中文词语、1 个英文单词、1 个数字或 1 个符号计为 1 个 token。

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

往期文章推荐:

  • 11.英语分词进化论:BPE相关论文汇总
  • 10.硬核实战 | 3分钟Docker部署ClickHouse列存数据库
  • 9.技术深解 | DeepSeek-R1-0528训练参数全透视:163K上下文与MoE高效架构的基石
  • 8.DeepSeek最新升级实测:推理能力翻倍,但离世界顶尖还有多远?
  • 7.血泪教训!Redis默认配置竟会导致数据丢失?Docker生产部署指南
  • 6.Function Call:大模型如何突破自身局限“使用工具“
  • 5.DeepSeek动手实践:创建一个自动连点器
  • 4.告别无效提示!使用少样本学习让AI秒懂你的需求
  • 3.解密PromptTemplate:为什么说它是AI时代的Jinja模板?
  • 2.LangChain Core架构解析:模块化设计与LCEL原语实现原理
  • 1.拒绝重复造轮子!LangChain如何简化LLM应用开发?

一般情况下模型中 token 和字数的换算比例大致如下:

1 个英文字符 ≈ 0.3 个 token。
1 个中文字符 ≈ 0.6 个 token。

但因为不同模型的分词不同,所以换算比例也存在差异,每一次实际处理 token 数量以模型返回为准,您可以从返回结果的 usage 中查看。

关键认知:分词结果取决于训练语料和算法策略,同样的文本在不同模型中可能产生不同的token数量

动手实战

计算 Tokens 用量

import transformers
from pathlib import Path


chat_tokenizer_dir = str(Path(__file__).parent.resolve())

tokenizer = transformers.AutoTokenizer.from_pretrained( 
    chat_tokenizer_dir, trust_remote_code=True
)

prompt = u"大千世界无奇不有,大千AI智探万象!"
print(prompt)

# 分词结果 (token id列表)
result = tokenizer.encode(prompt)
print("Encoded tokens:", result)
# 输出: Encoded tokens: [547, 3563, 3427, 1265, 4481, 422, 450, 303, 547, 3563, 13503, 4386, 4968, 99339, 3]

# token长度
print("token length:", len(result))
# 输出: token length: 15

# 分词结果
print([tokenizer.decode(i) for i in result])
# 输出: ['大', '千', '世界', '无', '奇', '不', '有', ',', '大', '千', 'AI', '智', '探', '万象', '!']

实测解析:

  1. 1. 文本"大千世界无奇不有,大千AI智探万象!"共18个字符

  2. 2. 被拆分为15个token,但并非逐字拆分:

  • • 中文单字:"大"、"千"等独立成token

  • • 复合词:"世界"、"万象"被识别为整体

  • • 标点符号:感叹号和逗号各占1token

  1. 3. 字母组合"AI"被视为独立token

  2. 4. 关键发现:相同词语"大千"在文本中出现两次,但分词结果相同(ID一致),说明分词具有一致性


本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

你可能感兴趣的:(人工智能,#,DeepSeek,人工智能,分词,deepseek,transformers,transformer)