本页目录
Token 是大型语言模型(LLM)处理文本的基本构件。理解 Token 至关重要,尤其因为模型费用通常按 Token 使用量计算。
什么是 Token?
Token 本质上是一组数字,代表 LLM 如何“看待”你提供的文本。把文本转换为 Token 的过程称为 encoding.
分词过程分为两步:
- 分词器把文本拆成它能识别的 Token
- 这些 Token 再被转换成数字
解码是相反的过程:
- 数字被转换回文本 Token
- 这些 Token 被连接起来形成输出
想继续深入: 加入“面向真正工程师的 AI 编码”候补名单
LLM 处理流程
完整的 LLM 处理流程如下:
- 分词器把输入文本编码为 Token
- LLM 处理这些 Token
- LLM 生成 输出 Token
- 输出 Token 被解码为可读文本
具体来说, 输入 Token 包括:
- 你与 LLM 的对话历史
- 系统提示词
- 工具定义
输出 Token 就是 LLM 作为响应返回的内容。
输入 Token 和输出 Token 都会计费,而且费率通常不同。节省费用的一种方法,是设计提示词以减少输出 Token。
Token 如何创建
分词过程从大型文本语料库开始,与训练 LLM 所使用的语料相似。假设有一个极小的语料库,只包含一句话:“the cat sat on the mat.”
首先提取所有单独字符:
T H E space C A T space S A T space O N space T H E space M A T
每个字符都会成为词表中的一个独立 Token。
接着识别常见的字符组合:
- “TH”在“the”中出现了两次
- “HE”在“the”中出现了两次
- “AT”出现在“cat”“sat”和“mat”中
每个组合也会被分配一个独立 Token。
然后继续识别组合的组合,例如“TH”加“HE”形成“THE”(单词“the”),并为它分配独立 Token。
词表大小很重要
目标是建立一个大型 Token 词表,因为词表越大,一个单词通常就能用越少的 Token 表示,处理效率也越高。
例如,1,000 个 Token 的词表可能把“understanding”拆成 5 个 Token;50,000 个 Token 的词表可能拆成 3 个;200,000 个 Token 的词表则可能只拆成 2 个。
更大的词表意味着可以用更少的 Token 表示单词,从而提高处理效率。
处理不常见的词
分词器不擅长处理不常见的词。例如,Lewis Carroll 诗中的“O Frabjous Day”会被拆成许多 Token,因为“Frabjous”是一个生造词,在训练语料中很少出现。
可以看到,这句话被转换成 7 个 Token,比 15 个字符通常对应的数量更多。
最后的思考
希望这些说明能让 Token 不再那么神秘。我发现 tiktokenizer 实验场 非常适合理解这些概念。
如果有任何问题,或者希望我接下来讲解其他内容,请告诉我。
Matt