AI・機械学習
上級

SentencePiece(センテンスピース)

SentencePieceとは、Googleが開発した言語非依存のテキストトークナイザライブラリである。事前のスペース分割(前処理)を必要とせず、生テキストから直接サブワード分割を学習・実行する。BPEとUnigramの両方のアルゴリズムをサポートし、Llama、Gemma、T5など多数のLLMで採用されている。

0 回閲覧
0 いいね

SentencePieceは2018年に工藤拓氏とJohn Richardson氏(Google)が発表したオープンソースのトークナイザライブラリである。最大の特徴は「言語非依存(Language-independent)」設計で、英語のようにスペースで単語が区切られる言語も、日本語のようにスペースなしで連続する言語も、同じパイプラインで処理できる。

概要

従来のトークナイザ(WordPiece等)はテキストを単語に分割する前処理(スペース分割、形態素解析等)が必要だった。SentencePieceはこの前処理を排除し、Unicodeテキストを直接サブワードに分割する。

SentencePieceの設計原則:

  • テキストを文字列(Unicode)として扱う: スペースも特殊文字(▁)として語彙に含める
  • 可逆性: トークン列からの完全な原文復元を保証(情報損失なし)
  • 言語非依存: 前処理不要、あらゆる言語・スクリプトに対応
  • C++実装: 高速な訓練とエンコード

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単語レベル分割レガシー

主要LLMでの採用状況

SentencePieceはLLMエコシステムで最も広く使われているトークナイザライブラリである。

モデルSentencePieceモード語彙サイズ
Llama 3/3.1BPE128,256
Gemma 2/4Unigram256,000
T5/mT5Unigram32,000/250,000
Mistral 3BPE32,768
BLOOMBPE250,680
FalconBPE65,024

一方、GPT-4/Claude 4/Qwen3はSentencePieceではなく独自実装(tiktoken等)を使用している。

SentencePiece vs tiktoken

項目SentencePiecetiktoken
実装言語C++ (Python/Java binding)Rust (Python binding)
アルゴリズムBPE + UnigramBPEのみ
前処理不要(内蔵)正規表現プレトークン化
速度(エンコード)基準2-5倍高速
語彙形式バイナリ .modelテキスト .tiktoken
可逆性完全完全
採用モデルLlama, Gemma, T5GPT-4, Qwen3

よくある質問(FAQ)

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の方が一般的に好まれます。

まとめ

  • SentencePieceは言語非依存のトークナイザライブラリ(前処理不要)
  • スペースを▁マーカーで明示化し、完全な可逆性を保証
  • BPEとUnigramの両アルゴリズムをサポート
  • Llama、Gemma、T5、Mistral等の主要LLMで採用
  • tiktokenと比較して汎用性が高いが、純粋なエンコード速度ではtiktokenが優位