使用 Tiktoken for OpenAI 模型进行主令牌计数
Published on
Tiktoken:简化令牌计数
文章摘要:
- Tiktoken 是 OpenAI 开发的开源分词器,可将文本字符串分割为令牌,非常适用于令牌计数或估计 API 调用成本等任务。
- 它支持三种编码:cl100k_base、p50k_base 和 r50k_base,您可以使用
tiktoken.encoding_for_model()
函数检索这些编码。 - Tiktoken 可用于包括 Python、.NET/C#、Java、Golang 和 Rust 在内的多种编程语言。
您是否曾经想过文本字符串中有多少个令牌?或者您可能对估算使用 OpenAI API 完成特定任务的成本感兴趣。准确计数令牌对于这些目的至关重要,这就是 Tiktoken 的作用。这个由 OpenAI 开发的开源分词器可以轻松地将文本字符串分割为令牌,为各种应用提供了有用的工具。
介绍 Tiktoken
Tiktoken 是一个强大的开源分词器,可以用于计数文本字符串中的令牌或估算 OpenAI API 调用的成本。令牌是构成文本的单个单位,可以是单个字符或整个单词。通过了解令牌数量,您可以更好地管理使用情况并优化与 OpenAI 模型的交互。
Tiktoken 支持的编码
Tiktoken 支持 OpenAI 模型使用的三种编码:cl100k_base、p50k_base 和 r50k_base。这些编码确定了分词器如何将输入文本分割为令牌。根据不同的编码,单词可能会以不同的方式拆分,空格可能会以不同的方式分组,非英文字符可能会以不同的方式处理。
要确定特定 OpenAI 模型的编码,您可以使用 tiktoken.encoding_for_model()
函数,该函数会检索与您要使用的模型相对应的适当编码。
Tiktoken 分词器库
Tiktoken 可用于多种编程语言,无论您偏爱哪种语言,都可以轻松使用。以下是不同编程语言的可用库:
- Python: tiktoken-python (opens in a new tab)
- .NET/C#: tiktoken-dotnet (opens in a new tab)
- Java: tiktoken-java (opens in a new tab)
- Golang: tiktoken-go (opens in a new tab)
- Rust: tiktoken-rs (opens in a new tab)
您可以在上面的链接中找到相应的分词器库,以便将 Tiktoken 无缝集成到您偏爱的编程语言中。
使用 Tiktoken 进行分词
在英语中,Tiktoken 通过考虑从单个字符到整个词之间长度变化的令牌来进行分词。空格通常与单词的开头分组。为了可视化分词过程,您可以使用 OpenAI Tokenizer 网页应用程序或 Tiktokenizer 网页应用程序,在其中输入文本并观察它如何分割为令牌。
使用 Tiktoken,您还可以直接在代码中分词字符串。让我们看一下如何在 Python 中安装和导入 Tiktoken。
安装和导入
要在 Python 中安装 Tiktoken,可以使用以下命令:
pip install tiktoken
安装完成后,您可以使用以下导入语句在 Python 代码中导入 tiktoken
库:
import tiktoken
现在我们已经安装并导入了 Tiktoken,接下来让我们学习如何加载编码。
加载 Tiktoken 中的编码
在对文本字符串进行分词之前,您需要加载适当的编码。可以使用 Tiktoken 的 get_encoding()
函数来实现这一点。将编码名称(例如 cl100k_base
)作为函数的参数。以下是一个示例:
encoding = tiktoken.get_encoding("cl100k_base")
编码加载完毕后,您可以使用它来对文本字符串进行分词。
使用 Tiktoken 将文本转换为令牌
现在我们已经安装了 Tiktoken 并且已经探索了其他分词器,让我们更深入地了解如何使用 Tiktoken 将文本转换为令牌。
要使用 Tiktoken 将文本字符串转换为令牌,我们需要按照以下步骤进行:
-
使用
tiktoken.get_encoding()
函数加载所需的编码名到 Tiktoken 中。这一步骤确保分词过程与我们打算使用的特定 OpenAI 模型保持一致。import tiktoken encoding_name = "cl100k_base" # 或者 "p50k_base" 或者 "r50k_base" encoding = tiktoken.get_encoding(encoding_name)
-
使用加载的编码初始化 Tiktoken 分词器。
tokenizer = tiktoken.Tiktoken(encoding)
-
将文本字符串传递给 Tiktoken 分词器的
tokenize()
方法,将其转换为令牌。text = "这是一个示例句子。" tokens = tokenizer.tokenize(text)
-
tokenize()
方法返回一个令牌列表。我们可以打印出令牌以查看输出。print(tokens)
输出:
['这', '是', '一个', '示例', '句子', '。']
请注意,令牌之间用空格分隔,并且标点符号被视为单独的令牌。 通过按照以下步骤,您可以使用Tiktoken轻松将任何文本字符串转换为标记。在使用OpenAI模型时,这可能特别有用,因为它有助于估计使用的标记数,并可用于估计API调用的成本。
结论
在本文中,我们探讨了由OpenAI开发的开源分词器Tiktoken的用途。我们讨论了Tiktoken在确定文本中标记数量和估计OpenAI API调用成本方面的实用性。我们还了解了Tiktoken支持的编码方式,并了解了如何获取特定OpenAI模型的编码。此外,我们还发现了Tiktoken在各种编程语言中的可用性,并探讨了使用Tiktoken对字符串进行标记化的过程。最后,我们学习了如何安装Tiktoken,导入库,加载编码,并使用Tiktoken将文本转换为标记。
Tiktoken是一个强大的工具,可以极大地帮助使用OpenAI模型,并优化标记的使用。通过利用Tiktoken的功能,开发人员可以更好地管理与OpenAI API调用相关的标记限制和成本。