知识全景图/ 软件工程与系统/ 人工智能全景图/ Tokenizer、词表与文本表示

Tokenizer、词表、分词与文本表示底层图谱

解释人类文字如何变成模型能计算的 token id,以及这个转换为什么会影响上下文窗口、成本、延迟、RAG、工具调用和开源部署兼容性

阅读定位: 这一页补在神经网络训练和 Transformer 结构之间,只解释文本进入模型前后的表示边界:分词算法、词表、特殊 token、chat template、token 成本和兼容性。 它不展开 Attention 计算、向量检索或推理服务调度;这些分别由 Token / Attention / TransformerEmbedding / 向量检索推理计算 / KV Cache 承接。
一、从文本到 token id 的最小链路
原始文本
用户输入 / 文档
规范化
Unicode / 空白
切分规则
BPE / SPM
词表查询
token → id
特殊 token
role / tool / stop
模型输入
id 序列
环节它做什么工程上会影响什么最容易忽略的点
Normalize处理 Unicode、大小写、空格、换行或字节表示同一段文本是否得到稳定 token 序列肉眼一样的字符,底层编码可能不同
Pre-tokenize先按空格、标点、字节或脚本做粗切中文、英文、代码、表格的切分差异tokenizer 不是按“自然词”工作
Subword Merge把常见片段合并成更短 token 序列token 数、上下文预算、计费和延迟高频片段便宜,罕见片段会被切碎
Vocabulary Lookup把片段映射为整数 id词表大小、兼容性、输出候选集合换 tokenizer 就等于换输入语言
Special Tokens标记角色、边界、停止、工具调用和模板结构Chat、工具、结构化输出和安全边界模板错了,模型看到的对话就错了

最小直觉

你写的是文本,模型读的是整数序列。tokenizer 把人类可见的字符世界翻译成模型训练时学过的 token id 世界;这一步不只是前处理,而是模型输入协议的一部分。

二、Tokenizer 不是“按词切分”
英文会拆子词
  • 常见词可能是一个 token
  • 长词、专业词、拼写变体可能拆成多个片段
  • 前置空格可能和词片段绑定在一起
  • 同一个词在句首和句中可能 token 不同
中文不是天然一个字一个 token
  • 常见汉字、词片段和标点可能混合存在
  • 模型词表越偏英文,中文 token 成本可能越高
  • 繁简、异体、罕见字会影响切分稳定性
  • 领域术语如果被切碎,输入和生成都更吃力
代码和格式也会消耗 token
  • 缩进、换行、括号、引号、逗号都可能进入序列
  • JSON、表格、日志和堆栈信息通常 token 密度高
  • 结构化输出不是免费,它会占输出预算
  • Prompt 模板越臃肿,留给任务的窗口越少
判断提示: 不要用字符数、中文字数或英文单词数粗暴估 token 成本。生产系统应该用目标模型对应的 tokenizer 做预算、截断、分块和计费预估。
三、BPE、WordPiece、SentencePiece 与 byte fallback
机制核心思路适合抓住的直觉工程注意
BPE从小片段开始,把训练语料里高频相邻片段逐步合并常见组合变短,罕见组合保持碎片词表和 merge rules 必须和模型匹配
WordPiece选择能提升语料似然的子词片段,常见于 BERT 路线用子词覆盖未知词,减少 OOV不同实现有不同前缀和未知词处理规则
SentencePiece把文本当原始字符流处理,可不依赖空格分词对中日文、多语言和混合文本更自然空格常被编码成可见的特殊片段
Byte fallback词表没有的字符退回到字节级表示几乎任何输入都能编码,但罕见字符会变长emoji、乱码、罕见符号会显著增加 token 数

为什么不是直接用字或词

按字会让英文和长文本序列太长,按词又会遇到新词、拼写、代码和多语言覆盖问题。子词算法是在词表容量、序列长度、泛化能力和多语言覆盖之间做折中。

