Top-k Sampling : limiter les choix d’un LLM aux tokens les plus probables
- Categorie
- Parametre d’echantillonnage
- Plage
- 1 a taille du vocabulaire (typiquement 1 a 100)
- Valeur courante
- 40 a 50
- Interagit avec
- Temperature, Top-p
- Disponibilite
- Google (Gemini), modeles open source. Absent chez OpenAI.
Comment fonctionne le top-k ?
Le top-k est la methode d’echantillonnage la plus simple a comprendre. A chaque etape de generation, le LLM calcule une probabilite pour chaque token de son vocabulaire. Le top-k ne garde que les K tokens ayant les probabilites les plus elevees et met a zero la probabilite de tous les autres. Le modele choisit ensuite parmi ces K candidats, pondere par leurs probabilites relatives.
Avec k = 1, le modele choisit toujours le token le plus probable (comportement greedy, equivalent a temperature = 0). Avec k = 100, le modele peut choisir parmi 100 tokens differents, offrant une grande diversite. Avec k = taille du vocabulaire, aucun filtrage n’est applique.
Exemple : pour completer « Le meilleur langage de programmation pour l’IA est … », supposons que le modele attribue les probabilites suivantes : « Python » (45 %), « R » (12 %), « Julia » (8 %), « JavaScript » (6 %), « Java » (5 %), « C++ » (4 %), etc. Avec k = 3, seuls « Python », « R » et « Julia » sont candidats. Avec k = 10, les 10 premiers tokens sont accessibles.
Les limites du top-k
Le probleme fondamental du top-k est qu’il utilise un seuil fixe, quel que soit le contexte. Cette rigidite pose deux problemes :
Trop permissif quand le modele est certain. Si le modele est a 95 % sur de sa prediction, un top-k de 50 inclut 49 tokens quasi inutiles, dont certains potentiellement absurdes. Le modele risque de selectionner un token improbable et generer une hallucination.
Trop restrictif quand le modele hesite. Si 30 tokens ont des probabilites comparables (8 % chacun dans un contexte creatif), un top-k de 10 exclut arbitrairement 20 candidats tout aussi valides. Le modele perd de la diversite sans raison.
C’est exactement ce probleme que le top-p (nucleus sampling) resout en adaptant dynamiquement le nombre de candidats selon la distribution de probabilites.
Top-k vs Top-p : comparaison
| Critere | Top-k | Top-p |
|---|---|---|
| Mecanisme | Garde exactement K tokens | Garde les tokens atteignant un seuil cumulatif P |
| Adaptabilite | Fixe (meme K partout) | Adaptatif (nombre variable) |
| Simplicite | Tres intuitif | Legerement plus complexe |
| Risque de tokens aberrants | Possible si K trop grand | Elimine naturellement les tokens improbables |
| Support API | Google, modeles open source | Tous les fournisseurs |
| Recommandation | Preferer top-p si disponible | Standard de l’industrie |
Disponibilite du top-k selon les fournisseurs
OpenAI ne propose pas le parametre top-k dans ses API (GPT-4o, GPT-4o mini, o1). Seuls la temperature et le top-p sont disponibles. OpenAI considere que le top-p est suffisant et plus performant que le top-k.
Anthropic expose le top-k dans son API Claude. Il peut etre combine avec la temperature. Le parametre se nomme « top_k » et accepte un entier positif.
Google propose le top-k dans l’API Gemini via le parametre « topK ». La valeur par defaut depend du modele (generalement 40).
Modeles open source. Tous les frameworks de generation (Hugging Face Transformers, vLLM, llama.cpp, Ollama) supportent le top-k. C’est un parametre standard dans les configurations de generation.
# Anthropic API avec top-k
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
top_k=40, # Limiter aux 40 tokens les plus probables
temperature=0.7,
messages=[{"role": "user", "content": "Propose un nom pour une startup IA"}]
)
# Hugging Face Transformers avec top-k
from transformers import pipeline
generator = pipeline("text-generation", model="meta-llama/Llama-3.1-8B-Instruct")
output = generator(
"Les avantages de l'IA en entreprise sont",
max_new_tokens=200,
top_k=50,
temperature=0.8,
do_sample=True
)
Combiner top-k avec d’autres parametres
Le top-k peut etre combine avec la temperature et le top-p. L’ordre d’application est generalement :
1. La temperature modifie la distribution de probabilites (aplatit ou aiguise). 2. Le top-k filtre les tokens et ne garde que les K meilleurs. 3. Le top-p filtre encore parmi les K restants en ne gardant que ceux atteignant le seuil P. 4. Le modele echantillonne parmi les tokens survivants.
Cette combinaison est surtout utilisee avec les modeles open source ou le controle fin de la generation est important (recherche, experimentation). En production avec les API commerciales, la plupart des developpeurs utilisent uniquement la temperature ou le top-p.
Valeurs recommandees
k = 1 : Greedy decoding. Toujours le token le plus probable. Equivalent a temperature = 0. Utilise pour l’extraction structuree et le code.
k = 10-20 : Restrictif. Peu de diversite mais haute qualite. Bon pour les taches factuelles ou vous voulez une legere variation de formulation.
k = 40-50 : Standard. L’equilibre classique entre diversite et coherence. C’est la valeur par defaut de la plupart des modeles open source.
k = 100+ : Permissif. Grande diversite, risque de tokens inattendus. Reserve a l’ecriture creative et au brainstorming.
Contexte historique
Le top-k sampling a ete popularise par le papier de Fan et al. (2018) « Hierarchical Neural Story Generation ». Les auteurs ont montre que limiter le nombre de tokens candidats ameliorait considerablement la coherence des textes generes par rapport a l’echantillonnage sans filtrage.
Le top-k a ete la methode standard pendant plusieurs annees, jusqu’a ce que le nucleus sampling (top-p) soit introduit en 2020 par Holtzman et al. Le top-p a progressivement supplante le top-k comme methode recommandee, grace a son adaptabilite contextuelle. Le top-k reste neanmoins largement utilise dans les modeles open source et comme complement au top-p.
FAQ
Faut-il utiliser top-k ou top-p ?
Le top-p est generalement preferable car il s’adapte au contexte. Le top-k reste utile pour sa simplicite et sa previsibilite. Si votre API le propose (Google, Anthropic), le top-p est le meilleur choix par defaut. Si vous travaillez avec des modeles open source, combiner top-k (40-50) avec top-p (0,9) offre un bon equilibre.
Pourquoi OpenAI ne propose pas le top-k ?
OpenAI considere que le top-p est suffisant et plus efficace. Le top-k etant un cas particulier (moins adaptatif) du filtrage par probabilite, OpenAI a choisi de simplifier son API en ne proposant que la temperature et le top-p. En pratique, cette decision n’est pas limitante pour la grande majorite des cas d’usage.
Quel impact du top-k sur la vitesse de generation ?
Negligeable. Le top-k filtre simplement les tokens apres le calcul des probabilites, ce qui est une operation quasi instantanee. La generation de texte est dominee par le calcul des logits dans le transformer, pas par l’echantillonnage. Reduire k ne rend pas la generation plus rapide.
Peut-on combiner top-k, top-p et temperature ?
Oui, techniquement. Les trois parametres agissent a des etapes differentes du pipeline d’echantillonnage. La temperature modifie les probabilites, le top-k filtre par rang, le top-p filtre par probabilite cumulee. En pratique, combiner les trois rend le comportement difficile a predire. Commencez par ajuster un seul parametre et n’en combinez deux que si necessaire.
Quelle valeur de top-k pour Claude ?
Anthropic ne recommande pas de valeur specifique pour Claude. En pratique, top-k = 40 avec temperature = 0,7 est un bon point de depart pour les taches generales. Pour les taches factuelles, reduisez a top-k = 10 et temperature = 0,1. Pour la creativite, augmentez a top-k = 100 et temperature = 0,9. Testez sur votre cas d’usage specifique.