GPT : Guide Complet — Generative Pre-trained Transformer
Résumé
GPT (Generative Pre-trained Transformer) est une famille de modèles de langage développée par OpenAI, fondée sur l’architecture Transformer decoder-only. Depuis la publication de GPT-1 en 2018, cette famille n’a cessé d’évoluer, atteignant avec GPT-4 des capacités de raisonnement et de génération de texte d’une sophistication remarquable. Contrairement à BERT qui utilise une approche bidirectionnelle, GPT apprend à prédire le mot suivant dans une séquence à travers l’apprentissage auto-supervisé. Ce guide explore en profondeur les principes mathématiques, l’implémentation pratique et les cas d’usage de cette architecture révolutionnaire qui a transformé le traitement automatique du langage naturel.
Principe Mathématique
Le Modèle de Langage Autorégressif
Au cœur de GPT se trouve une idée mathématique élégante : modéliser la probabilité jointe d’une séquence de mots comme le produit de probabilités conditionnelles. Mathématiquement, pour une séquence de mots X = (x_1, x_2, …, x_n), on écrit :
P(X) = P(x_1) × P(x_2 | x_1) × P(x_3 | x_1, x_2) × ... × P(x_n | x_1, x_2, ..., x_{n-1})
Ce qui se factorise ainsi :
P(X) = ∏_{i=1}^{n} P(x_i | x_1, x_2, ..., x_{i-1})
Cette décomposition est fondamentale. Chaque mot est prédit conditionnellement à tous les mots qui le précèdent dans la séquence. C’est ce qu’on appelle le modèle de Causal Language Modeling (CLM). Le terme « causal » signifie que le modèle n’a accès qu’aux tokens précédents — jamais aux tokens futurs.
Fonction de Coût : Cross-Entropie
L’apprentissage de GPT repose sur la minimisation de la fonction de coût d’entropie croisée (cross-entropy) sur l’ensemble de la séquence. Pour une séquence donnée X et un modèle paramétré par θ, la loss s’écrit :
L(θ) = -∑_{i=1}^{n} log P(x_i | x_1, ..., x_{i-1}; θ)
Chaque terme de somme mesure l’écart entre la distribution réelle du mot suivant et la distribution prédite par le modèle. Minimiser cette loss revient à maximiser la vraisemblance des données de pré-entraînement.
Stratégies de Décodage
La génération de texte avec GPT peut emprunter plusieurs stratégies :
- Greedy decoding : à chaque étape, le modèle sélectionne le token avec la probabilité maximale. Cette approche produit des textes cohérents mais parfois répétitifs ou prévisibles.
- Beam search : le modèle explore k séquences candidates en parallèle à chaque étape (où k est la largeur du faisceau). Il conserve les k meilleures hypothèses partielles et les complète itérativement. À la fin, la séquence avec le score global le plus élevé est retournée. Cette méthode est particulièrement utile pour les tâches déterministes comme la traduction automatique.
- Échantillonnage top-k : le modèle ne considère que les k tokens les plus probables et les redistribue proportionnellement. Cela évite les tokens très improbables tout en introduisant une certaine variété dans la génération.
- Échantillonnage top-p (nucleus sampling) : au lieu de choisir un nombre fixe k de tokens, on sélectionne le plus petit ensemble de tokens dont la probabilité cumulée atteint un seuil p. Le modèle échantillonne ensuite dans cet ensemble. Cette approche est plus adaptative que le top-k : pour un contexte ambigu, de nombreux tokens seront considérés, tandis que pour un contexte clair, le choix se restreint naturellement.
La formule de base du softmax qui transforme les logits z en probabilités s’écrit :
P(w) = exp(z_w / T) / ∑_{j} exp(z_j / T)
où T est la température, un hyperparamètre crucial qui contrôle la « netteté » de la distribution.
Intuition : GPT comme un Joueur de Scrabble
Imaginez un joueur de Scrabble exceptionnellement cultivé. Avant de poser une lettre, il anticipe mentalement tous les mots possibles. Il connaît par cœur l’orthographe de centaines de milliers de mots en plusieurs langues. Il comprend qu’après « la », un nom suit généralement ; qu’après « parce que », une proposition subordonnée se profile.
C’est exactement ce que fait GPT, mais à une échelle vertigineuse. Il a lu des milliards de pages de texte — Wikipédia, livres, articles scientifiques, forums, sites web — et a appris les motifs statistiques qui relient les mots entre eux. Quand vous lui donnez le début d’une phrase, il utilise cette connaissance colossale pour prédire la suite la plus probable.
La température contrôle la créativité de ses prédictions :
- Température basse (T ≈ 0,1) : le modèle est très confiant et déterministe. Il choisira presque toujours le mot le plus probable. Le texte sera cohérent mais peut-être répétitif. C’est comme un joueur de Scrabble ultra-conservateur qui joue toujours le mot avec le score maximum.
- Température moyenne (T ≈ 0,7) : le modèle explore des alternatives raisonnablement probables. Le texte devient plus naturel et varié, reflétant la diversité du langage humain.
- Température élevée (T ≈ 1,5) : le modèle prend des risques. Il peut produire des passages originaux et créatifs, mais aussi des incohérences ou des non-sens. C’est un joueur de Scrabble audacieux qui invente des mots — parfois brillant, parfois absurde.
Cette intuition du « mot suivant » est remarquablement puissante. Elle suffit, lorsqu’elle est alimentée par suffisamment de données et de paramètres, pour produire des raisonnements complexes, du code informatique fonctionnel et des textes nuancés.
Implémentation Python
Génération avec Hugging Face pipeline
Le moyen le plus simple d’utiliser GPT est le pipeline de génération de Hugging Face :
from transformers import pipeline
# Chargement du pipeline de génération de texte
generate_text = pipeline(
"text-generation",
model="gpt2",
tokenizer="gpt2",
max_new_tokens=100,
temperature=0.7,
top_p=0.9,
do_sample=True
)
# Génération de texte
prompt = "L'intelligence artificielle transforme notre société en"
resultat = generate_text(prompt)
print(resultat[0]["generated_text"])
Configuration des Paramètres de Génération
Les paramètres de GPT offrent un contrôle fin sur le processus de génération :
from transformers import pipeline
generateur = pipeline(
"text-generation",
model="gpt2",
max_new_tokens=200,
temperature=0.8,
top_p=0.95,
top_k=50,
do_sample=True,
repetition_penalty=1.2,
return_full_text=False
)
prompt = "Les dernières avancées en apprentissage profond"
sortie = generateur(prompt, num_return_sequences=3)
for i, gen in enumerate(sortie):
print(f"--- Séquence {i + 1} ---")
print(gen["generated_text"])
print()
Boucle de Génération Manuelle avec Logits
Pour un contrôle total sur GPT et une compréhension approfondie du processus de génération, on peut écrire la boucle de prédiction token par token manuellement :
import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer
# Chargement du modèle et du tokenizer
modele = GPT2LMHeadModel.from_pretrained("gpt2")
tokeniseur = GPT2Tokenizer.from_pretrained("gpt2")
def generer_manuellement(prompt, max_steps=50, temperature=0.8, top_p=0.95):
"""
Boucle de génération manuelle pour GPT.
Contrôle fin sur les logits et l'échantillonnage.
"""
# Encodage du prompt
ids = tokeniseur.encode(prompt, return_tensors="pt")
for etape in range(max_steps):
# Passage forward : obtention des logits
with torch.no_grad():
sortie = modele(ids)
logits = sortie.logits[:, -1, :] # Dernier token uniquement
# Application de la température
logits = logits / temperature
# Échantillonnage top-p (nucleus sampling)
probas = torch.softmax(logits, dim=-1)
probas_triees, indices_tries = torch.sort(probas, descending=True)
probas_cumulees = torch.cumsum(probas_triees, dim=-1)
# Masquage des tokens dont la probabilité cumulée dépasse top_p
masque = probas_cumulees > top_p
masque[..., 1:] = masque[..., :-1].clone()
masque[..., 0] = False
probas_filtrees = probas_triees.masked_fill(masque, 0.0)
probas_filtrees = probas_filtrees / probas_filtrees.sum()
# Échantillonnage
token_suivant = torch.multinomial(probas_filtrees, 1)
token_suivant_indice = indices_tries.gather(1, token_suivant)
# Ajout du token à la séquence
ids = torch.cat([ids, token_suivant_indice], dim=-1)
# Extraction du texte généré pour affichage
texte_genere = tokeniseur.decode(ids[0], skip_special_tokens=True)
print(f"Étape {etape + 1}: {tokeniseur.decode(token_suivant_indice[0])}")
return texte_genere
# Exécution
resultat = generer_manuellement(
"En machine learning,",
max_steps=30,
temperature=0.85,
top_p=0.9
)
print(f"\nTexte complet :\n{resultat}")
Extraction de Features avec GPT
Les modèles GPT peuvent également servir à extraire des représentations vectorielles (embeddings) d’un texte, utilisables pour de nombreuses tâches en aval :
import torch
from transformers import GPT2Tokenizer, GPT2Model
# Chargement du modèle de base (sans tête de langage)
tokeniseur = GPT2Tokenizer.from_pretrained("gpt2")
modele = GPT2Model.from_pretrained("gpt2")
def extraire_features(texte):
"""
Extraction de features avec GPT.
Retourne les hidden states moyennées comme embedding du texte.
"""
# Encodage
entrees = tokeniseur(texte, return_tensors="pt", truncation=True, max_length=512)
# Forward pass
with torch.no_grad():
sorties = modele(**entrees)
hidden_states = sorties.last_hidden_state # [1, seq_len, hidden_dim]
# Pooling moyen sur la dimension de la séquence
embedding = hidden_states.mean(dim=1) # [1, hidden_dim]
return embedding.squeeze()
# Exemple d'utilisation
texte = "L'apprentissage par transfert est une technique puissante."
vecteur = extraire_features(texte)
print(f"Dimension de l'embedding : {vecteur.shape}")
print(f"Premières valeurs : {vecteur[:5]}")
Cette approche d’extraction de features est particulièrement utile pour des tâches comme la classification de textes, la détection de similarité sémantique ou le clustering de documents.
Hyperparamètres
Les hyperparamètres de GPT influencent directement la qualité et le style de la génération :
| Hyperparamètre | Description | Valeur typique |
|---|---|---|
| temperature | Contrôle la créativité. Plus la température est élevée, plus la génération est variée et imprévisible. | 0,7 – 1,0 |
| top_p | Seuil de probabilité cumulée pour le nucleus sampling. Réduit l’espace de vocabulaire aux tokens les plus probables. | 0,9 – 0,95 |
| top_k | Nombre maximum de tokens considérés à chaque étape. Utile en combinaison avec top_p. | 40 – 100 |
| max_new_tokens | Nombre maximum de tokens générés après le prompt. Limite la longueur de la réponse. | 50 – 500 |
| repetition_penalty | Pénalité appliquée aux tokens déjà générés. Réduit les répétitions indésirables. | 1,0 – 1,5 |
| no_repeat_ngram_size | Taille des n-grammes interdits de répétition. Par exemple, 3 empêche toute séquence de 3 mots de se répéter. | 2 – 4 |
| do_sample | Active ou désactive l’échantillonnage stochastique. Si False, utilise le greedy decoding. | True |
| num_beams | Nombre de faisceaux pour le beam search. Ignoré si do_sample=True. | 1 – 10 |
Le réglage de ces hyperparamètres dépend fortement de la tâche. Pour un résumé de texte fidèle, on préférera une température basse et un top_k élevé. Pour de la création littéraire, on augmentera la température et on ajustera le top_p pour équilibrer créativité et cohérence.
Avantages et Limites
Avantages de GPT
- Génération de texte fluide : GPT excelle dans la production de texte naturel, cohérent et grammaticalement correct, grâce à son entraînement sur des corpus massifs.
- Apprentissage en contexte (in-context learning) : Les versions récentes de GPT peuvent apprendre à accomplir de nouvelles tâches simplement à partir d’exemples fournis dans le prompt, sans ajustement des poids du modèle.
- Polyvalence : Un seul modèle génère du texte, répond à des questions, rédige du code, traduit et résume. Cette capacité multi-tâches est unique.
- Passage à l’échelle (scaling laws) : Les performances de GPT suivent des lois d’échelle prévisibles : plus on augmente la taille du modèle, la quantité de données et la puissance de calcul, meilleures sont les résultats.
- Zéro-shot et few-shot : Le modèle fonctionne raisonnablement bien sans aucun exemple (zero-shot) et s’améliore significativement avec quelques démonstrations (few-shot).
Limites de GPT
- Hallucinations : GPT peut générer des informations fausses mais plausibles. Il ne « sait » pas ce qui est vrai ; il produit simplement la suite la plus probable selon ses statistiques d’entraînement.
- Absence de raisonnement véritable : Le modèle n’effectue pas de raisonnement logique au sens formel. Il imite des patterns de raisonnement appris dans ses données, ce qui peut échouer sur des problèmes nécessitant une déduction rigoureuse.
- Sensibilité au prompt : Des variations mineures dans la formulation du prompt peuvent produire des résultats très différents. Cette fragilité rend la reproductibilité difficile.
- Coût computationnel : L’entraînement et l’inférence de GPT nécessitent d’importantes ressources matérielles (GPU haute performance, mémoire), limitant l’accès aux organisations disposant de moyens substantiels.
- Biais des données : Le modèle reproduit et amplifie les biais présents dans ses données d’entraînement, ce qui pose des problèmes éthiques sérieux dans des applications réelles.
- Fenêtre de contexte limitée : Malgré les améliorations récentes, la taille du contexte reste finie. Les informations dépassant cette fenêtre sont tout simplement « oubliées » par le modèle.
4 Cas d’Usage Concrets
1. Génération et Aide à la Rédaction
GPT est largement utilisé pour la création de contenu : articles de blog, rédaction commerciale, création poétique. L’utilisateur fournit un thème et quelques directives, et le modèle produit un premier jet cohérent et structuré. Cette application réduit considérablement le temps de rédaction tout en maintenant une qualité acceptable pour un brouillon.
from transformers import pipeline
redacteur = pipeline(
"text-generation",
model="gpt2",
max_new_tokens=200,
temperature=0.8
)
theme = "Les avantages de l'apprentissage fédéré en santé :"
brouillon = redacteur(theme)
print(brouillon[0]["generated_text"])
2. Assistance au Développement Logiciel
Les versions avancées de GPT comprennent et génèrent du code dans de multiples langages. Elles peuvent expliquer des fonctions complexes, détecter des bugs, proposer des corrections et même convertir du code d’un langage à un autre. Cette capacité transforme la productivité des développeurs au quotidien.
3. Résumé Automatique de Documents
GPT peut résumer de longs documents en quelques paragraphes condensés. En alimentant le modèle avec un article complet et un prompt comme « Résume cet article en trois points clés : », on obtient une synthèse rapide et précise. C’est particulièrement utile pour la veille technologique, la revue de littérature académique ou le monitoring de l’actualité.
4. Chatbots et Assistants Virtuels
L’architecture de GPT est idéale pour les systèmes conversationnels. Grâce à sa capacité à maintenir le contexte d’un dialogue et à produire des réponses naturelles, il permet de créer des assistants capables de gérer des conversations complexes, de répondre à des questions précises et d’adapter leur ton au contexte de l’échange.
# Exemple : chatbot simple avec génération conditionnée
historique = "Utilisateur: Bonjour, pouvez-vous m'aider avec Python ?\nAssistant: "
chatbot = pipeline("text-generation", model="gpt2", max_new_tokens=100, temperature=0.7)
reponse = chatbot(historique)
print(reponse[0]["generated_text"])
Conclusion
GPT représente une avancée majeure en intelligence artificielle. Son architecture decoder-only, son apprentissage autorégressif basé sur la cross-entropie et ses stratégies de décodage sophistiquées en font un outil incontournable du traitement automatique du langage naturel. Avec Hugging Face, l’accès à ces modèles est désormais à la portée de tous les développeurs Python. Toutefois, il convient de rester conscient de ses limites — hallucinations, biais et coût computationnel — et de l’utiliser de manière responsable.
L’avenir de GPT s’annonce prometteur : les recherches actuelles explorent l’extension de la fenêtre de contexte, la réduction des hallucinations par reinforcement learning from human feedback (RLHF), et l’intégration de capacités multimodales. Le paysage du NLP continue d’évoluer rapidement, et GPT restera au cœur de cette transformation.
Voir aussi
- Calculer le Totient d’un Carré en Cube avec Python : Guide Pratique et Astuces
- Créer des Ellipses Croisées en Python : Guide Complet pour la Visualisation et la Manipulation

