Démystifier les (LLM) et comment les mettre en œuvre chez vous pour les étudier de plus près

Les Grands Modèles de Langage, également connus sous le nom de LLM (Large Language Models), ont radicalement changé ces derniers mois le paysage de l'intelligence artificielle et du traitement automatique du langage. Mais qu'est-ce qu'un LLM et comment fonctionne-t-il réellement ?

Introduction et architecture des LLM

Un LLM est une forme avancée de modèle d'apprentissage automatique spécifiquement formé sur d'énormes quantités de données textuelles. Le but ? Comprendre et générer des textes semblables à ceux écrits par des humains. Ces modèles sont exceptionnels car ils peuvent capturer le contexte, le ton, les nuances et même les éléments culturels du langage. C’est ce que vous avez sûrement déjà expérimenté avec l’emblématique ChatGPT, développé par OpenAI, capable de réaliser diverses tâches liées au langage, allant de la traduction à la génération de texte.

La plupart des LLM actuels sont construits sur une architecture de réseau neuronal profond appelée "Transformer, introduite par Google en 2017. Cette architecture a été une véritable révolution pour le traitement du langage naturel, offrant une meilleure compréhension du contexte et une gestion optimale des phrases longues.

Pour tente d’expliquer brièvement le modèle Transformer, prenons une métaphore : imaginez que vous lisez une phrase et, au lieu de la traiter mot par mot, vous voulez comprendre chaque mot en relation avec tous les autres mots de la phrase. C'est un peu comme si, en lisant, vous aviez des “lunettes magiques” qui vous permettaient de voir non seulement le mot actuel, mais aussi tous les autres mots en même temps. C'est ce que fait le modèle Transformer : il "regarde" tous les mots ensemble pour mieux les comprendre.

Voici les principales idées du modèle Transformer :

  1. Attention : c'est comme si, pour chaque mot, le modèle décidait quels autres mots étaient importants pour comprendre ce mot. Par exemple, dans la phrase "Il a donné le chien à Julia", pour comprendre le mot "a donné", le modèle pourrait penser que "Il" et "chien" sont importants.

  2. Encodeur et décodeur : l'encodeur "lit" la phrase et essaie d'en extraire le sens global. Le décodeur, quant à lui, utilise ces informations pour produire une nouvelle phrase, par exemple pour traduire la phrase d'une langue à une autre.

  3. Position : les mots ont un ordre dans les phrases, et cet ordre est important. Le Transformer utilise une astuce appelée "encodage positionnel" pour tenir compte de la position de chaque mot.

  4. Répétition : au lieu de faire tout cela une seule fois, le Transformer est en capacité de le faire plusieurs fois de suite (et très rapidement), en s'améliorant à chaque fois.


En résumé, le Transformer peut être considéré comme un lecteur très attentif qui considère tous les mots d'une phrase ensemble pour mieux la comprendre. Il est particulièrement doué pour traiter de grandes quantités d'informations et pour "apprendre" des relations complexes entre les mots. C'est pourquoi il est à la base de nombreux outils de traduction, de génération de texte et d'autres tâches de traitement du langage naturel.

Les LLM fonctionnent en prenant des séquences de texte en entrée et en générant des prédictions basées sur le contexte fourni.

Avant d’aller plus loin, je suis à ce stade obligé d’expliciter une notion que l’on va détailler plus tard dans l’article dédié aux jeux de données d’apprentissage : les tokens.

Les tokens jouent un rôle central dans le traitement du langage naturel, car ils permettent de simplifier et d'organiser le texte en unités plus faciles à analyser. Lorsqu'un texte est tokenisé, cela signifie qu'il est divisé en tokens individuels.

Le plus simple pour comprendre, c’est de tester pour vous-même : je vous propose d’utiliser le Tokenizer d'OpenAI pour illustrer sur un exemple simple :

Il vous suffit de retenir à ce stade que l’apprentissage des LLM nécessite beaucoup de tokens qu’on utilise un ratio (imparfait) de 1,3 entre le nombre de mots et le nombre de tokens nécessaire pour représenter des mots.

La tokenisation est essentielle pour de nombreuses opérations en traitement du langage naturel, telles que :

  • Évaluation de sentiments : savoir si un texte est positif, négatif ou neutre

  • Identification d'entités nommées : repérer et catégoriser les éléments tels que les noms, les lieux et les organisations dans un texte

  • Traduction : passer un texte d'une langue à une autre

  • Création de texte : produire du contenu de façon autonome et logique en se basant sur une entrée spécifique


