SentencePieceに実装されたUnigramサブワード分割アルゴリズムで、確率的言語モデルに基づくトップダウン方式の語彙最適化により、BPEより高い圧縮率と柔軟なトークン化を実現する。
SentencePiece Unigramモデルは、Kudo (2018)が提案したサブワード正則化(Subword Regularization)の中核をなすトークン化アルゴリズムである。BPE(Byte Pair Encoding)がボトムアップに文字ペアを結合していくのに対し、Unigramはトップダウンに語彙を削減していく点が最大の特徴である。各サブワードに確率を割り当て、入力テキストに対して最も確率の高い分割を動的に選択する。
Unigramモデルの学習は以下の3ステップで進行する:
学習済みモデルによるトークン化では、Viterbiアルゴリズムを用いて入力テキストの最尤分割を求める:
P(x) = Π p(xi) where x = (x1, x2, ..., xn) は最適分割
x* = argmax P(x) Viterbiで効率的に計算
| 比較項目 | Unigram | BPE |
|---|---|---|
| 語彙構築方向 | トップダウン(削減) | ボトムアップ(結合) |
| 分割の決定論性 | 確率的(複数候補可能) | 決定論的(一意) |
| 学習計算量 | O(N × V²) 大 |
| O(N × V) 中 |
| 圧縮率 | 高い(5〜15%優位) | 中程度 |
| サブワード正則化 | ネイティブサポート | 非対応 |
| 推論速度 | 高速(Viterbi) | 高速(ルックアップ) |
| 稀語の処理 | 柔軟(確率的フォールバック) | 固定(バイトフォールバック) |
| 採用モデル例 | T5, ALBERT, Gemma | LLaMA, Mistral, GPT |
Unigramモデル最大の強みは**サブワード正則化(Subword Regularization)**である。同じ入力テキストに対して、最尤分割だけでなく確率分布に従った複数のサブワード分割をサンプリングできる:
import sentencepiece as spm
sp = spm.SentencePieceProcessor()
sp.load('unigram_model.model')
text = '機械学習'
# 最尤分割(デフォルト)
best = sp.encode(text, out_type=str)
# ['▁機械', '学習']
# 確率的サンプリング(nbest_size=-1, alpha=0.1)
for _ in range(5):
sampled = sp.encode(text, out_type=str, enable_sampling=True, alpha=0.1, nbest_size=-1)
print(sampled)
# ['▁機', '械', '学習']
# ['▁機械', '学', '習']
# ['▁機械', '学習'] ← 最尤と同じ
# ['▁', '機', '械', '学', '習']
# ['▁機械学習']
この正則化は学習データの拡張として機能し、翻訳タスクでBLEUスコアが0.5〜1.0ポイント向上することがKudo & Richardson (2018)で報告されている。
| パラメータ | 推奨値 | 説明 |
|---|---|---|
vocab_size | 32,000〜256,000 | 語彙サイズ。多言語では大きめ |
character_coverage | 0.9995 | CJK言語では0.9995推奨 |
num_sub_iterations | 2 | EMアルゴリズムの内部反復数 |
shrinking_factor | 0.75 | 各ステップで語彙を75%に削減 |
max_sentencepiece_length | 16 | 1トークンの最大文字数 |
seed_sentencepiece_size | 1,000,000 | 初期候補サイズ |
input_sentence_size | 0 (全件) | 学習に使う文数 |
T5やmBARTなど多言語モデルでUnigramが好まれる理由は、言語間の語彙バランスを確率的に最適化できる点にある。mBARTは25言語のコーパスからUnigram学習で250,000語彙を構築し、各言語に対して適切なサブワード粒度を自動的に割り当てている。
Gemma(Google, 2024)は256,128という大規模語彙をUnigramで学習し、日本語・韓国語・アラビア語等の非ラテン文字言語でもトークン効率を維持している。
Q1: Unigramモデルの学習はBPEより遅いですか?
A: 初期語彙が大きいため学習自体はBPEより計算量が多い。しかし実用的には並列化が効くため、32,000語彙の学習で数十分〜数時間程度である。推論速度はBPEと同等かやや速い。
Q2: サブワード正則化は推論時にも使うべきですか?
A: 一般的には学習時のみ使用し、推論時はViterbi最尤分割を使う。ただし翻訳や音声認識のビームサーチでは推論時の正則化が有効な場合もある。
Q3: なぜLLaMA系モデルはUnigramではなくBPEを採用しているのですか?
A: LLaMA系は英語中心の単言語モデルとして設計されたため、決定論的で再現性の高いBPEが選ばれた。一方、多言語を重視するGemmaやT5ではUnigramが採用されている。モデルの用途と言語カバレッジに応じた選択である。