基于tiktoken计算Token数量
tiktoken
是OpenAI推出的一个快速开源分词器。
给定一个文本字符串(例如,"tiktoken is great!"
)和一种编码方式(例如,"cl100k_base"
),分词器可以将文本字符串拆分成一个Token列表(例如,["t", "ik", "token", " is", " great", "!"]
)。
将文本字符串拆分成Token对我们有很大帮助,因为GPT模型以Token的形式读取文本。了解一个文本字符串中的Token数量可以帮助我们判断:(a) 字符串是否过长,超出模型处理能力,以及 (b) OpenAI API调用的费用(因为费用按Token计费)。
编码方式
编码方式决定了文本是如何被转换成Token的。不同的模型使用不同的编码方式。
tiktoken
支持OpenAI常见模型:
- 编码名称:cl100k_base
- OpenAI模型:gpt-4, gpt-3.5-turbo,
字符串分词的常见方式
在英语中,Token的长度通常从一个字符到一个单词不等(例如,"t"
或" great"
),不过在某些语言中,Token可能短于一个字符或长于一个单词。空格通常与单词的开头组合在一起(例如," is"
而不是"is "
或" "
+"is"
)。你可以在OpenAI Tokenizer或第三方Tiktokenizer网页应用上快速查看字符串是如何被分词的。
0. 安装 tiktoken
如果需要,可以通过pip
安装tiktoken
:
pip install --upgrade tiktoken
pip install --upgrade openai
1. 导入 tiktoken
import tiktoken
2. 加载编码方式
使用tiktoken.get_encoding()
通过名称加载编码方式。
首次运行时需要互联网连接以下载。之后的运行将不需要互联网连接。
encoding = tiktoken.get_encoding("cl100k_base")
使用tiktoken.encoding_for_model()
可以自动加载给定模型名称的正确编码方式。
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
3. 使用 encoding.encode()
将文本转为Token
.encode()
方法可以将文本字符串转换为Token整数列表。
encoding.encode("tiktoken is great!")
输出:
[83, 1609, 5963, 374, 2294, 0]
通过计算.encode()
返回的列表长度来统计Token数量。
import tiktoken
def num_tokens_from_string(string: str, encoding_name: str) -> int:
"""返回文本字符串中的Token数量。"""
encoding = tiktoken.get_encoding(encoding_name)
num_tokens = len(encoding.encode(string))
return num_tokens
示例:
num_tokens_from_string("tiktoken is great!", "cl100k_base")
6
如果觉得这篇文章有用,就给个赞👍和收藏⭐️吧!也欢迎在评论区分享你的看法!
参考
- How to count tokens with Tiktoken by Ted Sanders