huggingface/tokenizers

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

🤖 huggingface/tokenizers とは?

Rustで記述された高性能なオープンソースのトークナイザーライブラリで、Python、Node.js、および(計画中の)他の言語向けのバインディングを提供します。BPE、Unigram、WordPiece、WordLevelなど、現代のほぼすべてのLLMで使用されるトークナイザーを実装しており、生のテキストをモデルが理解できる整数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コア – 参照実装。SIMD依存関係なしで、非常に軽量(gzippedで約325 KB)なバイナリにコンパイルされます。
  • モジュール化されたCrates – 推論 (tk‑encode)、事前トークナイズ (bitcannon)、JSON読み込み (tk‑serialize)、レガシー変換 (tk‑convert)、学習 (tk‑train)、および開発専用のビットマップジェネレーター用の独立したサブcrate。
  • ゼロコピー、バッチ指向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