深入了解分词技术
你部署了一个聊天机器人。英语查询使用 42 个 token。一名西班牙语用户发送了一个查询,却使用了 103 个 token。突然间,你的 API 成本飙升了 40%。
当你把分词视为一种“隐形管道”时,这种情况就会发生。每种大语言模型都使用四种子词(subword)算法之一。你的选择决定了词表大小、语言效率以及你的每月账单。
分词控制着三个关键要素:
- 推理成本。LLM API 按 token 计费。较小的词表可能会将一个单词拆分为 8 个 token,而较大的词表只需 3 个。在大规模应用时,这种差异会产生实际的资金成本。
- 词表覆盖范围。糟糕的词表会产生更长的序列。这会导致生成速度变慢且成本更高。
- 模型行为。如果分词器将 "cowboy" 拆分为 ["cow", "boy"],模型学习的方式会与将其拆分为 ["c", "owb", "oy"] 时有所不同。
以下是四种主要类型的工作原理:
BPE (Byte Pair Encoding)
- 工作原理:从字符开始。统计频繁出现的相邻对并将其合并为新的 token。重复此过程直到达到目标大小。
- 优点:快速且具有确定性。
- 用户:GPT-4o, Llama 3, Mistral。
WordPiece
- 工作原理:与 BPE 类似,但使用似然度(likelihood)而非原始频率。它选择能使训练数据概率最大化的合并方式。
- 优点:创建更具语言学意义的 token。
- 用户:BERT, Google models。
SentencePiece
- 工作原理:将输入视为原始 Unicode 字节。它不需要像按空格拆分那样的预分词步骤。
- 优点:最适合多语言支持,因为它与语言无关。
- 用户:Llama 2, Llama 3, Gemma。
Unigram
- 工作原理:从一个巨大的词表开始,并使用概率模型对其进行修剪。它会选择最佳的分词路径。
- 优点:token 与含义之间的映射更加一致。
- 用户:T5, XLNet。
开发者关键总结:
- 关注语言构成。依赖空格的 BPE 模型在处理日语或印地语等语言时会很吃力。对于全球化产品,请使用 SentencePiece。
- 锁定版本。从
cl100k_base迁移到o200k_base会改变你的 token 计数。在评估时,务必跟踪你使用的编码方式。 - 正确进行基准测试。不要比较不同模型家族之间的 token 计数。始终使用字符数或字节数进行基准测试,以保持准确性。
理解这些工具能帮助你交付具有成本效益的产品,而不是让财务团队措手不及。
可选学习社区:https://t.me/GyaanSetuAi