大模型原理:BPE分词器 tiktoken的介绍、使用 作者:马育民 • 2026-01-07 09:57 • 阅读:10004 # 介绍 tiktoken是OpenAI官方推出的高效Token计数库,专门用于计算文本在GPT、Claude等大模型中的Token数量,是开发大模型应用的必备工具。 # 作用 `tiktoken` 是OpenAI开源的**快速BPE(字节对编码)Tokenizer库**,用Rust实现核心逻辑,Python提供调用接口,核心作用是: 1. **精准计数Token**:计算文本转换为大模型可识别的Token数量(直接影响API费用、上下文窗口限制); 2. **高性能**:比传统的`transformers`库快几十倍,适合大批量文本处理; 3. **多模型适配**:原生支持OpenAI全系列模型(gpt-3.5-turbo、gpt-4、gpt-4o等),也兼容Anthropic Claude等主流模型。 ### 为什么需要Token计数? 大模型按Token计费(如gpt-3.5-turbo按每1000Token收费),且有上下文窗口限制(如gpt-4o的128k Token上限),精准计数能避免超量扣费或请求失败。 # 特点与优势 | 特性 | tiktoken | 传统transformers库 | |---------------------|-----------------------------------|-----------------------------------| | 性能 | 极快(Rust核心),批量处理万级文本无压力 | 较慢(Python实现),大批量处理卡顿 | | 安装体积 | 小(仅依赖Rust扩展)| 大(需安装完整transformers+依赖) | | 模型适配 | 专注OpenAI/Claude,覆盖主流模型 | 支持全模型,但配置复杂 | | 易用性 | 极简API,一行代码计数 | 需手动加载Tokenizer,步骤繁琐 | | 精准度 | 与OpenAI官方计数100%一致 | 部分模型计数有偏差 # 安装 本文安装的是 `0.12.0` 版本 直接安装: ```bash pip install tiktoken ``` poetry虚拟环境安装依赖: ``` poetry add flask ``` # 代码 ``` from importlib.metadata import version import tiktoken print("查看 version 版本号:", version("tiktoken")) print("查看所有支持的编码:", tiktoken.list_encoding_names()) # 选择对应模型的编码,不同模型编码规则不同 tokenizer = tiktoken.get_encoding("gpt2") text = ( "Hello, do you like tea? <|endoftext|> In the sunlit terraces" "of someunknownPlace." ) # 使用encode()方法,将文本转Token(返回Token ID列表),指定特殊标记 integers = tokenizer.encode(text, allowed_special={"<|endoftext|>"}) print("将文本转Token---------------------") print(integers) # 使用decode()方法,将词元ID转换回文本 strings = tokenizer.decode(integers) print("将词元ID转回文本---------------------") print(strings) ``` 执行结果: ``` 查看 version 版本号: 0.12.0 查看所有支持的编码: ['gpt2', 'r50k_base', 'p50k_base', 'p50k_edit', 'cl100k_base', 'o200k_base', 'o200k_harmony'] 将文本转Token--------------------- [15496, 11, 466, 345, 588, 8887, 30, 220, 50256, 554, 262, 4252, 18250, 8812, 2114, 1659, 617, 34680, 27271, 13] 将词元ID转回文本--------------------- Hello, do you like tea? <|endoftext|> In the sunlit terracesof someunknownPlace. ``` ### 结果 通过分析上述词元ID和解码后的文本,我们得出了两个重要的观察结果。 1. `<|endoftext|>` 词元被分配了一个 **较大的词元ID**,即**50256**。事实上,用于训练GPT-2、GPT-3和ChatGPT中使用的原始模型的BPE分词器的词汇总量为50 257,这意味着 `<|endoftext|>` 被分配了最大的词元ID。 2. BPE分词器可以正确地 **编码** 和 **解码** **未知单词**,比如:`someunknownPlace`。 # BPE分词器是如何处理未知词的 BPE算法的原理是将 **不在预定义词汇表中的单词** **分解** 为更小的 **子词单元** 甚至 **单个字符**,从而能够处理词汇表之外的单词。 因此,得益于BPE算法,如果分词器在分词过程中遇到 **不熟悉的单词**,它可以将其表示为 **子词词元** 或 **字符序列**,如图: [](https://www.malaoshi.top/upload/0/0/1GW2Y1yC6ucY.png) 将 **未知单词 分解 为单个字符** 的能力,确保用分词器训练的大语言模型能够 **处理任何文本** # 常见问题与注意事项 1. **编码与模型匹配**:必须用对应模型的编码(如gpt-4o用`o200k_base`),否则计数不准; - 可通过`print(tiktoken.list_encoding_names())`查看所有支持的编码; 2. **特殊字符处理**:Emoji、多语言文本(中文/日文)会按BPE规则拆分为多个Token(如一个中文汉字通常是1-2个Token); 3. **批量处理优化**:大批量文本计数时,复用`encoding`对象,避免重复创建; 4. **离线使用**:tiktoken下载编码规则后可离线使用,无需联网。 ### 总结 tiktoken的核心要点可总结为3点: 1. **核心价值**:OpenAI官方出品,精准、高速计算大模型Token数量,是大模型应用开发的必备工具; 2. **核心用法**:通过`get_encoding`/`encoding_for_model`获取编码,`encode`转Token后统计长度; 3. **优势**:性能远超传统库,API极简,与OpenAI官方计数完全一致,适配主流大模型。 原文出处:http://www.malaoshi.top/show_1GW2Y24DjGX1.html