Une IA sur-mesure grâce au fine-tuning

Comment adapter les réponses d’une IA générative d’entreprise ?Un article pour se mettre au parfum.

Quentin Collette
Lior Agency
11 min readFeb 16, 2024

--

Ajuster vos data pour formuler une IA à votre image

Au travers d’un cas d’usage courant (la confection de fiches produits) découvrez comment adapter les réponses d’un LLM (grand modèle de language) aux enjeux de votre société. #SpoilerAlert En bonus, j’explore en fin d’article une utilisation un peu plus fun, pour les amateurs du Gorafi !

N’avez-vous jamais été frustré par les réponses tantôt trop brèves, trop génériques, ou trop conventionnelles de votre IA générative préférée (Gemini, chatGPT, Copilot ) ? Si je vous disais qu’il est possible d’influencer de manière significative ces réponses, tant sur la forme que sur le fond, pour répondre aux besoins spécifiques de votre entreprise, ça vous plairait ? Alors il est temps d’arrêter d’essayer de trouver le prompt “parfait” et d’explorer le fine-tuning !

Vous avez dit fine-tuning ?

Imaginez-vous tenant un poste de radio analogique, cette petite molette en plastique entre vos doigts juste en-dessous du mot “Tuning”, que vous tournez avec douceur et précaution pour sélectionner la bonne fréquence de votre station préférée. Pratique aujourd’hui désuète, elle incarne tout de même cette notion de réglage précis et personnalisé, parfois par essais successifs, pour arriver à capter correctement la bonne station.

Libre ré-interprétation du poste analogique par Midjourney

J’aurai aussi pu parler de Dédé et sa Fiat Multipla tuning 🚗, mais c’était beaucoup moins poétique et nostalgique. Vous l’aurez compris, le fine-tuning consiste à ajuster, avec précision, la manière dont répond notre IA.

Le parfum de la personnalisation avec Vertex AI

Pour illustrer l’intérêt et la puissance de cette personnalisation, prenons un cas d’usage courant dans l’univers du e-commerce/retail : les fiches produits.

🎯 Grâce à ce dataset (jeux de données), nous explorerons la possibilité de créer à partir d’un nom de parfum, de sa marque, et de ses ingrédients, une fiche produit précise, qui décrit :

  • Famille olfactive (fragrance family)
  • Type (scent type)
  • Notes de tête (key notes)
  • Description du parfum (fragrance description)

C’est là que le fine-tuning entre en scène, nous permettant d’affiner notre LLM pour qu’il produise des descriptions qui respectent un format et un vocabulaire spécifique, pour envoûter le chaland qui rêve de sentir comme Johnny Depp quand il fait de la guitare dans le désert avec des loups.

Pour la partie technique, Lior Agency étant partenaire de Google, nous utiliserons la plateforme Vertex AI (et un petit coup de Duet AI) afin de réaliser cette opération les doigts dans le 👃.

Une IA qui fleure bon la data

Vous connaissez la chanson: sans data de qualité, pas d’IA.

La première étape consiste à produire un dataset qui contient de la donnée propre. Le dataset récupéré sur Kaggle est plutôt de bonne qualité (ensemble de produits vendus par Sephora sur son site), mais il nécessite quelques ajustements assez basiques, que je vous épargne. Ces ajustements sont d’ailleurs facilement réalisés grâce au code interpreter de chatGPT, dont je vous parlais dans cet article ⬇️

Pour notre cas d’usage nous utiliserons uniquement les parfums, en se focalisant sur le nom, la marque, et les ingrédients, transformés en un format qui respecte les besoins de notre modèle.

Notre objectif est de générer une description respectant un format strict et un vocabulaire spécifique, qui pourra être exploité directement sur un site e-commerce.

Pour des résultats probants, Google recommande un dataset d’environ 100 à 500 échantillons (max. 10 000). Voici un exemple du format de données à fournir, le dataset complet contient 292 entrées.

