AI・機械学習
上級

Top-pサンプリング(Nucleus Sampling)(トップピーサンプリング)

LLMのデコーディングにおいて、確率の高い順にトークンを累積し、累積確率がp(核)に達するまでのトークン集合のみを候補としてサンプリングする手法。Holtzman et al. (2020)が提案し、現在のLLM APIの標準デコーディング手法となっている。

0 回閲覧
0 いいね

Top-pサンプリング(Nucleus Sampling)とは

Top-pサンプリング(Nucleus Sampling)とは、言語モデルのデコーディングにおいて、トークンを確率降順に並べ、累積確率が閾値p(核 = nucleus)に達するまでの最小トークン集合を候補として残し、その集合からサンプリングする手法である。Holtzman et al.の論文「The Curious Case of Neural Text Degeneration」(2020)で提案された。

Top-pの仕組み

Top-pの処理フローは以下の通りである。(1) softmax後の確率分布を降順にソート、(2) 上位から累積確率を計算、(3) 累積確率がpを超えた時点で以降のトークンを全て除外、(4) 残ったトークン集合(nucleus)を再正規化、(5) 再正規化した分布からサンプリング。

例: 語彙を確率降順に並べた結果
  猫: 0.35, 犬: 0.25, 鳥: 0.20, 魚: 0.15, 虫: 0.05
p=0.8の場合:
  累積: 猫(0.35) → 犬(0.60) → 鳥(0.80) ← ここでp到達
  nucleus = {猫, 犬, 鳥}(3トークン)
  魚と虫は除外

Top-kとの本質的な違い

Top-kは常に固定k個のトークンを候補に残すが、Top-pは確率分布の形状に応じて候補数が動的に変化する。これがTop-pの最大の優位性である。

コンテキスト確率分布の形状Top-k=40の候補数Top-p=0.9の候補数
「東京は日本の」鋭く集中40(多すぎる)2-3(適切)
「好きな食べ物は」広く分散40(少なすぎる場合あり)50-100(適切)
「2+2=」極度に集中40(大幅に多すぎる)1(適切)

この動的適応性により、Top-pはコンテキストを問わず安定した出力品質を実現する。

主要LLM APIでのデフォルト値

APIデフォルトTop-p備考
OpenAI GPT-4/4o1.0Top-pフィルタリングなし(全トークン候補)
Anthropic Claude1.0Top-pは補助的に使用
Google Gemini0.95Top-kとの併用がデフォルト
Meta Llama 30.9Metaの推奨値

OpenAIとAnthropicのデフォルトTop-p=1.0は、Top-pフィルタリングを事実上無効にしている。これはTemperatureによる制御を主軸とし、Top-pは必要に応じてユーザーが調整する設計思想を反映している。

pの値と出力品質の関係

p=0.9〜0.95が多くのタスクで良好な結果を出す汎用的な設定である。p=1.0はフィルタリングなし(全トークンが候補)、p=0はGreedy Decodingに相当する。

pを下げすぎると出力が単調になり、上げすぎると低確率の不自然なトークンが混入するリスクが高まる。実務上はp=0.9を起点として、タスクの性質に応じて微調整するアプローチが効率的である。

FAQ

Q1: Top-p=1.0だとサンプリングの意味がない?

Top-p=1.0はTop-pフィルタリングを無効化するだけであり、Temperatureによるサンプリングは引き続き行われる。OpenAI APIのデフォルト設定(Temperature=1.0, Top-p=1.0)では、softmax後の元の確率分布からそのままサンプリングが実行される。

Q2: Top-pとMin-pの違いは?

Min-pはMikolov (2023)が提案した手法で、最大確率トークンの確率にmin_p倍率を掛けた値を閾値とし、それ未満のトークンを除外する。Top-pが累積確率ベースであるのに対し、Min-pは最大確率からの相対閾値で判定する点が異なる。llama.cppやvLLMで実装が進んでいる。

Q3: Top-pはバッチ推論でも使える?

使える。バッチ内の各シーケンスごとに独立してTop-pフィルタリングが適用される。ただし候補数がシーケンスごとに異なるため、GPU上での並列処理効率はTop-k(候補数固定)よりやや低下する場合がある。