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)で特に活用されており、創作文章や対話システムで効果的です。