AI・機械学習
上級

SentencePiece Unigramモデル(センテンスピース ユニグラムモデル)

SentencePieceに実装されたUnigramサブワード分割アルゴリズムで、確率的言語モデルに基づくトップダウン方式の語彙最適化により、BPEより高い圧縮率と柔軟なトークン化を実現する。

0 回閲覧
0 いいね

SentencePiece Unigramモデルとは

SentencePiece Unigramモデルは、Kudo (2018)が提案したサブワード正則化(Subword Regularization)の中核をなすトークン化アルゴリズムである。BPE(Byte Pair Encoding)がボトムアップに文字ペアを結合していくのに対し、Unigramはトップダウンに語彙を削減していく点が最大の特徴である。各サブワードに確率を割り当て、入力テキストに対して最も確率の高い分割を動的に選択する。

アルゴリズムの仕組み

学習フェーズ(語彙構築)

Unigramモデルの学習は以下の3ステップで進行する:

  1. 初期語彙の構築:コーパスから出現する全ての部分文字列(サブストリング)を抽出し、目標語彙サイズの10〜20倍の初期候補を生成する(通常100万〜500万候補)
  2. EMアルゴリズムによる確率推定:各サブワードの出現確率を期待値最大化(EM)アルゴリズムで推定する。E-stepでViterbiアルゴリズムにより最適分割を計算し、M-stepで頻度から確率を再推定する
  3. 語彙の削減:各サブワードを語彙から除外した場合のコーパス尤度の減少量(センテンスピースロス)を計算し、影響の小さいサブワードを順次削除する。目標語彙サイズに達するまで繰り返す

推論フェーズ(トークン化)

学習済みモデルによるトークン化では、Viterbiアルゴリズムを用いて入力テキストの最尤分割を求める:

P(x) = Π p(xi)  where x = (x1, x2, ..., xn) は最適分割
x* = argmax P(x)  Viterbiで効率的に計算

BPEとの比較

比較項目UnigramBPE
語彙構築方向トップダウン(削減)ボトムアップ(結合)
分割の決定論性確率的(複数候補可能)決定論的(一意)
学習計算量O(N × V²) 大O(N × V) 中
圧縮率高い(5〜15%優位)中程度
サブワード正則化ネイティブサポート非対応
推論速度高速(Viterbi)高速(ルックアップ)
稀語の処理柔軟(確率的フォールバック)固定(バイトフォールバック)
採用モデル例T5, ALBERT, GemmaLLaMA, 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_size32,000〜256,000語彙サイズ。多言語では大きめ
character_coverage0.9995CJK言語では0.9995推奨
num_sub_iterations2EMアルゴリズムの内部反復数
shrinking_factor0.75各ステップで語彙を75%に削減
max_sentencepiece_length161トークンの最大文字数
seed_sentencepiece_size1,000,000初期候補サイズ
input_sentence_size0 (全件)学習に使う文数

実用例:多言語モデルでの活用

T5やmBARTなど多言語モデルでUnigramが好まれる理由は、言語間の語彙バランスを確率的に最適化できる点にある。mBARTは25言語のコーパスからUnigram学習で250,000語彙を構築し、各言語に対して適切なサブワード粒度を自動的に割り当てている。

Gemma(Google, 2024)は256,128という大規模語彙をUnigramで学習し、日本語・韓国語・アラビア語等の非ラテン文字言語でもトークン効率を維持している。

よくある質問(FAQ)

Q1: Unigramモデルの学習はBPEより遅いですか?

A: 初期語彙が大きいため学習自体はBPEより計算量が多い。しかし実用的には並列化が効くため、32,000語彙の学習で数十分〜数時間程度である。推論速度はBPEと同等かやや速い。

Q2: サブワード正則化は推論時にも使うべきですか?

A: 一般的には学習時のみ使用し、推論時はViterbi最尤分割を使う。ただし翻訳や音声認識のビームサーチでは推論時の正則化が有効な場合もある。

Q3: なぜLLaMA系モデルはUnigramではなくBPEを採用しているのですか?

A: LLaMA系は英語中心の単言語モデルとして設計されたため、決定論的で再現性の高いBPEが選ばれた。一方、多言語を重視するGemmaやT5ではUnigramが採用されている。モデルの用途と言語カバレッジに応じた選択である。

まとめ

  • Unigramモデルはトップダウン方式の確率的サブワード分割アルゴリズム
  • EMアルゴリズムとViterbiデコーディングを組み合わせた数学的に洗練された手法
  • BPEより高い圧縮率とサブワード正則化によるデータ拡張が強み
  • T5、ALBERT、XLNet、Gemma等のエンコーダー系・多言語モデルで広く採用
  • 多言語対応が必要な場合はBPEよりUnigramが推奨される