使用 tiktoken 计算 token 数量
tiktoken是OpenAI开发的一种BPE分词器。
给定一段文本字符串(例如,
"tiktoken is great!"
)和一种编码方式(例如,
"cl100k_base"
),分词器可以将文本字符串切分成一系列的token(例如,
["t", "ik", "token", " is", " great", "!"]
)。
将文本字符串切分成token非常有用,因为GPT模型看到的文本就是以token的形式呈现的。知道一段文本字符串中有多少个token可以告诉你(a)这个字符串是否对于文本模型来说太长了而无法处理,以及(b)一个OpenAI API调用的费用是多少(因为使用量是按照token计价的)。
编码方式
编码方式规定了如何将文本转换成token。不同的模型使用不同的编码方式。
tiktoken
支持OpenAI模型使用的三种编码方式:
编码名称OpenAI模型
cl100k_base
gpt-4
,
gpt-3.5-turbo
,
text-embedding-ada-002
p50k_base
Codex模型,
text-davinci-002
,
text-davinci-003
r50k_base
(或
gpt2
)像
davinci
这样的GPT-3模型
你可以使用
tiktoken.encoding_for_model()
获取一个模型的编码方式,如下所示:
encoding = tiktoken.encoding_for_model('gpt-3.5-turbo')
注意,
p50k_base
与
r50k_base
有很大的重叠,对于非代码应用,它们通常会产生相同的token。
不同语言的分词器库
对于
cl100k_base
和
p50k_base
编码方式:
- Python: tiktoken
- .NET / C#: SharpToken, TiktokenSharp
- Java: jtokkit
对于
r50k_base
(
gpt2
) 编码方式,许多语言都提供了分词器。
- Python: tiktoken (或者另选 GPT2TokenizerFast)
- JavaScript: gpt-3-encoder
- .NET / C#: GPT Tokenizer
- Java: gpt2-tokenizer-java
- PHP: GPT-3-Encoder-PHP
(OpenAI对第三方库不做任何背书或保证。)
如何进行通常的分词操作
在英语中,token的长度通常在一个字符到一个单词之间变化(例如,
"t"
或
" great"
),尽管在某些语言中,token可以比一个字符短或比一个单词长。空格通常与单词的开头一起分组(例如,
" is"
而不是
"is "
或
" "
)。你可以快速在 OpenAI分词器 检查一段字符串如何被分词。"is"
0. 安装
tiktoken
!pip install --upgrade tiktoken
Requirement already satisfied: tiktoken in /home/ubuntu/miniconda3/envs/langchain/lib/python3.10/site-packages (0.6.0)
Requirement already satisfied: regex>=2022.1.18 in /home/ubuntu/miniconda3/envs/langchain/lib/python3.10/site-packages (from tiktoken) (2023.12.25)
Requirement already satisfied: requests>=2.26.0 in /home/ubuntu/miniconda3/envs/langchain/lib/python3.10/site-packages (from tiktoken) (2.31.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /home/ubuntu/miniconda3/envs/langchain/lib/python3.10/site-packages (from requests>=2.26.0->tiktoken) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /home/ubuntu/miniconda3/envs/langchain/lib/python3.10/site-packages (from requests>=2.26.0->tiktoken) (3.6)
Requirement already satisfied: urllib3<3,>=1.21.1 in /home/ubuntu/miniconda3/envs/langchain/lib/python3.10/site-packages (from requests>=2.26.0->tiktoken) (2.2.1)
Requirement already satisfied: certifi>=2017.4.17 in /home/ubuntu/miniconda3/envs/langchain/lib/python3.10/site-packages (from requests>=2.26.0->tiktoken) (2024.2.2)
1. Import
tiktoken
import tiktoken
2. Load an encoding
使用
tiktoken.get_encoding()
按名称加载编码。
第一次运行时,它将需要互联网连接进行下载。后续运行不需要互联网连接。
encoding = tiktoken.get_encoding("cl100k_base")
使用
tiktoken.encoding_for_model()
函数可以自动加载给定模型名称的正确编码。
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
3. Turn text into tokens with
encoding.encode()
The
.encode()
method converts a text string into a list of token integers.
encoding.encode("tiktoken is great!")
[83, 1609, 5963, 374, 2294, 0]
通过计算
.encode()
返回的列表的长度来统计token数量。
defnum_tokens_from_string(string:str, encoding_name:str)->
版权归原作者 Hugo_Hoo 所有, 如有侵权,请联系我们删除。