Hugging Face社が開発したRust実装の高速トークナイゼーションライブラリ。BPE・WordPiece・Unigram等の主要アルゴリズムをサポートし、Pythonバインディング経由でtransformersライブラリと統合される。1GB/秒以上のエンコード速度でバッチ推論のボトルネックを解消する。
Hugging Face Tokenizersは、Hugging Face社が開発・公開しているオープンソースの高速トークナイゼーションライブラリである。Rust言語でコアが実装されており、Python・Node.js・Rubyのバインディングを提供する。BPE・WordPiece・Unigram・文字ベースなど主要なサブワード分割アルゴリズムをすべてサポートし、1GBを超えるテキストを1秒以内でエンコードできる処理速度が最大の特徴だ。
| 項目 | 仕様 |
|---|---|
| コア言語 | Rust |
| バインディング | Python / Node.js / Ruby |
| 対応アルゴリズム | BPE / WordPiece / Unigram / 文字ベース |
| エンコード速度 | 1GB/秒以上(Rust実装) |
| 並列処理 | マルチスレッド対応 |
| ライセンス | Apache 2.0 |
| PyPI パッケージ名 | tokenizers |
| 最新バージョン | 0.21.x(2026年時点) |
| GitHub Stars | 9,000+(2026年時点) |
| transformers統合 | AutoTokenizer / PreTrainedTokenizerFast |
Hugging Face Tokenizersのパイプラインは5つのステージで構成される。
各ステージは独立したコンポーネントとして交換可能で、既存モデルのトークナイザを再現するだけでなく、カスタムパイプラインの構築にも対応する。
Hugging Face Tokenizersの処理速度はPython実装のトークナイザと比較して桁違いに高速だ。
| ライブラリ | 実装言語 | エンコード速度(1M文) | 備考 |
|---|---|---|---|
| Hugging Face Tokenizers | Rust + Python binding | 約20秒 | マルチスレッド対応 |
| SentencePiece (C++) | C++ + Python binding | 約120秒 | シングルスレッド |
| Python純粋実装 | Python | 約2,000秒以上 | 参考値 |
バッチ推論パイプラインではトークナイゼーションがボトルネックになりがちだ。特にリアルタイムAPIサーバーで大量リクエストを処理する場合、トークナイザの速度は応答レイテンシに直結する。Rust実装はこのボトルネックを解消し、GPUの推論能力をフルに活用できる環境を提供する。
Hugging Face Tokenizersは同社のtransformersライブラリと深く統合されている。
from transformers import AutoTokenizer
# Hugging Face Hub からトークナイザを自動ロード
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B")
# エンコード
tokens = tokenizer("自作PCのGPUを選ぶポイント", return_tensors="pt")
# tokens.input_ids: tensor([[128000, ...]])
# デコード
text = tokenizer.decode(tokens.input_ids[0])
# "自作PCのGPUを選ぶポイント"
AutoTokenizer.from_pretrained() は Hugging Face Hub に公開されているモデルのトークナイザ設定(tokenizer.json / tokenizer_config.json)を自動でダウンロードし、Rust実装のFastTokenizerとして初期化する。PreTrainedTokenizerFast クラスが内部でRustバインディングを呼び出すため、ユーザーはRustを意識せずに高速トークナイゼーションの恩恵を受けられる。
独自のコーパスでBPEトークナイザを訓練する例を示す。
from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.trainers import BpeTrainer
from tokenizers.pre_tokenizers import ByteLevel
# 初期化
tokenizer = Tokenizer(BPE(unk_token="[UNK]"))
tokenizer.pre_tokenizer = ByteLevel()
# 訓練
trainer = BpeTrainer(vocab_size=32000, special_tokens=["[UNK]", "[PAD]", "[CLS]", "[SEP]"])
tokenizer.train(files=["corpus.txt"], trainer=trainer)
# 保存
tokenizer.save("custom_tokenizer.json")
訓練済みトークナイザはJSON形式で保存され、Hugging Face Hubにアップロードして共有できる。ドメイン特化の専門用語(医療・法律・技術文書等)を含むコーパスで訓練することで、汎用トークナイザよりも効率的なトークン化が可能になる。
新規プロジェクトではHugging Face Tokenizersが推奨されます。Rust実装による高速処理、transformersライブラリとのシームレスな統合、JSON形式の可搬性が利点です。既存のSentencePieceモデル(LLaMA等)を使う場合は、Hugging Face Tokenizersの互換レイヤー経由でロードできます。
Hugging Face TokenizersはCPU上で動作し、GPUには対応していません。ただしRust実装のマルチスレッド処理により、CPUだけで1GB/秒以上の速度を達成しているため、GPUアクセラレーションの必要性は低いです。ボトルネックはほぼ常にモデルの推論側にあります。
Hugging Face Hub上の日本語対応モデル(例: rinna/japanese-gpt-neox, elyza/ELYZA-japanese-Llama-2)のトークナイザをAutoTokenizerでロードすれば、日本語用の設定が自動適用されます。独自訓練する場合はByteLevel PreTokenizerを使うByte-Level BPEが日本語に適しています。