Dans mon dernier article, j'ai utilisé OpenAi pour générer des résumés de plus de 500 articles de blogues afin de générer 4 questions et 4 réponses pour chaque article.
L'objectif était de générer un fichier CSV pour entraîner OpenAi et faire en sorte que @Robolivier puisse répondre en utilisant les données de mon site web.
Malheureusement, on dirait bien que l'outil que j'ai utilisé pour fine-tuner (entraîner) le modèle avait quelques limitations qui m'ont empêché d'arriver au résultat souhaité.
J'ai donc décidé de poursuivre mon chemin et de découvrir comment entraîner OpenAi sans passer par un intermédiaire!
Pour y arriver, je vais simplement suivre les étapes de la documentation et me taper la tête contre le clavier de mon ordinateur jusqu'à ce que quelque chose finisse par fonctionner. Cet article a donc pour but de documenter ce merveilleux processus!
L'objectif est non seulement de faire le défrichage nécessaire pour t'indiquer quel chemin prendre / ne pas prendre, mais également de te donner une petite fenêtre sur l'arrière-scène de l'innovation.
Vois-tu… Quand tu parles avec quelqu'un qui "semble" s'y connaître sur un sujet (alors que toi, tu n'y connais rien), c'est facile de penser que cette personne se trouve à des années-lumière de toi.
La réalité est souvent beaucoup plus sobre que ça…
Je me souviens d'un épisode des Simpsons où Marge a décidé d'enseigner le piano pour faire un peu plus d'argent. Homer lui a dit "Marge, tu ne sais pas jouer du piano!", sur quoi elle a répondu "C'est facile, il faut juste que j'aie une leçon d'avance sur l'élève!"
Je veux donc que tu gardes en tête que, malgré le fait que j'ai l'air de savoir ce que je fais, je ne suis qu'une seule leçon en avant de toi.
Et, parlant de leçon, on va commencer par s'assurer qu'on part des mêmes bases. Vois-tu, la première chose à faire pour pouvoir s'amuser avec OpenAi est de configurer son environnement de travail.
Pour y arriver, je vais devoir débuter par t'expliquer quelques concepts importants…
Si tu as lu mon dernier article, tu sais que j'ai tenté d'utiliser le CLI d'Open AI sans succès.
Pour les non-geeks, CLI veut dire "Command Line Interface", ce qui représente l'opposé de GUI (Graphical User Interface).
En gros, un CLI permet aux gens d'effectuer des actions en écrivant du texte dans un terminal.
Pour accéder au terminal sous windows, il ne suffit que de faire "WIN" + "X"
et de le sélectionner dans la liste.
Le terminal ressemble à ceci:
Bref, pour être en mesure d'entraîner mon modèle, je n'aurai pas le choix de passer par là.
Je sais, ça fait un peu peur tout ça… Ne t'inquiète pas, te vais tout t'expliquer simplement & dans des mots que tu comprends au fur et à mesure que j'avance.
Avant de continuer, je tiens à dire que les membres de La Tranchée ont accès à ma formation sur les bases du web où j'explique plus en détail les termes techniques comme API, Framework, Librairies, etc. Si tu es membre, assure-toi de t'inscrire (gratuitement) et d'aller y jeter un coup d'oeil!
Pour être capable d'accéder au CLI d'OpenAi, il faut commencer par installer leur "librairie".
Si tu ne sais pas ce que c'est, voici @Robolivier à la rescousse:
Robolivier :Une librairie en programmation, c'est un peu comme une boîte à outils pour les programmeurs. Les outils sont des petits morceaux de programme qui ont déjà été créés par d'autres personnes et qui peuvent aider les programmeurs à faire leur travail plus facilement et plus rapidement.
C'est comme si tu avais un sac à dos rempli de crayons, de gommes et de ciseaux pour faire de l'art. Au lieu de tout fabriquer toi-même, tu peux utiliser les outils qui sont déjà là pour créer quelque chose de nouveau. Les bibliothèques en programmation sont un peu comme ça !
Bref, en installant la librairie de OpenAi, ça va nous donner accès à leur CLI.
Pour l'installer, on doit exécuter cette commande dans notre terminal:
pip install --upgrade openai
Sauf que, si tu fais ça sans préparer ton environnement, ça ne fonctionnera pas.
Puisque les librairies représentent du code, ça implique que ce code est rédigé dans une langue particulière. Dans notre cas, en Python.
Si tu n'as jamais entendu parler de ça, sache qu'il s'agit de la langue la plus souvent utilisée par les développeurs en intelligence artificielle.
J'ai demandé à @Robolivier de m'expliquer pourquoi les gens utilisent cette langue. Voici ce qu'il m'a répondu:
Robolivier :Python est un langage de programmation très populaire et utile pour plusieurs raisons.
Premièrement, Python est un langage de programmation très facile à apprendre et à utiliser. Il a une syntaxe simple et claire qui est facile à comprendre pour les débutants. Cela signifie que si tu veux apprendre à programmer, Python est un excellent choix pour commencer.
Deuxièmement, Python est un langage très polyvalent. Il est utilisé dans de nombreux domaines, tels que la science des données, l'intelligence artificielle, le développement web, la sécurité informatique, et bien plus encore. Cela signifie que si tu apprends Python, tu peux l'utiliser dans de nombreux domaines différents.
Troisièmement, Python a une grande communauté de développeurs. Cela signifie qu'il y a beaucoup de ressources disponibles pour apprendre Python, telles que des tutoriels, des cours en ligne et des forums. Il y a également beaucoup de bibliothèques et de modules tiers disponibles pour Python, ce qui facilite encore plus la programmation.
Enfin, Python est un langage de programmation open-source, ce qui signifie qu'il est gratuit et peut être utilisé par tout le monde. Il est également disponible sur de nombreuses plates-formes différentes, telles que Windows, Mac et Linux.
En résumé, Python est un langage de programmation facile à apprendre, polyvalent, avec une grande communauté de développeurs et qui est open-source. C'est pourquoi il est largement utilisé et recommandé pour de nombreuses applications différentes.
Personnellement, je n'ai jamais codé en Python alors dis-toi qu'on part avec un niveau de connaissances similaire! Du moins, sur la structure et les fonctionnalités de cette langue… 🤷♂️
Bref, pour être capable d'installer OpenAi, on va devoir commencer par installer Python.
On peut faire ça de deux façons:
J'ai fait les deux, et une seule des deux options fonctionne facilement.
Si tu es sur Linux et Mac, probablement que tu peux t'en tirer en installant Python directement.
Sur Windows, c'est une autre histoire… Il faut faire plein de manipulations complexes de plus. Ça m'a donné mal à la tête et ce n'est pas quelque chose que je te souhaite. Si ça ne te dérange pas, on va donc passer par Anaconda!
"Anaconda, c'est quoi au juste?"
Bonne question! Encore une fois, voici @Robolivier à la rescousse:
Robolivier :Python est un langage de programmation. Imagine que tu parles avec ton ordinateur comme tu parles avec tes amis, sauf que tu dois être très précis et dire à l'ordinateur exactement quoi faire. Python est un langage que les programmeurs utilisent pour parler à l'ordinateur et lui dire quoi faire.
Anaconda est un peu comme une boîte à outils pour les programmeurs. Elle contient non seulement Python, mais aussi d'autres outils et bibliothèques qui aident les programmeurs à faire leur travail plus facilement. C'est comme une boîte à outils pour les bricoleurs, où il y a des outils pour toutes sortes de travaux différents, comme marteler des clous ou visser des vis.
En résumé, Python est une façon de parler à l'ordinateur, et Anaconda est une boîte à outils pour aider les programmeurs à faire leur travail plus facilement.
Bref, clique ici, télécharge et installe Anaconda.
Une fois Anaconda installé, tu vas pouvoir accéder à Anaconda Prompt:
Qui ressemble à ceci:
Si on se fie à la documentation d'OpenAi, il ne te reste plus qu'à installer leur librairie en exécutant:
pip install --upgrade openai
Ça devrait fonctionner, mais tu devrais obtenir l'erreur suivante:
Et, lorsque tu essaies d'exécuter OpenAi en inscrivant openai
dans le terminal, voici ce que tu vas obtenir:
'openai' is not recognized as an internal or external command,
operable program or batch file.
Bref, la même erreur que j'ai obtenue dans mon dernier article avec le terminal normal de Windows. 😡
Tu te dis sans doute: "Mais Olivier, pourquoi tu me fais prendre Anaconda si ça fait la même maudite erreur!?"
Parce qu'avec Anaconda vient Conda Forge! @Robolivier?
Robolivier :Conda-Forge est une communauté de personnes qui travaillent ensemble pour construire et maintenir un grand nombre de paquets logiciels open source pour la plateforme Conda.
Conda-Forge fournit une collection de packages logiciels pré-compilés, prêts à être installés via la plateforme Conda, ce qui facilite grandement la tâche des utilisateurs qui souhaitent installer et utiliser des outils et des bibliothèques dans leur environnement de développement Python.
Un utilisateur s'est donc donné la peine de créer et d'optimiser un environnement de travail pour OpenAi et de l'offrir à tous gratuitement sur le web. Vive l'open source! Le package en question se trouve ici.
Il faut donc que tu colles ceci dans ton terminal Anaconda:
conda install -c conda-forge openai
Robolivier :Petit truc! Pour coller du texte dans un terminal, tu dois faire le clic droit sur ta souris! 🤖😉
Un paquet de texte va apparaître et ça va te demander si tu veux procéder:
Il faut simplement appuyer sur Y et faire "enter". Un paquet de texte va ensuite défiler et tu vas sans doute arriver à ce message d'erreur:
Si c'est le cas, c'est simplement que tu dois redémarrer Anaconda en tant qu'administrateur!
Recommence la procédure et maintenant, tu devrais obtenir ce message de confirmation et, lorsque tu écris openai
dans ton terminal, tu devrais avoir accès au CLI:
Félicitations, tu viens d'installer ta première librairie et es officiellement rendu un nerd!!!
🤓 Commet tu te sens?
Pour entraîner OpenAi, on doit leur envoyer un fichier JsonLines qui a une structure comme ça:
{"prompt": "Qui est le plus beau?", "completion": "Olivier Lambert"}
{"prompt": "Qui est le plus intelligent?", "completion": "Olivier Lambert"}
{"prompt": "Qui est le plus drôle?", "completion": "Olivier Lambert"}
Pour générer ce fichier, la meilleure chose à faire est simplement de créer un document Google Sheet ayant 2 colones: "prompt" et "completion".
On l'exporte en CSV:
Et on utilise ensuite un convertisseur de CSV vers JsonLines.
Une fois que c'est fait, télécharge le document, renomme-le pour "training.jsonl" et place le ici sur ton ordinateur: C:\training.jsonl
Dans mon cas, je vais commencer par tester le tout avec les données de mon site web que j'ai généré dans la première partie de cette série.
Tu peux télécharger le fichier en cliquant ici.
À l'intérieur du terminal, on va maintenant naviguer au même endroit que le fichier. Par défaut, ton terminal s'ouvre dans le répertoire de ton utilisateur. Pour te rendre sur le disque C, il ne suffit que de rentrer la commande "CD" (pour Change Directory) suivie de deux petits points. Ces deux petits points indiquent au terminal de remonter d'un cran dans l'arborescence.
Avant d'entraîner le modèle, il faut d'abord préparer le fichier.
openai tools fine_tunes.prepare_data -f "training.jsonl"
Le CLI va examiner notre fichier et nous faire quelques recommandations.
Ici, il nous dit que notre fichier devrait contenir plus que 9 paires de prompt/completions. Puisque ce n'est qu'un test, il n'y a rien de bien épeurant ici.
Ensuite, il nous informe qu'il doit ajouter un espace vide au début de chaque completion. Cette étape est nécessaire puisque sinon, OpenAi va ignorer le premier mot de chaque completion!
Une fois qu'on fait Y
et qu'on appuie sur enter
, le CLI va modifier notre fichier et l'enregistrer sous le nom training_prepared.jsonl
.
Pour entraîner le modèle, il ne nous reste plus qu'à faire:
openai api fine_tunes.create -t "training_prepared.jsonl" -m davinci
On frappe une dernière erreur avant de pouvoir entraîner notre modèle. Pour lier le CLI à notre compte OpenAi, on doit y ajouter notre clef d'API.
Si tu ne sais pas où cette dernière se trouve, tu n'as qu'à suivre ce lien: Account API Keys
Ensuite, on exécute ceci (en insérant ta clef d'API entre les , of course):
set OPENAI_API_KEY={{OPENAI_API_KEY}}
Et on ré-exécute la commande pour entraîner le modèle.
Robolivier :Petit truc, tu peux appuyer sur la flèche du haut 🔼 de ton clavier pour naviguer à travers ton historique de commandes!
Ton modèle va ensuite se mettre dans une file d'attente afin d'être entraîné. De mon côté, le processus semble se terminer automatiquement après quelques secondes. Si tu veux voir où ta commande se trouve dans la file d'attente, tu peux exécuter la commande qu'ils t'affichent à l'écran:
@Robolivier: Petit truc! Lorsque tu surlignes le texte à l'aide de ton curseur dans un terminal, ça ajoute le texte au presse-papier. Ne te reste plus qu'à faire clic droit pour coller le texte!
Le processus complet devrait prendre environ 30 minutes, après quoi tu vas voir quelque chose qui ressemble à ça:
Une fois que c'est terminé, tu peux aller [dans ton playground](Playground - OpenAI API) et tu vas le trouver dans le bas de la liste des modèles:
Wheeew… On en a fait des étapes! Une fois qu'on sait comment, ce n'est pas si long que ça, mais quand on part de zéro, c'est la pouasse! (Dit avec un faux-accent français)
Ne reste plus qu'à tester notre nouveau modèle! 😁 Je vais lui poser la première question de notre training_prepared.jsonl:
Ouf… Ça ne commence pas bien! Aucune mention vers le site web de La Tranchée et il ne semble pas comprendre quand arrêter de générer du texte.
Voici le genre de réponses qu'il aurait dû donner en se basant sur notre document:
Si tu veux en apprendre plus sur les affaires sur Alibaba, je t'invite à consulter cet article : 10 choses que j’ai apprises en faisant affaire sur Alibaba. Tu y trouveras des conseils précieux si tu débutes dans le commerce avec ce fournisseur international. Il aborde entre autres la barrière de langue, le choix des manufactures et comment négocier le prix et les quantités minimales. De plus, il est important de bien comprendre comment sont transportés les produits achetés. Alors lance-toi! Si tu as besoin de trucs supplémentaires pour te guider dans tes transactions commerciales, n'hésite pas à demander !
J'ai essayé de lui poser plusieurs questions en jouant avec les paramètres pour tenter de comprendre où était le problème. En faisant ça, j'ai enfin compris l'utilité du paramètre "Stop Sequences".
Il s'agit d'une séquence de caractères qui indiquent à OpenAi d'arrêter à générer du texte. Dans mon exemple, OpenAi est capable de comprendre qu'il s'agit d'une conversation entre Robolivier et un utilisateur. En ajoutant Utilisateur:
comme stop sequence, ça l'empêche de prendre plus d'une personnalité.
Mais une question encore plus importante reste... Pourquoi est-ce que j'ai besoin de configurer une stop sequence si tout fonctionne bien sans ça dans la version actuelle de Robolivier?
C'est là que j'ai compris...
En lisant la documentation, il semblerait que j'ai omis de lire un paragraphe important:
Et, en fouillant un peu plus, j'ai trouvé ces 2 pages dans leur base de connaissance:
Tl;Dr:
text
-davinci-001
et ils n'ont aucun plan pour permettre d'entraîner la version 3.text-davinci-001
. Si je dois choisir entre la version 3 et la version 1, c'est certains que je veux la version 3! Mais ce n'est même pas le cas puisque Robolivier utilise une version plus évoluée: GPT4. Cette version est encore plus versatile et permet d'utiliser jusqu'à 8000 jetons par requête!
Semblerait'il que l'approche que j'ai choisie n'était pas la bonne. À travers mes recherches, j'ai réalisé qu'au lieu de "fine-tuner" je devrais plutôt faire ce qu'on appelle du embedding...
L'embedding, consiste à transformer un texte en une série de vecteurs (nombres) que GPT peut comprendre et utiliser pour répondre à la question posée. Cette stratégie permet d'indexer de larges quantités de textes et de créer un genre de moteur de recherche qui n'est pas fait pour des humains, mais pour les robots.
Si j'ai bien compris, ça va permettre à Robolivier de construire sa réponse en 2 temps: il va commencer par chercher les passages de textes pertinents à travers les articles vectorisés pour ensuite les utiliser comme référence dans sa réponse.
Plus j'y pense, plus l'embedding m'excite! En théorie, je pourrais indexer La Tranchée DANS SON ENSEMBLE! Ça permettrait a Robolivier, lors de ses interactions sur le forum, de référer à d'autres conversations pertinentes, à un ou plusieurs articles de blogue, ou même à une leçon du portail de cours!
Je sais, ça fait un peu anti-climatique comme fin...
Tu aurais sans doute préféré que ce soit suffisant de fine-tuner un modèle. Par contre, je tiens à te rassurer: tu n'as pas lu tout ça pour rien! L'embedding se fait à partir du CLI d'OpenAi alors tout ce que tu as appris aujourd'hui sera ré-utilisé dans la 3e partie de ce guide.
Parlant de la 3e partie, je n'ai aucune idée de quand je vais avoir le temps de la publier alors assure-toi d'être abonné à l'infolettre!
Finalement, j'espère que tu as apprécié cet article et n'hésites surtout pas à me laisser un petit commentaire pour me dire ce que tu en as pensé! Rédiger ces guides me demande beaucoup de temps et je ne vais pas continuer si ça n'intéresse personne. 😅
On se revoit dans les commentaires! 🫡