分词器的三要素决定论:算法、参数与领域数据(篇二)

#2025/12/28 #ai

如果说上一节是“分词器实战横评”,那么这一节就是“分词器的配置文件说明书

决定一个分词器最终行为(是怎么切分的),主要取决于三大配置属性。你可以把这看作是你初始化一个分词器对象时,影响其内部逻辑的三个核心变量

目录

1. 分词算法 (The Algorithm)

这是分词器的“内核引擎”。

  • 选项:
    • BPE(GPT系列用)、WordPiece(BERT系列用)、SentencePiece 等。
  • 工程师视角:
    • 这就像你选择压缩算法是选 gzip 还是 bzip2
    • 不同的算法有不同的压缩(切分)策略,决定了生成 Token 的基础逻辑。

2. 初始化参数 (The Parameters)

这是分词器的“静态配置”。设计模型时必须预先设定好:

  • 词表大小 (Vocabulary Size):
    • 定义:
      • 你的字典里能存多少个独立的 Token?
    • 现状:
      • 以前常用 3万或 5万(如 BERT),
      • 现在流行更大的,比如 10万(如 GPT-4)。
      • 词表越大,能覆盖的词越全,切分出的序列就越短。
  • 特殊词元 (Special Tokens):
    • 定义:
      • 也就是保留字或控制符
    • 常见:
      • <s>(开始)、[PAD](填充)、[MASK](掩码)、[UNK](未知)。
    • 定制:
      • 如果你要做特定任务,可以往里加自定义的控制符。
      • 比如
        • Galactica 模型加了 <work> 标签来专门标记推理步骤
        • Llama 2 加了 <|user|> 来标记对话角色。
  • 大小写策略 (Casing):
    • 决定是全转小写(uncased),还是保留大写(cased)。
    • 这决定了 Appleapple 是同一个 ID 还是两个不同的 ID。

3. 训练数据领域 (The Data Domain)

这是分词器的“学习环境”。这点最容易被忽视,但对工程师选型至关重要。

  • 原理:
    • 即使算法和参数一样,在维基百科上训练的分词器,和在 GitHub 代码库上训练的分词器,生成的词表完全不同。
  • 代码场景案例:
    • 普通分词器:
      • 看到 Python 代码里的缩进(4个空格),可能会切成 4 个单独的空格 Token。
    • 代码分词器:
      • 如果在代码数据上训练过,它会把“4个空格”或“缩进+函数名”直接识别为一个特定的 Token。
      • 这能显著减少 Token 数量,让模型能读入更长的代码上下文,运行效率更高。

总结

当你选择或训练一个分词器时,实际上是在定义:

  • 用什么算法(BPE)
  • 多大的容量(词表)
  • 哪些控制符(特殊Token)
  • 以及你是针对什么业务场景(纯文本 vs 代码)来优化的。