Réglage fin de GPT-3 à l’aide de Python pour créer un assistant virtuel de santé mentale
Créez votre propre ChatGPT en ajustant GPT-3
Rebonjour! Dans mon article précédent , j’ai décrit les étapes nécessaires pour intégrer GPT-3 et Dialogflow, en créant un assistant virtuel de santé mentale. Dans celui-ci, nous allons affiner le chatbot de santé mentale que nous avons créé, en apprenant à affiner notre modèle GPT-3.
Mais d’abord, qu’est-ce que le réglage fin ?
Le réglage fin est le processus de formation d’un grand modèle de langage (LLM) pour reconnaître un modèle spécifique d’entrée et de sortie , qui peut être appliqué à n’importe quelle tâche NLP personnalisée. 🥥 En un mot, le réglage fin nous permet d’adapter notre ensemble de données personnalisé aux LLM, afin que le modèle puisse généraliser sa sortie à notre tâche particulière.
Pourquoi affiner ?
Tiré de la documentation officielle , le réglage fin vous permet de tirer le meilleur parti des modèles GPT-3 en fournissant :
- Des résultats de meilleure qualité qu’une conception rapide
- Possibilité de s’entraîner sur plus d’exemples que ne peut en contenir une invite
- Économies de jetons grâce à des invites plus courtes
- Demandes de latence réduite

À un niveau élevé, le réglage fin implique les étapes suivantes :
1. Préparation des données d’entraînement
GPT-3 s’attend à ce que votre ensemble de données de réglage fin soit dans un format de fichier JSONL spécifique, qui ressemble à ceci –
{"prompt": "<texte d'invite>", "completion": "<texte généré idéal>"}
{"prompt": "<texte d'invite>", "completion": "<texte généré idéal>"}
{" prompt": "<texte d'invite>", "completion": "<texte généré idéal>"}
C’est assez simple – chaque ligne se compose d’une « invite » et d’une « complétion » qui est le texte idéal généré pour l’invite particulière.
Avant de préparer et de télécharger nos données pour un réglage fin, la première étape consiste à collecter notre ensemble de données. Pour notre assistant en santé mentale, j’ai trouvé cet ensemble de données très pratique sur Kaggle — Depression Data for Chatbot . Selon l’auteur, les données peuvent être utilisées pour entraîner le bot à aider les personnes souffrant de dépression, ce qui est exactement notre cas d’utilisation !

