# Comment préparer des données d’entraînement pour l’ajustement fin de GPT-3.5 Turbo?

Date: 2023-09-04 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/donnees-entrainement-ajustement-fin-gpt-3-5/

**Answer:** Vous écrivez des exemples de conversations dans le format de clavardage d’OpenAI, chacun composé d’un message système, d’un message de l’utilisateur et de la réponse idéale de l’assistant, et vous les enregistrez un par ligne dans un fichier JSONL. Les exemples doivent être exacts, cohérents et représentatifs des vraies entrées, et vous gardez à part un ensemble de cas distinct pour tester le résultat.

OpenAI a ouvert l’ajustement fin (*fine-tuning*) de GPT-3.5 Turbo le 22 août. Lancer une tâche d’entraînement ne demande qu’un seul appel à l’API; le vrai travail, c’est de préparer les données. Un modèle ajusté apprend la régularité que montrent vos exemples, quelle qu’elle soit, erreurs comprises.

La bonne nouvelle, c’est que le format est simple. Chaque exemple d’entraînement est une courte conversation écrite exactement comme vous voulez que le modèle se comporte.

## Le format de clavardage, ligne par ligne

Chaque exemple est un objet JSON avec une seule clé, `messages`, qui contient une liste de messages. Chaque message a un rôle, `role` (`system`, `user` ou `assistant`), et un contenu, `content`. Pendant l’entraînement, OpenAI traite le dernier message de l’assistant comme la réponse à apprendre, et tout ce qui le précède comme le prompt. Les exemples vont dans un fichier **JSONL** : du texte simple, un objet JSON complet par ligne, sans virgule entre les lignes et sans crochets autour.

Le *cookbook* d’OpenAI (son recueil d’exemples) signale quelques limites et conseils. Chaque exemple peut compter jusqu’à 4 096 jetons; tout ce qui dépasse est coupé. Si votre application tient des conversations à plusieurs tours, incluez des exemples à plusieurs tours pour que le modèle voie aussi cette forme. Et l’ajustement fin fonctionne le mieux sur une seule tâche bien ciblée.

## Un exemple complet : des demandes de réparation transformées en billets

Imaginez une boutique de vélos qui reçoit des demandes de réparation par texto et veut transformer chacune en un billet d’une ligne avec une catégorie, un niveau d’urgence et un court résumé, toujours dans le même format. L’ajustement fin vise à rendre le format et les jugements constants sans un long prompt rempli de règles.

Voici un fichier de départ de dix exemples. Remarquez que le message système est identique sur chaque ligne, et que les réponses de l’assistant suivent un modèle strict.

```json
{"messages": [{"role": "system", "content": "Transforme les demandes de réparation de vélo en billets."}, {"role": "user", "content": "mon frein avant grince et arrête à peine le vélo, je peux passer samedi?"}, {"role": "assistant", "content": "Freins | Haute | Frein avant faible et bruyant; veut samedi"}]}
{"messages": [{"role": "system", "content": "Transforme les demandes de réparation de vélo en billets."}, {"role": "user", "content": "Pneu arrière à plat encore, troisième fois ce mois-ci"}, {"role": "assistant", "content": "Pneus | Moyenne | Crevaisons arrière à répétition; vérifier fond de jante et pneu"}]}
{"messages": [{"role": "system", "content": "Transforme les demandes de réparation de vélo en billets."}, {"role": "user", "content": "la chaîne débarque tout le temps quand je passe sur le petit plateau"}, {"role": "assistant", "content": "Transmission | Moyenne | Chaîne tombe au passage sur le petit plateau"}]}
{"messages": [{"role": "system", "content": "Transforme les demandes de réparation de vélo en billets."}, {"role": "user", "content": "Juste une mise au point de printemps avant mai, pas pressé"}, {"role": "assistant", "content": "Mise au point | Basse | Mise au point générale avant mai"}]}
{"messages": [{"role": "system", "content": "Transforme les demandes de réparation de vélo en billets."}, {"role": "user", "content": "Tombé hier, la fourche a l’air pliée, est-ce que c’est sécuritaire de rouler??"}, {"role": "assistant", "content": "Cadre/Fourche | Haute | Fourche possiblement pliée après une chute; ne pas rouler"}]}
{"messages": [{"role": "system", "content": "Transforme les demandes de réparation de vélo en billets."}, {"role": "user", "content": "la batterie du vélo électrique meurt après 10 km maintenant, avant elle faisait 40"}, {"role": "assistant", "content": "Électrique | Moyenne | Autonomie du vélo électrique passée de 40 km à 10 km"}]}
{"messages": [{"role": "system", "content": "Transforme les demandes de réparation de vélo en billets."}, {"role": "user", "content": "un bruit de clic dans les pédales quand je monte une côte"}, {"role": "assistant", "content": "Transmission | Basse | Clic dans la zone des pédales sous l’effort"}]}
{"messages": [{"role": "system", "content": "Transforme les demandes de réparation de vélo en billets."}, {"role": "user", "content": "Pouvez-vous installer un siège pour enfant? J’ai déjà le siège"}, {"role": "assistant", "content": "Accessoires | Basse | Installer le siège pour enfant du client"}]}
{"messages": [{"role": "system", "content": "Transforme les demandes de réparation de vélo en billets."}, {"role": "user", "content": "la roue arrière voile beaucoup et frotte sur le patin de frein"}, {"role": "assistant", "content": "Roues | Moyenne | Roue arrière voilée, frotte sur le frein"}]}
{"messages": [{"role": "system", "content": "Transforme les demandes de réparation de vélo en billets."}, {"role": "user", "content": "vendez-vous des casques pour enfants?"}, {"role": "assistant", "content": "Pas une réparation | Basse | Question sur les casques pour enfants; transférer aux ventes"}]}
```

