huggingface/tokenizers

💥 Fast State-of-the-Art Tokenizers optimized for Research and Production

🤖 什么是 huggingface/tokenizers?

这是一个以 Rust 编写的高性能开源分词库,并提供 Python、Node.js 以及(计划中)其他语言的绑定。它实现了几乎所有现代 LLM 所使用的分词器——如 BPE、Unigram、WordPiece、WordLevel 等——并致力于成为将原始文本转换为模型可理解的整数 ID(以及反向转换)的行业标准引擎。


🚀 快速开始 (Python)

pip install --pre tokenizers   # pre‑release contains the new v1 API
from tokenizers import Tokenizer

# Load a pretrained tokenizer (e.g. Llama‑3.1) directly from the Hub
tokenizer = Tokenizer.from_pretrained("meta-llama/Llama-3.1-8B")

ids = tokenizer.encode("Hello, y'all! How are you 😁 ?").ids
print(ids)
# → [128000, 9906, 11, 379, 65948, 0, 2650, 527, 499, 27623, 223, 949]

print(tokenizer.decode([15339, 1917]))   # → "hello world"

⚙️ 核心设计

  • Rust 核心 – 参考实现,编译为极小的(约 325 KB gzipped)二进制文件,无强制性的 SIMD 依赖。
  • 模块化 Crates – 独立的子 crate,用于推理 (tk‑encode)、预分词 (bitcannon)、JSON 加载 (tk‑serialize)、旧版转换 (tk‑convert)、训练 (tk‑train) 以及仅供开发使用的位图生成器。
  • 零拷贝、批次导向 API – 即将推出的 v1 功能包括编码 ID 的零拷贝视图以及批次编码 API。
  • 硬件感知路径 – 支持 ARM 上的 NEON、现代 x86 上的 AVX‑512/VBMI 以及可移植后备方案;SIMD 是可选的,正确性从不依赖它。

📦 语言绑定

语言 状态
Rust (参考) ✅
Python ✅
Node.js ✅
C / C++ / Java / Go 🚧 计划中
Ruby 社区维护的外部仓库

🛣️ 路线图亮点 (v1.0.0)

  • Python API – 恢复完整的训练、批次编码、偏移量输出、填充与流式解码功能。
  • 性能 – bitnorm 归一化、更快的训练、更好的解码速度、词汇缓存优化。
  • GPU 就绪原型 – tk‑devices 探索将词汇表与 ID 保留在设备上,以实现大规模批次解码。
  • 额外绑定 – C/C++ 核心,随后是 Java、Go、Swift 等。

📈 性能与占用空间

  • 该库发布的 crate 大小为 gzipped 325 KB;完整的 Rust 源代码(包含可选的 SIMD 内核)小于 1 MB。
  • 基准测试(请参阅链接的交互式演示)显示,它在 CPU 上针对所有主流预分词正则表达式均超越了现有的分词器。

📚 文档与资源


🎯 谁应该使用它?

  • 模型开发者:需要快速、正确的分词功能来进行训练或推理。
  • 生产服务:大规模提供 LLM 服务,且希望拥有极小、无依赖执行环境的开发者。
  • 研究人员:构建自定义分词器或实验新预分词算法的开发者。

📜 授权条款

MIT – 请参阅仓库的 LICENSE 文件。

相关

  • Dispatch
  • 项目
  • Dispatch
  • Dispatch
  • Dispatch