AI・機械学習
上級

SentencePiece(センテンスピース)

SentencePieceはGoogleが開発したオープンソースのトークン化ライブラリで、言語に依存しない事前処理不要のサブワード分割を実現し、LLaMA 2やGemma、T5等の多言語LLMで広く採用されている。

0 回閲覧
0 いいね

SentencePieceとは

SentencePieceは、Googleが2018年に公開したオープンソースのテキストトークン化ライブラリである。最大の特徴は「言語非依存」かつ「事前の単語分割(pre-tokenization)不要」で動作する点にあり、生のテキスト文字列をそのままサブワード列に変換できる。LLaMA 2(32,000語彙)、Gemma(256,000語彙)、T5/mT5(32,100語彙)、ALBERT(30,000語彙)など、多言語対応が求められるモデルで標準的に採用されている。

アーキテクチャと動作原理

SentencePieceは以下の2つのアルゴリズムを内蔵し、設定で切替可能:

  1. BPEモード: 最頻出バイトペアの反復マージで語彙を構築。LLaMA 2やCodeLlamaで使用
  2. Unigramモード: 大規模初期語彙から尤度が低いトークンを段階的に刈り込む。T5やmBARTで使用

両モードとも、テキストをUnicodeコードポイント列として直接処理するため、英語のようにスペースで単語を区切る前処理が不要である。日本語・中国語・タイ語など、単語境界が明示されない言語でもそのまま適用できる。

空白の扱い(Metaspace)

SentencePieceは空白文字を特殊記号「▁」(U+2581)に変換して語彙に含める:

  • 入力: Hello World → トークン: [▁Hello, ▁World]
  • 入力: こんにちは世界 → トークン: [▁, こんにちは, 世界]

この設計により、トークン列からの完全な原文復元(ロスレスデコード)が保証される。

主要モデルでの採用状況

モデルアルゴリズム語彙サイズ訓練データ備考
LLaMA 2BPE32,0002TトークンMeta公式・英語中心
Gemma 2BPE256,000多言語Google DeepMind・大語彙多言語
T5 / mT5Unigram32,100 / 250,000C4 / mC4テキスト-テキスト統一フレームワーク
ALBERTUnigram30,000英語パラメータ共有で軽量化
XLNetUnigram32,000英語+多言語順列言語モデル
NLLB-200BPE256,206200言語Meta翻訳モデル・最大級多言語語彙

SentencePieceとHuggingFace Tokenizersの比較

項目SentencePieceHuggingFace Tokenizers
実装言語C++(Pythonバインディング)Rust(Pythonバインディング)
アルゴリズムBPE / UnigramBPE / 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で採用)

よくある質問(FAQ)

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で利用できる。

まとめ

  • SentencePieceはGoogle開発の言語非依存トークン化ライブラリ
  • BPEとUnigramの2アルゴリズムを内蔵し設定で切替可能
  • 事前の単語分割が不要で、日本語等のCJK言語にも直接適用可能
  • LLaMA 2(32K語彙)やGemma(256K語彙)等の主要多言語LLMで標準採用
  • 空白の「▁」変換によりロスレスデコードを保証する