Text Generation
La génération de texte est le processus par lequel les modèles de langage écrivent en prédisant un jeton à la fois, puis en choisissant chacun par décodage glouton, recherche en faisceau ou échantillonnage.
La génération de texte est la production automatique de langage écrit par un modèle, qu’il s’agisse d’une réponse en une ligne, d’un rapport complet ou d’un programme. Aujourd’hui, elle repose principalement sur des grands modèles de langage (LLM) fonctionnant de façon autorégressive : à partir d’une invite, le modèle calcule une probabilité pour chaque jeton de son vocabulaire, en sélectionne un, l’ajoute à la séquence et recommence jusqu’à ce qu’il décide de s’arrêter. Cette même boucle alimente les assistants conversationnels, la complétion de code, la traduction automatique et le résumé de texte. Les systèmes antérieurs remplissaient des modèles ou effectuaient des échantillonnages à partir de modèles de n-grammes et de réseaux de neurones récurrents ; le Transformer a rendu possibles des textes longs et cohérents, notamment à partir de GPT-2 en 2019.
Fonctionnement de la génération autorégressive#
La tokenisation convertit l’invite en ID de jetons, que le modèle traite en parallèle lors d’une seule passe de préremplissage, en stockant les clés et les valeurs d’attention de chaque jeton dans un cache KV. À chaque étape de décodage, le modèle ne traite ensuite que le dernier jeton, consulte le cache et produit des logits, c’est-à-dire un score brut par élément du vocabulaire, que le softmax transforme en probabilités. Une stratégie de décodage choisit le jeton suivant, qui est transmis à l’utilisateur et ajouté à la séquence. La génération s’arrête à un jeton de fin de séquence, une chaîne d’arrêt ou une limite de jetons : la longueur de sortie est donc déterminée pendant la génération :
Le préremplissage mobilise fortement le calcul, tandis que le décodage est limité par la bande passante mémoire ; les moteurs de service planifient donc soigneusement les deux, par exemple avec le préremplissage par blocs. La diffusion en continu permet aux applications d’afficher le texte au fur et à mesure de sa production : l’interface LLM d’Ultralytics transmet stream=True au SDK OpenAI, de sorte qu’une application YOLO26 peut afficher, jeton après jeton, la description d’une scène détectée par le modèle, à mesure que chaque événement response.output_text.delta arrive.
Stratégies de décodage#
La stratégie de décodage façonne la sortie autant que le modèle lui-même. Le décodage glouton choisit toujours le jeton le plus probable ; il est déterministe, mais tend à se répéter. La recherche en faisceau conserve les k séquences partielles les plus probables et renvoie la meilleure séquence complète, ce qui convient aux tâches ayant une réponse correcte unique, comme la traduction. L’échantillonnage tire un jeton de la distribution, généralement après l’avoir remaniée : la température divise les logits avant le softmax, l’échantillonnage top-k ne conserve que les k jetons les plus probables, et l’échantillonnage par noyau (top-p), proposé dans The Curious Case of Neural Text Degeneration par Holtzman et ses coauteurs en 2019, conserve le plus petit ensemble de jetons dont les probabilités totalisent p. Un vocabulaire de cinq jetons dans PyTorch illustre ces deux effets :
import torch
# Next-token logits over a five-word vocabulary after the prompt "I took the"
vocab = ["bus", "train", "car", "stairs", "banana"]
logits = torch.tensor([3.0, 2.4, 1.8, 0.6, -2.0])
# Temperature divides the logits: low values sharpen the distribution, high values flatten it
for temperature in [0.5, 1.0, 1.5]:
probs = torch.softmax(logits / temperature, dim=-1)
print(f"T={temperature}:", ", ".join(f"{w} {p:.2f}" for w, p in zip(vocab, probs)))
# Top-p (nucleus) sampling keeps the smallest set of tokens whose probabilities reach p
probs, order = torch.softmax(logits, dim=-1).sort(descending=True)
keep = probs.cumsum(dim=-1) - probs < 0.9
print("Top-p 0.9 keeps:", [vocab[i] for i in order[keep]])
# Sample from the renormalized nucleus
torch.manual_seed(0)
picks = torch.multinomial(probs[keep] / probs[keep].sum(), num_samples=10, replacement=True)
print("Samples:", [vocab[order[i]] for i in picks])Avec une température de 0,5, « bus » reçoit une probabilité de 0,71 ; à 1,5, elle baisse à 0,42 et « banane » passe de 0,00 à 0,02. Top-p 0,9 conserve « bus », « train » et « voiture », qui totalisent 0,95 de probabilité : « escaliers » et « banane » ne peuvent donc jamais être échantillonnés, et dix tirages produisent un mélange varié des trois jetons retenus. D’autres paramètres agissent sur les mêmes logits : les pénalités de répétition réduisent les scores des jetons déjà utilisés, et le décodage contraint masque chaque jeton qui enfreindrait une grammaire ou un schéma JSON, ce qui permet aux API de garantir des sorties structurées. Le décodage spéculatif accélère la génération en laissant un petit modèle brouillon proposer plusieurs jetons que le grand modèle vérifie en une seule passe.
La génération de texte et les notions apparentées#
- Modélisation du langage : Apprendre la probabilité du jeton suivant, objectif d’entraînement qui rend la génération possible. La génération correspond à l’utilisation de ce modèle au moment de l’inférence.
- Modèles séquence-à-séquence : Des modèles encodeur-décodeur qui génèrent un texte de sortie à partir d’une entrée distincte, comme dans la traduction. Les LLM à décodeur seul réalisent les mêmes tâches en poursuivant une invite.
- Modèles de langage à diffusion : Génèrent un passage entier en affinant toutes les positions en parallèle au fil de plusieurs étapes de débruitage, plutôt qu’un jeton à la fois.
- Texte vers image : Prend du texte en entrée et produit des pixels.
Qualité et risques#
Le texte généré est fluide, qu’il soit correct ou non ; les hallucinations constituent donc le principal risque pour les tâches factuelles. La génération augmentée par récupération (RAG) les réduit en ajoutant des documents sources à l’invite. Une température faible rend les réponses plus reproductibles ; une température élevée apporte de la variété, mais augmente aussi le risque de sélectionner un jeton improbable et incorrect. Il est également difficile de repérer les textes rédigés par une machine, d’où les travaux sur le filigranage par IA. Dans l’article de 2020 consacré à GPT-3, les personnes chargées de distinguer des articles d’actualité de 200 mots rédigés par le modèle de 175 milliards de paramètres de ceux écrits par des humains n’ont répondu correctement que dans 52 % des cas.










