跳至主要内容

Tiktoken 教程:OpenAI 的 Python 文本分词库

Tiktoken 是由 OpenAI 开发的高速 BPE 分词器,主要用于为其大型语言模型统计 token,并在指定限制内确保高效的文本处理。
· 5分钟 阅读

使用 AI 探索

分词(Tokenization)是在处理自然语言处理(NLP)任务时的一项基础工作。它将文本拆解为更小的单元,即 token,可以是词、子词或字符。

高效的分词对语言模型的性能至关重要,因此在文本生成、翻译、摘要等多种 NLP 任务中都是必不可少的一步。

Tiktoken 是由 OpenAI 开发的快速高效的分词库。它为文本与 token 的相互转换提供了可靠方案。其速度和效率使之成为处理大型数据集和复杂模型的开发者与数据科学家的理想之选。

本指南面向开发者、数据科学家,以及计划使用 Tiktoken 并需要包含示例的实用指南的读者。

开始使用 Tiktoken

要开始使用 Tiktoken,我们需要在 Python 环境中安装它(Tiktoken 也适用于其他编程语言)。可通过以下命令完成安装:

pip install tiktoken

您可以在以下 GitHub 仓库中查看 Tiktoken 开源 Python 版本的代码。

导入该库:

import tiktoken

编码模型

Tiktoken 中的编码模型决定了如何将文本拆分为 token 的规则。这些模型至关重要,因为它们定义了文本的切分与编码方式,从而影响语言处理任务的效率与准确性。不同的 OpenAI 模型使用不同的编码方式。

Tiktoken 提供了三种针对不同用例优化的编码模型:

  • o200k_base:最新 GPT-4o-Mini 模型所用的编码。
  • cl100k_base:用于较新的 OpenAI 模型,如 GPT-4 和 GPT-3.5-Turbo 的编码模型。
  • p50k_base:用于 Codex 模型的编码,这些模型主要面向代码应用。
  • r50k_base:较早的编码,适用于不同版本的 GPT-3。

以上所有模型均可通过 OpenAI 的 API 获取。请注意,API 提供的模型远不止于此。好在 Tiktoken 库提供了简便的方法来查询某个模型应使用哪种编码。

例如,如果我需要知道 text-embedding-3-small 模型使用的编码模型,我可以运行以下命令并获得结果:

print(tiktoken.encoding_for_model('text-embedding-3-small'))

输出为 <Encoding 'cl100k_base'>。在直接使用 Tiktoken 之前,还想提一下,OpenAI 提供了一个分词网页应用,您可以查看不同字符串的分词方式——可在此处访问。还有一个第三方在线分词器 Tiktokenizer,支持非 OpenAI 模型。

将文本编码为 Tokens

要使用 Tiktoken 将文本编码为 token,首先需要获取一个编码对象。有两种初始化方式。其一,使用分词器的名称:

encoding = tiktoken.get_encoding("[name of the tokenizer]")

或者,您也可以运行前面提到的 encoding_for_model 函数来获取特定模型的编码器:

encoding = tiktoken.encoding_for_model("[name of the model]")

现在,我们可以调用 encoding 对象的 encode 方法来编码字符串。例如,我们可以如下编码字符串“I love DataCamp”——这里我使用 cl100k_base 编码器:

print(encoding.encode("I love DataCamp"))

输出为 [40, 3021, 2956, 34955]。

将 Tokens 解码为文本

要将 token 解码回文本,我们可以在 encoding 对象上使用 .decode() 方法。

让我们解码以下 tokens [40, 4048, 264, 2763, 505, 2956, 34955]:

print(encoding.decode([40, 4048, 264, 2763, 505, 2956, 34955]))

这些 token 解码为“I learn a lot from DataCamp.”

实践用例与提示

除了编码和解码,我还想到两个其他用例。

成本估算与管理

在向 OpenAI API 发送请求之前了解 token 数量有助于您有效管理成本。由于 OpenAI 的计费基于处理的 token 数量,预先对文本进行分词可以帮助您预估 API 使用成本。以下示例展示了如何使用 Tiktoken 统计文本中的 token 数:

tokens = encoding.encode(text)
print(len(tokens))

我们只需查看数组的长度即可得知获得了多少个 token。通过预先了解 token 数量,您可以决定是否缩短文本或调整用量以控制预算。

您可以在这篇教程中进一步阅读该方法:使用 Python 中的 tiktoken 库估算 GPT 成本。

输入长度校验

通过 API 使用 OpenAI 模型时,输入与输出都受最大 token 数限制。超过这些限制可能会导致错误或输出被截断。借助 Tiktoken,您可以验证输入长度,确保其符合 token 限额。

结论

Tiktoken 是一款开源分词库,具备面向 OpenAI 语言模型的速度与效率。

了解如何使用 Tiktoken 对文本进行编码与解码,以及其不同的编码模型,将大大提升您处理大型语言模型的能力。

Dimitri Didmanidze

作者

Dimitri Didmanidze

我叫 Dimitri Didmanidze,是一名数据科学家,目前正在攻读数学硕士学位,研究方向为机器学习。我的学术历程还包括对基于 Transformer 的模型能力进行研究,并在大学层面授课,这些经历加深了我对复杂理论概念的理解。我也曾在银行业工作,将这些原理应用于解决真实世界中的数据难题。

主题