跳至内容

GPT-4、ChatGPT和AI模型的免费令牌计数器

使用OpenAI官方的tiktoken库统计任意文本中包含的令牌(token)数量。得到的结果与GPT-4、GPT-3.5和ChatGPT在实际计费和上下文长度限制中使用的分词方式完全一致,方便开发者在调用API前提前估算费用、检查提示词是否超出模型的上下文窗口限制。

令牌计数器

编码

无效输入

加载计算器...
📚

文档

什么是令牌计数器?

令牌计数器用于测量一段文本被 AI 语言模型读取时会拆分成多少个令牌。令牌是文本的小片段——完整单词、单词的一部分或标点符号——GPT-4 和 ChatGPT 等模型处理的是这些片段,而不是原始字母。此工具使用 OpenAI 发布的开源分词器库 tiktoken,因此计数结果与 OpenAI 自有模型和 API 得出的结果一致。

分词如何工作

分词器并不是简单地统计单词数量。它会通过一种称为字节对编码(BPE)的算法处理文本。该算法从文本中的单个字节开始,根据训练期间从大量文本中学到的模式,反复合并最常见的相邻字节对。最终得到一个包含数万个常见片段的固定词汇表:完整的短单词、常见的词语片段,以及表示罕见内容的单个字符。

因此,一个英语单词通常会对应一个令牌,但较长或不常见的单词可能会拆分成两个或更多令牌。空格通常会附加在下一个令牌的开头,而不是单独计数;标点符号通常各自构成一个令牌。

此工具支持的编码

Tiktoken 提供多种编码,每种编码都对应 OpenAI 模型的一个系列。此工具支持三种:

编码使用该编码的模型近似词汇量
cl100k_baseGPT-3.5 和 GPT-4 系列模型、ChatGPT约有 100,000 个令牌
p50k_base后期 GPT-3 模型约有 50,000 个令牌
r50k_base早期 GPT-3 和 GPT-2 模型约有 50,000 个令牌

默认选择 cl100k_base,因为它涵盖了如今大多数人使用的模型系列。同一段文本在不同编码下可能产生不同的令牌数,因为每种编码使用不同的文本进行训练,并以不同方式合并字符。

如何计算令牌数

没有简单的算术公式可以将字符数或单词数转换为令牌数,因为 BPE 的合并取决于具体文本和训练得到的词汇表。唯一精确的方法是直接将文本输入分词器:

  1. 选择与目标模型匹配的编码。
  2. 将文本输入该编码的分词器。
  3. 统计生成的令牌 ID 列表中的元素数量。该列表的长度就是令牌数。

对英语文本进行粗略估算时,一个令牌大约对应四个字符,或约四分之三个单词。这只能作为参考。数字、代码、非英语文本和不常见的拼写都可能使这一比例发生很大变化。

算例

以句子为例:

“标记化会将文本拆分成多个片段。”

在 cl100k_base 编码下,tiktoken 会将其拆分成 7 个令牌:

Token、ization、 splits、 text、 into、 pieces、.

请注意,“Tokenization”本身会拆分成两个令牌,即“Token”和“ization”,而其他每个单词都保持完整。末尾的句号也是一个独立令牌。因此,这个包含 37 个字符和 5 个单词的句子会产生 7 个令牌,而不是 6 个。

为什么令牌数很重要

AI 服务提供商按令牌数量收取 API 使用费用,既统计发送的文本,也统计生成的回复文本,因此令牌数可以在发送请求前预测费用。每个模型还有最大的上下文长度,即单个请求及其回复合计可包含的令牌数量上限。该上限因模型而异,也会随着服务提供商发布新版本而变化,因此最好查阅当前所用模型的最新文档,而不要凭记忆推断。

常见问题

AI 语言模型中的令牌是什么? 令牌是语言模型作为一个单元读取的文本片段。它可能是一个完整的短单词、较长单词的一部分、标点符号,或附加在后续单词上的空格。

为什么相同文本在不同编码下会得到不同的令牌数? 每种编码都使用各自的文本样本进行训练,并建立了自己的常见片段词汇表。在一个词汇表中足够常见、可以作为单个令牌的单词,在另一个词汇表中可能并不常见,因此会以不同方式拆分。

标点符号算作令牌吗? 算。标点符号通常各自计为一个令牌,但有时也会与相邻字符合并,具体取决于该组合在分词器训练期间出现的频率。

令牌等同于单词吗? 不等同。简短、常见的单词通常各自对应一个令牌。较长或不常见的单词,以及大多数英语以外的单词,通常会拆分成两个或更多令牌。

此工具的准确度如何? 它使用 OpenAI 自有的 tiktoken 库统计令牌,并运行 OpenAI 内部使用的相同编码逻辑,因此对于相同文本和编码,计数结果会与 OpenAI API 调用返回的结果一致。

此工具能为非 OpenAI 模型统计令牌吗? 它使用 tiktoken 的编码,而这些编码是为 OpenAI 模型构建的。Anthropic 或 Google 等其他服务提供商使用自己的分词器,因此对同一段文本可能产生不同的计数结果。

参考文献

  1. OpenAI。"tiktoken." GitHub,https://github.com/openai/tiktoken.
  2. Sennrich、Rico 等。"Neural Machine Translation of Rare Words with Subword Units." arXiv:1508.07909,2016,http://arxiv.org/abs/1508.07909.
  3. Brown、Tom B. 等。"Language Models are Few-Shot Learners." arXiv:2005.14165,2020,http://arxiv.org/abs/2005.14165.