1GB 文本分词提速 3 倍:tiktoken BPE 分词器五分钟跑通
【免费下载链接】tiktokentiktoken is a fast BPE tokeniser for use with OpenAI's models.项目地址: https://gitcode.com/GitHub_Trending/ti/tiktoken
一 GB 文档集卡在分词这一步,终端转了四分钟没有进度条,同事那边已经跑完开始看结果了。区别只在换了一个库:tiktoken,OpenAI 为自家模型写的快速 BPE(Byte Pair Encoding)分词器,它干的就一件事——把文本转成 token,并且转得很快。
一行安装,三行跑通
pip install tiktoken装完就能用,不用先拉一堆 transformers 的依赖。
import tiktoken enc = tiktoken.get_encoding("o200k_base") print(enc.encode("hello world")) # 或者一行拿到某个模型对应的编码 enc = tiktoken.encoding_for_model("gpt-4o")返回值是 token ID 列表,想还原回文本再跑一次enc.decode(ids)就行,往返无损。
encoding_for_model内部做的是模型名到编码名的映射:gpt-4o、gpt-4.1、o1、o3 这类走o200k_base,gpt-4、gpt-3.5-turbo 以及 embedding 系列走cl100k_base。匹配走前缀,比如模型名只要以gpt-4o-开头就能命中,OpenAI 发新版模型时通常不用急着升库。
真实数字:1GB 文本快 3-6 倍
仓库里给出的实测数据:用 GPT-2 分词器处理 1GB 文本,tiktoken 比 HuggingFace 的GPT2TokenizerFast快3-6 倍(对照组是 tokenizers==0.13.2 加 transformers==4.24.0)。
原因不神秘:核心编码循环用 Rust 写,Python 侧只是薄壳;批量场景还能用encode_ordinary_batch把线程数拉上去。你要是对着大语料算 token 数,这个差距就是"跑一晚上"和"咖啡没凉就出结果"的差别。
深入一步:把自定义编码挂进 get_encoding
如果现成编码不够用、要改词表,轻量路线是先拿一个已有编码的参数,自己组装一个tiktoken.Encoding对象,增删几个 special tokens 即可。
重一点的是tiktoken_ext插件机制,让tiktoken.get_encoding("你的名字")能直接找到你的编码。做法:建一个名叫tiktoken_ext的命名空间包(注意不放__init__.py),里面放一个my_encodings.py,定义ENCODING_CONSTRUCTORS字典——键是编码名,值是无参的构造函数;setup.py里声明install_requires=["tiktoken"],然后pip install ./my_tiktoken_extension(不能用 editable 安装)。官方自带的示例看 tiktoken_ext/openai_public.py,插件的发现与加载逻辑在 tiktoken/registry.py。
落地场景:RAG 入库时加一道 token 闸门
具体一点的用法:你搭 RAG 管道,每个 chunk 送去 gpt-4o 之前要数 token 数,防止上下文超限、顺便预估 API 成本。入库环节写一行tiktoken.encoding_for_model("gpt-4o").encode(chunk),长度就是len(tokens),超了就先切再入库。
下一步:跑pip install tiktoken,再打开 tiktoken/core.py 过一遍Encoding的完整 API,五分钟就能把整条链路跑起来。
【免费下载链接】tiktokentiktoken is a fast BPE tokeniser for use with OpenAI's models.项目地址: https://gitcode.com/GitHub_Trending/ti/tiktoken
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考