看了 llm-wiki 关于 Token 的解释,终于理解了。

Token 不是字

之前一直以为 Token 就是字或者词,其实不是。Token 是模型处理文本的最小单位,可能是:

  • 一个完整的词
  • 一个字
  • 一个词的一部分
  • 甚至是一个空格

比如 “hello” 可能被分成 [“hel”, “lo”] 两个 Token。

为什么这样分?

因为词太多了,不可能每个词都给一个编号。把词拆成更小的单位,可以:

  • 减少词表大小
  • 处理没见过的词(新词可以用已有的 Token 组合)

中文的情况

中文的 Tokenization 比英文复杂。有的模型按字切分,有的按词切分,还有的混合。

试了一下 OpenAI 的 Token 计算器,发现中文的 Token 数量比想象的多。一个汉字可能要 2-3 个 Token。

实际影响

Token 数量影响:

  • API 调用费用(按 Token 计费)
  • 模型的上下文长度限制
  • 处理速度

所以写 Prompt 的时候,简洁一点能省钱。