【AIGC】大语言模型千问、gpt、智谱token计算-tiktoken、get_tokenizer等

一、token计算

编码(encode)是指将文本映射为token的数字列表,解码(decode)是指将token的数字列表转化为文本。

给定一个文本字符串(例如"tiktoken is great!")和编码算法方式cl100k_base, 可以分词为["t", "ik", "token", " is", " great", "!"],再根据词典查出数字列表[122,232,5343,3424,5456,12446]

注意,各大模型一般都提供了计算token数的工具,可在调用模型前先计算token。原因:

  • 避免token过长,引发错误
  • 可用来预估自己的花费

1.1 OpenAI

gpt系列都可用tiktoken实现token计算

import tiktoken
# 具体tokenizer模型
enc = tiktoken.get_encoding("o200k_base")
assert enc.decode(enc.encode("hello world")) == "hello world"

# 具体的chat模型
enc = tiktoken.encoding_for_model("gpt-4o")
enc.encode(text) #  获取字典值,[31935, 64559, 99320, 56007, 100629, 104795, 99788, 1773]
len(enc.encode(text)) # 获取长度,8

编码算法和openai模型间的对应关系:

Encoding nameOpenAI models
cl100k_basegpt-4, gpt-3.5-turbo, text-embedding-ada-002, text-embedding-3-small, text-embedding-3-large
p50k_baseCodex models, text-davinci-002, text-davinci-003
r50k_base (or gpt2)GPT-3 models like davinci

1.2 通义千问

# 运行前请 pip install tiktoken
from dashscope import get_tokenizer  # dashscope版本 >= 1.14.0

# 获取tokenizer对象,目前只支持通义千问系列模型
tokenizer = get_tokenizer('qwen-turbo')

input_str = '通义千问具有强大的能力。'

# 将字符串切分成token并转换为token id
tokens = tokenizer.encode(input_str)
print(f"经过切分后的token id为:{tokens}。")
# 经过切分后的token id为: [31935, 64559, 99320, 56007, 100629, 104795, 99788, 1773]
print(f"经过切分后共有{len(tokens)}个token")
# 经过切分后共有8个token

# 将token id转化为字符串并打印出来
for i in range(len(tokens)):
    print(f"token id为{tokens[i]}对应的字符串为:{tokenizer.decode(tokens[i])}")

1.3 GLM类模型

GLM类模型,zhipu没有公开任何token计算工具和方式,在此不做讨论

1.4 其他

待补充

参考

NLP(五十五)tiktoken的使用
官方-tiktoken
官方-tiktoken使用
通义千问计量计费说明

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值