AI・機械学習
上級

SentencePiece(センテンスピース)

Googleが開発したオープンソースのサブワードトークナイザー。事前の単語分割を必要とせず、生のテキストから直接トークナイゼーションモデルを学習できる言語非依存のツール。

0 回閲覧
0 いいね
2026/6/20 更新

SentencePieceとは

SentencePieceは、Googleが2018年に公開したオープンソースのトークナイザーライブラリです。従来のBPE実装では事前に空白で単語分割する前処理が必要でしたが、SentencePieceは生のテキストをそのまま入力として受け取り、空白を含めたすべての文字をトークン候補として扱います。これにより日本語・中国語・タイ語など、スペースで単語区切りがない言語でも前処理なしで適用できます。

対応アルゴリズム

SentencePieceは複数のサブワードアルゴリズムを統一的なインターフェースで提供します。

アルゴリズム特徴採用例
BPE頻出ペアを貪欲にマージLLaMA 2, Mistral
Unigram確率モデルで最適分割を選択T5, mBART, ALBERT
Word単語単位(サブワードなし)研究用途
Char文字単位(サブワードなし)研究用途

Unigramモデルの特徴

BPEが貪欲にペアをマージするのに対し、Unigramモデルは大きな初期語彙から不要なトークンを削除する「引き算」アプローチです。各トークンに出現確率を付与し、テキストの対数尤度を最大化するように語彙を最適化します。

Unigramの利点は、同じテキストに対して複数の分割候補を確率的にサンプリングできることです。これにより学習時のデータ拡張(Subword Regularization)が可能になり、モデルの汎化性能が向上します。

SentencePieceの設計思想

空白の扱い

SentencePieceは空白を特殊文字「▁」(U+2581)に置換して1つの文字として扱います。これにより「▁the」と「the」が別トークンとなり、文頭と文中の単語を区別できます。

入力: "I like NLP"
BPE前処理: ["I", "like", "NLP"] → 空白情報が消失
SentencePiece: ["▁I", "▁like", "▁NL", "P"] → 空白情報を保持

可逆性

SentencePieceのトークナイゼーションは完全に可逆です。トークン列をデコードすると元のテキストが空白も含めて完全に復元されます。従来のBPE実装では前処理で空白を除去するため、デコード時に空白の復元が不完全になるケースがありました。

使い方

モデルの学習

# 語彙サイズ32,000のBPEモデルを学習
spm_train --input=corpus.txt \
  --model_prefix=tokenizer \
  --vocab_size=32000 \
  --model_type=bpe \
  --character_coverage=0.9995

Python での使用

import sentencepiece as spm

sp = spm.SentencePieceProcessor()
sp.Load("tokenizer.model")

tokens = sp.EncodeAsPieces("自作パソコンを組み立てる")
# ["▁自作", "パソコン", "を", "組み立て", "る"]

ids = sp.EncodeAsIds("自作パソコンを組み立てる")
# [1234, 5678, 91, 2345, 67]

text = sp.DecodeIds(ids)
# "自作パソコンを組み立てる"(完全復元)

主要パラメータ

パラメータ説明推奨値
vocab_size語彙サイズ32,000〜128,000
model_typeアルゴリズムbpe / unigram
character_coverageカバーする文字の割合0.9995(多言語)
byte_fallback未知文字のバイトフォールバックtrue(推奨)
split_digits数字を1桁ずつ分割true
add_dummy_prefix文頭に▁を付与true

character_coverage

学習データに含まれる文字のうち、語彙に含める文字の割合です。英語のみなら0.9995で十分ですが、CJK文字を含む多言語モデルでは0.99995以上に上げないと漢字がバイトフォールバックされます。

FAQ

Q1: SentencePieceとHugging Faceのtokenizersの違いは?

SentencePieceはC++実装の独立ライブラリで、学習済みモデルは.modelファイルとして配布されます。Hugging Face tokenizersはRust実装で高速ですが、SentencePieceのモデルをラップして使うケースが多いです。LLaMA系のモデルはSentencePieceの.modelファイルを直接配布しています。

Q2: 日本語に最適な設定は?

character_coverageを0.99995以上に設定し、語彙サイズを50,000以上にすることで日本語の圧縮率が改善します。byte_fallback=trueにしておけば、語彙にない漢字もバイト表現で分割されOOVが発生しません。

Q3: SentencePieceの学習にGPUは必要ですか?

不要です。SentencePieceの学習はCPUで実行され、10GBのコーパスに対して数時間で完了します。メモリは学習データサイズの2〜3倍が目安です。

この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/6/20