跳转到内容

输入关键词开始搜索

    资料摘要:personal chatgpt 26 — gpt-4o tokenizer 及特殊中文tokens(压缩词表),o200k_base

    视频摘要更新 2026-08-02置信度 high待阅读原始来源 ↗#深度#大模型#课程#personal-chatgpt

    本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列

    本讲用 OpenAI 开源 tiktoken 比较 GPT-3.5/GPT-4 系列常用的 cl100k_base 与 GPT-4o 使用的 o200k_base。更大词表可让中文等多语言片段更常以完整词/词组命中,从而减少 token 数;notebook 还遍历词表,观察到成人站点、乱码式中文及长字符串 token,并讨论“tokenizer 训练语料”和“模型训练语料过滤”不一致可能造成的欠训练 token 风险。

    T1 = tiktoken.get_encoding("cl100k_base")
    T2 = tiktoken.get_encoding("o200k_base")
    T1.n_vocab, T2.n_vocab

    名称近似反映词表规模:约 100K 与 200K。相同英文短句 i love chatgpt 的 token 数变化不一定明显,收益依赖语言和字符串分布。

    若更长、更常见的字节片段直接进入词表,一段文本就不必被拆成多个短 token。课程用中文句子和《西游记》文本累计 token 数比较,转录报告 o200k_base 对该中文语料约为旧编码的 0.71,即 token 数约减少 29%–30%。

    API 按 token 计费时,输入/输出 token 变少通常意味着同文本成本下降;但真实成本还取决于模型单价,不能只由压缩率推出。

    课程引用 GPT-4o 发布信息,强调新 tokenizer 对多语言普遍更高效,但不同语言压缩比不同。英文已有较成熟的子词覆盖,增益通常小于某些中文、韩文、阿拉伯文或印度语言文本。

    notebook 遍历 o200k_base 并按 decode 后字符串长度排序,输出包括:

    • 很长的英文/德文/代码相关片段;
    • 成人站点或 SEO 垃圾语料中的长中文片段;
    • 给主人留下些什么吧”之类语义异常、但可被单 token 编码的字符串。

    这说明 tokenizer 只优化文本压缩/统计覆盖,不保证每个 token 都是高质量自然语言词。

    转录明确说是“自己的猜测”:tokenizer 可能先在广泛、过滤较弱的基础语料上训练;后续 Transformer 训练时又过滤低质量语料,导致部分只在垃圾语料中高频的 token 没有得到充分语义训练。这个解释有现象支持,但 notebook 没有 GPT-4o 训练数据或内部统计,证据不足,必须标为推测。

    压缩率可以按 token 数计算:

    new/old=No200kNcl100k,reduction=1No200kNcl100k\text{new/old}=\frac{N_{o200k}}{N_{cl100k}},\qquad \text{reduction}=1-\frac{N_{o200k}}{N_{cl100k}}

    遍历词表时要捕获无效 token id 的 decode 异常:

    for i in range(T2.n_vocab):
    try:
    text = T2.decode([i])
    except Exception:
    continue

    notebook 的历史输出显示 Rust 后端曾对若干 id 抛出 no entry found for key,因此不能假设 0..n_vocab-1 每个整数都可单独 decode。

    • 00:27:介绍 cl100k_baseo200k_base
    • 00:59:比较约 100K 与 200K 词表。
    • 01:50:说明更大词表的目标之一是压缩 token 数。
    • 02:31:开始验证中文 token 压缩。
    • 03:40:报告《西游记》样例 token 数约减少 30%。
    • 05:44:开始遍历词表。
    • 07:53:观察低质量语料相关 token。
    • 08:21:明确以下成因解释属于个人猜测。
    • 需要安装与 notebook 相容的 tiktokenlangdetectregex,并准备本地 xyj.txt;缺文件时中文长文本实验无法复现。
    • langdetect 对单个 token、短串、混合脚本的语言判断不可靠,只适合探索。
    • 历史 notebook 输出包含 Rust panic/无效 id,完整遍历应加强异常隔离,避免把缺失 id 当成词表内容。
    • 课程样例的约 30% 压缩只对该文本成立,不能直接推广为所有中文语料的固定比例。
    • 异常 token 的训练语料解释是推测,不是 OpenAI 官方结论。
    • 前接第 25 讲:Llama 3 同样更换为大词表、tiktoken 风格 tokenizer;本讲用 GPT-4o 做更细的实证比较。
    • 后接第 28–29 讲:继续讨论模型结构变化;tokenizer/词表是 Llama 2→3 参数量和多语言能力差异的一部分。
    1. 为什么词表翻倍不代表所有文本 token 数都减半?
    2. 如何从两个 token 计数计算压缩比例?
    3. 遍历 0..n_vocab-1 时为什么仍可能 decode 失败?
    4. tokenizer 中存在低质量长串,是否等于模型训练数据一定包含同等比例的该内容?
    5. 为什么 API 成本不能只根据 tokenizer 压缩率判断?
    • 滴答清单抓取时学习状态:已完成
    • 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
    • notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。