transformer你不学02Tokenizer从文本到 Token 的第一次转换作 者吴佳浩Alben全栈架构师笔记导读大模型从不认识字它只认识数字。Tokenizer 是文本进入模型的第一个关卡也是新手最容易忽略的关卡——你遇到的 90% 的模型输出乱码、“上下文超长”、中文占 token 特别多问题根都在分词器。本篇用真实 tokenizer 跑通文本→Token→ID→还原的完整闭环。本篇你会学到什么 为什么需要 Tokenizer而不是直接把字符喂给模型 BPE 分词的工作直觉encode/convert_ids_to_tokens/decode三件套的真实用法与输出。一、为什么要学这个神经网络的输入必须是数字但数字怎么来决定了三件事上下文长度同样 1000 字文章好的分词器切 500 个 token差的切 1500 个——直接决定模型能读多长生僻词鲁棒性按词分词word-level遇到没见过的词直接UNK按子词切subword能拼出来多语言公平性早期 GPT 的 tokenizer 对中文极不友好一句中文可能被切成 3~5 个 token同样内容比英文贵好几倍。上篇回顾第 1 篇 里数据流的第一站就是 Tokenizer——文本 → Token → ID。二、核心理论BPE 的直觉Byte Pair Encoding 的思路一句话说完从字符开始把最高频的相邻对不断合并直到形成词表。初始: l o w e r → 高频对 lo 合并 → low er → 最终 lower 是一个 token 罕见词: transformering → 可能切成 transform ering 两个 token所以 token 不是词也不是字是统计意义上的高频子串。这解释了为什么常见英文单词是 1 个 token而代码、数学符号、生僻中文会被切得很碎。三、真实项目里怎么用任何调用大模型 API 的场景计费和上下文限制都是按 token 算的。写 prompt 前先本地数一遍 token是成本控制的基本功。四、流程图原始文本BPE 切分Token 子串序列查词表映射 IDinput_ids 张量模型消费输出 IDsdecode 反查还原文本五、真实代码下面用本地已下载的真实 tokenizerQwen 系列词表跑通完整闭环# Tokenizer 完整闭环编码 → 查看Token → 还原fromtransformersimportAutoTokenizer# 使用本地完整模型自带的 tokenizer离线可用在线环境可换成 Qwen/Qwen2.5-7B-InstructtokAutoTokenizer.from_pretrained(rD:\loraQwen2.5\models\Qwen2.5-7B-Instruct)textTransformer 改变了 NLP# 第一步编码——文本变 ID 序列idstok.encode(text)print(fIDs:{ids})# 第二步查看每个 ID 对应的 token 子串tokenstok.convert_ids_to_tokens(ids)print(fTokens:{tokens})# 第三步解码——ID 序列还原文本restoredtok.decode(ids)print(f还原:{restored})# 往返恒等式检验decode(encode(x)) xprint(f往返恒等:{restoredtext})# Tokens 数量print(fTokens 数量:{len(ids)})# 词表规模print(f词表大小:{tok.vocab_size})输出结果怎么看真实运行输出IDs: [46358, 80090, 117, 112346, 451, 12567] Tokens: [Transformer, ĠæĶ, ¹, åıĺäºĨ, ĠN, LP] 还原: Transformer 改变了 NLP 往返恒等: True Tokens 数量: 6 词表大小: 151643Transformer是 1 个 token高频词整存改变了被切成 3 个子串——这就是 BPE 按频率切分的直接证据 token 里出现的Ġ是 BPE 的空格标记ĠN N还原时自动变回空格decode(encode(x)) x这个往返恒等式是检验 tokenizer 用法正确性的金标准。六、拆解三个函数各管一段函数输入 → 输出用途encode文本 → ID 列表喂模型前convert_ids_to_tokensID → 子串调试看模型在读什么decodeID 列表 → 文本模型输出后给人看七、常见错误与排查网络报错连不上 huggingface.co设镜像export HF_ENDPOINThttps://hf-mirror.com或像本例一样直接用本地缓存路径中文被切得稀碎换中文友好的词表Qwen/DeepSeek 系列对中文优化过别用早期 GPT-2 词表处理中文special token 混进正文encode时留意add_special_tokens参数BERT 系会自动加[CLS]/[SEP]。八、练习题用本篇代码分别统计你好世界和 “hello world” 的 token 数体会中文成本差异验证tok.decode(tok.encode(任意句子)) 原句是否恒成立试一个带 emoji 的句子数一数你最近一段 prompt 的 token 数按主流 API 价格估算这条 prompt 的成本。一句话总结Tokenizer 用 BPE 把文本压成统计意义上的高频子串序列encode 进模型、decode 出模型——token 数量直接决定成本与上下文长度。下一篇transformer你不学03Embedding让文字变成向量。