AI・機械学習
上級

Locally Typical Sampling(ローカリーティピカルサンプリング)

LLM生成において情報量がモデルの予測エントロピーに近いトークンを優先選択するデコーディング手法。top-p/top-kより自然な文章生成が可能で、繰り返しや意味のないトークン選択を抑制する。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
typical-sampling
decoding-strategy
text-generation
llm-inference

Locally Typical Samplingとは

Locally Typical Sampling(局所典型サンプリング)はMeister et al.(EMNLP 2023)が提案したLLMデコーディング手法です。「人間が書いたテキストに近い」生成を実現するために、情報理論的に「典型的」なトークンを選択します。

直感的な説明

top-pサンプリングの問題

top-p(nucleus sampling)は確率上位のトークンを累積確率がpになるまで選びます。しかしこれは「確率が高いトークン」を優先するため、モデルが自信満々のケースで繰り返しが発生しやすくなります。

入力: "The weather today is"
top-p candidates: ["sunny"(0.4), "nice"(0.2), "beautiful"(0.15), "great"(0.12)...]
→ 全て「良い天気」系で多様性が低い

典型的サンプリングのアプローチ

情報理論では、確率分布のエントロピーH(p)が「その分布から引いた典型的なサンプルの情報量」を表します。典型的サンプリングは、各トークンの情報量 -log(p(x)) がH(p)に近いものを優先します。

# 概念的な実装
def typical_sampling(logits, tau=0.9):
    probs = softmax(logits)
    entropy = -sum(p * log(p) for p in probs if p > 0)
    
    # 各トークンの情報量とエントロピーの差(典型性スコア)
    informativeness = -log(probs)
    typicality_score = abs(informativeness - entropy)
    
    # 典型性スコアでソート、上位tau%を選択
    sorted_tokens = argsort(typicality_score)
    cumulative = cumsum(probs[sorted_tokens])
    cutoff = searchsorted(cumulative, tau)
    
    return sample(sorted_tokens[:cutoff+1], probs)

パラメータ

τ(tau)

典型性の厳しさを制御します。

  • τ = 1.0: 全トークンを候補(ランダムサンプリングに近い)
  • τ = 0.9: 推奨値。適度に典型的なトークンを選択
  • τ = 0.5: 非常に典型的なトークンのみ(繰り返し傾向が増す)

実際の効果

サンプリング手法繰り返し多様性自然さ
Greedy高(最悪)低低
top-k (k=50)中中中
top-p (p=0.9)中中中
Locally Typical (τ=0.9)低高高

フレームワーク対応

  • Hugging Face Transformers: typical_p パラメータで設定
    model.generate(input_ids, typical_p=0.9, do_sample=True)
    
  • llama.cpp: --typical N フラグ(0.0〜1.0)
  • KoboldCPP: typical samplingとして実装
  • text-generation-webui: typical_p パラメータ

まとめ

Locally Typical Samplingは情報理論的根拠を持つ洗練されたサンプリング手法です。top-pの直接的な後継として、繰り返しを抑えながら多様で自然なテキスト生成を実現します。ローカルLLM実行環境(llama.cpp/KoboldCPP)で特に活用されており、創作文章や対話システムで効果的です。

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