Lors de la phase d’entraînement des LLM, les tokens sont ensuite souvent convertis en vecteurs à l'aide d'une technique appelée plongement de mots (word embedding). Ces vecteurs permettent au modèle d'apprendre et de généraliser les relations sémantiques entre les tokens, améliorant ainsi les performances dans diverses tâches de NLP.

Les tokens sont aussi au cœur de la génération des réponses fournies par les LLM. Prenons cet exemple :

Cette illustration (dont je n’ai pas retrouvé la source originale) montre la probabilité que le LLM attribue à différents tokens (mots ou caractères) pour compléter une phrase. La phrase est : "La planète la plus proche de la terre est ____".

Le mot "Vénus" est mis en évidence comme le mot complet choisi pour remplir l'espace vide, et plusieurs probabilités sont présentées pour les différents tokens possibles :

  • V a une probabilité de 57,33% d'être le prochain token.

  • la a une probabilité de 20,16%.

  • Merc (probablement pour Mercure) a une probabilité de 11,21%.

  • Venus a une probabilité de 6,57%.

  • Mars a une probabilité de 1,51%.


Il est à noter que "V" a la probabilité la plus élevée, ce qui signifie que le modèle pense que le prochain caractère le plus probable après "est" est "V". Toutefois des mécanismes internes au LLM permettent de calculer la meilleure prédiction est donc d’afficher le mot “Vénus”.

La dernière ligne comporte deux informations complémentaires :

  • "Total: -0.56 logprob on 1 tokens" : indique le logarithme de la probabilité du token choisi

  • "96,78% probability covered in top 5 logis" signifie que les cinq tokens listés couvrent 96,78% de la probabilité totale pour le prochain token.


À ce stade, n’entrons pas plus dans les détails trop techniques. Toutefois, pour ceux qui voudraient aller (beaucoup) plus loin, je vous partage ce lien que tu m’as transmis un des collaborateurs de LINAGORA (Merci Florian !) : https://ig.ft.com/generative-ai/.
L’animation est hyperbien réalisée et permet de comprendre toutes les étapes pas à pas du fonctionnement d'un LLM.

Applications des LLM

Les LLM ont trouvé leur place dans de nombreuses applications :

  • Traduction automatique : Ils peuvent traduire des textes avec une précision remarquable.

  • Rédaction : Ils sont capables de générer des articles, des résumés ou même des descriptions de produits.

  • Réponses aux questions : Ils peuvent fournir des réponses détaillées à des questions complexes.

  • Assistants personnels : Ils peuvent agir comme des chatbots pour aider dans diverses tâches.


Enfin, une partie du futur des LLM se dessine avec l’apport du support de la multimodalité. La multimodalité fait référence à la capacité d'un modèle d'IA à traiter et à générer des informations provenant de plusieurs types de données ou de modalités, comme le texte, l'image, le son, etc. Au lieu de se concentrer uniquement sur le texte, un modèle multimodal peut, par exemple, comprendre une image et générer une description textuelle pertinente, voire aider à créer des médias entre que du simple texte.

Pour vous en convaincre, je vous invite à visualiser cette vidéo toute récente de Shubham SHARMA qui illustre bien des cas d’utilisation de la multimodalité récemment mise à disposition par OpenAI sur ChatGPT.

Où trouve-t-on les LLM ?

Il existe plusieurs milliers de modèles de langage pré entraînés : à l’image de ce qu’est github pour le code source, pour le référentiel des LLM, il faut consulter le site HuggingFace.

Ce site fournit par ailleurs divers classements mises à jour dont celui des LLM Open Source. Je reviendrai plus tard sur la notion “Open Source” dans le domaine des LLM car il y a beaucoup à dire…

Voici quelques exemples importants de LLM largement utilisés :

En 2023, on a beaucoup entendu parlé de Falcon, Llama (V1 et V2) et plus récemment du modèle de la société française MistralAI. Ces modèles sont effectivement des modèles très simple à mettre en oeuvre et à personnaliser pour traiter des cas d’usage particulière après un traitement dit d’alignement (”fine tuning”).

Par exemple, des initiatives telles que les modèles Vigogne, ceux de la société Faraday qui visent à personnaliser des modèles pré entrainés existants pour améliorer leur support de la langue française.

En général, on peut caractériser un LLM avec quatre paramètres : la taille du modèle, la taille du jeu de données d'apprentissage, le coût de l'apprentissage et la performance après apprentissage. On constate empiriquement que ces paramètres sont liés par des lois statistiques simples, appelées lois d'échelle (”scaling laws”). Nous détaillerons avec précisions ces caractéristiques dans un prochain article.

Quand vous consultez la page pour un modèle donné, ici Llama 2, vous trouverez potentiellement plusieurs tailles de modèle disponibles.

