openAI维基百科 openAI维基百科
  • 首页
  • 语言
    • LLaMA
    • ChatGPT
      • 基础教程
      • Prompt训练
      • API编程指南
      • ChatGPT拓展
    • 其它模型
  • 图像
    • 风格化
    • 画质增强
    • 图像识别
    • 视觉交互
    • 扩展填充
  • 绘画
    • Midjourney
    • Stable Diffusion
      • LoRA
      • ControlNet
      • Fooocus
      • ComfyUI
    • 其它模型
  • 音频
    • 人声模拟
    • 音频识别
    • 音频分离
    • 智能编曲
  • 视频
    • AI换脸
    • AI补帧
    • 视频抠图
    • 视频动漫化
    • 文本生成视频
  • 3D
    • 文本生成模型
  • 教程
    • 基础知识
    • 微软AI学习
    • 深度学习笔记
    • 交互式了解AI
  • 问答
  • 资源
首页 › 语言 › ChatGPT › openAI|如何使用TikToken计数令牌

openAI|如何使用TikToken计数令牌

PhiltreX
2 年前

TikToken计数令牌

tiktoken是OpenAI提供的快速开源令牌化器,可将文本字符串拆分为一系列令牌以便于文本模型处理。支持OpenAI模型使用的三种编码:gpt2、p50k_base和cl100k_base。通常情况下,令牌从一个字符到一个单词的长度不等,通常将空格与单词开头分组。使用tiktoken,你可以快速检查字符串的令牌化方式。

开源令牌

tiktoken 是 OpenAI 提供的快速开源令牌化器。

给定一个文本字符串(例如,"tiktoken is great!")和一个编码(例如,"gpt2"),令牌化器可以将文本字符串拆分为一系列令牌(例如,["t", "ik", "token", " is", " great", "!"])。

将文本字符串拆分为令牌很有用,因为像 GPT-3 这样的模型以令牌的形式看到文本。知道文本字符串中有多少令牌可以告诉你(a)字符串是否太长,文本模型无法处理,(b)OpenAI API 调用的成本(因为使用以令牌为单位计价)。不同的模型使用不同的编码。

tiktoken 支持 OpenAI 模型使用的三种编码:

编码名称OpenAI 模型
gpt2(或 r50k_base)大多数 GPT-3 模型
p50k_base代码模型,text-davinci-002,text-davinci-003
cl100k_basetext-embedding-ada-002
tiktoken 支持 OpenAI 模型使用的三种编码

p50k_base 与 gpt2 大部分重叠,对于非代码应用,它们通常会给出相同的令牌。

令牌化器库和语言

对于 gpt2 编码,令牌化器可以用许多语言提供:

Python:tiktoken(或者可选GPT2TokenizerFast)
JavaScript:gpt-3-encoder
.NET / C#:GPT Tokenizer
Java:gpt2-tokenizer-java
PHP:GPT-3-Encoder-PHP (OpenAI 不做任何认可或保证第三方库。)

对于 p50k_base 和 cl100k_base 编码,截至2023年1月,tiktoken 是唯一可用的令牌化器。

Python:tiktoken

字符串通常如何令牌化

在英语中,令牌通常从一个字符到一个单词(例如,"t" 或 " great")的长度不等,尽管在某些语言中令牌可能比一个字符短或比一个单词长。通常将空格与单词开头分组(例如," is" 而不是 "is " 或 " "+"is")。您可以在OpenAI Tokenizer上快速检查字符串的令牌化方式。

0. 安装 tiktoken

在终端中使用 pip 安装 tiktoken:

pip install tiktoken

1. 导入 tiktoken

import tiktoken

2.加载编码

使用 tiktoken.get_encoding() 按名称加载编码。

第一次运行时,需要互联网连接才能下载。 以后的运行将不需要互联网连接。

encoding = tiktoken.get_encoding("gpt2")

3. 使用以下方法将文本转换为令牌:

.encode() 方法将文本字符串转换为一系列令牌整数列表。

encoding.encode("tiktoken is great!")
[83, 1134, 30001, 318, 1049, 0]
Count tokens by counting the length of the list returned by .encode().
def num_tokens_from_string(string: str, encoding_name: str) -> int:
    """Returns the number of tokens in a text string."""
    encoding = tiktoken.get_encoding(encoding_name)
    num_tokens = len(encoding.encode(string))
    return num_tokens
num_tokens_from_string("tiktoken is great!", "gpt2")
6

4.使用 encoding.decode() 将标记转换为文本

.decode() 将令牌整数列表转换为字符串。

encoding.decode([83, 1134, 30001, 318, 1049, 0])
'tiktoken is great!'
Warning: although .decode() can be applied to single tokens, beware that it can be lossy for tokens that aren't on utf-8 boundaries.

For single tokens, .decode_single_token_bytes() safely converts a single integer token to the bytes it represents.
[encoding.decode_single_token_bytes(token) for token in [83, 1134, 30001, 318, 1049, 0]]
[b't', b'ik', b'token', b' is', b' great', b'!']

(字符串前面的 b 表示该字符串是字节串。)

5.比较编码

不同的编码在拆分单词、分组空格和处理非英语字符的方式上可能有所不同。 使用上述方法,我们可以比较几个示例字符串的不同编码。