{"input_text" : "brand:dior\nname:miss dior rose n'roses eau de toilette\ningredients:alcohol- parfum (fragrance)- aqua (water)- ethylhexyl methoxycinnamate- limonene- hydroxycitronellal- linalool- citronellol- butyl methoxydibenzoylmethane- ethylhexyl salicylate- geraniol- triethyl citrate- pentaerythrityl tetra-di-t-butyl- hydroxyhydrocinnamate- coumarin- citral- benzyl alcohol- eugenol- bht- ci 17200 (red 33)- ci 19140 (yellow 5)- ci 60730 (ext. violet 2).", "output_text":"Fragrance Family:\nfloral\n\nScent Type:\nclassic floral\n\nKey Notes:\ngrasse rose absolue- italian mandarin- white musk accord\n\nFragrance Description:\nmiss dior rose n'roses is a fresh- sparkling eau de toilette. vibrant and lively- the rose notes exude an irresistible scent that immediately transports us to a field of flowers. the abundance of grasse and damascus rose notes are brightened by a note of bergamot zest."}

Voici ce que cela donnerait en terme de prompt et de réponse. En haut, les données que l’on fournit à notre LLM, en bas la fiche produit générée.

Interface pour tester vos prompts dans Vertex AI

La diversité des méthodes de fine-tuning

Il existe plusieurs formes de fine-tuning, adaptées à différents besoins. Vertex AI supporte (pour l’instant) deux approches principales : le fine-tuning supervisé et le RLHF (Reinforcement Learning from Human Feedback). Tandis que cette seconde option peut s’avérer puissante pour des cas d’usage complexes, il requiert également un effort considérable pour la création d’un dataset.

Pour notre projet olfactif, nous opterons pour une méthode plus accessible mais tout aussi efficace : le PEFT (Parameter-Efficient Fine-Tuning).

PEFT : L’Art de la personnalisation efficace

Le fine-tuning traditionnel, bien qu’efficace pour des modèles de moindre envergure, se heurte à un mur lorsqu’il s’agit de LLMs, en raison de leur taille colossale. Mettre à jour chaque paramètre d’un LLM requiert des ressources énormes et un temps considérable, rendant la tâche pratiquement irréalisable.

Le PEFT offre une solution élégante à cette problématique. En se concentrant sur l’ajustement d’un sous-ensemble restreint de paramètres, cette méthode permet une personnalisation profonde sans nécessiter un ré-entrainement complet du modèle.

Le fine-tuning : “eh pourquoi faire ?”

  • Imposer un format de sortie
  • Adapter le vocabulaire
  • Améliorer la fiabilité des réponses
  • Economie de tokens : plus besoin d’écrire un prompt long comme le bras 🦾

En route vers la personnalisation

Rendez-vous dans la section “Language” de Vertex AI, dans l’onglet “Tune and Distill”. Après avoir cliqué sur “Create tuned model”, un formulaire s’ouvre.

Après avoir choisi un nom et un modèle de base (ici text-bison@002), on peut se contenter (dans un premier temps) de laisser les paramètres par défaut. Notez que si vous avez un doute, vous pouvez utiliser Duet AI pour vous rencarder, c’est appréciable !

Duet AI, intégré à GCP, vous guide dans l’utilisation des différents services

L’étape suivante consiste essentiellement à fournir le dataset d’entraînement. Si vous disposez d’un dataset d’évaluation, afin de mesurer les performances de votre modèle fine-tuné, vous pouvez le renseigner ici.

Ensuite, il n’y a plus qu’à sortir les pop-corns🍿. Vertex AI abstrait pour vous toute la procédure de création et d’exécution de la pipeline. Dans notre exemple, il faut compter environ 1h30.

La pipeline au complet

En cliquant sur les étapes de la pipeline, on peut ouvrir le navigateur de logs pour vérifier ce qu’il se passe.

A noter : la pipeline comporte une étape de validation du dataset d’entraînement (vertex-pipelines-prompt-validation) et permet de générer un rapport sur les sujets potentiellement problématiques (violence, drogues, religions, etc), qui s’inscrit dans la politique de Responsible AI. Voici un extrait du rapport :

{
"max_user_output_token_length":337,
"summary":"Validated 292 examples for RAI. Found 9 examples that has RAI issues. See 'rai_issues' field for some specific examples.\n",
"rai_issues":[
"Row: 38. RAI violation. High scores for categories Religion & Belief",
"Row: 65. RAI violation. High scores for categories Illicit Drugs",
"Row: 143. RAI violation. High scores for categories Firearms & Weapons",
[....]
"Row: 195. RAI violation. High scores for categories Religion & Belief",
"Row: 255. RAI violation. Identified as harmful."
],
"max_user_input_token_length":278
}

