Un fine-tuning apprend les régularités présentes dans les exemples, y compris incohérences, données sensibles et mauvais formats. La préparation du dataset détermine donc souvent davantage le résultat que le choix d’un hyperparamètre. Commencez par définir le comportement attendu et une évaluation indépendante.
Définir l’unité d’exemple
Pour une tâche de chat, conservez les rôles et appliquez la chat template du modèle lors de la tokenisation. Pour une extraction ou classification, utilisez des entrées et labels structurés. Chaque exemple doit représenter une situation réaliste, avec suffisamment de contexte mais sans données inutiles. Ne mélangez pas plusieurs formats implicites.
Nettoyer sans uniformiser aveuglément
Supprimez doublons, fragments incomplets, sorties contradictoires et informations personnelles non nécessaires. Vérifiez langue, encodage, licences et provenance. Conservez la diversité utile : demandes courtes et longues, erreurs utilisateur, refus légitimes et cas limites. Un dataset uniquement composé de réponses parfaites et faciles prépare mal la production.
Éviter les fuites entre splits
Séparez entraînement, validation et test par source, document ou utilisateur lorsque des variantes se ressemblent. Une simple répartition aléatoire peut placer le même texte paraphrasé des deux côtés et gonfler artificiellement le score. Gardez le test final hors du processus de réglage.
Tokenisation et batching
Mesurez la distribution des tokens avec le tokenizer exact. Décidez explicitement troncature, séquences trop longues et labels masqués. Un data collator assemble les exemples en batch et peut appliquer un padding dynamique jusqu’à la séquence la plus longue du batch, souvent plus efficace qu’un padding global. Inspectez manuellement le texte décodé après préparation.
Checklist
- Objectif et métrique définis avant la collecte.
- Provenance, licence et consentement documentés.
- Doublons et données sensibles traités.
- Splits sans fuite.
- Chat template et tokenizer de la bonne révision.
- Échantillon décodé et relu.
FAQ
Plus de données donne-t-il toujours un meilleur modèle ?
Non. Des exemples bruités ou redondants peuvent dégrader le comportement.
Peut-on générer les exemples avec un LLM ?
Oui pour compléter la couverture, avec filtrage et validation humaine sur un échantillon.
Faut-il conserver les données brutes ?
Oui si le cadre légal le permet, avec versionnage et accès contrôlé pour reproduire la transformation.
Valider un dataset conversationnel
~~~python import json from collections import Counter
ALLOWED_ROLES = {"system", "user", "assistant"} seen, errors = Counter(), []
for line_no, line in enumerate(open("train.jsonl"), start=1): row = json.loads(line) messages = row.get("messages", []) roles = [message.get("role") for message in messages] if not messages or roles[-1] != "assistant": errors.append((line_no, "assistant final manquant")) if any(role not in ALLOWED_ROLES for role in roles): errors.append((line_no, "rôle inconnu")) key = json.dumps(messages, sort_keys=True, ensure_ascii=False) seen[key] += 1
duplicates = sum(count - 1 for count in seen.values()) print({"errors": errors[:20], "duplicates": duplicates}) ~~~
Séparez train, validation et test par source ou utilisateur avant toute augmentation afin d’éviter les fuites. Retirez secrets et données personnelles, puis faites relire un échantillon. Conservez licence, provenance, règle de nettoyage et version de chaque exemple.