Création d’un modèle personnalisé affiné avec l’API de langage GPT-3 d’OpenAI

J’ai suivi la méthode la plus simple possible pour créer un modèle génératif personnalisé à l’aide de l’API de langage GPT-3 d’OpenAI. Dans cet article, je détaille le processus. De plus, je compare les résultats génératifs du modèle personnalisé avec les résultats de la curie et du dernier modèle text-davinci-3.

Introduction

Pour réussir la mise en œuvre en entreprise d’un LLM génératif ou prédictif, un certain degré d’ajustement sera nécessaire. Le réglage fin est essentiel pour les termes spécifiques à l’industrie ou à l’entreprise, le jargon, les noms de produits et de services, etc. Un modèle personnalisé est également important pour être plus précis dans les résultats générés.

Dans cet article, je fais une présentation de l’approche la plus simplifiée pour créer un modèle génératif pour l’API OpenAI GPT-3 Language.

Dans la conclusion , j’aborderai le graphique d’ouverture illustrant le temps et l’effort…

Le processus de création et de maintenance d’un modèle affiné peut être divisé en cinq étapes de base :

1️⃣ Collecter et formater les données de formation

Cette étape est l’étape la plus exigeante en termes d’efforts et de temps . Les données pertinentes doivent être collectées, conservées et formatées pour être soumises au LLM pour la formation.

Traditionnellement, ce processus de conversion de données non structurées en données de formation LLM est abordé de manière manuelle.

Pour ce prototype, j’ai créé un fichier JSON avec environ 1 500 entrées de questions et réponses de Kaggle. Ci-dessous un extrait du dossier de formation :

{ "prompt" : "Les États-Unis ont-ils rejoint la Société des Nations ?" , 
"completion" : "Non" } 
{ "prompt" : "Où la Société des Nations a-t-elle été créée ?" , 
"achèvement" : "Paris" }

C’est aussi le format JSONL dans lequel OpenAI exige que les données soient en…

2️⃣ Valider et tester les données de formation

OpenAI dispose d’un utilitaire qui s’exécute automatiquement lors du téléchargement des données d’entraînement, après quoi l’OpenAI CLI valide les données d’entraînement…

Vous trouverez ci-dessous la commande pour lancer le téléchargement et la vérification des données :

outils openai fine_tunes. prepare_data -f qa. SMS

Et, dans la ligne de commande, OpenAI revient avec des suggestions via une interface d’invite permettant à l’utilisateur d’accepter les modifications ou de les ignorer. J’ai accepté toutes les modifications suggérées et l’utilitaire OpenAI a corrigé toutes les anomalies dans mon fichier de formation.

Analyse en cours...- En fonction de votre extension de fichier, vous avez fourni un fichier texte 
- Votre fichier contient 1476 paires invite-complétion 
- La colonne/clé `complétion` ne doit pas contenir de chaînes vides. Ce sont des lignes : [1475]Sur la base de l'analyse, nous effectuerons les actions suivantes :- 
[Nécessaire] Votre format `TXT` sera converti en `JSONL` 
- [Nécessaire] Supprimer 1 lignes avec des complétions vides 
- [Recommandé] Supprimer 159 lignes dupliquées [O/n] : O 
- [Recommandé] Ajouter un caractère d'espacement au début de l'achèvement [O/n] :

La formation est lancée avec la commande :

openai api fine_tunes.create -t ​​<TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL>openai api fine_tunes.create -t ​​qa.jsonl -m curie

4️⃣ Tester et mettre en œuvre un nouveau modèle affiné

Le modèle nouvellement formé est accessible via la ligne de commande ou via le terrain de jeu où le modèle personnalisé affiné est disponible dans la liste des modèles.

Comme on le voit ci-dessous, le moyen le plus simple de tester et d’évaluer le nouveau modèle est via le terrain de jeu. À condition que vous testiez avec des quantités limitées de données. Dans les cas où vous testez avec un grand corpus de données, il est conseillé d’utiliser et de modifier l’un des notebooks OpenAI.

Dans l’image ci-dessus, vous voyez un certain nombre de modèles affinés dans mon compte, nous allons tester le dernier modèle. Il y a bien sûr des considérations lors du choix du modèle GPT-3 de base d’OpenAI. Pour cette instance, le modèle GPT-3 de base utilisé pour le réglage fin personnalisé est curie.

Il y a quelques considérations lors de la sélection d’un modèle de base… le coût par rapport aux performances ou au rendement est évidemment une priorité.

Il est évident que le modèle personnalisé renvoie exactement le même résultat que les données d’apprentissage. Le modèle curie de base génère la même réponse, mais augmentée. Enfin, text-davinci-003 a la réponse la plus détaillée et la plus complète.

Modèle standard GPT -3 curie : 
{ "prompt" : "Quel est le plus grand pays du monde ?" , 
"achèvement" : "Le plus grand pays du monde est la Russie." }

 Standard GPT -3 text-davinci -003 Model : 
{ "prompt" : "Quel est le plus grand pays du monde ?" , 
"achèvement" : "La Russie est le plus grand pays du monde, couvrant une superficie de 17 098 242 km² (6 601 668 mi²)." }

 Données d'entraînement :  
{ "invite" :, 
"completion" : "Russie" } Modèle 