Chaque ligne problématique est clairement identifiée.

  • Firearms & Weapons fait référence à la marque “juliette has a gun” présente dans le dataset.
  • Religion & Belief fait probablement référence à la description du parfum Angel “angel is a glamorous fragrance for the woman who is half-angelic and half-devilish.”

🔔 Des alertes à prendre avec des pincettes donc.

Tester son modèle “fine-tuné”

Une fois l’entraînement terminé, vous pouvez vous rendre dans Vertex AI Studio pour tester votre modèle accessible dans la liste déroulante en haut à droite.

Le modèle est directement déployé, mais la beauté du fine-tuning de modèles dans Vertex AI, fait que vous ne payez que si vous l’utilisez (et ça c’est beau, croyez-moi !).

Notre modèle tuné est désormais accessible dans la liste en haut à droite

Il suffit maintenant de respecter le format d’entrée que l’on a instauré dans notre dataset d’entrainement, par exemple :

brand:tom ford
name:sole di positano
ingredients: Alcohol Denat.- Water\Aqua\Eau- Fragrance (Parfum)- Limonene- Linalool- Hydroxycitronellal- Hexyl Cinnamal- Alpha-Isomethyl Ionone- Citral- Citronellol- Geraniol- Eugenol- Farnesol- Cinnamyl Alcohol- Benzyl Benzoate- Tocopherol- Bht.

Le modèle nous répond ensuite exactement dans le format que nous lui avons spécifié, en utilisant également le vocabulaire lié à la parfumerie.

Fragrance Family:
fresh

Scent Type:
fresh citrus & fruits

Key Notes:
bergamot- orange- jasmine

Fragrance Description:
sole di positano is a fresh- citrusy- floral fragrance that captures the essence of the italian coast. the scent opens with a burst of bergamot- orange- and mandarin- followed by a heart of jasmine- ylang-ylang- and tuberose. the fragrance dries down to a base of musk- amber- and vanilla.

Remarque : l’absence des majuscules est liée au jeu de données où elles ont été supprimées.

Voici les résultats de quelques tests en comparant la description originale du parfum avec celle générée par notre modèle lior-jadore.

Extrait des résultats

Il existe de nombreuses manière d’évaluer ces résultats, et cela pourrait faire l’objet d’un article à part entière. Nous pourrions notamment utiliser ROUGE pour obtenir le pourcentage de similarité sémantique.

Quelques remarques sur les résultats obtenus :

  • Pas besoin de saisir d’autres instructions que le nom, la marque et les ingrédients
  • Le format de sortie est toujours respecté
  • La qualité des prédiction est plutôt bonne, notamment sur la Fragrance family et le Scent type.
  • Key note : le modèle arrive à avoir entre 1 et 3 notes de justes
  • Pour la fragrance description le vocabulaire et la tournure des phrases collent bien avec la description d’un parfum. Notez que pour ce champ, il est aussi possible de jouer avec la température du modèle pour plus de créativité.

⚠️ J’ai beau avoir un grand nez et du flair (parfois), je ne suis absolument pas expert dans le domaine de la parfumerie, et il y aurait de nombreux ajustements à effectuer pour obtenir des résultats bien supérieurs. L’objectif était surtout de montrer le processus général, et la façon dont l’IA générative peut s’inscrire au sein d’un processus métier.

Alors quand est-ce qu’on se marre un peu ?!

Fine-tuner un modèle pour automatiser un processus métier, c’est génial et utile. Mais fine-tuner un modèle pour générer automatiquement des horoscopes absurdes et humoristiques, dans le style du Gorafi c’est encore plus fun ! ⬇️

Source : https://www.legorafi.fr/2023/11/27/horoscope-du-27-novembre-2023/

Alors, on reprend exactement le même principe, en changeant nos données d’entraînement pour qu’elles ressemblent plutôt à ça :

{"input_text": "Sagittaire", "output_text": "Si vous êtes en couple, vous ferez une sortie culturelle à l’abattoir le plus proche de chez vous. Sinon, vous vous couperez les ongles des pieds."}
{"input_text": "Capricorne", "output_text": "Vous tournerez sur vous-même très vite pour avoir le tournis. Vous déciderez d’en faire votre métier."}
{"input_text": "Taureau", "output_text": "Si vous êtes en couple, votre conjoint fera la grève de l’hygiène. Si vous êtes célibataire, vous vous ferez mordre par un macaque."}
{"input_text": "Gémeaux", "output_text": "Vous vous réveillerez avec des dents de lapin OU les pieds palmés (au choix)."}
{"input_text": "Cancer", "output_text": "Vous participerez à une course de trottinettes clandestines où le gagnant remportera une nuit d’amour avec Gabriel Attal."}
{"input_text": "Lion", "output_text": "Vous lancerez votre podcast en pensant que votre avis intéresse quelqu’un."}

