快速理解 tiktoken:OpenAI 模型的高效 BPE 分词器

什么是 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

如果你想添加新的编码方式,可以通过以下两种方法:

  1. 直接创建 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,
        }
    )
  2. 使用 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")
相关推荐
vortex510 分钟前
HTB Mailing 靶机渗透记录:利用 CVE-2024-21413 捕获 NTLM Hash
算法·哈希算法
AAA修煤气灶刘哥12 分钟前
面试必问的CAS和ConcurrentHashMap,你搞懂了吗?
后端·面试
王哥儿聊AI38 分钟前
告别人工出题!PromptCoT 2.0 让大模型自己造训练难题,7B 模型仅用合成数据碾压人工数据集效果!
人工智能·深度学习·算法·机器学习·软件工程
钟爱蛋炒饭2 小时前
windows下使用github上传文件失败(编码问题)
github
机器学习之心2 小时前
198种组合算法+优化BiGRU双向门控循环单元+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备!
深度学习·算法·shap分析·新数据预测·优化bigru
小胖xiaopangss2 小时前
栈的压入弹出序列--牛客
数据结构·c++·算法
_给我学起来2 小时前
前缀和数组
算法
程序员莫小特2 小时前
老题新解|求三角形面积
开发语言·数据结构·c++·算法·信息学奥赛一本通
mc23562 小时前
C语言指针详解
c语言·开发语言·算法
Asmalin3 小时前
【代码随想录day 30】 力扣 763. 划分字母区间
算法·leetcode·职场和发展