AI大模型应用开发实践:3.使用 tiktoken 计算 token 数量

本文介绍了如何使用tiktoken库计算文本在GPT模型中的token数量,涉及不同编码方式、分词器库以及如何进行分词操作。通过示例展示了在API调用中计算token数量的方法,这对于理解模型处理能力和费用估算至关重要。
摘要由CSDN通过智能技术生成

使用 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_baser50k_base 有很大的重叠,对于非代码应用,它们通常会产生相同的token。

不同语言的分词器库

对于 cl100k_basep50k_base 编码方式:

对于 r50k_base (gpt2) 编码方式,许多语言都提供了分词器。

(OpenAI对第三方库不做任何背书或保证。)

如何进行通常的分词操作

在英语中,token的长度通常在一个字符到一个单词之间变化(例如,"t"" great"),尽管在某些语言中,token可以比一个字符短或比一个单词长。空格通常与单词的开头一起分组(例如," is" 而不是 "is "" "+"is")。你可以快速在 OpenAI分词器 检查一段字符串如何被分词。

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数量。

def num_tokens_from_string(string: str, encoding_name: str) -> 
  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hugo_Hoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值