Plus les modèles sont grands en termes de taille, plus ils ont été entraînés avec un grand nombre de données d’apprentissage. Ce n’est ni un indicateur de performance ni un indicateur de qualité. Toutefois, retenez que plus le modèle est grand, plus il nécessite de ressources de calcul (GPU en autres) pour les utiliser… On y reviendra aussi dans l’article consacré aux impacts de l’IA générative et des LLM sur l’environnement.

Comment les tester (version facile et rapide) ?

Bien que Llama 2 ne soit pas disponible sur une plateforme accessible au public comme ChatGPT, deux options s’offrent à vous pour tester :

  • en téléchargeant le modèle et en l'exécutant localement sur votre machine,

  • ou en y accédant via une instance hébergée sur le cloud par Hugging Face. C’est gratuit pour vous en tant qu’utilisateur/testeur.

Pour accéder à Llama chez Hugging Face, ouvrez simplement le lien correspondant ci-dessous et commencez à dialoguer avec le chatbot IA.


Les modèles Llama ci-dessus ont été affinés pour des applications de conversation, il s'agit donc du plus proche équivalent à ChatGPT pour un modèle Llama-2.

Exemple de session de Chat avec le modèle Llma 2 :

Je remercie Jean-Michel BERNABOTTO qui a réagi à l'article et qui m'a fait découvrir la solution POE (https://poe.com/) qui permet aussi de tester plusieurs LLM bien connus en plus des solutions commerciales comme ChatGPT en mode agent. Intéressant.

Comment tester en local et de manière autonome ?

À partir du site Hugging Face, on peut effectivement télécharger les modèles et les mettre en œuvre sur votre propre infrastructure, qu’il s’agisse d’un cluster de GPU à votre disposition voire sur votre PC (sous Windows ou Linux) ou votre Mac (M1/M2) préféré.

L’exécution locale de ces LLM a été rendu possible (en autres) grâce au projet Open Source llama.ccp (https://github.com/ggerganov/llama.cpp). La page du projet propose de plusieurs tutoriels pour les plus geeks d’entre vous qui vous permettra d’installer toutes les dépendances nécessaires pour vous permettre d’obtenir un environnement prêt exécuter vos modèles.

Je ne vais traiter tous les cas d’usage ici : je vous propose d’illustrer avec l’utilisation du modèle Vigogne sur un Mac M1 avec l’utilisation d’un autre projet Open Source qui simplifie grandement les opérations d’installation. Il s’agit de LM Studio (https://lmstudio.ai/).

Y’a d’autres options possibles comme GPT4All par exemple dont vous trouverez ici un tutoriel en français bien documenté : https://zonetuto.fr/intelligence-artificielle/ajouter-un-modele-au-format-ggml-dans-gpt4all-sur-linux-ubuntu/.

Ce que j’apprécie avec LM Studio c’est l’application qui permet de :

  • gérer bibliothèque locale de modèles en proposant une interface de recherche pour télécharger un modèle particulier ;

  • charger et décharger d’un simple clic un modèle donné ;

  • tester le modèle avec une interface de chat et permettant de régler aussi les paramètres du modèle ;

  • disposer d’un serveur web local offrant une API http, permettant d’interagir avec le modèle via un script ou simple commande curl. C’est très pratique par exemple pour écrire une série de prompts ou requêtes afin de récolter les réponses du modèle pour les comparer avec les résultats produits par autres modèles préalablement téléchargés localement.


Passons à l’action. Tout commence par télécharger le logiciel depuis le site internet https://lmstudio.ai/ :

Une fois téléchargé, je vous laisse le soin de dérouler la procédure d’installation en fonction de votre système d’exploitation. Pour la version Linux, il suffit de la demander (mode beta) via Discord et l’installation est relativement simple à dérouler.

Une fois LM Studio lancé, vous allez tomber sur la page suivante :

L’interface est très simple et intuitive :

  • un moteur de recherche de modèle en plein milieu de l’écran ;

  • cinq icônes à gauche permettant respectivement : d’aller à cette page d’accueil, au moteur de recherche détaillée, l’accès à l’application interactive de chat, la page permettant de lancer le serveur http local et enfin l’accès à votre base locale de modèle ;

  • une zone en bas de l’écran affichant le fichier journal (logs) de l’application.


La première chose à faire est de télécharger un modèle, par exemple, le modèle Vigogne. Pour cela, il suffit d’aller le moteur de recherche (seconde icône à gauche) et vous tapez le nom vigogne.

Les étapes pour le télécharger sont les suivantes :

  1. on tape le nom du modèle que vous souhaitez tester, ici “vigogne” ;

  2. cliquez sur le bouton “all models” pour passer en mode “compatibility guess” permettant d’avoir la liste des versions des modèles compatibles avec votre matériel ;

  3. on choisit ensuite le modèle souhaité : les versions suffixées “GGUF” ont été converties pour pouvoir s’exécuter sans GPU ;

  4. dans la liste suivante à droite, on choisi la version souhaitée en fonction de votre cas d’usage : ici on veut pouvoir disposer d’un chatbot simple pour tester le modèle, on choisi la dernière version destinée au chat, par exemple “vigogne-2-7b-chat.08_0-gguf” ;

  5. Attention à l’espace disque et au temps de téléchargement : même si les modèles ont été réduits en termes de taille par une opération de “quantization” qu’on abordera plus tard, on parle tout de même de quelques gigaoctets par modèle…

  6. Cliquez sur Download et pour cette version c’est parti pour 7,16 Go de téléchargement. Une barre de progression en bas de l’écran va permettra de patienter…

Une fois le téléchargement terminé, il vous suffit de vous rendre dans partie chat en utilisant la 3ème icône à gauche.

Vous vous retrouvez avec une interface d’interaction très semblable à ChatGPT avec toutefois l’accès aux paramètres du modèle à droite de l’écran.

Vous chargez un des modèles que vous avez téléchargé en local en utilisant la liste déroulante au centre en haut de l’écran. Ensuite, il faut suffit de cliquer sur “New Chat” ou utiliser la combinaison de touches ⌘+N (sous Mac) et d’entrer votre prompt dans la boîte dialogue à droite du libellé “USER” en bas de l’écran.

Je ne vais pas tout détailler le fonctionnement de l’interface ici car cela reste assez intuitif.

Suite à la publication de l'article, Bofeng Huang le contributeur principal des modèles Vigogne et Vigostral avec qui je suis en contact, nous a gentiment contribué le fichier de configuration pour parfaitement intégrer le modèle avec LM Studio. C'est ça la beauté de l'Open Source. Ce fichier est disponible ici : https://gist.github.com/bofenghuang/eeb00ec537fc789e97dcdd5baef90c26. Il suffit de le sauvegarder sur votre machine et utiliser le bouton "Choose Option" en haut à droite dans le panel Presents et importer le fichier de configuration.Je vous recommande d’activer l’accélération Metal disponible sur les environnements Mac : c’est encore expérimental mais cela fonctionne chez moi et cela diminue drastiquement la consommation en mémoire.

Ensuite, la production de texte des LLM peut être affectée par des hyperparamètres de configuration, qui contrôlent de divers aspects du modèle, tels que son caractère "aléatoire". Ces hyperparamètres peuvent être ajustés pour produire une sortie plus créative, diverse et intéressante. Dans cette introduction, je vous présente deux hyperparamètres de configuration importants et de leur impact sur la sortie des LLM :

  • Température (bulle n°2 dans la copie d’écran ci-dessus) : la température est un hyperparamètre de configuration qui contrôle le caractère aléatoire de la sortie du modèle de langage. Une température élevée produit des résultats plus imprévisibles et créatifs, tandis qu'une température basse produit une sortie plus commune et conservatrice. Par exemple, si vous réglez la température sur 0,5, le modèle générera généralement un texte plus prévisible et moins créatif que si vous réglez la température sur 1,0. 0.8 est une valeur équilibrée.

  • Top p (bulle n°3 dans la copie d’écran ci-dessus) : Top p, également connu sous le nom de nucleus sampling (échantillonnage de noyau), est un autre hyperparamètre de configuration qui contrôle le caractère aléatoire de la sortie du modèle de langage. Il fixe une probabilité seuil et sélectionne les meilleurs tokens dont la probabilité cumulative dépasse le seuil. Le modèle échantillonne ensuite au hasard dans cet ensemble de tokens pour générer une sortie. Cette méthode peut produire une sortie plus diversifiée et intéressante que les méthodes traditionnelles qui échantillonnent au hasard tout le vocabulaire. Par exemple, si vous fixez le top p à 0,9, le modèle ne considérera que les mots les plus probables qui représentent 90 % de la masse de probabilité.


Je vous laisse faire vos propres tests pour tester différentes combinaisons et en observer les effets sur les réponses produites par le LLM.

L’avantage de LM Studio est de vous permettre d’inférer avec votre modèle en mode API grace au serveur http qu’il embarque.

Pour démarrer l’API, rien de plus simple :

  1. Vous cliquez sur la 4ème icône du menu de gauche ;

  2. Vous cliquez sur le bouton “Start Server”.

C’est très rapide et des messages vont apparaître en bas de l’écran pour vous confirmer le bon démarrage. Quand le serveur web est activé, vous ne pouvez plus utiliser le chat interactif : c’est l’un ou l’autre. N’oubliez pas non plus de repositionner l’accélération hardware Metal.

Si vous n’arrivez rien modifier à gauche sur le panel “Serveur Options”, vous avez dorénavant une API disponible sur le port 1234 de votre machine.

Il vous suffit d’ouvrir un terminal et de poster cette commande :

curl http://localhost:1234/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"messages": [
{ "role": "user", "content": "Quelles sont les planètes du système solaire ?" }
],
"temperature": 0.8,
"max_tokens": -1,
"stream": false }'

Si tout se passe bien, vous devrez obtenir une réponse comme celle-ci :

La réponse du modèle est la partie surlignée en bleu.

Pour obtenir la même chose via un très simple script en python :

import requests
url = "http://localhost:1234/v1/chat/completions"
headers = {
"Content-Type": "application/json"
}
data = {
"messages": [
{ "role": "user", "content": "Quelles sont les planètes du système solaire ?" }
],
"temperature": 0.8,
"max_tokens": -1,
"stream": False }
response = requests.post(url, headers=headers, json=data)
print(response.json())

A noter que vous pouvez modifier les hyperparamètres en modifiant les clés de paramétrage "temperature" et "top-p" dans vos requêtes.

Vous disposez désormais d’un premier niveau de compréhension de LLM et vous savez les mettre en oeuvre localement.

Alors maintenant l’heure de la mise en garde : commencez à tester par vous-même risque de créer rapidement une dépendance. On se prend vite au jeu de vouloir tester des prompts sur différents modèles, modifier les valeurs des hyperparamètres et commencer d'imaginer comment ne plus utilisez ChatGPT en automatisant par exemple la réponse à vos courriels reçus dans votre client de messagerie…

Le côté séduisant c’est que pour peu d’effort, cela permet de se mettre en situation de mieux comprendre les enjeux de l’IA générative et se poser les questions importantes sur sa mise en oeuvre à l’échelle. C’est ce que je vous propose d’aborder dans la suite des articles à venir…

Limites et défis à relever

Au futur et à mesure des expérimentations, vous allez peut être confronté à des réponses non satisfaisantes voire surprenantes, expérimenter que les LLM en s’arrête plus de parler, d’attendre longtemps si votre configuration matérielle n’est pas adaptée au modèle que vous souhaitez tester, etc…

Et oui malgré tous les bénéfices potentiels des LLM, il convient toutefois d’être conscient de leurs limites. À savoir (liste non exhaustive) :

  • les hallucinations : une hallucination survient lorsqu'un LLM produit une sortie qui est fausse ou qui ne correspond pas à l'intention de l'utilisateur. Étant donné que les grands modèles de langage prédisent le prochain mot correct ou la prochaine phrase correcte d'un point de vue syntaxique, ils ne peuvent pas avoir une interprétation totale de ce qu'une personne veut dire. Le résultat peut parfois donner ce que l'on appelle une "hallucination".

  • les biais : les capacités des modèles de langage sont limitées aux données textuelles avec lesquelles ils sont formés. Ce qui peut produire de fausses informations (point précédent), des préjugés, voire un langage toxique.

  • la fenêtre contextuelle : chaque LLM dispose seulement d’une certaine quantité de mémoire disponible pour traiter vos données en entrée. Au-delà d’un certain nombre de tokens en entrée, ils ne pourront plus réaliser les tâches demandées.

  • les coûts : sans pour le moment aborder le coût de l’entraînement des LLM, s’équiper pour disposer d’une infrastructure d’inférence performance peut rapidement coûter cher…

Bref, reste plus qu’à négocier avec votre “grand” de lui piquer sa machine qu’il vous a demandé d’upgrader en GPU pour jouer à Starfield 6. Puis, vous, de passer à l’action !

Conclusion

L'arrivée il y a un an de ChatGPT (version grand public) a mis sous la lumière le potentiel des LLM, entraînant spéculation et débats sur ce à quoi ressemblera l'avenir. Même s'ils peuvent contribuer à améliorer la productivité et l'efficacité des processus lorsqu'ils sont mis entre de bonnes mains, des questions se posent concernant leur utilisation au coeur de nos sociétés.

Ainsi, la vocation de ses articles de vulgarisation des LLM est d’étendre la communauté des “sachants” afin que les questions sur leur entraînement et leur mise en oeuvre à l’échelle puissent être abordées avec un langage commun et avec la prise de recul nécessaire pour prendre les bonnes décisions.

Références et pour en savoir plus :