SentencePieceとは、Googleが開発した言語非依存のテキストトークナイザライブラリである。事前のスペース分割(前処理)を必要とせず、生テキストから直接サブワード分割を学習・実行する。BPEとUnigramの両方のアルゴリズムをサポートし、Llama、Gemma、T5など多数のLLMで採用されている。
SentencePieceは2018年に工藤拓氏とJohn Richardson氏(Google)が発表したオープンソースのトークナイザライブラリである。最大の特徴は「言語非依存(Language-independent)」設計で、英語のようにスペースで単語が区切られる言語も、日本語のようにスペースなしで連続する言語も、同じパイプラインで処理できる。
従来のトークナイザ(WordPiece等)はテキストを単語に分割する前処理(スペース分割、形態素解析等)が必要だった。SentencePieceはこの前処理を排除し、Unicodeテキストを直接サブワードに分割する。
SentencePieceの設計原則:
SentencePieceの革新的な設計は、スペースの扱いにある。
従来方式(WordPiece等):
入力: "Hello World"
前処理: ["Hello", "World"] ← スペースで分割(言語依存)
トークン化: ["Hello", "Wo", "##rld"]
復元: "Hello" + " " + "World" ← スペース復元がヒューリスティック
SentencePiece方式:
入力: "Hello World"
正規化: "▁Hello▁World" ← スペースを▁に変換
トークン化: ["▁Hello", "▁World"]
復元: "Hello World" ← ▁をスペースに戻すだけ(完全可逆)
▁(U+2581、LOWER ONE EIGHTH BLOCK)はスペースの明示的マーカーとして機能する。これにより、文頭のスペース有無、連続スペース、改行等の空白情報が完全に保存される。
| アルゴリズム | モデルファイル | 特徴 | 採用例 |
|---|---|---|---|
| BPE | .model | 決定的分割、高速 | Llama 3, Mistral |
| Unigram | .model | 確率的分割、正則化 | Gemma, T5 |
| Char | .model | 文字レベル分割 | 研究用 |
| Word | .model | 単語レベル分割 | レガシー |
SentencePieceはLLMエコシステムで最も広く使われているトークナイザライブラリである。
| モデル | SentencePieceモード | 語彙サイズ |
|---|---|---|
| Llama 3/3.1 | BPE | 128,256 |
| Gemma 2/4 | Unigram | 256,000 |
| T5/mT5 | Unigram | 32,000/250,000 |
| Mistral 3 | BPE | 32,768 |
| BLOOM | BPE | 250,680 |
| Falcon | BPE | 65,024 |
一方、GPT-4/Claude 4/Qwen3はSentencePieceではなく独自実装(tiktoken等)を使用している。
| 項目 | SentencePiece | tiktoken |
|---|---|---|
| 実装言語 | C++ (Python/Java binding) | Rust (Python binding) |
| アルゴリズム | BPE + Unigram | BPEのみ |
| 前処理 | 不要(内蔵) | 正規表現プレトークン化 |
| 速度(エンコード) | 基準 | 2-5倍高速 |
| 語彙形式 | バイナリ .model | テキスト .tiktoken |
| 可逆性 | 完全 | 完全 |
| 採用モデル | Llama, Gemma, T5 | GPT-4, Qwen3 |
Q1: SentencePieceの訓練にはどのようなデータが必要ですか? A: プレーンテキストファイルが必要です。1行1文(または1文書)の形式で、目標言語を十分にカバーするデータを用意します。多言語トークナイザの場合、各言語のデータ量バランスが語彙の言語カバレッジに影響します。一般的に10-100GB程度のテキストデータが推奨され、訓練は8コアCPUで数時間-1日で完了します。
Q2: SentencePieceモデルのファイルサイズはどの程度ですか? A: 語彙サイズに依存しますが、32K語彙で約500KB-1MB、128K語彙で2-4MB、256K語彙で5-8MB程度です。バイナリProtocol Buffers形式で保存されるため、テキスト形式のtiktokenファイルと比較してコンパクトです。
Q3: 日本語のトークン化でSentencePieceは形態素解析より優れていますか? A: 目的によります。SentencePieceは教師なし(アノテーション不要)でデータ駆動の分割を学習するため、LLMの事前学習に適しています。一方、MeCabやJuman++のような形態素解析は言語学的に正確な分割を提供し、検索エンジンや品詞タグ付けには形態素解析が優位です。LLMの文脈ではSentencePieceの方が一般的に好まれます。