Token (令牌)

文本处理的最小单位。大语言模型使用独特的分词方案,与字符或单词不同。

令牌 (Token) 是处理文本时的最小单位。在自然语言处理 (NLP) 和大语言模型 (LLM) 中,文本在处理前会被分割 (分词) 为令牌。令牌是与字符和单词都不同的独特单位,分割方法因语言和模型而异。随着 LLM 的普及,令牌的概念不仅为程序员所知,也被普通用户广泛了解。

ChatGPT 等 LLM 使用的分词器 (BPE: Byte Pair Encoding) 将频繁出现的字符串模式学习为单个令牌。英文中 1 个令牌约对应 4 个字符 (约 0.75 个单词),"Hello"是 1 个令牌,"indistinguishable"被分为 4 个令牌。中文中 1 个令牌约对应 1-3 个字符,常用汉字通常 1 个字符为 1 个令牌。GPT-4o 的上下文窗口为 128K 令牌,约相当于 96,000 个英文单词或 64,000-128,000 个中文字符。浏览恋爱秘籍 (Amazon)介绍了分词的工作原理。

API 的使用费用基于令牌数计算,因此令牌数管理直接关系到成本控制。OpenAI 的 API 对输入令牌和输出令牌分别计费,优化提示词 (删除不必要的上下文、编写简洁的指令) 是降低成本的关键。使用 tiktoken 库可以在 API 调用前预先计算令牌数,防止超出上下文窗口限制。

中文的令牌效率往往低于英文。表达相同含义的文本,中文比英文消耗更多令牌。这是因为 BPE 分词器的训练数据中英文文本占比较大。例如"东京是日本的首都"约需 7-9 个令牌,而英文的 "Tokyo is the capital of Japan" 约需 7 个令牌。在处理大量文本时,这种差异会体现为成本差异。

令牌的概念也用于 LLM 以外的领域。在编程语言编译器中,源代码通过词法分析被分割为令牌,此时的令牌是关键字、标识符、运算符、字面量等语法元素。在认证领域,包含认证信息的数据结构也被称为令牌,如 JWT (JSON Web Token)。由于"令牌"在不同领域含义不同,明确讨论的上下文非常重要。

从字符计数的角度来看,令牌数和字符数是不同的指标。字符数是人类视觉识别的单位,而令牌数是模型处理的单位。在 LLM 的实际应用中,需要同时关注字符数限制 (如社交媒体发帖限制) 和令牌数限制 (API 上下文窗口)。在字符计数工具中添加令牌数估算功能,可以大幅提升用户的便利性。了解爱抚 (Amazon)介绍了注重令牌数的提示词设计。

分享这篇文章