Techniques d’ exploitation des modèles de langage

Un des points faibles des modèles actuellement disponibles sur le marché est qu’ ils ont été entraînés sur un ensemble de données publiquement accessibles qui ne va pas nécessairement suffire pour répondre à certains besoins spécifiques.

Prenons l’ exemple d’une entreprise qui possède un volume important de données propriétaires, qui utilise un vocabulaire hautement spécialisé ou encore qui utilise des formats de données spécifiques. Ces connaissances ne seront a priori pas intégrées dans un modèle généraliste car les données ne sont pas accessibles publiquement. Comment y remédier ? C’est ce que je voudrais exposer aujourd’ hui.

Il existe plusieurs techniques pour « enrichir » les connaissances du modèle. On trouve, par ordre de complexité croissante :

  • le prompt engineering;
  • la génération augmentée de récupération (RAG en Anglais);
  • l’ affinage du modèle (complet ou optimisé).

Ces techniques se retrouvent au milieu de la figure ci-dessous, entre les deux extrêmes du simple dialogue et de l’ entraînement complet :

Figure 1 : Techniques d’ exploitation des modèles de langage

C’est un sujet intéressant à couvrir maintenant car il complète bien mon précédent article sur les modèles locaux. En effet, certaines techniques comme l’ affinage s’ adressent principalement aux modèles open-source dont les paramètres sont librement disponibles.

Passons maintenant les différentes techniques en revue.

1. Le Prompt Engineering

Le Prompt engineering est un sujet que j’ai déjà traité dans un précédent article accessible ici.

Il comprend deux techniques élémentaires sous-jacentes : la première consiste à fournir suffisamment d’ informations contextuelles dans l’invite. Le modèle combinera alors l’ ensemble des informations en sa possession (ceux de l’ entraînement et ceux fournis dans l’invite) pour répondre à la question posée.

La seconde technique revient à inciter le modèle à suivre un raisonnement logique structuré. Les modèles de langage ayant été entraînés pour se conformer aux instructions de l’utilisateur, il est possible de leur demander de suivre un raisonnement pas à pas ou de fournir une série d’ exemples résolus pour mettre le modèle sur la bonne voie. Sans être une panacée, ces techniques ont déjà démontré leur efficacité.

Figure 2 : Le principe du Prompt Engineering

Une méthode amusante consiste à promettre une récompense financière au modèle s’ il répond correctement. Ajoutez simplement « Si tu réponds correctement, je te donnerai dix euros » à la fin de l’invite. Croyez-le ou non, cela semble fonctionner !

Le prompt engineering peut fournir une précision suffisante dans un certain nombre d’ applications. Son principal avantage est sa simplicité de mise en oeuvre, qui ne demande pas non plus de ressources de calcul supplémentaires.

Mais cette technique se heurte à la taille limitée des fenêtres de contexte des modèles de langage. Elle ne pourra donc pas s’appliquer lorque le volume d’ informations à transmettre est trop grand ou trop complexe à décrire dans le prompt. On risque alors de voir le modèle inventer les informations manquantes pour aboutir à des réponses incorrectes voire insensées (hallucinations).

2. La Génération Augmentée de Récupération (RAG)

L’ idée vous aura peut-être effleuré l’ esprit en lisant le point précédent : pourquoi ne pas combiner la technique du prompt engineering avec un engin de recherche indexant les données complémentaires ? On obtiendrait alors une invite « enrichie » par les éléments supplémentaires les plus significatifs, de manière automatisée et transparente pour l’utilisateur…

C’est ce que promet la Génération Augmentée de Récupération (Retrieval Augmented Generation ou RAG en Anglais). Voici la manière dont cette technique fonctionne :

  • Les informations supplémentaires sont découpées en blocs et chacun de ces blocs est indexé en fonction de son contenu. Ces index sont en général des vecteurs dont la position dans l’ espace dépend du contenu du bloc (indexation sémantique). Vous trouverez ici une introduction sur ce sujet;
  • L’ ensemble des index est placé dans une base de données vectorielle qui contient également la référence des blocs de texte indexés;
  • Lorsqu’ un utilisateur pose une question, le texte de la question est lui aussi indexé selon le même algorithme. Une recherche dans la base de données vectorielle permettra d’ identifier les blocs sémantiquement proches de l’ invite sur base de la proximité entre les vecteurs;
  • Ces blocs d’ informations sémantiquement proches sont concaténés à l’ invite d’origine en tant que contexte additionnel;
  • L’ invite enrichie du contexte additionnel est envoyée au modèle de langage pour réponse.
Figure 3 : Le principe de la Récupération Augmentée de Génération (RAG)

