Top-p: anna epävarmuuden määrätä ehdokkaiden määrä
Top-p eli ydinotanta (nucleus sampling) säilyttää pienimmän joukon todennäköisimpiä tokeneita, jonka kumulatiivinen todennäköisyys saavuttaa valitun rajan. Joukko normalisoidaan uudelleen ennen arvontaa.
Toisin kuin top-k:ssa, ehdokkaiden määrä muuttuu jakauman mukana. Keskittynyt ennuste tarvitsee vähän ehdokkaita ja tasaisempi useampia saman todennäköisyysmassan kattamiseen.
Säilytä myös rajan ylittävä token
NumPy-toteutus järjestää todennäköisyydet ja säilyttää myös rajan ylittävän tokenin, ei vain kokonaan sen alle jääviä.
import numpy as np
def nucleus(probabilities, threshold):
order = np.argsort(-probabilities)
cumulative = np.cumsum(probabilities[order])
count = min(len(order), np.searchsorted(cumulative, threshold) + 1)
keep = order[:count]
filtered = np.zeros_like(probabilities)
filtered[keep] = probabilities[keep]
return filtered / filtered.sum()
peaked = nucleus(np.array([.75, .15, .05, .03, .02]), .8)
flat = nucleus(np.array([.2, .2, .2, .2, .2]), .8)
Rajalla p=0,8 keskittynyt jakauma säilyttää kaksi tokenia ja tasainen neljä. Raja koskee kumulatiivista todennäköisyyttä, ei yksittäisen tokenin arvoa.
Lämpötila voi muuttaa jakaumaa ennen suodatusta, joten sama p ei välttämättä säilytä samoja tokeneita eri lämpötiloilla. Valinta ohjaa tokeniotannan vaihtelua eikä aseta vastauksen totuuden todennäköisyyttä.