tiktoken 是一种快速 BPE 标记器,可与 OpenAI 模型一起使用。
import tiktoken
enc = tiktoken . get_encoding ( "o200k_base" )
assert enc . decode ( enc . encode ( "hello world" )) == "hello world"
# To get the tokeniser corresponding to a specific model in the OpenAI API:
enc = tiktoken . encoding_for_model ( "gpt-4o" )
开源版本的tiktoken
可以从 PyPI 安装:
pip install tiktoken
tokeniser API 记录在tiktoken/core.py
中。
使用tiktoken
的示例代码可以在 OpenAI Cookbook 中找到。
tiktoken
比同类开源 tokeniser 快 3-6 倍:
使用 GPT-2 tokeniser、来自tokenizers==0.13.2
、 transformers==4.24.0
和tiktoken==0.2.0
GPT2TokenizerFast
在 1GB 文本上测量性能。
请在问题跟踪器中发布问题。
如果您在 OpenAI 工作,请务必查看内部文档或随时联系 @shantanu。
语言模型不像你我那样看到文本,而是看到一系列数字(称为标记)。字节对编码(BPE)是一种将文本转换为标记的方法。它有几个理想的特性:
tiktoken
包含一个教育子模块,如果您想了解更多有关 BPE 的详细信息,该子模块会更友好,包括帮助可视化 BPE 过程的代码:
from tiktoken . _educational import *
# Train a BPE tokeniser on a small amount of text
enc = train_simple_encoding ()
# Visualise how the GPT-4 encoder encodes text
enc = SimpleBytePairEncoding . from_tiktoken ( "cl100k_base" )
enc . encode ( "hello world aaaaaaaaaaaa" )
您可能希望扩展tiktoken
以支持新的编码。有两种方法可以做到这一点。
完全按照您想要的方式创建Encoding
对象并简单地传递它。
cl100k_base = tiktoken . get_encoding ( "cl100k_base" )
# In production, load the arguments directly instead of accessing private attributes
# See openai_public.py for examples of arguments for specific encodings
enc = tiktoken . Encoding (
# If you're changing the set of special tokens, make sure to use a different name
# It should be clear from the name what behaviour to expect.
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 ,
}
)
使用tiktoken_ext
插件机制向tiktoken
注册您的Encoding
对象。
仅当您需要tiktoken.get_encoding
来查找编码时,这才有用,否则更喜欢选项 1。
为此,您需要在tiktoken_ext
下创建一个命名空间包。
像这样布局您的项目,确保省略tiktoken_ext/__init__.py
文件:
my_tiktoken_extension
├── tiktoken_ext
│ └── my_encodings.py
└── setup.py
my_encodings.py
应该是一个包含名为ENCODING_CONSTRUCTORS
的变量的模块。这是一个从编码名称到函数的字典,该函数不带参数并返回可以传递给tiktoken.Encoding
来构造该编码的参数。有关示例,请参阅tiktoken_ext/openai_public.py
。具体详情请参见tiktoken/registry.py
。
你的setup.py
应该看起来像这样:
from setuptools import setup , find_namespace_packages
setup (
name = "my_tiktoken_extension" ,
packages = find_namespace_packages ( include = [ 'tiktoken_ext*' ]),
install_requires = [ "tiktoken" ],
...
)
然后只需pip install ./my_tiktoken_extension
,您应该就可以使用自定义编码了!确保不要使用可编辑的安装。