Curation de Jeu de Données
Cette compétence suppose que finetuning-method-selection a déjà orienté ici — l'étape suivante est la préparation des données, pas le choix de la méthode. Ce qui suit : la sélection du format par méthode cible, les mécanismes de template/packing derrière les échecs d'entraînement silencieux les plus courants, les règles pour mélanger des données synthétiques sans effondrement, et la fiche de jeu de données qui clôt la Phase 2 avant le lancement d'un run.
Entrée : exemples bruts (démonstrations, jugements de préférence ou invites de tâche) plus une décision de routage provenant de finetuning-method-selection.
Format de sortie : un fichier JSONL formaté, packé et validé, plus une fiche de jeu de données complétée — l'artefact de Phase 2 que /finetune vérifie avant de lancer l'entraînement.
Sélection du Format
| Méthode | Forme | Lignes |
|---|---|---|
| SFT, tour unique | Instruct (instruction/response ou prompt/completion) | ~1 000+ minimum |
| SFT, tours multiples | Conversation / liste ChatML messages | ~1 000+ minimum |
| DPO / ORPO | Paire de préférence (prompt, chosen, rejected) | Dépend de la méthode, voir preference-optimization |
| KTO | Non apparié (prompt, completion, label) | Dépend de la méthode, voir preference-optimization |
| GRPO / RLVR | Invite uniquement (prompt + métadonnées de vérificateur) | Dépend de la méthode, voir grpo-rlvr-training |
-
~1 000+ lignes est le minimum recommandé pour SFT, pas un objectif. En dessous, une poignée d'exemples de faible qualité ou dupliqués peut dominer le gradient ; au-dessus, la qualité plutôt que la quantité — un petit ensemble vérifié et dédupliqué bat un grand ensemble bruité.
-
La forme ChatML, pour orientation ; les quatre autres formats plus une note de conversion ShareGPT se trouvent dans
references/formats-and-templates.md:{"messages": [ {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."} ]}
Templates de Chat et Masquage des Pertes
Appliquez le template de chat du modèle cible avant toute concaténation ou packing, jamais après — packer du texte brut puis templater le blob packé corrompt les limites de tour, plaçant les marqueurs de rôle au mauvais endroit par rapport à chaque exemple.
-
Entraînez-vous uniquement sur les réponses de l'assistant. Masquez la perte (
-100dans le tenseur des étiquettes) sur les tours système/utilisateur et les propres marqueurs de rôle du template — seuls les jetons de contenu des tours assistant contribuent à la perte. -
Les décalages template/tokenizer sont un mode de défaillance silencieuse majeur. Un modèle entraîné avec un template de chat mais servi ou évalué avec un autre se dégrade sans générer d'erreur. Vérifiez que la même chaîne de template utilisée en entraînement est appliquée en inférence et en évaluation.
-
Conservez le jeu de données sous forme
messageset laissez l'entraîneur le templater et le masquer (assistant_only_loss=Truedans TRL actuel) — le pré-rendu en un champ texte plat détruit les limites de tour dont le masquage a besoin. Esquisse de code complète :references/formats-and-templates.md. Vérifiez avant l'entraînement — décodez uniquement les positions non masquées ; attendez-vous uniquement au texte de l'assistant :keep = batch["labels"][0] != -100 print(tokenizer.decode(batch["input_ids"][0][keep]))
Packing
Sans packing, 40 à 70 % du calcul est gaspillé en padding — des exemples de longueur variable regroupés par lots à une longueur de séquence fixe gaspillent l'écart entre la longueur de chaque exemple et le maximum du lot. Le packing concatène plusieurs exemples en une seule séquence jusqu'à la longueur maximale, réduisant la majeure partie de ce gaspillage.
-
Le packing modifie la sémantique du lot. Une séquence packée peut contenir plusieurs exemples originaux, donc le « nombre de pas par époque » et tout programme de taux d'apprentissage indexé sur le nombre d'exemples changent une fois le packing activé — recalculez les jalons du programme par rapport au nombre de séquences packées.
-
OBLIGATOIRE : décodez et inspectez manuellement 5 à 10 séquences packées avant de passer à un run complet. Confirmez que les limites des exemples sont à l'endroit attendu, que les marqueurs de template sont intacts par sous-exemple, et que le masque de perte est toujours limité à l'assistant dans chaque séquence packée. Pas optionnel — les bugs de packing sont silencieux (la courbe de perte semble normale) et n'apparaissent que dans la qualité d'évaluation, des heures plus tard :
for seq in packed_dataset.select(range(10)): print(tokenizer.decode(seq["input_ids"]))
Règles pour les Données Synthétiques
- Conservez ≥25 % de données réelles comme garde-fou contre l'effondrement. S'entraîner sur une part croissante de données générées par un modèle sans un plancher de données réelles entraîne un effondrement mesurable de la qualité sur les générations successives — 25 % de données réelles est le minimum qui tient la ligne. Les lignes de rejeu de domaine général comptent dans ce plancher — « réel » signifie « non généré pour cette tâche à partir de ce modèle étudiant », pas « rédigé par un humain ». Un jeu de données entièrement synthétique par construction peut atteindre le plancher de ≥25 % rien qu'avec du rejeu (voir la recette de construction de mélange par rejeu dans
references/synthetic-data.md) ; indiquez quelles lignes comptent comme « réelles » dans la fiche de jeu de données plutôt que de laisser le plancher structurellement inaccessible. - Magpie et l'échantillonnage par rejet sont les chevaux de bataille. Magpie extrait des invites du template antérieur du modèle lui-même ; l'échantillonnage par rejet génère plusieurs candidats par invite et ne conserve que ceux qu'un filtre valide. Les deux surpassent la génération naïve en un seul passage.
- La génération ciblée et consciente de l'étudiant surpasse la génération statique d'un facteur 1,3 à 2 en efficacité d'échantillonnage — viser les modes d'échec réels de l'étudiant atteint un seuil de qualité avec moins d'exemples filtrés.
- Les taux d'acceptation typiques après filtrage se situent entre 10 et 30 %. Planifiez le volume en conséquence — un objectif de 10 000 lignes avec un taux d'acceptation de 15 % nécessite environ 65 000+ générations brutes.
- Classement des méthodes de génération, entonnoir de filtrage, construction du mélange par rejeu et schéma de distillation :
references/synthetic-data.md.
La Fiche de Jeu de Données
Chaque jeu de données qui parvient à l'entraînement reçoit une fiche — l'artefact requis de Phase 2 que /finetune vérifie avant le lancement. La fiche n'est pas une documentation libre ; elle DOIT contenir ces champs :
- Provenance — d'où chaque ligne provient (source(s) réelle(s), méthode(s) synthétique(s) ou les deux), traçable jusqu'à la sortie de
trace-to-training-data. - Comptages — nombre total de lignes et lignes par division (entraînement/évaluation/mise de côté) si divisé.
- Ratio synthétique/réel — le ratio mesuré, vérifié par rapport au plancher de ≥25 % de données réelles ci-dessus.
- Méthode de déduplication — correspondance exacte, sémantique (seuil d'embedding) ou les deux ; voir l'entonnoir de filtrage dans
references/synthetic-data.md. - Template utilisé — la chaîne/identifiant exact du template de chat, maintenu cohérent tout au long de l'inférence et de l'évaluation — c'est ce qui relie un run
eval-harness-firstau checkpoint. - Configuration de packing — si le packing a été utilisé, longueur maximale de séquence et confirmation que l'inspection manuelle des 5 à 10 séquences ci-dessus a été effectuée.
Un jeu de données auquel il manque un de ces six champs n'est pas prêt pour /finetune — la fiche est une porte, pas un résumé rédigé après coup.
Liste de Vérification de Sortie de Phase 2
Avant de passer le relais à /finetune, confirmez :
- Le format correspond à la méthode (tableau ci-dessus).
- Template appliqué avant concaténation.
- Perte masquée uniquement sur les tours assistant.
- 5 à 10 séquences packées décodées et lues.
- ≥25 % de données réelles dans le mélange final.
- Fiche de jeu de données complète — les six champs.
Références
references/formats-and-templates.md— exemples JSONL par format, code de masquage TRL actuel et note de conversion ShareGPT.references/synthetic-data.md— classement des méthodes de génération, entonnoir de filtrage, construction du mélange par rejeu et schéma de distillation enseignant→étudiant.
Compétences connexes : finetuning-method-selection achemine ici ; lora-qlora-recipes, vision-sft et preference-optimization consomment les jeux de données que cette compétence produit ; trace-to-training-data est la source de provenance pour les jeux de données de trajectoires notées ; eval-harness-first évalue le checkpoint résultant.