Top-p(核取樣)
又稱:核取樣 · nucleus sampling · top_p · 累積機率取樣
另一種控制隨機性的方法:把候選 token 按機率由高到低排,只留累積機率達到 p(例如 0.9)的最小集合,尾巴上的選項直接淘汰,再從留下來的裡面抽。
你會在什麼時候遇到它
它幾乎總和 temperature 出現在同一份 API 文件、同一段範例程式碼裡,於是新手常兩個一起亂調,結果行為更難預測。搞懂它跟溫度的分工(一個改分佈形狀、一個截斷候選集合),你才知道該動哪一個 —— 以及為什麼多數時候只動一個就夠了。
打個比方
像只讓領跑者參加的抽獎:先按勝算排名,累積勝算湊到九成就關門,剩下的長尾選手直接取消資格,然後在入選者裡抽一個。天氣(溫度)改變每個人的勝算;這條線改變誰有資格入場 —— 機制不同,但互相影響。
最小範例
下一個 token 的候選與機率(示意):
「好」 0.50 累積 0.50
「不錯」 0.25 累積 0.75
「行」 0.15 累積 0.90 ← top_p=0.9 的界線落在這裡
「妙」 0.07 (淘汰)
「絕妙」 0.03 (淘汰)
本輪只從前三個裡抽。若模型這一步非常確定
(例如某個選項機率 0.98),核裡可能只剩一個候選。注意「核」的大小是動態的:模型越確定,留下的候選越少;越猶豫,留下的越多。top_p=1 等於不截斷(全部保留),多數 API 的預設就是它。
最常搞錯的地方
- 同時調 temperature 和 top_p 來「找手感」。溫度會改變每個候選的機率,進而改變哪些候選能進核 —— 兩個參數互相耦合,一起調等於在兩個會互相移動的旋鈕上瞎猜。慣例是一次只動一個:要嘛用溫度、top_p 保持 1;要嘛固定溫度、只調 top_p。
- 以為 top_p=0.9 是「保留前 90% 數量的候選」。是累積機率 90%,不是數量 90% —— 詞彙表可能有好幾萬個候選 token,核裡通常只剩幾個。