personnalisé GPT -3 optimisé : 
{ "prompt" : "Quel est le plus grand pays du monde ?" , 
"achèvement" : "Russie" }

Ce test était particulièrement intéressant car le modèle GPT-3 personnalisé affiné a renvoyé la réponse entraînée, « le smew », mais la réponse est augmentée. J’ai testé cela plusieurs fois et la même réponse augmentée a été donnée.

Assez intéressant, curie et text-davinci-003 ont renvoyé des réponses différentes ensemble.

Modèle standard GPT -3 curie : 
{ "prompt" : "Quel est le nom d'une espèce spécialisée de canard adaptée à la capture de gros poissons ?" , 
"completion" : "Un harle." }

 Standard GPT -3 text-davinci -003 Model : 
{ "prompt" : "Quel est le nom d'une espèce spécialisée de canard adaptée à la capture de gros poissons ?" , 
"achèvement" : "Un canard arlequin." }

 Données d'entraînement :  
{ "invite" : ", 
"completion" : "the smew" }

 Custom GPT -3 Fine-Tuned Model : 
{ "prompt" : "Quel est le nom d'une espèce spécialisée de canard adaptée pour attraper de gros poissons ?" , 
"complétion" : "le smew, une espèce de canard de la famille des Anatidés." }

Encore une fois, le modèle personnalisé correspondait aux données d’entraînement. Le modèle curie et les modèles text_davinci-003 donnent des réponses différentes. Cela en soi est intéressant car la question est très ambiguë et la réponse peut être l’un des quatre océans.

Une question ambiguë comme celle-ci constitue un bon argument pour un réglage fin, si vous souhaitez guider le modèle génératif dans une certaine direction pour des scénarios ambigus particuliers.

Modèle standard GPT -3 curie : 
{ "invite" : "Quel plan d'eau se trouve au sud de la Finlande ?" , 
"achèvement" : "Le golfe de Finlande." }

 Standard GPT -3 text-davinci -003 Model : 
{ "prompt" : "Quel plan d'eau se trouve au sud de la Finlande ?" , 
"achèvement" : "La mer Baltique." }

 Données d'entraînement :  
{ "prompt" : "Quel plan d'eau se trouve au sud de la Finlande ?" , 
"} Modèle 

personnalisé GPT -3 : 
{ "invite" : "Quel plan d'eau se trouve au sud de la Finlande ?" , 
"achèvement" : "Mer Archipel." }

Enfin, les données de formation et le modèle personnalisé sont synchronisés. Le modèle curie a retourné incorrectement no . Alors que le modèle text-davinci-003 a renvoyé une réponse correcte et détaillée à la question.

Cette question est difficile sur deux fronts, c’est une question particulièrement niche avec peu de contexte.

Modèle standard GPT -3 curie : 
{ "prompt" : "Adams était-il un opposant au Stamp Act ?" , 
"complétion" : "Non. Il était un fervent partisan du Stamp Act." }

 Standard GPT -3 text-davinci -003 Model : 
{ "prompt" : "Adams était-il un opposant au Stamp Act ?" , 
"achèvement" : "Oui, John Adams était un opposant au Stamp Act. Il a écrit plusieurs essais et brochures critiquant la loi et a été un chef de file du mouvement pour l'abroger." }

 Données d'entraînement : 
"Adams était-il un opposant au Stamp Act?" , 
"completion" : "Oui" } Modèle 

personnalisé GPT -3 : 
{ "prompt" : "Adams était-il un opposant au Stamp Act ?" , 
"achèvement" : "Oui." }

🎯 Quand j’ai posé la même question au modèle curie avec un peu plus de contexte en ajoutant « John » à la question, la réponse est correcte.

Le modèle peut être testé de la manière suivante depuis la ligne de commande :

openai api completes.create -m curie:ft- 
user- fdfefsfrssasfooeesfs-2021-07-30-21-30-40 -p "Est-ce une station de sports d'hiver, bien qu'elle soit peut-être mieux connue comme paradis fiscal ?"

Quelque chose d’intéressant dans la réponse est que les données de formation étaient :

{ "prompt" : "Est-ce une station de sports d'hiver, bien qu'elle soit peut-être mieux connue comme paradis fiscal ?" , "achèvement" : "Oui" }

Et la réponse de l’API OpenAI Langauge était :

Oui. C'est une station de sports d'hiver.

Il s’agit d’une augmentation très conversationnelle du court exemple de formation « oui » pour une question très ambiguë et arbitraire.

5️⃣ Suivez un processus itératif d’amélioration du modèle

Avant le lancement, les données non structurées doivent être explorées et, via un processus de conception NLU , les données non structurées doivent être converties en données de formation NLU ou NLG hautement structurées.

Par la suite, les performances du modèle doivent être évaluées et des améliorations identifiées. Via l’exploration, des données supplémentaires ou correctes sont définies, etc.

En conclusion

Quelque chose que j’ai trouvé est que le processus de collecte, de vérification et de formatage des données de formation en masse demande le plus d’efforts et prend du temps.

Retour en haut