Dix exemples montrent le format, mais ce sont un point de départ, pas un jeu de données terminé. Le *cookbook* d’OpenAI suggère de commencer avec 30 à 50 exemples choisis avec soin et indique que les résultats devraient continuer de s’améliorer à mesure que vous en ajoutez. Bâtissez ces exemples supplémentaires à partir de vrais messages, en retirant les noms et les numéros de téléphone, et incluez les cas difficiles : deux problèmes dans un même message, aucune demande claire, des fautes d’orthographe, une question qui n’est pas du tout une réparation, comme la ligne sur les casques ci-dessus.

## Les vérifications avant de téléverser

Le carnet de préparation des données d’OpenAI effectue des vérifications que vous pouvez reprendre. Chaque ligne doit être un dictionnaire avec une liste `messages`. Chaque message a besoin d’un `role` et d’un `content`, le rôle doit être l’un des trois permis, le contenu doit être du texte, et chaque exemple doit contenir au moins un message de l’assistant. Le carnet compte aussi les jetons, signale les exemples qui dépassent la limite de 4 096 jetons et estime le coût de l’entraînement, qui parcourt par défaut les données trois fois (trois **époques**, ou *epochs*).

Lisez ensuite le fichier comme le ferait une personne. Les catégories sont-elles écrites de la même façon partout? Les niveaux d’urgence suivent-ils une seule règle? Un modèle entraîné avec « Pneus » sur certaines lignes et « Pneumatiques » sur d’autres utilisera les deux.

> **À essayer :** écrivez dix lignes d’exemple pour une tâche que vous répétez au travail, avec un seul message système fixe et un modèle de sortie strict. Demandez ensuite à un collègue d’étiqueter cinq nouvelles entrées en se guidant uniquement sur vos exemples. Là où il hésite, vos exemples doivent être plus clairs.

## Comment savoir si l’ajustement fin a aidé?

Mettez de côté un ensemble de test avant l’entraînement : 20 vraies entrées ou plus que le modèle ne verra jamais pendant l’entraînement, chacune avec le billet que vous accepteriez. Faites-les passer dans le modèle GPT-3.5 Turbo ordinaire avec votre meilleur prompt et notez les réponses. Après l’entraînement, faites passer les mêmes entrées dans le modèle ajusté, appelé avec le même court message système que celui sur lequel il a appris, et notez-les de la même façon.

Comparez trois choses : combien de billets sont entièrement corrects, à quelle fréquence le format se brise et quelle longueur doit avoir votre prompt. OpenAI rapporte que certains des premiers testeurs ont réduit leurs prompts de jusqu’à 90 % en intégrant les consignes au modèle, ce qui économise de l’argent et du temps à chaque appel. Si le modèle ajusté n’est pas meilleur sur votre ensemble de test, examinez les données d’entraînement avant toute autre chose.

Vous pouvez aussi téléverser un **fichier de validation** facultatif, un deuxième ensemble d’exemples qu’OpenAI utilise pendant l’entraînement pour vérifier si le modèle se contente de mémoriser l’ensemble d’entraînement au lieu d’apprendre la régularité. Cela aide, mais seul votre propre ensemble de test mesure ce qui compte : des billets corrects pour de vrais messages.

## Sources

- GPT-3.5 Turbo fine-tuning and API updates: https://openai.com/index/gpt-3-5-turbo-fine-tuning-and-api-updates/
- How to fine-tune chat models: https://github.com/openai/openai-cookbook/blob/1ae3bf631ba748ef5d05a7e1e1de73dedebba32d/examples/How_to_finetune_chat_models.ipynb
- Data preparation and analysis for chat model fine-tuning: https://github.com/openai/openai-cookbook/blob/5783656852d507c335955d14875ebc9902f628ef/examples/Chat_finetuning_data_prep.ipynb
