跳转到内容

输入关键词开始搜索

    文本 Tokenizer 与 Byte-level BPE

    概念更新 2026-08-02置信度 high#概念#基础#长青#大模型#Tokenizer

    文本 tokenizer 把字符串变成模型词表中的 token ID;Byte-level BPE 先以 UTF-8 byte 为完整基础字母表,再学习高频 byte 序列的 merge,从而兼顾无未知字符与常见片段压缩。

    课程第 9 讲把 Hugging Face Tokenizers 拆成四层:

    1. Normalization:Unicode、大小写或空白规范化;
    2. Pre-tokenization:按空格、标点或 byte-level 规则划分候选片段;
    3. Model:BPE、WordPiece、Unigram 等算法把片段映射到词表;
    4. Post-processing:加入 BOS/EOS、segment 等特殊 token,并生成最终 ID。

    不同模型可以共享算法名称,却因 normalization、pre-tokenizer、special tokens 与 merge rules 不同而完全不兼容。

    UTF-8 把任意文本编码为 byte 序列。GPT-2 风格 Byte-level BPE 先把 256 个 byte 映射到可显示 Unicode 符号,再学习 merge:

    原始 UTF-8 bytes → byte-to-unicode 映射 → 预分词 → BPE merges → token IDs

    因此基础层可覆盖任意输入,不需要传统 <unk> 承担所有未知字符。词表中的 Ġ 常代表前导空格,Ċ 常代表换行;它们是 byte 映射后的可视化符号,不是自然语言字符本身。

    训练 tokenizer 时需要明确:

    • 训练语料是否覆盖目标语言和领域;
    • vocab_sizemin_frequency
    • special token 集合与 ID;
    • normalization/pre-tokenization 规则;
    • 保存并发布完整 tokenizer 配置,而不只是 vocab.json

    领域词如果频繁出现,可能被合并成更少 token;但词表越大,embedding 与 LM head 参数通常越多。

    第 26、29 讲比较 cl100k_baseo200k_base 以及 Llama 2/3 词表。更大的、多语言覆盖更好的词表可以减少某些中文文本的 token 数,但代价包括:

    Nembed=Vd,N_{embed}=Vd,

    其中 VV 是词表大小,dd 是隐藏维。如果输出 head 不共享权重,还会再增加约 VdVd 参数。压缩率、模型大小、训练语料和推理速度之间需要整体权衡。

    • 小段中文示例的 token 数不能代表完整 benchmark。
    • “出现一个完整中文词 token”不证明模型理解该词,只说明词表包含该字节序列。
    • 文本 tokenizer 与音频 codec/tokenizer 共享术语,但输入空间和训练目标不同,不应合并定义。
    • tokenizer 必须与模型权重匹配;随意换词表会使 embedding ID 语义失配。