Cette technique présente un certain nombre d’ avantages. Imaginez un ensemble typique d’ informations propriétaires générées par une entreprise : bases de données, documents pdf, fichiers excel, flux d’ actualités, minutes de réunion….. L’ ensemble de ces données pourra être découpé, indexé sémantiquement et introduit dans la base de données vectorielle. Et il est assez aisé de continuer à enrichir régulièrement la base de données vectorielles pour s’ assurer que les informations restent à jour.

Le second grand avantage est qu’ il n’ est pas nécessaire de modifier le modèle de langage en tant que tel. Tout dépend bien sûr de l’ efficacité du mécanisme d’ indexation sémantique, mais après 25 ans d’existence d’ engins de recherche sur Internet, ces techniques sont matures.

Qui plus est, une librairie de programmation comme Langchain contient l’ ensemble des fonctionnalités nécessaires pour orchestrer l’ interaction avec la base de données vectorielle et le modèle de langage. Cette librairie supporte notamment une centaine de formats de fichier pour nourrir la base de connaissances.

Le prix à payer est une plus grande complexité de l’ architecture informatique. Il faut intégrer et combiner plusieurs éléments d’ infrastructure. Et si une base de données vectorielle dans le cloud comme Pinecone est utilisée, il faut aussi prendre en compte les risques de confidentialité qui vont avec.

Enfin, l’ enrichichissement du contexte se faisant de manière ponctuelle et ciblée, cette technique n’est pas appropriée si vous visez à spécialiser un modèle de langage dans un domaine complexe comme la médecine ou la finance.

Dans ce cas, il vaut mieux affiner le modèle. C’est ce que nous allons voir maintenant.

3. L’ affinage des modèles

L’ affinage d’un modèle est un processus au cours duquel un modèle déjà préentraîné subit un entraînement supplémentaire sur un ensemble de données spécifique. Il permet de capitaliser sur la connaissance déjà intégrée lors de l’ entraînement initial, en renforçant la compétence du modèle dans un domaine spécifique en contrepartie d’ un investissement raisonnable en ressources informatiques.

Cette technique est importante car l’ entraînement initial d’un modèle requiert des ressources énormes, ce qui le rend hors de portée de la pluart des organisations.

Il est possible de réduire encore plus le besoin en puissance en recourant à des techniques avancées d’ affinage comme LoRA (Low-Rank Adaptation). Cette méthode introduite début 2023 réduit considérablement le nombre de paramètres à entraîner au prix d’une faible dégradation en qualité.

Figure 4 : Le principe de l’ affinage complet et optimisé

Vous devrez disposer d’un jeu de données suffisant pour l’ entraînement complémentaire. Si vous cherchez à approfondir l’ expertise du modèle dans un domaine spécifique vous pouvez commencer par utiliser tous les documents de référence sur le sujet dont vous disposez.

De plus, vous pouvez améliorer le type de réponse du modèle en ajoutant au données d’ entraînement un ensemble d’ invites (prompts) et de leurs réponses. Ce jeu de données peut avoir été généré manuellement ou via un modèle de langage « haut de gamme » comme GPT4.

Quoi qu’ il en soit, l’ affinage reste une technique plus complexe, qui requiert une expertise suffisante en IA pour constituer le jeu de données, mettre en place l’ algorithme d’ entraînement du modèle et ensuite évaluer les performances du modèle modifié. Cette approche nécessite aussi l’ accès à une puissance de calcul significative.

Un point faible de cette approche par rapport à la Génération Augmentée de Récupération est qu’ il est nettement plus difficile d’ introduire de nouvelles informations dans le modèle : il faut repasser par une phase d’ entraînement avec tous les efforts qu’ elle implique.

Une autre contrainte de cette approche est que pour pouvoir modifier un modèle, il faut disposer de ses paramètres. Et donc en pratique, seuls les modèles open-source comme Llama2 ou Mistral se prêtent à ce genre d’ exercice.

Enfin, il faut noter que des versions déjà affinées de modèles de langage open-source comme Llama sont disponibles sur Internet, pour certains domaines particuliers comme la programmation. Utiliser un tel modèle peut aussi être une solution…

4. Réflexions

L’ exploitation avancée de modèles de langage décrite ci-dessus est en progression rapide. Tant les techniques d’affinage « optimisées » que les algorithmes de recherche sémantiques et les bases de données vectorielles de la RAG font des progrès constants.

Des techniques comme le RAG ou l’ affinage sont trop lourdes pour une utilisation privée, mais constituent une solution intéressante pour des entreprises. La disponibilité de modèles open-source combinée à ces techniques offre une grande souplesse de déploiement aux organisations désireuses d’ exploiter les modèles de langage au mieux de leurs capacités.

Et la possibilité de faire fonctionner l’ ensemble « en interne » offre une réponse élégante aux soucis de confidentialité qui freinent de nombreuses organisations.

5. Notes et références