Nucleus Sampling
Il campionamento top-p (nucleus) estrae ogni token dal più piccolo insieme che copre la probabilità p, adattando il pool alla sicurezza del modello, a differenza di top-k.
Il campionamento del nucleo, detto anche campionamento top-p, è un metodo di decodifica che sceglie ogni token successivo dal più piccolo insieme di candidati la cui probabilità complessiva raggiunge una soglia p, quindi esegue il campionamento da quell’insieme. Ari Holtzman e i colleghi dell’Università di Washington e dell’Allen Institute for AI lo introdussero nel 2019 in The Curious Case of Neural Text Degeneration. Lavorando con GPT-2 Large, mostrarono che la decodifica greedy e la beam search fanno cadere i modelli linguistici in cicli banali e ripetitivi, mentre il campionamento dalla distribuzione completa produce testi incoerenti; mostrarono inoltre che tagliare la coda inaffidabile della distribuzione generava testi la cui perplessità e varietà erano le più vicine alla scrittura umana. Oggi top-p è un’impostazione standard nelle API di generazione del testo per quasi tutti i modelli linguistici di grandi dimensioni.
Come si sceglie il nucleus#
A ogni passaggio, il modello linguistico assegna un punteggio a ogni token del suo vocabolario e softmax trasforma quei punteggi in probabilità. Il campionamento del nucleo ordina quindi i token dal più al meno probabile, somma le loro probabilità in quell’ordine finché il totale progressivo raggiunge p, scarta tutto ciò che non rientra nell’insieme, rinormalizza i token rimanenti affinché la somma sia uno e ne estrae uno.
Considera quattro candidati con probabilità 0,50, 0,25, 0,15 e 0,10 e imposta p a 0,8. I primi due totalizzano 0,75, meno della soglia, quindi si aggiunge il terzo e il nucleus raggiunge 0,90. Il quarto token viene eliminato e i tre rimanenti vengono selezionati con probabilità di circa 0,56, 0,28 e 0,17 dopo la rinormalizzazione.
La caratteristica distintiva è che il nucleus si ridimensiona a ogni passaggio. Dopo "La capitale della Francia è", un token concentra quasi tutta la probabilità e il nucleus si restringe a una sola parola. All'inizio di una storia, la probabilità si distribuisce tra centinaia di parole plausibili e il nucleus si allarga per includerle. Un numero fisso di candidati non può adattarsi in questo modo.
La stessa procedura in PyTorch, per un passaggio di decodifica su un vocabolario di sei token:
import torch
# Probabilità dei token successivi per un vocabolario di 6 token
probs = torch.tensor([0.10, 0.40, 0.04, 0.25, 0.06, 0.15])
top_p = 0.75
# Ordina, poi conserva i token finché il totale cumulativo raggiunge top_p
sorted_probs, order = probs.sort(descending=True)
cumulative = sorted_probs.cumsum(dim=0)
keep = cumulative - sorted_probs < top_p # il token che supera top_p viene mantenuto
# Rinormalizza il nucleus ed estrai l'ID del token successivo
nucleus = sorted_probs * keep
next_token = order[torch.multinomial(nucleus / nucleus.sum(), num_samples=1)]
print(order[keep].tolist(), next_token.item())L'output elenca il nucleus, composto dai token con ID 1, 3 e 5, che insieme rappresentano lo 0,80 della probabilità, seguito dall'ID estratto. In questo passaggio non è possibile scegliere i token 0, 2 e 4; eseguendo di nuovo lo script, la selezione avviene tra i tre rimanenti, in proporzione alle rispettive probabilità.
Confronto tra top-p, decodifica greedy, top-k e temperatura#
- Decodifica greedy: seleziona sempre il token singolo più probabile. È deterministica e funziona per brevi risposte fattuali, ma le sequenze lunghe tendono a ripetersi.
- Campionamento top-k: conserva un numero fisso di candidati. Con k impostato a 50, anche in un passaggio sicuro il campionamento avviene tra 50 token, inclusi quelli senza senso; in un passaggio incerto, invece, può escludere opzioni ragionevoli. Top-p sostituisce il numero fisso con una quota fissa di probabilità.
- Temperatura: divide i punteggi del modello prima di applicare softmax. I valori inferiori a 1 rendono la distribuzione più concentrata sulle scelte principali, mentre quelli superiori a 1 la appiattiscono. Poiché top-p viene applicato dopo la temperatura, aumentare la temperatura allarga anche il nucleus.
- Il campionamento min-p mantiene ogni token la cui probabilità è almeno una frazione prestabilita della probabilità del token più probabile, perciò anche la soglia segue il livello di confidenza del modello. Hugging Face Transformers, vLLM e llama.cpp lo offrono insieme a top-p.
Poiché temperatura e top-p controllano entrambe la casualità, il consiglio standard è di modificare l’una o l’altro, anziché entrambi contemporaneamente. Molti motori di inferenza consentono anche di usare insieme top-k e top-p, con top-k che funge da limite massimo rigido al numero di candidati.
Scegliere un valore top-p#
Un valore top-p pari a 1.0 disattiva il filtro e i valori predefiniti più comuni sono compresi tra 0.9 e 1.0. Top-p rimodella soltanto le probabilità proprie del modello, quindi l’accuratezza fattuale dipende dal radicamento del prompt, per esempio tramite la generazione aumentata dal recupero, che riduce le allucinazioni fornendo al modello i fatti necessari. Valori più alti aggiungono varietà per il brainstorming, i dialoghi dei chatbot e la scrittura creativa. Valori più bassi, come 0.5, rendono i risultati più prevedibili e ripetitivi, il che è adatto all’estrazione dei dati, ai prompt di classificazione e al codice; la decodifica vincolata si spinge oltre, mascherando ogni token che violerebbe un formato obbligatorio.
La stessa impostazione regola la generazione linguistica nelle pipeline di visione. Quando un rilevamento di Ultralytics YOLO26 attiva una descrizione della scena generata da un modello visione-linguaggio, l’interfaccia LLM di Ultralytics passa direttamente all’API del fornitore gli argomenti della richiesta, come top_p, così un valore basso, ad esempio 0.5, mantiene simili le descrizioni di fotogrammi simili.










