资料摘要:personal chatgpt 26 — gpt-4o tokenizer 及特殊中文tokens(压缩词表),o200k_base
本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列。
本讲用 OpenAI 开源 tiktoken 比较 GPT-3.5/GPT-4 系列常用的 cl100k_base 与 GPT-4o 使用的 o200k_base。更大词表可让中文等多语言片段更常以完整词/词组命中,从而减少 token 数;notebook 还遍历词表,观察到成人站点、乱码式中文及长字符串 token,并讨论“tokenizer 训练语料”和“模型训练语料过滤”不一致可能造成的欠训练 token 风险。
1. 两套编码器
Section titled “1. 两套编码器”T1 = tiktoken.get_encoding("cl100k_base")T2 = tiktoken.get_encoding("o200k_base")T1.n_vocab, T2.n_vocab名称近似反映词表规模:约 100K 与 200K。相同英文短句 i love chatgpt 的 token 数变化不一定明显,收益依赖语言和字符串分布。
2. 大词表为何能压缩 token
Section titled “2. 大词表为何能压缩 token”若更长、更常见的字节片段直接进入词表,一段文本就不必被拆成多个短 token。课程用中文句子和《西游记》文本累计 token 数比较,转录报告 o200k_base 对该中文语料约为旧编码的 0.71,即 token 数约减少 29%–30%。
API 按 token 计费时,输入/输出 token 变少通常意味着同文本成本下降;但真实成本还取决于模型单价,不能只由压缩率推出。
3. 多语言收益不均匀
Section titled “3. 多语言收益不均匀”课程引用 GPT-4o 发布信息,强调新 tokenizer 对多语言普遍更高效,但不同语言压缩比不同。英文已有较成熟的子词覆盖,增益通常小于某些中文、韩文、阿拉伯文或印度语言文本。
4. 异常 token 现象
Section titled “4. 异常 token 现象”notebook 遍历 o200k_base 并按 decode 后字符串长度排序,输出包括:
- 很长的英文/德文/代码相关片段;
- 成人站点或 SEO 垃圾语料中的长中文片段;
- “
给主人留下些什么吧”之类语义异常、但可被单 token 编码的字符串。
这说明 tokenizer 只优化文本压缩/统计覆盖,不保证每个 token 都是高质量自然语言词。
5. 讲者的成因推测
Section titled “5. 讲者的成因推测”转录明确说是“自己的猜测”:tokenizer 可能先在广泛、过滤较弱的基础语料上训练;后续 Transformer 训练时又过滤低质量语料,导致部分只在垃圾语料中高频的 token 没有得到充分语义训练。这个解释有现象支持,但 notebook 没有 GPT-4o 训练数据或内部统计,证据不足,必须标为推测。
公式 / 代码要点
Section titled “公式 / 代码要点”压缩率可以按 token 数计算:
遍历词表时要捕获无效 token id 的 decode 异常:
for i in range(T2.n_vocab): try: text = T2.decode([i]) except Exception: continuenotebook 的历史输出显示 Rust 后端曾对若干 id 抛出 no entry found for key,因此不能假设 0..n_vocab-1 每个整数都可单独 decode。
00:27:介绍cl100k_base与o200k_base。00:59:比较约 100K 与 200K 词表。01:50:说明更大词表的目标之一是压缩 token 数。02:31:开始验证中文 token 压缩。03:40:报告《西游记》样例 token 数约减少 30%。05:44:开始遍历词表。07:53:观察低质量语料相关 token。08:21:明确以下成因解释属于个人猜测。
- 需要安装与 notebook 相容的
tiktoken、langdetect、regex,并准备本地xyj.txt;缺文件时中文长文本实验无法复现。 langdetect对单个 token、短串、混合脚本的语言判断不可靠,只适合探索。- 历史 notebook 输出包含 Rust panic/无效 id,完整遍历应加强异常隔离,避免把缺失 id 当成词表内容。
- 课程样例的约 30% 压缩只对该文本成立,不能直接推广为所有中文语料的固定比例。
- 异常 token 的训练语料解释是推测,不是 OpenAI 官方结论。
与前后讲关系
Section titled “与前后讲关系”- 前接第 25 讲:Llama 3 同样更换为大词表、tiktoken 风格 tokenizer;本讲用 GPT-4o 做更细的实证比较。
- 后接第 28–29 讲:继续讨论模型结构变化;tokenizer/词表是 Llama 2→3 参数量和多语言能力差异的一部分。
- 为什么词表翻倍不代表所有文本 token 数都减半?
- 如何从两个 token 计数计算压缩比例?
- 遍历
0..n_vocab-1时为什么仍可能 decode 失败? - tokenizer 中存在低质量长串,是否等于模型训练数据一定包含同等比例的该内容?
- 为什么 API 成本不能只根据 tokenizer 压缩率判断?
- 视频:gpt-4o tokenizer 及特殊中文tokens(压缩词表),o200k_base
- 转录:🔒 personal chatgpt 26 视频转录
- 课件 / 代码:🔒 tokenizer_gpt4o.ipynb
- 视频描述中的补充资料:https://www.bilibili.com/video/BV1Sk4y1P7LK/?spm_id_from=333.999.0.0
- 滴答清单抓取时学习状态:已完成。
- 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
- notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。