计算模型消耗的提示词与输出的 token 数量,涉及以下关键步骤:
-
输入的提示词(Prompt)的 Token 数计算:
- 基于输入的文本,按照模型使用的分词器(Tokenizer)将文本分割为单独的 tokens。每个 token 通常是一个单词、标点符号或单词的部分。
- 例如,GPT 模型使用 Byte Pair Encoding (BPE) 或类似的分词算法。
-
输出的 Token 数估算:
- 输出 token 的数量由输入的提示词、模型的最大生成长度设置,以及生成任务的复杂性决定。
- 用户设置的最大生成 token 长度限制(
max_length
或max_new_tokens
)直接影响输出的 token 数。
-
计算提示词与输出总 token 数:
- 总 token 数 = 输入 token 数(Prompt Tokens)+ 输出 token 数(Generated Tokens)。
以下是详细推导和实例说明:
1. 输入的提示词 Token 数计算
1.1 分词器的作用
- 模型的分词器将输入文本分割为小单位(Token)。
- 不同语言和模型使用的分词器可能不同。例如:
- 英文:一个单词通常是一个 token(
hello
->hello
)。 - 中文:一个汉字可能是一个 token(
你好
->你
,好
)。 - 复杂语言结构或长单词可能分为多个 token(
unbelievable
->un
,believe
,able
)。
- 英文:一个单词通常是一个 token(
1.2 输入文本的 token 化
分词器将输入文本转化为 token 列表。例如:
- 输入文本:“Hello, world!”
- 分词结果(基于 GPT-3 分词器):
["Hello", ",", "world", "!"]
- Token 数:4。
2. 输出 Token 数的估算
2.1 模型生成策略
输出 token 数取决于:
- 模型的最大生成长度设置(例如
max_length=50
)。 - 任务类型:回答生成型(短文本) vs 故事生成型(长文本)。
- 输入与输出之间的关联性:部分任务(如摘要或翻译)会生成与输入长度相关的输出。
2.2 估算方法
- 假设任务为生成自然语言,输出 token 数约占输入 token 数的 (0.5) 至 (1.5) 倍:
- 简单任务(如短回答)输出 token 数较少。
- 复杂任务(如长文本生成)输出 token 数较多。
3. 示例计算
示例 1:问答型任务
- 输入文本:
"What is the capital of France?"
- 分词结果:
["What", "is", "the", "capital", "of", "France", "?"]
- 输入 token 数:7。
- 生成输出:
"The capital of France is Paris."
- 分词结果:
["The", "capital", "of", "France", "is", "Paris", "."]
- 输出 token 数:7。
- 总 token 数:
总 token 数 = 输入 token 数 + 输出 token 数 = 7 + 7 = 14 。 \text{总 token 数} = \text{输入 token 数} + \text{输出 token 数} = 7 + 7 = 14。 总 token 数=输入 token 数+输出 token 数=7+7=14。
示例 2:长文本生成
- 输入文本:
"Write a story about a hero who saves the world."
- 分词结果:
["Write", "a", "story", "about", "a", "hero", "who", "saves", "the", "world", "."]
- 输入 token 数:11。
- 生成输出(假设 max_length=50):
"Once upon a time, in a small village, there was a young hero named Leo. One day, an evil force threatened the peace of the world. Leo gathered his courage and..."
- 分词结果:
生成 50 个 token。 - 总 token 数: