Nucleus Sampling
L’échantillonnage top-p (noyau) tire chaque jeton dans le plus petit ensemble couvrant une probabilité p, de sorte que l’ensemble varie selon le niveau de confiance du modèle, contrairement au top-k.
L'échantillonnage par noyau, également appelé échantillonnage top-p, est une méthode de décodage qui choisit chaque jeton suivant parmi le plus petit ensemble de candidats dont la probabilité combinée atteint un seuil p, puis effectue un échantillonnage dans cet ensemble. Ari Holtzman et ses collègues de l'Université de Washington et de l'Allen Institute for AI l'ont présenté en 2019 dans The Curious Case of Neural Text Degeneration. En travaillant avec GPT-2 Large, ils ont montré que le décodage glouton et la recherche par faisceau entraînent les modèles de langage dans des boucles fades et répétitives, tandis que l'échantillonnage dans la distribution complète produit un texte incohérent ; tronquer la queue peu fiable de la distribution générait un texte dont la perplexité et la variété se rapprochaient le plus de l'écriture humaine. Top-p est désormais un paramètre standard des API de génération de texte pour presque tous les grands modèles de langage.
Comment choisir le noyau#
À chaque étape, le modèle de langage attribue un score à chaque jeton de son vocabulaire, et softmax transforme ces scores en probabilités. L'échantillonnage par noyau trie ensuite les jetons du plus probable au moins probable, additionne leurs probabilités dans cet ordre jusqu'à ce que le total cumulé atteigne p, élimine tous les jetons en dehors de cet ensemble, renormalise les jetons restants pour que leur somme soit égale à un, puis échantillonne un seul jeton.
Prenons quatre candidats de probabilités 0,50, 0,25, 0,15 et 0,10, avec p fixé à 0,8. Les deux premiers totalisent 0,75, ce qui est inférieur au seuil ; le troisième s'ajoute donc et le noyau couvre 0,90. Le quatrième jeton est éliminé et les trois jetons restants sont échantillonnés avec des probabilités d'environ 0,56, 0,28 et 0,17 après renormalisation.
La caractéristique essentielle est que le noyau se redimensionne à chaque étape. Après « La capitale de la France est », un jeton concentre presque toute la probabilité et le noyau se réduit à un seul mot. Au début d'une histoire, la probabilité se répartit entre des centaines de mots plausibles et le noyau s'élargit pour les inclure. Un nombre fixe de candidats ne peut pas s'adapter ainsi.
Voici la même procédure dans PyTorch, pour une étape de décodage sur un vocabulaire de six jetons :
import torch
# Probabilités des prochains jetons pour un vocabulaire de 6 jetons
probs = torch.tensor([0.10, 0.40, 0.04, 0.25, 0.06, 0.15])
top_p = 0.75
# Trie, puis conserve les jetons jusqu'à ce que le total cumulé atteigne top_p
sorted_probs, order = probs.sort(descending=True)
cumulative = sorted_probs.cumsum(dim=0)
keep = cumulative - sorted_probs < top_p # le jeton qui fait dépasser top_p est conservé
# Renormalise le noyau et échantillonne l'ID du prochain jeton
nucleus = sorted_probs * keep
next_token = order[torch.multinomial(nucleus / nucleus.sum(), num_samples=1)]
print(order[keep].tolist(), next_token.item())La sortie liste le noyau, constitué des ID de jetons 1, 3 et 5, qui totalisent 0,80 de la probabilité, puis l'ID échantillonné. Les jetons 0, 2 et 4 ne peuvent pas être choisis à cette étape ; si tu relances le script, le choix se fera parmi les trois jetons restants, proportionnellement à leurs probabilités.
Top-p, décodage glouton, top-k et température#
- Le décodage glouton choisit toujours le jeton le plus probable. Il est déterministe et convient aux réponses factuelles courtes, mais les sorties longues ont tendance à tourner en boucle.
- L'échantillonnage top-k conserve un nombre fixe de candidats. Avec k fixé à 50, une étape très confiante échantillonne tout de même parmi 50 jetons, y compris des propositions absurdes, tandis qu'une étape incertaine peut éliminer des options raisonnables. Top-p remplace le nombre fixe par une proportion fixe de probabilité.
- La température divise les scores du modèle avant softmax. Les valeurs inférieures à 1 accentuent la distribution autour des choix les plus probables, tandis que les valeurs supérieures à 1 l'aplatissent. Comme top-p est appliqué après la température, l'augmenter élargit également le noyau.
- L'échantillonnage min-p conserve chaque jeton dont la probabilité atteint au moins une fraction définie de celle du jeton le plus probable ; son seuil s'adapte donc lui aussi au niveau de confiance du modèle. Hugging Face Transformers, vLLM et llama.cpp le proposent en complément de top-p.
Comme la température et top-p contrôlent tous deux le caractère aléatoire, la recommandation habituelle consiste à régler l'un ou l'autre, plutôt que les deux simultanément. De nombreux moteurs d'inférence permettent aussi d'utiliser top-k et top-p ensemble, top-k imposant alors une limite stricte au nombre de candidats.
Choisir une valeur top-p#
Une valeur top-p de 1,0 désactive le filtre, et les valeurs par défaut courantes se situent entre 0,9 et 1,0. Top-p ne fait que remodeler les probabilités propres au modèle ; l'exactitude factuelle dépend donc de l'ancrage de l'invite, par exemple avec la génération augmentée par récupération, qui réduit les hallucinations en fournissant au modèle les faits nécessaires. Des valeurs plus élevées apportent de la variété pour le brainstorming, les dialogues de chatbot et l'écriture créative. Des valeurs plus basses, comme 0,5, rendent les résultats plus prévisibles et répétitifs, ce qui convient à l'extraction de données, aux invites de classification et au code ; le décodage contraint va plus loin en masquant chaque jeton qui enfreindrait un format obligatoire.
Le même paramètre régit la génération de texte dans les pipelines de vision. Lorsqu'une détection Ultralytics YOLO26 déclenche une description de scène produite par un modèle vision-langage, l'interface LLM d'Ultralytics transmet directement à l'API du fournisseur les arguments de la requête, comme top_p, de sorte qu'une valeur basse, telle que 0,5, harmonise la formulation des descriptions d'images similaires.