Les données sont un fichier YAML contenant environ 50 conversations sur la dépression. Il semble que la première ligne avec le double tiret (- -) soit la question de l’utilisateur, et les lignes suivantes sont les réponses du bot à l’utilisateur. Explorons-le plus en détail dans un notebook Colab.
Le cahier exploratoire se trouve ici .
Téléchargez le jeu de données depuis Kaggle et copiez-le dans votre dossier Google Drive. Importez le yaml
package pour lire notre fichier .yml et utilisez- yaml.safe_load()
le pour le convertir en objet JSON.
importer yaml
avec open('/content/gdrive/MyDrive/depression-data/depression.yml', 'r') comme fichier :
data = yaml.safe_load(file)
Les données
Ensuite, préparons notre jeu de données dans le format requis.
Le code ci-dessus parcourt d’abord nos données de dépression, divise la première ligne en tant qu’invite et joint le reste des lignes en tant qu’achèvement. Il supprime également les caractères spéciaux indésirables de l’invite et des complétions. Il en résulte le bon format de données que nous pouvons utiliser pour affiner GPT-3.
{'prompt' : 'Qu'est-ce que la dépression ?', 'completion' : 'La dépression est une maladie courante et grave qui affecte négativement ce que vous ressentez, votre façon de penser et votre façon d'agir. Heureusement, il est également traitable. La dépression provoque des sentiments de tristesse et/ou une perte d'intérêt pour les activités que vous aimiez autrefois. Cela peut entraîner une variété de problèmes émotionnels et physiques et peut diminuer votre capacité à fonctionner au travail et à la maison.'},
{'prompt' : 'J'ai l'impression d'avoir laissé tomber mes parents', 'completion' : 'Peu importe quoi, tes parents seront toujours fiers de toi et t'aimeront. Vous vous sentirez beaucoup mieux si vous partagez vos sentiments avec eux.'}
En regardant quelques lignes, nous pouvons voir que les complétions offrent des réponses utiles basées sur la requête de l’utilisateur, ce que nous avons besoin que notre modèle reprenne, afin de donner des réponses pratiques aux utilisateurs dans le besoin.
Enfin, téléchargeons nos données sous forme de JSONL
fichier et déplaçons-les dans notre répertoire de projet de bloc-notes Colab.
à partir de fichiers d'importation google.colab
avec open('depression.jsonl', 'w') comme fichier de sortie :
pour i en sortie :
json.dump (je, fichier de sortie)
fichier de sortie.write('\n')
files.download('depression.jsonl')
Maintenant que nous avons notre ensemble de données d’affinement, préparons le fichier afin qu’il puisse être téléchargé pour affiner le modèle. Remarque – OpenAI fournit un outil CLI (interface de ligne de commande) utile pour préparer nos données. Il peut facilement convertir CSV, TSV, XLSX et JSON au bon format JSONL .
Pour commencer, dans la cellule du bloc-notes ou depuis votre terminal de projet, installez simplement la dépendance Open AI python avec la commande –
!pip installer openai
Ensuite, pour préparer les données de réglage fin, exécutez la commande –
!outils openai fine_tunes.prepare_data -f '/content/gdrive/MyDrive/depression-data/depression.jsonl'
Assurez-vous de remplacer votre chemin de fichier spécifique après ‘-f’. Cette commande préparera votre ensemble de données de réglage fin final, après avoir ajouté quelques modifications recommandées. Pour l’instant, vous pouvez accepter « Oui » pour toutes les actions recommandées, car cela contribuera à améliorer les performances du modèle —

Remarque – accepter « oui » à la première action recommandée nécessite que vous ajoutiez le séparateur « -> » après votre invite pendant le temps d’inférence, sinon le modèle continuera simplement l’invite au lieu de prédire l’achèvement.
Le fichier final téléchargé portera le suffixe « préparé », qui pourra ensuite être téléchargé et utilisé pour affiner le modèle.
Notez que nous n’avons que 51 échantillons pour notre tâche de réglage fin. Pour obtenir une meilleure précision, Open AI recommande d’avoir au moins 150 à 200 exemples de réglage fin, car la précision du modèle augmente de manière linéaire avec le nombre d’échantillons d’apprentissage.

2. Formation d’un nouveau modèle affiné
Maintenant que nos données sont prêtes, il est temps d’affiner GPT-3 ! ⚙️ Il existe 3 façons principales d’affiner le modèle —
(i) manuellement à l’aide de la CLI OpenAI, (ii) par programmation à l’aide du package OpenAI et (iii) via le point de terminaison de l’API finetune.
Pour ce tutoriel, j’utiliserai la CLI OpenAI car c’est la plus simple pour démarrer. Pour affiner un modèle, exécutez la commande ci-dessous, où la valeur après ‘-m’ sera utilisée pour former le modèle GPT-3 spécifique. Comme je voulais former le modèle le plus performant, j’ai choisi ‘davinci’ qui est aussi le plus cher à utiliser.
!openai api fine_tunes.create -t "/content/gdrive/MyDrive/depression-data/depression_prepared.jsonl" -m davinci
Vous pourriez obtenir une erreur du type « Aucune clé API fournie », si vous avez essayé de l’exécuter. C’est parce que nous n’avons pas encore lié notre clé API. Pour ce faire, définissez simplement une variable d’environnement dans la CLI sur votre clé API secrète en exécutant –
!set OPENAI_API_KEY=<VOTRE-CLE-API>
ou en exécutant la cellule ci-dessous dans un cahier –
os.environ['OPENAI_API_KEY'] = "<VOTRE-CLE-API>"
Maintenant, exécutez à nouveau la commande de réglage fin précédente et le tour est joué ! — Votre tâche de réglage fin GPT-3 est maintenant créée avec succès.

La CLI vous montrera également les coûts de réglage fin associés, votre position dans la file d’attente et les époques de formation. Une fois cela fait, votre propre modèle GPT-3 affiné est maintenant prêt pour l’inférence !
3. Utilisation de votre modèle affiné
Pour utiliser le modèle affiné nouvellement créé, nous pouvons commencer par le tester d’abord dans l’Open AI Playground. Dirigez-vous vers le terrain de jeu et choisissez votre modèle affiné, sous modèle et en affinage.

À partir de là, nous pouvons tester certaines invites pour voir comment notre modèle affiné fonctionne.
L’invite
Dans mon post précédent, nous avons donné l’invite suivante au modèle, qui en soi a plutôt bien fonctionné –
Ce qui suit est une conversation avec un assistant IA qui peut avoir des conversations significatives avec les utilisateurs. L'assistante est serviable, empathique et sympathique. Son objectif est de faire en sorte que l'utilisateur se sente mieux en se sentant entendu. A chaque réponse, l'assistant IA invite l'utilisateur à poursuivre la conversation de manière naturelle
Cela a bien fonctionné, mais j’ai décidé d’ajouter quelques informations supplémentaires, après une ingénierie rapide supplémentaire. Tout d’abord, j’ai donné à mon assistant de thérapie par IA un personnage – JOY. (Apt, hein ?😏)
J’ai ensuite ajouté quelques traits de personnalité à JOY, et j’ai finalement spécifié la fonction objectif de base de JOY – aider l’utilisateur à se sentir mieux en se sentant entendu. La dernière invite que j’ai fini par utiliser est –
Ce qui suit est une conversation avec un thérapeute et un utilisateur. Le thérapeute est JOY, qui utilise l'écoute compatissante pour avoir des conversations utiles et significatives avec les utilisateurs. JOY est empathique et amical. L'objectif de JOY est d'aider l'utilisateur à se sentir mieux en se sentant entendu. Avec chaque réponse, JOY propose des questions de suivi pour encourager l'ouverture et poursuivre la conversation de manière naturelle.
Le résultat

Comme vous pouvez le voir ci-dessus, le résultat a été un succès. JOY est capable d’employer des traits humains tels que l’écoute compatissante et l’empathie, et est également capable d’offrir correctement des solutions utiles au problème de l’utilisateur !
Remarque – JOY ne peut toujours pas converser dans de longues conversations, et il doit être affiné lors de conversations plus longues avec les utilisateurs, pour un meilleur contexte et de meilleurs résultats.
Une fois que vous êtes satisfait des résultats, nous pouvons ensuite le déployer dans notre application. Tout ce qui doit être changé est le nom du modèle, qui doit être remplacé par notre modèle nouvellement formé. Nous pouvons maintenant utiliser le modèle affiné par programmation, dans notre application. Appuyez simplement sur « Afficher le code » dans OpenAI Playground pour copier le code.
Mettre tous ensemble
Maintenant que notre modèle affiné est prêt à l’emploi, intégrons-le à notre agent Dialogflow. Pour ce faire, nous devrons mettre à jour notre précédent code de réalisation de webhook et le déployer.
La dernière fois , nous avons utilisé Node.js et Repl.it pour notre serveur web, mais pour mélanger un peu les choses, utilisons cette fois un serveur python Flask 🐍. Une fois mis à jour, notre point de terminaison webhook devrait ressembler à ceci . Passons maintenant au déploiement de notre serveur de réalisation de webhook.
Avant de continuer, prenons un moment de silence pour la mort du niveau gratuit d’Heroku 💀. Heroku était une plate-forme simple et incontournable pour déployer n’importe laquelle de vos applications Web. Maintenant qu’il n’offre plus de plan gratuit, nous aurons besoin d’une alternative pour déployer rapidement nos applications gratuitement – Enter Railway.App !
Railway est une plate-forme cloud où vous pouvez facilement héberger et déployer n’importe laquelle de vos applications. Ils offrent un niveau gratuit généreux et offrent des vitesses de déploiement ultra rapides. Assurez-vous de transférer d’abord votre référentiel local vers Github, afin qu’il puisse être déployé. Connectez-vous à votre compte Railway et une fois dans le tableau de bord, allez ajouter un nouveau projet. Ensuite, choisissez upload depuis Github et sélectionnez votre dépôt git, et c’est tout ! Votre application est maintenant en ligne. (Assurez-vous de mettre à jour l’URL du Webhook dans l’agent Dialogflow)
Sortir



Vous pouvez tester l’assistant de santé mentale affiné ici – amagastya.com/gpt3
Mention spéciale à David Shapiro ! Assurez-vous de consulter son impressionnant référentiel public GPT-3 Finetunes pour des données plus facilement utilisables – https://github.com/daveshap/GPT3_Finetunes
Conclusion
Le réglage fin de GPT-3 et d’autres LLM s’avère être la solution idéale pour les tâches spécifiques à un domaine, améliorant souvent considérablement les performances. Le modèle est extrêmement efficace pour détecter les modèles spécifiés dans les données de formation et fonctionne bien même avec des données de formation minimales.
Au fur et à mesure que les LLM deviennent plus grands, plus accessibles et open source, comme nous le voyons actuellement et dans un proche avenir, nous pouvons nous attendre à ce que le réglage fin devienne omniprésent dans le traitement du langage naturel car il a le potentiel de résoudre n’importe quelle tâche NLP sous le soleil.
J’espère que vous avez aimé apprendre à affiner GPT-3 et votre assistant virtuel.