Aller au contenu principal

Préparer vos données d'entraînement

Mis à jour le 28 juillet 2026

L’importance des données

La qualité de votre modèle fine-tuné dépend directement de la qualité de vos données d’entraînement. Un modèle entraîné sur des données médiocres produira des résultats médiocres, peu importe le nombre d’epochs ou les hyperparamètres choisis : l’entraînement ne corrige pas un corpus, il l’amplifie. C’est la raison pour laquelle cette leçon arrive avant toute considération technique sur l’API.

Nous allons suivre le chemin réel d’un jeu de données : où le trouver, comment compléter ce qui manque, quelle volumétrie viser, et comment structurer chaque exemple avant de le formater en JSONL à la leçon suivante.

Sources de données

La première source à explorer est votre propre historique, et elle est presque toujours sous-estimée. Si vous exploitez déjà un chatbot ou un assistant, vos logs de conversations contiennent des interactions réelles, avec le vocabulaire et les maladresses de vos utilisateurs — matière autrement plus utile que des questions inventées en réunion. Vos tickets support offrent la même richesse, avec en prime la résolution validée en fin d’échange. Vos documents internes — guides de style, procédures, templates de réponses — vous donnent la forme attendue des réponses, à défaut des questions. Enfin, vos évaluations humaines, c’est-à-dire les réponses que vos équipes ont validées ou corrigées, sont les exemples les plus précieux du lot, puisqu’ils portent déjà un jugement de qualité.

Quand ces sources ne suffisent pas, vous pouvez générer des données synthétiques pour couvrir les cas manquants :

from openai import OpenAI

client = OpenAI()

def generer_exemple(sujet: str, style: str) -> dict:
    """Génère un exemple d'entraînement synthétique."""
    response = client.responses.create(
        model="gpt-5.6-sol",
        input=f"""Génère une conversation réaliste entre un utilisateur
        et un assistant spécialisé en {sujet}.
        L'assistant doit répondre dans un style {style}.
        Format : un message utilisateur, puis la réponse idéale."""
    )
    return response

Attention : les données synthétiques doivent être vérifiées par un humain. Ne les utilisez pas en aveugle — un générateur qui se trompe sur une nuance métier produira cinquante exemples faux avec le même aplomb que cinquante exemples justes.

Combien de données faut-il ?

50
Minimum viable
100-500
Résultats solides
500+
Haute qualité
80/20
Train / Validation

OpenAI recommande un minimum de 10 exemples, mais en pratique, 50 est le strict minimum pour observer une différence. Entre 100 et 500 exemples, vous obtiendrez des résultats fiables. Au-delà, le gain vient moins du volume que de la diversité : mille reformulations de la même question n’apprennent rien de plus au modèle que cinquante bien choisies.

Structurer vos exemples

Chaque exemple doit représenter une interaction complète, c’est-à-dire la totalité de ce que le modèle verra en production plus la réponse que vous attendez. Le message système est optionnel : il définit le rôle et les contraintes de l’assistant, et si vous décidez de l’utiliser, il devra figurer dans tous vos exemples. Le message utilisateur porte la requête telle qu’elle arrive réellement, avec ses imperfections. Le message assistant, enfin, est la réponse idéale — pas une réponse acceptable, celle que vous seriez heureux de voir servie à un client.

exemple = {
    "messages": [
        {
            "role": "system",
            "content": "Vous êtes un assistant juridique spécialisé en droit du travail français."
        },
        {
            "role": "user",
            "content": "Quel est le délai de préavis pour un CDI ?"
        },
        {
            "role": "assistant",
            "content": "Le délai de préavis pour un CDI dépend de votre ancienneté et de votre convention collective. En règle générale : moins de 6 mois d'ancienneté, le préavis est fixé par la convention collective ; entre 6 mois et 2 ans, il est d'1 mois ; au-delà de 2 ans, il est de 2 mois. Vérifiez toujours votre convention collective, qui peut prévoir des durées différentes."
        }
    ]
}

Bonnes pratiques de préparation

La diversité se travaille délibérément. Couvrez l’ensemble des cas d’usage que vous visez, incluez des cas limites et des questions ambiguës, variez la longueur des questions comme des réponses et représentez les différents niveaux de difficulté. Un corpus composé uniquement de questions faciles produit un modèle qui bafouille dès la première demande tordue.

La cohérence est la contrainte inverse, et tout aussi importante. Toutes les réponses doivent suivre le même style et le même format ; si vous utilisez un message système, utilisez-le dans tous les exemples ; et les réponses doivent être celles que vous attendez réellement en production, pas des versions embellies pour l’occasion. Le modèle apprendra la moyenne de ce que vous lui montrez, hésitations comprises.

Reste le split train/validation. Mettre 20 % des exemples de côté avant l’entraînement est ce qui vous permettra, plus tard, de savoir si votre modèle a appris ou seulement mémorisé. Faites-le une fois, sauvegardez les deux fichiers, et ne les mélangez plus.

import json
import random

# Charger vos données
with open("donnees_completes.jsonl", "r") as f:
    exemples = [json.loads(line) for line in f]

# Mélanger
random.shuffle(exemples)

# Séparer 80/20
split = int(len(exemples) * 0.8)
train = exemples[:split]
validation = exemples[split:]

# Sauvegarder
for nom, data in [("train.jsonl", train), ("validation.jsonl", validation)]:
    with open(nom, "w") as f:
        for ex in data:
            f.write(json.dumps(ex, ensure_ascii=False) + "\n")

print(f"Train : {len(train)} exemples, Validation : {len(validation)} exemples")

Points clés à retenir

  • La qualité prime sur la quantité — 100 exemples excellents valent mieux que 1 000 médiocres
  • Vérifiez manuellement vos données synthétiques
  • Séparez toujours un jeu de validation (20 %) pour évaluer objectivement
  • Assurez la cohérence de style et de format dans tous vos exemples