SentencePieceはGoogleが開発したオープンソースのトークン化ライブラリで、言語に依存しない事前処理不要のサブワード分割を実現し、LLaMA 2やGemma、T5等の多言語LLMで広く採用されている。
SentencePieceは、Googleが2018年に公開したオープンソースのテキストトークン化ライブラリである。最大の特徴は「言語非依存」かつ「事前の単語分割(pre-tokenization)不要」で動作する点にあり、生のテキスト文字列をそのままサブワード列に変換できる。LLaMA 2(32,000語彙)、Gemma(256,000語彙)、T5/mT5(32,100語彙)、ALBERT(30,000語彙)など、多言語対応が求められるモデルで標準的に採用されている。
SentencePieceは以下の2つのアルゴリズムを内蔵し、設定で切替可能:
両モードとも、テキストをUnicodeコードポイント列として直接処理するため、英語のようにスペースで単語を区切る前処理が不要である。日本語・中国語・タイ語など、単語境界が明示されない言語でもそのまま適用できる。
SentencePieceは空白文字を特殊記号「▁」(U+2581)に変換して語彙に含める:
Hello World → トークン: [▁Hello, ▁World]こんにちは世界 → トークン: [▁, こんにちは, 世界]この設計により、トークン列からの完全な原文復元(ロスレスデコード)が保証される。
| モデル | アルゴリズム | 語彙サイズ | 訓練データ | 備考 |
|---|---|---|---|---|
| LLaMA 2 | BPE | 32,000 | 2Tトークン | Meta公式・英語中心 |
| Gemma 2 | BPE | 256,000 | 多言語 | Google DeepMind・大語彙多言語 |
| T5 / mT5 | Unigram | 32,100 / 250,000 | C4 / mC4 | テキスト-テキスト統一フレームワーク |
| ALBERT | Unigram | 30,000 | 英語 | パラメータ共有で軽量化 |
| XLNet | Unigram | 32,000 | 英語+多言語 | 順列言語モデル |
| NLLB-200 | BPE | 256,206 | 200言語 | Meta翻訳モデル・最大級多言語語彙 |
| 項目 | SentencePiece | HuggingFace Tokenizers |
|---|---|---|
| 実装言語 | C++(Pythonバインディング) | Rust(Pythonバインディング) |
| アルゴリズム | BPE / Unigram | BPE / WordPiece / Unigram |
| 前処理依存 | 不要(生テキスト入力) | 前処理パイプライン設定可 |
| 学習速度 | 中程度 | 高速(並列学習対応) |
| メモリ効率 | Protobufモデル(10-50MB) | JSONモデル(50-200MB) |
| 多言語対応 | ネイティブ | 設定次第で対応 |
| ストリーミング | 非対応 | チャンク処理対応 |
SentencePieceをLLM開発で使う際の実践的な注意点:
.model(Protobuf)と.vocab(テキスト)の2ファイルで構成。.modelだけで推論可能--user_defined_symbolsで特殊トークン(<tool_call>等)を追加可能--normalization_rule_name=nmt_nfkcでUnicode正規化を指定。多言語モデルではnmt_nfkcが推奨--character_coverage=0.9995で稀少文字を<unk>にマッピング。CJK言語では0.9995以上を推奨--byte_fallback=trueで未知文字をUTF-8バイト列に分解(LLaMA 2で採用)Q1: SentencePieceのBPEモードとUnigramモードはどちらが優れていますか? A: タスクによる。BPEモードは決定論的で再現性が高く、コード生成タスクに適する。Unigramモードは確率的な分割により正則化効果があり、翻訳や多言語タスクでやや有利とされる。LLaMA 2はBPE、T5はUnigramを採用している。
Q2: SentencePieceの学習にはどのくらいのデータが必要ですか? A: 語彙サイズ32,000の場合、最低1,000万文以上の訓練データが推奨される。データが少ないと稀少サブワードの統計が不安定になり、分割品質が低下する。大規模モデル(語彙256K)では数十億文規模が必要。
Q3: SentencePieceとtiktokenは互換性がありますか? A: 直接の互換性はない。SentencePieceはProtobufベースのモデルファイル、tiktokenはマージルールのテキストファイルを使用する。ただし、HuggingFace Tokenizersライブラリ経由で両形式のモデルを統一APIで利用できる。