google/sentencepiece
Unsupervised text tokenizer for Neural Network-based text generation.
SentencePiece – 言語に依存しないサブワードトークナイザー
概要 – SentencePieceは、高速で軽量なライブラリ(C++コアにPython、Go、Rustなどのバインディング)で、生テキストから直接サブワードトークナイゼーションモデルを学習し、適用します。Byte‑Pair Encoding(BPE)とUnigram言語モデルという2つの最も一般的なサブワードアルゴリズムをサポートし、追加の前処理なしでどこでも使用できる単一の自己完結型.modelファイルを生成します。
AIにとって重要な理由 – 最新のニューラル言語モデル(例:LLM、翻訳システム、音声認識パイプライン)には固定サイズの語彙が必要です。SentencePieceを使用すると、完全にデータ駆動でその語彙を作成でき、空白、Unicode、明示的な単語境界のない言語(中国語、日本語、タイ語など)を、言語固有のトークナイザーなしで処理できます。トークナイゼーションは可逆的(ロスレス)で、元の文字列を正確に再構築できるため、デトークナイゼーションが簡単になります。
主な機能
- 言語に依存しないトレーニング – 生の文を入力するだけ。外部トークナイザーは不要。
- 2つのサブワードアルゴリズム – BPEとUnigram。どちらもオプションのサブワード正則化(サンプリング)とデータ拡張のためのBPE‑Dropoutをサポート。
- 高速なC++実装 – 約50k文/秒、メモリ使用量約6MiB。
- 依存関係ゼロのランタイム(SentencePiece Lite) – メモリマップ可能な小型C++20ライブラリ(約45KBの静的ライブラリ)。オンデバイスや高スループットのサーバーで使用可能。
- クロス言語バインディング – Python(
pip install sentencepiece)、Go、Rust、純粋なC API。 - 自己完結型モデルファイル –
.modelファイルには語彙、正規化ルール、セグメンテーションロジックがバンドルされ、プラットフォーム間で同一の結果を保証。 - ベンチマーク済みのパフォーマンス – マルチスレッドワークロードでHugging Faceのfast tokenizersを4〜10倍上回る(READMEの表を参照)。
典型的なワークフロー(Python)
import sentencepiece as spm
# 1️⃣ 生テキストファイルからトレーニング
spm.SentencePieceTrainer.train(
input='data.txt', model_prefix='my', vocab_size=8000)
# 2️⃣ モデルをロード
sp = spm.SentencePieceProcessor(model_file='my.model')
# 3️⃣ エンコード/デコード
ids = sp.encode('Hello world!', return_type=int)
pieces = sp.encode('Hello world!', return_type=str)
print(sp.decode(ids)) # → "Hello world!"
同じモデルをC++、Go、Rustから同等のAPIで使用できます。
使用すべき場面
- カスタムのサブワード語彙を必要とする新しいLLM、翻訳、音声モデルの構築。
- 明確な単語区切りがない言語を扱う場合。
- エッジデバイスや高スループットのサーバーで、依存関係のない小さなランタイムが必要な場合。
- 複数のプログラミング環境で決定論的で可逆的なトークナイゼーションが必要な場合。
リソース – リポジトリには、詳細なドキュメント(CLIガイド、C++/Python APIリファレンス、トレーニングオプションのチートシート、Dockerデプロイ手順)と、再現性のためのパフォーマンスベンチマークスイートが含まれています。
ライセンス – Apache 2.0(寛容で商用利用に適しています)。
関連
- プロジェクト
- Dispatch
- Dispatch
- プロジェクト
- プロジェクト