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 上针对所有主流预分词正则表达式均超越了现有的分词器。
📚 文档与资源
- 指南与快速导览 – https://huggingface.co/docs/tokenizers/
- API 参考 – https://docs.rs/tokenizers/
- 实时基准测试演示 – https://huggingface-tokenizers-v1.static.hf.space/
🎯 谁应该使用它?
- 模型开发者:需要快速、正确的分词功能来进行训练或推理。
- 生产服务:大规模提供 LLM 服务,且希望拥有极小、无依赖执行环境的开发者。
- 研究人员:构建自定义分词器或实验新预分词算法的开发者。
📜 授权条款
MIT – 请参阅仓库的 LICENSE 文件。
相关
- Dispatch
- 项目
- Dispatch
- Dispatch
- Dispatch