什么是 tiktoken?
tiktoken 是一个为 OpenAI 模型设计的快速 BPE(Byte Pair Encoding) 分词器。它可以快速地将文本转换为模型可以理解的数字序列(称为 tokens)。
为什么需要 BPE?
- 可逆且无损:可以将 tokens 恢复成原始文本。
- 适用于任意文本:即使文本不在训练数据中,也能正常工作。
- 压缩文本:tokens 序列比原始文本短,平均每个 token 对应约 4 个字节。
- 识别子词:帮助模型识别常见的子词(如 "ing"),从而更好地理解语法。
tiktoken 的优势
- 速度快:比其他开源分词器快 3 到 6 倍。
- 易于使用:可以通过 PyPI 安装,使用简单。
使用 tiktoken
安装
bash
pip install tiktoken
基本用法
python
import tiktoken
# 获取特定模型的编码器
enc = tiktoken.encoding_for_model("gpt-4o")
# 编码和解码文本
encoded_text = enc.encode("hello world")
decoded_text = enc.decode(encoded_text)
print(decoded_text) # 输出:hello world
扩展 tiktoken
如果你想添加新的编码方式,可以通过以下两种方法:
-
直接创建 Encoding 对象:
python# 获取现有的编码器 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, "": 100264, "": 100265, } )
-
使用 tiktoken_ext 插件机制:
- 创建一个命名空间包
tiktoken_ext
。 - 在
my_encodings.py
中定义ENCODING_CONSTRUCTORS
字典。 - 编写
setup.py
文件并安装扩展包。
python# setup.py 示例 from setuptools import setup, find_namespace_packages setup( name="my_tiktoken_extension", packages=find_namespace_packages(include=['tiktoken_ext*']), install_requires=["tiktoken"], # ... )
安装后即可使用自定义的编码器。
- 创建一个命名空间包
学习更多
如果你想了解更多关于 BPE 的细节,tiktoken 提供了一个教育子模块,可以帮助你通过代码来可视化 BPE 过程。
python
from tiktoken._educational import *
# 训练一个简单的 BPE 编码器
enc = train_simple_encoding()
# 可视化 GPT-4 编码器如何编码文本
enc = SimpleBytePairEncoding.from_tiktoken("cl100k_base")
enc.encode("hello world aaaaaaaaaaaa")