tiktoken:OpenAI 开源的高速 BPE 分词器
tiktoken:OpenAI 开源的高速 BPE 分词器
OpenAI 开源的 BPE 分词器 tiktoken,目前获得了 18,389 个 Star:


tiktoken 是一款专为 OpenAI 模型设计的快速 BPE 分词器。它的核心任务是将文本转换为模型可理解的 token 序列,同时也支持将 token 无损解码回原始文本。
语言模型看到的不是文字,而是一串数字,也就是 token。BPE(Byte Pair Encoding)是一种将文本转为 token 的算法,有几个实用特性:它是可逆且无损的,编码后的 token 可以完整还原为原文;它能处理任意文本,包括训练时从未见过的内容;它对文本有压缩效果,平均每个 token 对应约 4 个字节;它能让模型频繁接触到常见子词,比如英语中的 “ing”,这有助于模型在不同上下文中理解语法规律。
性能是 tiktoken 的一个亮点。在 1GB 文本的基准测试中,使用 GPT-2 分词器进行对比,tiktoken 的速度达到同类开源分词器的 3 到 6 倍。测试对比了 tokenizers 0.13.2、transformers 4.24.0 和 tiktoken 0.2.0 三个版本。
安装通过 pip 直接完成:
pip install tiktoken
基础用法很简洁,两行代码即可完成编码和解码:
import tiktoken
# 获取指定编码
enc = tiktoken.get_encoding("o200k_base")
assert enc.decode(enc.encode("hello world")) == "hello world"
# 获取特定模型对应的分词器
enc = tiktoken.encoding_for_model("gpt-4o")
tiktoken 的 API 设计很简单。get_encoding 按编码名称返回分词器,encoding_for_model 则根据模型名称自动选择对应的编码。编码名称如 “o200k_base”、“cl100k_base” 等,分别对应不同版本的 OpenAI 模型。
tiktoken 包含一个教育性子模块,适合想深入理解 BPE 细节的人。这个子模块提供了可视化编码过程的代码:
from tiktoken._educational import *
# 在少量文本上训练一个 BPE 分词器
enc = train_simple_encoding()
# 可视化 GPT-4 编码器如何编码文本
enc = SimpleBytePairEncoding.from_tiktoken("cl100k_base")
enc.encode("hello world aaaaaaaaaaaa")
如果需要扩展 tiktoken 支持新编码,有两种路径可以选择。
第一种是直接构造 Encoding 对象,在代码中传递使用。这种方式最灵活,不需要修改 tiktoken 的内部注册表:
cl100k_base = tiktoken.get_encoding("cl100k_base")
enc = tiktoken.Encoding(
name="cl100k_im",
pat_str=cl100k_base._pat_str,
mergeable_ranks=cl100k_base._mergeable_ranks,
special_tokens={
**cl100k_base._special_tokens,
"<|im_start|>": 100264,
"<|im_end|>": 100265,
}
)
这里有几个注意点。编码名称要清晰表达行为,如果修改了 special tokens 的集合,务必换一个不同的名字。生产环境中应该直接加载参数,而不是访问私有属性。
第二种是通过 tiktoken_ext 插件机制注册自定义编码。这种方式只在需要 tiktoken.get_encoding 自动识别你的编码时才用得上,否则第一种方式更简单直接。
实现插件时,要在 tiktoken_ext 下创建命名空间包,包内模块需包含 ENCODING_CONSTRUCTORS 字典,将编码名映射到无参构造函数。setup.py 需使用 find_namespace_packages 并指定 include=['tiktoken_ext*'],依赖项中要包含 tiktoken。安装时使用普通模式,不要加 editable 参数。
对于需要精确计算 token 数量、控制 API 调用成本、集成 OpenAI 模型推理管道、或学习 BPE 内部机制的场景,tiktoken 是一个直接可用的基础工具。它在 OpenAI 的 API 调用、模型微调、文本预处理等流程中都有广泛应用。由于 OpenAI 的 API 按 token 计费,准确统计输入输出的 token 数量对成本控制很有必要,这也是 tiktoken 最常见的使用场景之一。
enAI 的 API 按 token 计费,准确统计输入输出的 token 数量对成本控制很有必要,这也是 tiktoken 最常见的使用场景之一。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)