diff --git a/api/src/devcomp/infrastructure/datasources/learning-content/modules/IAGenFonction_Exp.json b/api/src/devcomp/infrastructure/datasources/learning-content/modules/IAGenFonction_Exp.json new file mode 100644 index 00000000000..9b89d9f4fdf --- /dev/null +++ b/api/src/devcomp/infrastructure/datasources/learning-content/modules/IAGenFonction_Exp.json @@ -0,0 +1,699 @@ +{ + "id": "ec84c812-1a2a-4eab-8bd2-77b05fe4f771", + "shortId": "d5d93a38", + "slug": "llm-vectorisation-generation", + "title": "Au cœur des modèles de langage : de la vectorisation à la génération de texte ", + "isBeta": true, + "visibility": "public", + "details": { + "image": "https://assets.pix.org/modules/placeholder-details.svg", + "description": "
Les grands modèles de langage sont des logiciels capables d’analyser et de générer des textes complexes qui ont du sens.
Dans ce module, vous allez découvrir tout le processus de génération d’une réponse par un modèle de langage, de l’analyse des prompts de l’utilisateur à la prédiction des mots de la réponse.
", + "duration": 10, + "level": "expert", + "objectives": [ + "Comprendre les principes de transformation du langage naturel en représentation mathématiques par un modèle de langage
", + "Comprendre le mécanisme d’attention des modèles de langage
", + "Comprendre le processus de prédiction des modèles de langage
" + ], + "tabletSupport": "comfortable" + }, + "sections": [ + { + "id": "2d1e5ddb-8a79-4ebd-95cf-f68c6ad129df", + "type": "question-yourself", + "grains": [ + { + "id": "dfd6ba42-0481-4710-9058-e511f2378b1a", + "type": "discovery", + "title": "Que signifie ChatGPT ?", + "components": [ + { + "type": "element", + "element": { + "id": "08e5d1c9-21d9-43bd-b5cb-f54ff06bb3ba", + "type": "text", + "tag": " ", + "content": "Anna utilise un logiciel d’IA générative comme ChatGPT.
Savez-vous ce que signifie les lettres « GPT » dans ChatGPT ?
À quoi correspond la lettre G ?
Bien vu !
", + "diagnosis": "ChatGPT est un logiciel d’IA qui génère du texte, mais aussi du code et des images.
" + }, + "invalid": { + "state": "Pas tout à fait : G correspond à « Generative ».
", + "diagnosis": "ChatGPT est un logiciel d’IA qui génère du texte, mais aussi du code et des images.
" + } + } + } + ] + }, + { + "elements": [ + { + "id": "5541791e-7605-419b-94da-3db6dff7d136", + "type": "qrocm", + "instruction": "À quoi correspond la lettre P ?
", + "proposals": [ + { + "input": "P", + "type": "input", + "inputType": "text", + "size": 10, + "display": "inline", + "placeholder": "", + "ariaLabel": "champ libre", + "tolerances": [ + "t1", + "t2", + "t3" + ], + "solutions": [ + "Pre-trained", + "Pré-entraîné" + ] + } + ], + "feedbacks": { + "valid": { + "state": "Bien vu !
", + "diagnosis": "En effet, ChatGPT est pré-entraîné sur des millions de données pour réussir à générer du texte.
" + }, + "invalid": { + "state": "Pas tout à fait. P correspond à « Pretrained ».
", + "diagnosis": "En effet, ChatGPT est pré-entraîné sur des millions de données pour réussir à générer du texte.
" + } + } + } + ] + }, + { + "elements": [ + { + "id": "9952572f-aad3-410d-b1a7-d2020f90952e", + "type": "qrocm", + "instruction": "À quoi correspond la lettre T ?
", + "proposals": [ + { + "input": "P", + "type": "input", + "inputType": "text", + "size": 10, + "display": "inline", + "placeholder": "", + "ariaLabel": "champ libre", + "tolerances": [ + "t1", + "t2", + "t3" + ], + "solutions": [ + "Transformers", + "Transformeurs" + ] + } + ], + "feedbacks": { + "valid": { + "state": "Bien vu !
", + "diagnosis": "Un transformer est un type de réseau de neurones conçu pour traiter du texte de manière efficace. Contrairement aux anciens modèles, il analyse l’ensemble d’un prompt en même temps pour comprendre le contexte.
" + }, + "invalid": { + "state": "Pas tout à fait. T correspond à « Transformer ».
", + "diagnosis": "Un transformeur est un type de réseau de neurones conçu pour traiter du texte de manière efficace. Contrairement aux anciens modèles, il analyse l’ensemble d’un prompt en même temps pour comprendre le contexte.
" + } + } + } + ] + } + ] + } + ] + }, + { + "id": "d5ccc1ad-7a3d-41b2-998e-4cf633449fb3", + "type": "transition", + "title": "transition", + "components": [ + { + "type": "element", + "element": { + "id": "b5e588b3-818f-44ab-be81-b82c72638c44", + "type": "text", + "tag": " ", + "content": "Mais comment fonctionne ces fameux transformeurs ? Et comment un modèle de langage réussi-t-il à utiliser les mathématiques pour produire du texte ?
C’est ce que nous allons voir dans ce module.
" + } + } + ] + } + ] + }, + { + "id": "454d0e4a-0ba8-463e-865d-6bc83baf5c61", + "type": "explore-to-understand", + "grains": [ + { + "id": "a0fe11f2-de72-40a6-974a-6bbbcd407da7", + "type": "discovery", + "title": "Au début était le token.", + "components": [ + { + "type": "element", + "element": { + "id": "9b904793-99e5-4352-9ea0-23df68211182", + "type": "text", + "tag": " ", + "content": "Anna a tapé le prompt suivant dans ChatPix, un grand modèle de langage.
" + } + }, + { + "type": "element", + "element": { + "id": "47841717-1ecb-45f3-9dcc-558a03538c39", + "type": "custom", + "title": "Prompt d'Anna", + "instruction": "", + "functionalInstruction": "", + "tagName": "llm-messages", + "props": { + "messages": [ + { + "direction": "outbound", + "content": "Sur quel port brancher mon câble ?" + } + ] + } + } + }, + { + "type": "element", + "element": { + "id": "b065cf85-1280-452b-b3f7-533c94c3b2a1", + "type": "text", + "tag": " ", + "content": "Un modèle de langage ne sait ni parler français, ni aucune langue. Il ne connait pas cette phrase mais il a à sa disposition une bibliothèque de morceaux de mots, des tokens, qui a été constitué lors de son entraînement.
Voici un extrait de cette bibliothèque de tokens.
[tableau à venir]
" + } + }, + { + "type": "element", + "element": { + "id": "2c42898f-a719-4fa8-9bc3-de44a416f814", + "type": "qrocm", + "instruction": "D’après la bibliothèque du modèle de langage, combien de tokens sont utilisés dans le prompt d’Anna ?
", + "proposals": [ + { + "input": "nombre de token", + "type": "input", + "inputType": "text", + "size": 3, + "display": "inline", + "placeholder": "", + "ariaLabel": "champ libre", + "tolerances": [], + "solutions": [ + 9, + "neuf" + ] + } + ], + "feedbacks": { + "valid": { + "state": "Bien vu !
", + "diagnosis": "Le token est un morceau de mot associé à un identifiant et à un ensemble de nombres, appelé vecteur.
L’étape de découpage du prompt en token s’appelle la tokenisation.
" + }, + "invalid": { + "state": "Avez-vous bien compté les tokens dans la bibliothèque de tokens ?
", + "diagnosis": "Le token est un morceau de mot associé à un identifiant et à un ensemble de nombres, appelé vecteur.
L’étape de découpage du prompt en token s’appelle la tokenisation.
" + } + } + } + } + ] + }, + { + "id": "a0deef8e-4bfb-4da4-a937-547a4bc5c785", + "type": "short-lesson", + "title": "Lesson 1", + "components": [ + { + "type": "stepper", + "instruction": "", + "steps": [ + { + "elements": [ + { + "id": "2310f294-043b-4443-9e37-be15d3326081", + "type": "text", + "tag": " ", + "content": "Les modèles de langage actuels utilisent généralement une bibliothèque d’environ 50 000 à 100 000 tokens associés à leurs vecteurs.
La transformation du token en vecteur s’appelle la vectorisation (ou en anglais, embedding). La vectorisation a lieu pendant l’entraînement, en s’appuyant sur des milliards de textes et observant le nombre de fois où un mot apparaît et avec quels autres mots il est utilisé. Le vecteur capte donc une forme de « signification » du token.
" + }, + { + "id": "88738528-5a51-451e-b550-ed8403e12255", + "type": "image", + "url": "https://assets.pix.org/draft/modules/IAGenFonction_Exp/lesson1.png", + "alt": "", + "alternativeText": "", + "legend": "", + "licence": "" + } + ] + }, + { + "elements": [ + { + "id": "c7f24403-e0e7-454c-9866-096f5c1bde71", + "type": "text", + "tag": "further-information", + "content": "Pourquoi le prompt est-il découpé en token ?
Un découpage par caractère fait perdre du sens à chaque unité, tandis qu’un découpage par mot crée trop d’unités dans la bibliothèque et alourdit les calculs.
Le prompt est donc découpé en token, c’est-à-dire des morceaux de mots ou de ponctuation.
" + } + ] + } + ] + } + ] + }, + { + "id": "90e0e584-fd63-4667-b8d2-a8382706fcaa", + "type": "discovery", + "title": "Découverte 2", + "components": [ + { + "type": "stepper", + "instruction": "Grâce à la vectorisation, une carte de l’ensemble des tokens est obtenue sur laquelle des tokens “proches” en signification ont des vecteurs avec des valeurs “proches” .
Observons les tokens proches du token “port” dans ce cas.
" + }, + { + "id": "25e07aa9-8739-4560-86d0-2978736ba2e4", + "type": "image", + "url": "https://assets.pix.org/draft/modules/IAGenFonction_Exp/decouverte2.png", + "alt": "", + "alternativeText": "", + "legend": "", + "licence": "" + }, + { + "id": "9a8f030d-920d-4d43-9f0b-40614dd0647a", + "type": "text", + "tag": " ", + "content": "Rappellons-nous du prompt d’Anna :
" + }, + { + "id": "f97315b1-1902-47bc-b873-d68d420a8018", + "type": "custom", + "title": "", + "instruction": "", + "functionalInstruction": "", + "tagName": "llm-messages", + "props": { + "messages": [ + { + "direction": "outbound", + "content": "Sur quel port brancher mon câble ?" + } + ] + } + }, + { + "id": "8e7f577f-833b-4694-a1f2-af951472a66e", + "type": "qcu-discovery", + "instruction": "Est-ce que cette signficiation du token “port” est appropriée dans le cas du prompt d’Anna ?
", + "hasShortProposals": false, + "proposals": [ + { + "id": "1", + "content": "Oui
", + "feedback": { + "diagnosis": "Plutôt pas !
Comme beaucoup d’autres mots, le mot “port” peut avoir plusieurs significations. On va avoir besoin du contexte des autres mots de la phrase ou du paragraphe pour bien comprendre le sens.
" + } + }, + { + "id": "2", + "content": "Non
Bien vu !
\nComme beaucoup d’autres mots, le mot “port” peut avoir plusieurs significations. On va avoir besoin du contexte des autres mots de la phrase ou du paragraphe pour bien comprendre le sens.
" + } + }, + { + "id": "3", + "content": "Je ne sais pas.
Plutôt pas !
\nComme beaucoup d’autres mots, le mot “port” peut avoir plusieurs significations. On va avoir besoin du contexte des autres mots de la phrase ou du paragraphe pour bien comprendre le sens.
" + } + } + ], + "solution": "2" + } + ] + }, + { + "elements": [ + { + "id": "a52ce1af-1417-4060-ad65-41e5a91795cc", + "type": "text", + "tag": " ", + "content": "Sélectionnez les différents tokens du prompt et observez l’évolution du vecteur “port”.
" + }, + { + "id": "361baf8e-5e35-47d1-ae28-3d7950740e7b", + "type": "custom", + "title": "Data select", + "instruction": "[Aujourd'hui un carrousel, demain un POI data select]
Observez puis répondez à la question.
Que se passe-t-il lorsque l’on prend en compte les autres tokens du prompt ?
", + "hasShortProposals": false, + "proposals": [ + { + "id": "1", + "content": "L’interprétation des tokens est plus appropriée.
" + }, + { + "id": "2", + "content": "Le nombre de lettres dans le token change.
" + }, + { + "id": "3", + "content": "Les valeurs du vecteur du token évoluent.
" + }, + { + "id": "4", + "content": "Le modèle est ré-entraîné sur des miliers de textes.
" + } + ], + "feedbacks": { + "valid": { + "state": "Bien vu !
Quand on prend en compte les autres tokens du prompt, c’est-à-dire tout le contexte de la requête, le modèle fait des calculs pour ajuster la valeur du vecteur en fonction des autres vecteurs du prompt et ainsi faire en sorte qu’il ait une interprétation plus appropriée dans son contexte.
Pas tout à fait !
Quand on prend en compte les autres tokens du prompt, c’est-à-dire tout le contexte de la requête, le modèle fait des calculs pour ajuster la valeur du vecteur en fonction des autres vecteurs du prompt et ainsi faire en sorte qu’il ait une interprétation plus appropriée dans son contexte.
Ce mécanisme, appelé mécanisme d’auto-attention, permet d’obtenir une vectorisation contextualisée, c’est-à-dire que l’on ajuste la valeur des vecteurs de chaque token en fonction des autres tokens du prompt. Cette série de calculs se base sur certains paramètres du modèle, “appris” durant la phase d’entraînement.
Dans les IA génératives, tout l'historique de la conversation peut être pris en compte dans le contexte, c’est ce que l’on appele la fenêtre de contexte.
La taille de cette fenêtre de contexte est limitée. Lorsque la taille de la fenêtre de contexte est faible, le logiciel d’IA a tendance à ne pas prendre compte le début de la conversation. Mais aujourd'hui les fenêtres de contextes de certains modèles vont jusqu’à +1M de tokens, soit un livre de 2000 pages !
" + } + ] + } + ] + } + ] + }, + { + "id": "b1cc5840-4f82-4f10-b2c0-9ef795994011", + "type": "transition", + "title": "transition", + "components": [ + { + "type": "element", + "element": { + "id": "576bc60d-fc8d-4d1e-b3c1-ce63e3c3e36d", + "type": "text", + "tag": " ", + "content": "Le vecteur “port” a été ajusté pour prendre en compte le reste du prompt d’Anna. Que se passe-t-il après ?
Un réseau de neuronnes prend comme données d’entrée les valeurs du vecteur.
Les données de sortie de ce réseaux de neuronnes sont des logits.
D’après vous, qu’est-ce qu’un logit ?
", + "hasShortProposals": false, + "proposals": [ + { + "id": "1", + "content": "une liste de tokens probables
", + "feedback": { + "diagnosis": "Eh non !
Le logit est un score qui va permettre de sélectionner le prochain token de la réponse.
" + } + }, + { + "id": "2", + "content": "un vecteur qui n’a pas été contextualisé
", + "feedback": { + "diagnosis": "Eh non !
Le logit est un score qui va permettre de sélectionner le prochain token de la réponse.
" + } + }, + { + "id": "3", + "content": "un score qui va permettre de sélectionner le prochain token de la réponse
", + "feedback": { + "diagnosis": "Bien vu !
" + } + }, + { + "id": "4", + "content": "Je ne sais pas.
Le logit est un score qui va permettre de sélectionner le prochain token de la réponse.
" + } + } + ], + "solution": "3" + } + ] + }, + { + "elements": [ + { + "id": "6bd83417-56a2-4fa1-a56b-a350cfae42d2", + "type": "qcu-discovery", + "instruction": "Combien de logit sont calculés par le réseau de neurones ?
", + "hasShortProposals": false, + "proposals": [ + { + "id": "1", + "content": "Un seul logit est calculé.
", + "feedback": { + "diagnosis": "Eh non, beaucoup plus !
Un logit est calculé pour chaque token présent dans le bibliothèque de tokens.
" + } + }, + { + "id": "2", + "content": "Un logit est calculé pour chaque token du prompt.
", + "feedback": { + "diagnosis": "Eh non, beaucoup plus !
Un logit est calculé pour chaque token présent dans le bibliothèque de tokens.
" + } + }, + { + "id": "3", + "content": "Un logit est calculé pour chaque token présent dans le bibliothèque de tokens.
", + "feedback": { + "diagnosis": "Bien vu !
Je ne sais pas.