Itérer : quand re-fine-tuner
Le fine-tuning est un processus itératif
Votre premier fine-tuning sera rarement parfait. L’amélioration vient de cycles itératifs : analyser les erreurs, enrichir les données, relancer l’entraînement, réévaluer. Cette leçon vous apprend à identifier quand et comment itérer efficacement.
Analyser les erreurs du modèle
Catégoriser les échecs
Après chaque évaluation, classez les erreurs en catégories :
def analyser_erreurs(resultats: list[dict]) -> dict:
"""Catégorise les erreurs du modèle fine-tuné."""
categories = {
"format": [], # Mauvais format de réponse
"ton": [], # Ton inapproprié
"factuel": [], # Information incorrecte
"incomplet": [], # Réponse trop courte ou manque des éléments
"hors_sujet": [], # Ne répond pas à la question
"hallucination": [] # Invente des informations
}
for r in resultats:
if r.get("score", 5) < 3:
# Classifier l'erreur (peut être fait manuellement ou par LLM)
categorie = classifier_erreur(r)
categories[categorie].append(r)
print("Distribution des erreurs :")
for cat, erreurs in categories.items():
if erreurs:
print(f" {cat} : {len(erreurs)} cas")
return categories
Identifier les patterns
Recherchez des patterns récurrents dans les erreurs :
- Le modèle échoue-t-il sur un type de question spécifique ?
- Les erreurs sont-elles concentrées sur certains sujets ?
- Le problème vient-il des données ou des hyperparamètres ?
Quand re-fine-tuner
Signaux clairs qu’il faut itérer
| Signal | Action |
|---|---|
| Erreurs de format récurrentes | Ajoutez plus d'exemples avec le bon format |
| Le modèle hallucine sur certains sujets | Ajoutez des exemples où il refuse poliment |
| Surapprentissage détecté | Réduisez les epochs, diversifiez les données |
| Nouveaux cas d'usage à couvrir | Ajoutez des exemples pour ces cas |
| Feedback utilisateur négatif ciblé | Transformez le feedback en exemples corrigés |
Quand NE PAS re-fine-tuner
- Les erreurs sont rares et non systématiques — le prompt engineering peut suffire
- Le problème vient de l’infrastructure (latence, timeouts), pas du modèle
- Vous n’avez pas assez de nouvelles données pour justifier un nouveau run
- Un nouveau modèle de base est disponible — testez-le d’abord sans fine-tuning
Stratégies d’itération
Itération incrémentale
Ajoutez de nouveaux exemples ciblés à vos données existantes :
import json
def enrichir_dataset(
dataset_existant: str,
nouveaux_exemples: list[dict],
output: str
):
"""Ajoute de nouveaux exemples au dataset existant."""
# Charger les données existantes
with open(dataset_existant, "r") as f:
existants = [json.loads(l) for l in f]
# Fusionner
combines = existants + nouveaux_exemples
# Sauvegarder
with open(output, "w") as f:
for ex in combines:
f.write(json.dumps(ex, ensure_ascii=False) + "\n")
print(f"Dataset enrichi : {len(existants)} + {len(nouveaux_exemples)} = {len(combines)}")
Itération corrective
Transformez les erreurs détectées en exemples d’entraînement :
def erreur_vers_exemple(
question: str,
mauvaise_reponse: str,
bonne_reponse: str,
system_msg: str
) -> dict:
"""Transforme une erreur en exemple d'entraînement."""
return {
"messages": [
{"role": "system", "content": system_msg},
{"role": "user", "content": question},
{"role": "assistant", "content": bonne_reponse}
]
}
# Transformer un lot d'erreurs
corrections = []
for erreur in erreurs_detectees:
correction = erreur_vers_exemple(
question=erreur["question"],
mauvaise_reponse=erreur["reponse_modele"],
bonne_reponse=erreur["reponse_corrigee"],
system_msg=PROMPT_SYSTEME
)
corrections.append(correction)
Fine-tuning continu
Vous pouvez fine-tuner un modèle déjà fine-tuné pour l’améliorer progressivement :
# Fine-tuner à partir d'un modèle déjà fine-tuné
job_v2 = client.fine_tuning.jobs.create(
training_file=nouveau_fichier.id,
model="ft:gpt-5.3-mini:org::suffix-v1:xxxxxxxx", # modèle v1 comme base
suffix="mon-assistant-v2"
)
Attention : le fine-tuning continu accumule les biais. Après 2-3 itérations successives, il est souvent préférable de repartir du modèle de base avec un dataset complet et enrichi.
Workflow d’itération recommandé
Collecter les erreurs
Identifiez les cas où le modèle échoue en production ou en évaluation.
Catégoriser et prioriser
Classez les erreurs par type et traitez les plus fréquentes en premier.
Créer les exemples correctifs
Transformez chaque erreur en exemple d'entraînement avec la bonne réponse.
Relancer et réévaluer
Entraînez la nouvelle version et comparez-la avec la précédente sur le même jeu de test.
Documenter chaque itération
iteration_log = {
"version": "v3",
"date": "2026-04-02",
"modele_base": "gpt-5.3-mini",
"dataset": {
"train": 350,
"validation": 45,
"nouveaux_exemples": 50,
"source_nouveaux": "erreurs production semaine 12"
},
"hyperparametres": {
"n_epochs": 3,
"learning_rate_multiplier": "auto",
"batch_size": "auto"
},
"resultats": {
"validation_loss": 0.42,
"precision_test": 0.91,
"csat_moyen": 4.3,
"amelioration_vs_v2": "+5% précision, +0.2 CSAT"
},
"decision": "Déployé en production le 2026-04-03"
}
Points clés à retenir
- Le fine-tuning est itératif — planifiez plusieurs cycles
- Catégorisez les erreurs avant de les corriger dans les données
- Transformez le feedback utilisateur en exemples d’entraînement
- Après 2-3 itérations successives, repartez du modèle de base
- Documentez chaque itération pour garder un historique clair