Ainsi, mon objectif est le suivant : en lui donnant simplement un signe astrologique, le modèle doit me générer automatiquement un horoscope qui reprend le ton “impertinent” du Gorafi.

On relance la pipeline de fine-tuning, et 3h plus tard, on peut enfin tester notre nouveau modèle lioroscope.

Mais que fait la censure ?

Ma plus grosse interrogation concernait le filtrage du modèle. Comme vous le savez, les modèles sont “alignés” (cf: Responsible AI) pour éviter de générer des réponses choquantes. A ce sujet, dans son livre “Vivre avec ChatGPT” Alexandre Gefen écrit ceci :

“[…] ChatGPT est une jeune fille prude encore écrasée par le moralisme de ses parents, effrayée par toute forme de violence, absolument persuadée qu’elle doit toujours prendre sur elle-même pour faire la part des choses, nourrie de l’idéalisme technophile de la Californie, assez fière d’elle-même et heureuse de profiter de chaque occasion pour nous faire la morale […]”

Autant vous dire qu’avec un jeux de données comme celui-là, j’étais persuadé de faire sonner toutes les alarmes.

Validated 771 examples for RAI. Found 730 examples that has RAI issues.

Sur les 771 échantillons, 730 ont été détectés avec du contenu “inapproprié”. RAI : Responsible AI (rien à voir avec Khaled).

J’étais donc très impatient d’avoir les premiers résultats de mes tests. C’est parti !

Votre horoscope pour la semaine !

Pas de doutes, on est bien dans le style, et pour le coup, rien de bien choquant. Je décide de poursuivre.

Là encore, on est bien dans le même type d’humour. Encore un pour la route ?

Plus de doutes possible, il a bien compris ce qu’on lui demandait ! Je tiens quand même à rappeler aux lecteurs qu’il s’agit d’une expérimentation et que cela ne reflète BIEN EVIDEMMENT PAS mon opinion, ni celle de Google, etc. D’ailleurs, dans certain cas, le modèle s’auto-censure.

Victime de son “alignement”

Sur ce, on se quitte sur un horoscope complètement généré par notre modèle. Et si vous voulez savoir ce que les astres vous réservent, restons en contact !

**Bélier** : Si vous êtes au chômage, vous allez enfin trouver du travail ! Il consistera à donner des cours particuliers à Cyril Hanouna.
**Taureau** : Votre médecin traitant vous fera un massage avec du beurre.
**Gémeaux** : Vous allez faire une découverte macabre dans votre jardin. Cela fera les gros titres. Attention.
**Cancer** : Le pape François vous refusera une bise.
**Lion** : On vous enverra un mail de mise à jour de vos conditions générales d'utilisation de Google Maps.
**Vierge** : Vous ferez un doigt d'honneur au maire sans qu'il vous voie. Votre geste restera impuni.
**Balance** : C'est la semaine du Slip. Vous gagnerez 10 000 euros, mais vous devrez les dépenser en slip.
**Scorpion** : Vous trouverez sous votre oreiller un livre sur le « je-m’en-foutisme » et vous le lirez à l’abri des regards.
**Sagittaire** : Vous vous installerez dans un centre de soins palliatifs à la recherche de l’affection que votre famille ne vous a pas donnée.
**Capricorne** : Vous recevrez un e-mail de la gendarmerie : ils vous informent que votre nom a été cité dans une affaire de vol de poules.
**Verseau** : Une bonne surprise vous attendra cette semaine : vous découvrirez que vous n’avez pas l’air si con que ça.
**Poissons** : Vous vous baladerez dans le quartier de la Défense, juste pour juger les employés de bureau et vous sentir supérieur(e).

Et n’oubliez pas, pour tous vos besoins un poil plus sérieux, faites-nous signe : Lior Agency !

--

--

Quentin Collette
Lior Agency

COO @ Lior Agency IA & Web3 - Engineer, passionate about Generative AI, Web3, software, Cloud.