def compare_encodings(example_string: str) -> None:
    """Prints a comparison of three string encodings."""
    # print the example string
    print(f'\nExample string: "{example_string}"')
    # for each encoding, print the # of tokens, the token integers, and the token bytes
    for encoding_name in ["gpt2", "p50k_base", "cl100k_base"]:
        encoding = tiktoken.get_encoding(encoding_name)
        token_integers = encoding.encode(example_string)
        num_tokens = len(token_integers)
        token_bytes = [encoding.decode_single_token_bytes(token) for token in token_integers]
        print()
        print(f"{encoding_name}: {num_tokens} tokens")
        print(f"token integers: {token_integers}")
        print(f"token bytes: {token_bytes}")
compare_encodings("antidisestablishmentarianism")
Example string: "antidisestablishmentarianism"

gpt2: 5 tokens
token integers: [415, 29207, 44390, 3699, 1042]
token bytes: [b'ant', b'idis', b'establishment', b'arian', b'ism']

p50k_base: 5 tokens
token integers: [415, 29207, 44390, 3699, 1042]
token bytes: [b'ant', b'idis', b'establishment', b'arian', b'ism']

cl100k_base: 6 tokens
token integers: [519, 85342, 34500, 479, 8997, 2191]
token bytes: [b'ant', b'idis', b'establish', b'ment', b'arian', b'ism']
compare_encodings("2 + 2 = 4")
Example string: "2 + 2 = 4"

gpt2: 5 tokens
token integers: [17, 1343, 362, 796, 604]
token bytes: [b'2', b' +', b' 2', b' =', b' 4']

p50k_base: 5 tokens
token integers: [17, 1343, 362, 796, 604]
token bytes: [b'2', b' +', b' 2', b' =', b' 4']

cl100k_base: 7 tokens
token integers: [17, 489, 220, 17, 284, 220, 19]
token bytes: [b'2', b' +', b' ', b'2', b' =', b' ', b'4']
compare_encodings("お誕生日おめでとう")
Example string: "お誕生日おめでとう"

gpt2: 14 tokens
token integers: [2515, 232, 45739, 243, 37955, 33768, 98, 2515, 232, 1792, 223, 30640, 30201, 29557]
token bytes: [b'\xe3\x81', b'\x8a', b'\xe8\xaa', b'\x95', b'\xe7\x94\x9f', b'\xe6\x97', b'\xa5', b'\xe3\x81', b'\x8a', b'\xe3\x82', b'\x81', b'\xe3\x81\xa7', b'\xe3\x81\xa8', b'\xe3\x81\x86']

p50k_base: 14 tokens
token integers: [2515, 232, 45739, 243, 37955, 33768, 98, 2515, 232, 1792, 223, 30640, 30201, 29557]
token bytes: [b'\xe3\x81', b'\x8a', b'\xe8\xaa', b'\x95', b'\xe7\x94\x9f', b'\xe6\x97', b'\xa5', b'\xe3\x81', b'\x8a', b'\xe3\x82', b'\x81', b'\xe3\x81\xa7', b'\xe3\x81\xa8', b'\xe3\x81\x86']

cl100k_base: 9 tokens
token integers: [33334, 45918, 243, 21990, 9080, 33334, 62004, 16556, 78699]
token bytes: [b'\xe3\x81\x8a', b'\xe8\xaa', b'\x95', b'\xe7\x94\x9f', b'\xe6\x97\xa5', b'\xe3\x81\x8a', b'\xe3\x82\x81', b'\xe3\x81\xa7', b'\xe3\x81\xa8\xe3\x81\x86']
APIopanAI APIopenAI
0
0
openAI|如何处理费率限制
上一篇
openAI|如何流式完成
下一篇

评论 (0)

取消
    发表评论

猜你喜欢

  • ChatGPT|HTML网页制作
  • GPT Engineer|自动编程
  • POE|ChatGPT-4 & Claude+

论坛公告

为方便大家交流,交换资源等。

本站论坛限量开放注册中,免费答疑。

欢迎大家踊跃注册,关闭注册时间待定。

论坛地址:https://bbs.openai.wiki

增值服务

本站无广告|无会员|免注册

  1. 提供有偿远程帮助服务
  2. 提供POE会员代充代售
  3. 提供ChatGPT代充代售
  4. 提供Midjourney代充服务

商务合作

关于合作请点此联系

  • 首页
  • 语言
  • 图像
  • 绘画
  • 音频
  • 视频
  • 3D
  • 教程
  • 问答
  • 资源
Copyright © 20221212-2025 openAI维基百科. Designed by nicetheme. 京公网安备 11010502051430号 京ICP备2021019752号-5
  • 首页
  • 语言
    • LLaMA
    • ChatGPT
      • 基础教程
      • Prompt训练
      • API编程指南
      • ChatGPT拓展
    • 其它模型
  • 图像
    • 风格化
    • 画质增强
    • 图像识别
    • 视觉交互
    • 扩展填充
  • 绘画
    • Midjourney
    • Stable Diffusion
      • LoRA
      • ControlNet
      • Fooocus
      • ComfyUI
    • 其它模型
  • 音频
    • 人声模拟
    • 音频识别
    • 音频分离
    • 智能编曲
  • 视频
    • AI换脸
    • AI补帧
    • 视频抠图
    • 视频动漫化
    • 文本生成视频
  • 3D
    • 文本生成模型
  • 教程
    • 基础知识
    • 微软AI学习
    • 深度学习笔记
    • 交互式了解AI
  • 问答
  • 资源