Top-pとは
Nucleus Sampling / 核サンプリング
累積確率が閾値 p に達するまでの上位トークン群だけからサンプリングする、核サンプリング手法
ひとことで言うと
確率の高い候補だけを残してAIに答えを選ばせる、出力の絞り込み方法。
概要
Top-p(核サンプリング, Nucleus Sampling)とは、LLMが次のトークンを生成する際に、確率の高い順にトークンを並べて累積確率がしきい値 p に達するまでの「核(nucleus)」となる上位トークン群だけを候補に絞り、その中から確率に応じてサンプリングする手法。 固定数の候補に絞るTop-kと異なり確率分布の形状に応じて候補数が動的に変化する点が特徴で、モデルが自信を持っている(確率が特定のトークンに集中している)場面では候補が少なく、迷っている(確率が分散している)場面では候補が多くなる。 一般的にはTemperatureと組み合わせて使われ、0.9〜0.95程度の値がよく用いられる。
背景
貪欲法(常に最も確率の高いトークンを選ぶ)は出力が単調で繰り返しに陥りやすく、単純にランダムサンプリングすると確率の低い不自然なトークンも選ばれてしまう。 Top-pは、この両極端の中間として、分布の形状に応じて妥当な範囲の候補からサンプリングすることで、多様性と品質のバランスを取るために考案された。
歴史
2019年: Holtzmanらが論文「The Curious Case of Neural Text Degeneration」でNucleus Samplingとして提案し、Top-kサンプリングより自然なテキスト生成が可能であることを示す。
アーキテクチャ
各トークン候補を確率の高い順に並べ、累積確率がしきい値 p 以上になった時点までのトークン集合を候補とする。 候補集合内で確率を再正規化し、その分布に従ってサンプリングする。
コード例
top_pを指定してAPIを呼び出す
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "新製品のキャッチコピーを1つ考えてください。"}],
top_p=0.9, # 累積確率90%までの上位トークン群からサンプリング
)
print(response.choices[0].message.content)利点
欠点
- pの値の最適値はタスクや期待する出力の性質によって異なる
- Temperature等の他パラメータと併用すると相互作用が複雑になり、挙動を予測しにくくなることがある
- 確率分布が非常に平坦な場面では、候補数が想定より大きく広がってしまうことがある
比較
- Top-k — Top-pは累積確率に基づき動的に候補数を決めるのに対し、Top-kは固定数の候補に絞る
- Temperature — TemperatureとTop-pはどちらも出力のランダム性を調整するサンプリングパラメータで、しばしば併用される
関連用語
よくある質問
Top-pとTop-kはどちらを使うべき?
併用されることも多い。 Top-pは確率分布の形状に応じて柔軟に候補数を絞れるため、単独で使う場合はTop-pの方が一般的に好まれる傾向がある。
pの値はどれくらいが目安?
0.9〜0.95程度がよく使われる目安とされるが、最適値はタスクやモデルによって異なるため、実験しながら調整するのが一般的。
参考文献
- Research PaperThe Curious Case of Neural Text Degeneration