Chapitre 07 · Génération · 7 min

Choisir le mot suivant

Temperature, top-k, top-p. L'art de transformer une distribution de probabilités en texte.

La distribution est calculée. Et après ?

À ce stade du livre, le modèle sait calculer une distribution de probabilités sur le prochain token. Pour générer du texte, il faut maintenant en choisir un. C'est l'étape de sampling (échantillonnage).

On a déjà entrevu ce mécanisme au chapitre 01. Le moment est venu d'y revenir avec attention : c'est ce qui distingue un modèle prudent d'un modèle créatif, un assistant fiable d'un perroquet répétitif.

Pourquoi pas toujours le plus probable ?

La stratégie la plus simple — greedy decoding — consiste à toujours prendre le token de probabilité maximale. Rapide, déterministe, reproductible.

Et pourtant, presque jamais utilisée seule. Pourquoi ?

Parce que le greedy décoding produit du texte étrangement plat. Il s'enferme dans des boucles ("très très très intéressant intéressant intéressant…"). Il choisit toujours le mot le plus convenu. Il génère des phrases techniquement correctes, mais sans relief. Le modèle a été entraîné sur du texte humain, qui contient toujours une part d'imprévisibilité — et cette imprévisibilité doit se retrouver dans la génération.

D'où l'échantillonnage stochastique : on tire un token au hasard selon la distribution. Plus un token est probable, plus il a de chances d'être choisi — mais les autres ont aussi une chance.

Trois leviers

Cet échantillonnage stochastique brut serait trop bruité. On applique typiquement trois filtres avant de tirer :

Température

La température T divise les logits avant le softmax. C'est le réglage le plus puissant.

  • T = 1.0 — distribution telle qu'elle sort du modèle (référence)
  • T < 1.0 — distribution plus piquée : les hauts deviennent plus hauts, les bas plus bas. Le modèle devient plus prévisible.
  • T → 0 — équivaut au greedy decoding (un seul token possible).
  • T > 1.0 — distribution aplatie : les options peu probables remontent. Le modèle devient créatif, voire bizarre.
  • T → ∞ — uniforme, le modèle tire au hasard total.

La température est un curseur entre prévisibilité et imagination.

Top-k

Plutôt qu'autoriser tous les tokens du vocabulaire (50 000+), on garde les k plus probables et on remet à zéro le reste, puis on renormalise. k = 40 est une valeur classique pour la créativité, k = 1 ramène au greedy.

Avantage : élimine d'office les tokens absurdes (ceux à 0,0001%) qui pourraient être tirés par chance. Inconvénient : la valeur de k optimale dépend de chaque étape — parfois 5 candidats suffisent, parfois 100 sont tous plausibles.

Top-p (nucleus sampling)

Plus malin que top-k. On garde le plus petit ensemble dont la masse cumulée dépasse p, puis on renormalise.

  • À une étape où le modèle hésite entre 30 options proches → top-p garde toutes les options dont la somme atteint p.
  • À une étape où le modèle est sûr de lui à 95% → top-p garde un seul token.

En pratique, top-p ≈ 0.9 est devenu le réglage par défaut des LLMs modernes. Il s'adapte tout seul à la confiance du modèle.

Manipule à nouveau

On a déjà vu cette visualisation au chapitre 01 — on la rejoue ici parce que c'est exactement le sujet :

Joue avec la température : à 0, le modèle est déterministe et répétitif ; à 1.5, il devient créatif jusqu'à devenir incohérent. Top-k et top-p coupent la traîne des candidats improbables, sans toucher aux probables.

Cette fois, observe :

  • Sur Capitale, le modèle est tellement sûr de lui (10.0 vs 5.0 pour le suivant) qu'il faut une température extrêmement haute (>1.5) pour qu'il sorte autre chose que Paris. C'est typique des prompts où la réponse est connue.
  • Sur Le ciel au deuxième pas, plusieurs continuations sont sémantiquement plausibles. Avec temperature = 1.5, on peut obtenir couleur ou mer au lieu de lumière. Le sens reste correct, mais le texte devient moins prévisible.
  • À top-k = 1, n'importe quel autre réglage devient inutile : on est en greedy.
  • À top-p = 0.5 sur le prompt Capitale, seul Paris survit (parce qu'il atteint déjà 50% à lui seul).

Quelques réglages culturels

Les réglages typiques selon le cas d'usage :

CasTemperatureTop-p
Code, données structurées0.0–0.21.0
Réponse factuelle0.3–0.50.9
Conversation générique0.70.9
Brainstorming, écriture créative0.9–1.20.95
Génération de variations1.2–1.50.95

Ce ne sont pas des règles dures. Mais c'est l'ordre de grandeur que tu retrouveras dans la plupart des produits qui utilisent un LLM.

Trois autres leviers à connaître

Au-delà de température / top-k / top-p, quelques paramètres reviennent partout dans les API.

Repetition penalty (ou frequency penalty / presence penalty chez OpenAI). Pénalise les tokens qui sont déjà apparus dans la sortie. Utile pour casser les boucles répétitives sans avoir à monter la température. Valeur typique : 1.05–1.2.

Stop sequences. Une liste de chaînes de caractères qui, si elles apparaissent dans la sortie, arrêtent la génération immédiatement. Indispensable pour les usages structurés : dans un dialogue formaté, on stoppe sur <|im_end|> ou \n\nUser: pour empêcher le modèle de continuer la conversation tout seul.

Beam search. Au lieu d'échantillonner stochastiquement, on garde simultanément les k meilleures séquences partielles à chaque pas, et on choisit celle qui maximise la probabilité globale en fin de génération. Le résultat est plus "lisse" mais souvent moins naturel. Utilisé en traduction automatique et reconnaissance vocale, beaucoup moins en génération créative.

Le déterminisme illusoire

Une dernière subtilité. Même avec temperature = 0, deux appels au même modèle peuvent donner des résultats différents en pratique :

  • Quantification non déterministe (les calculs en INT8/FP8 ont une marge d'erreur).
  • Batching dynamique côté serveur (selon les autres requêtes, les ordres d'opérations flottants changent).
  • Versions du modèle qui changent silencieusement chez le fournisseur.

Si tu écris des tests qui dépendent de la sortie exacte d'un LLM, tu vas souffrir.

La suite

À ce stade, tu sais comment un LLM :

  • découpe le texte en tokens,
  • les transforme en vecteurs,
  • les fait s'entre-regarder via l'attention,
  • empile des blocs Transformer pour raffiner la représentation,
  • prédit une distribution sur le prochain token,
  • en tire un avec une stratégie d'échantillonnage.

Et pourtant, ce qu'on appelle "un assistant" — quelque chose comme ChatGPT ou Claude — ce n'est pas seulement ça. Un modèle de base à ce stade serait un complétiseur de texte, pas un assistant. Comment passe-t-on de l'un à l'autre ? C'est le sujet du dernier chapitre : l'alignement.

Mis à jour le

Choisir le mot suivant : temperature, top-k, top-p · Step by Token