四、词表、特殊 token 与 chat template
词表是输入输出的共同边界
模型输入时把 token 映射成 id,输出时也在同一词表上给每个候选 token 打分。词表不是字典解释,而是模型学习概率分布的离散坐标系;输出头、logits 和 softmax 见 Logits / Softmax
特殊 token 是协议符号
BOS、EOS、PAD、UNK、role、tool、function、image boundary、stop marker 等符号告诉模型哪里开始、哪里结束、谁在说话、哪里是工具结构。
Chat template 决定模型看见的对话
用户看到的是 messages 数组,模型看到的是模板渲染后的 token 序列。system、user、assistant、tool 的边界如果渲染错,模型行为会明显变差。
对象如果配置错了常见症状排查方向
EOS / Stop模型不知道该在哪里停提前截断、重复输出、停不下来检查 tokenizer special tokens 与生成参数
Role Tokens对话角色边界混乱模型模仿用户、泄露模板、忽略 system检查 chat template 与训练格式是否一致
Tool Tokens工具调用结构不可识别JSON 损坏、函数名混乱、参数漂移检查工具 schema 渲染、停止条件和解析器
PAD / Batch批处理位置和 mask 出错输出异常、性能波动、训练不稳定检查 padding side、attention mask 和 position ids
五、中文、英文、代码、emoji 和空格的 token 成本差异
输入类型为什么成本不同工程后果治理动作
中文长文取决于词表覆盖和训练语料比例同样信息量下 token 数可能高于预期用目标 tokenizer 做 chunk 预算
英文技术文档常见词和空格模式通常更省长段落可能比想象中更能塞进窗口保留标题结构,减少重复模板
代码 / JSON符号、缩进、换行和重复键名都计入 token工具调用、日志分析、代码审查成本高压缩无关字段,限制输出 schema 大小
emoji / 罕见符号可能走字节 fallback,被拆得很碎用户昵称、社媒文本、乱码会放大成本清洗不可见字符,必要时做输入规范化
空格 / 换行很多 tokenizer 会把空白当成片段的一部分模板格式、Markdown 和表格会消耗预算保留必要结构,删除纯装饰排版
实用规则: 成本优化不要先删“语义内容”,先删重复模板、冗余历史、无用字段、过大 schema、过多示例和格式噪声。
六、Tokenizer 如何影响上下文、计费、KV Cache 和延迟
Tokenizer
输入 token 数
Prefill 时间
KV Cache 占用
Batch 容量
成本 / P95
变量由 token 数怎样放大你会在哪里感知对应专题
Context Window窗口上限按 token 计,不按字符计长文档、历史对话、RAG 片段塞不下长上下文 / 记忆
Billing输入和输出 token 通常分别计费同一功能不同语言、不同模板成本差异大成本 / 性能工程
Prefill输入越长,首 token 前计算越重用户等很久才看到流式输出推理计算 / KV Cache
KV Cache每个历史 token 都会留下可复用状态长上下文并发下降,尾延迟上升模型服务 / 网关
Output Length生成是一 token 一 token 追加回答越长,流式越久,总耗时越高Logits / Softmax解码 / 采样
七、RAG、结构化输出与 Tool Calling 的边界
RAG chunk 要按 token 预算
chunk 大小、overlap、Top-K 和引用模板最终都会变成 prompt token。只按字符切文档,容易让不同语言、表格和代码片段的预算失真。
结构化输出也消耗词表概率
JSON 的括号、引号、字段名和枚举值都来自 token 分布。字段越多、schema 越复杂,越需要约束解码、校验和重试。
工具调用依赖模板边界
模型不是“天然知道函数对象”,而是在训练格式、特殊 token、工具 schema、stop 条件和解析器共同约束下生成可执行调用。

把边界画清楚

Tokenizer 负责把文本和协议符号变成 token;解码器负责在词表上选下一个 token;应用层解析器负责把输出解释成 JSON、函数调用或引用结构。任何一层含混,都会表现为“模型不听话”。

八、开源模型部署中的 tokenizer 兼容性
兼容对象为什么重要不兼容症状检查项
tokenizer.json / merges / vocab决定文本到 id 的映射输出乱码、能力骤降、特殊符号异常与模型权重同源下载,校验版本
chat_template决定消息如何渲染为训练格式多轮对话错位、system 不生效、工具调用失败核对 model card、推理框架默认模板
special_tokens_map决定 BOS、EOS、PAD、UNK、role 等 id停不下来、提前结束、batch 异常核对 special token id 和 generation config
推理框架不同框架可能内置不同模板和 padding 逻辑本地与线上结果不一致固定版本,记录 tokenizer 与引擎配置
量化 / 转格式转换模型时可能丢配置或改默认项GGUF、ONNX、TensorRT 部署行为偏移转换后跑 tokenizer、模板和停词回归用例
生产提醒: 开源模型上线时,不要只登记权重文件和量化格式。tokenizer、chat template、special tokens、generation config 和推理框架版本都应该进入发布清单。
8.1 Tokenization 证据包:文本怎样变成可复现的 token 序列
证据节点必须记录的字段用来排查什么
文本入口input_source、language_hint、normalization_rule、raw_text_hash乱码、空格差异、Unicode 归一化和多语言 token 成本异常
模板符号chat_template_version、role_tokens、bos / eos / pad / stop_tokenssystem 不生效、停不下来、提前结束或角色边界错位
编码结果tokenizer_version、vocab_hash、token_count、special_token_count、token_ids_hash同一文本在不同环境下为什么 token 数、费用或输出不同
预算归因control_tokens、user_tokens、rag_tokens、tool_tokens、output_reserved_tokens窗口被谁吃掉,为什么关键证据被截断或首 token 变慢
兼容检查model_id、engine_version、tokenizer_config_hash、generation_config_hash开源模型迁移、量化或推理框架升级后行为漂移
九、常见误区
误区:token 就是字或词
token 是模型词表里的离散片段,可能是字、词、子词、空格加片段、标点、字节或特殊协议符号。
误区:换 tokenizer 只是换前处理
模型权重是在特定 token id 分布上训练出来的。随意替换 tokenizer,等于让模型读一门没学过的输入语言。
误区:上下文窗口按字符算
窗口、计费、KV Cache 和生成长度都按 token 算。不同语言、格式和模板的 token 密度会改变真实容量。
误区:特殊 token 不重要
对话角色、工具边界、停止条件和批处理 padding 都依赖特殊 token。它们错了,模型能力会像被“接错线”。
十、回到 AI 主干
AI 全景 Tokenizer / 词表 Token / Attention Logits / Softmax Embedding / 向量检索 解码 / 结构化输出 推理计算 / KV Cache 长上下文 / 记忆 RAG / 知识检索 开源部署 Tool Calling / 执行协议

这张图在主线里的位置

如果说 Transformer 解释 token 进入模型后如何互相读取信息,那么这一页解释 token 出现之前的翻译层:文本、词表、特殊符号和模板如何共同决定模型真正看见的输入。