Grands modèles de langage (LLM)

Effectué

Note

Pour plus d’informations, consultez l’onglet Texte et images !

Au cœur de l’IA générative, des modèles de langage volumineux (LLMs) et leurs relations plus compactes, les petits modèles de langage (SLMs) encapsulent les relations linguistiques et sémantiques entre les mots et les expressions dans un vocabulaire. Le modèle peut utiliser ces relations pour raisonner sur l’entrée en langage naturel et générer des réponses significatives et pertinentes.

Fondamentalement, les modèles LLM sont formés pour générer des complétions en fonction des instructions. Considérez-les comme des exemples super puissants de la fonctionnalité de texte prédictif sur de nombreux téléphones portables. Une invite démarre une séquence de prédictions de texte qui aboutit à une complétion sémantiquement correcte. L’astuce est que le modèle comprend les relations entre les mots et qu’il peut identifier quels mots dans la séquence jusqu’à présent sont les plus susceptibles d’influencer le suivant ; et utilisez-la pour prédire la continuation la plus probable de la séquence.

Par exemple, considérez la phrase suivante :

J’ai entendu un chien aboyer fort contre un chat

Supposons que vous n’entendiez que les premiers mots : « J’ai entendu un chien ... Vous savez que certains de ces mots sont des indices plus utiles quant à ce que le mot suivant pourrait être que d’autres. Vous savez que « entendu » et « chien » sont des indicateurs forts de ce qui vient ensuite, et cela vous aide à limiter les probabilités. Vous savez qu’il y a de grandes chances que la suite de la phrase soit « J’ai entendu un chienaboyer ».

Vous pouvez deviner le mot suivant, car :

  • Vous avez un grand vocabulaire de mots à partir duquel tirer.
  • Vous avez appris des structures linguistiques courantes, donc vous savez comment les mots se rapportent les uns aux autres dans des phrases significatives.
  • Vous avez une compréhension des concepts sémantiques associés aux mots - vous savez que quelque chose que vous avez entendu doit être un son d’un certain type, et vous savez qu’il y a des sons spécifiques qui sont faits par un chien.

Comment entraîner un modèle pour avoir ces mêmes capacités ?

Segmentation du texte en unités lexicales

La première étape consiste à fournir au modèle un vocabulaire volumineux de mots et d’expressions ; et on veut dire grand. La dernière génération de LLMs possède des vocabulaires qui se composent de centaines de milliers de jetons, en fonction de grands volumes de données d’apprentissage provenant d’Internet et d’autres sources.

Attends un peu. Jetons ?

Bien que nous ayons tendance à penser à la langue en termes de mots, les LLM décomposent leur vocabulaire en unités. Les jetons incluent des mots, mais également des sous-mots (comme le « in » dans « incroyable » et « impossible »), la ponctuation et d’autres séquences de caractères couramment utilisées. La première étape de l’apprentissage d’un modèle de langage volumineux consiste donc à décomposer le texte d’apprentissage en ses jetons distincts et à attribuer un identificateur entier unique à chacun d’eux, comme suit :

  • I (1)
  • entendu (2)
  • a (3)
  • chien (4)
  • écorce (5)
  • fort (6)
  • at (7)
  • a (3) déjà affecté
  • chat (8)

Et ainsi de suite.

Lorsque vous ajoutez des données d’apprentissage supplémentaires, d’autres jetons seront ajoutés au vocabulaire et aux identificateurs attribués ; donc vous pourriez finir par des jetons pour des mots comme chiot, skateboard, voiture, et d’autres.

Note

Dans cet exemple simple, nous avons tokenisé l’exemple de texte en fonction des mots. En réalité, il y aurait également des sous-mots, des ponctuations et d’autres jetons.

Transformation de jetons avec un transformateur

Maintenant que nous avons un ensemble de jetons avec des ID uniques, nous devons trouver un moyen de les lier les uns aux autres. Pour ce faire, nous affectons à chaque jeton un vecteur (tableau de plusieurs valeurs numériques, comme [1, 23, 45]). Chaque vecteur a plusieurs éléments numériques ou dimensions, et nous pouvons les utiliser pour encoder des attributs linguistiques et sémantiques du jeton afin de fournir une grande quantité d’informations sur ce que signifie le jeton et la façon dont il se rapporte à d’autres jetons, dans un format efficace.

Nous devons transformer les représentations vectorielles initiales des jetons en nouveaux vecteurs avec des caractéristiques linguistiques et sémantiques incorporées, en fonction des contextes dans lesquels ils apparaissent dans les données d’apprentissage. Étant donné que les nouveaux vecteurs ont des valeurs sémantiques incorporées, nous les appelons des incorporations.

Pour accomplir cette tâche, nous utilisons un modèle transformateur . Ce type de modèle se compose de deux « blocs » :

  • Bloc d’encodeur qui crée les incorporations en appliquant une technique appelée attention. La couche d’attention examine chaque jeton à son tour et détermine la façon dont il est influencé par les jetons qui l’entourent. Pour rendre le processus d’encodage plus efficace, l’attention multi-têtes est utilisée pour évaluer multiples éléments du jeton en parallèle et assigner des pondérations qui peuvent être utilisées pour calculer les nouvelles valeurs d’éléments du vecteur. Les résultats de la couche d’attention sont alimentés dans un réseau neuronal entièrement connecté pour trouver la meilleure représentation vectorielle de l’incorporation.
  • Couche de décodeur qui utilise les incorporations calculés par l’encodeur pour déterminer le jeton suivant le plus probable dans une séquence initiée par une invite. Le décodeur utilise également l’attention et un réseau neuronal de transfert de flux pour effectuer ses prédictions.

Diagramme de l’architecture Transformer avec les couches d’encodage et de décodage.

Note

Nous avons considérablement simplifié l’architecture et le processus du transformateur dans la description et le diagramme. Ne vous inquiétez pas trop sur les détails spécifiques du fonctionnement de l’attention , le point clé est qu’il permet de capturer des caractéristiques linguistiques et sémantiques de chaque jeton en fonction des contextes dans lesquels il est utilisé. Si vous souhaitez approfondir l’architecture du transformateur et comment elle utilise l’attention, vous pouvez lire l'article original « Attention is All You Need ».

Vecteurs initiaux et encodage positionnel

Initialement, les valeurs de vecteur de jeton sont attribuées de manière aléatoire avant d’être alimentées par le transformateur pour créer des vecteurs d’incorporation. Les vecteurs de jeton sont alimentés dans le transformateur, ainsi qu’un encodage positionnel qui indique où le jeton apparaît dans la séquence de texte d’entraînement (nous devons le faire, car l’ordre dans lequel les jetons apparaissent dans la séquence est pertinent pour la façon dont ils se rapportent les uns aux autres). Par exemple, nos jetons peuvent commencer à ressembler à ceci :

Jeton ID de jeton Poste Vector
I 1 1 [3, 7, 10]
entendu 2 2 [2, 15, 1]
m 3 3 [9, 11, 1]
chien 4 4 [2, 7, 11]
écorce 5 5 [9, 12, 0]
fort 6 6 [3, 8, 13]
at 7 7 [5, 7, 10]
m 3 8 [9, 11, 1]
chat 8 9 [8, -6, 9 ]
... ... ... ...
chiot 127 45 [7, 7, -2]
voiture 128 56 [5, -5, 1 ]
planche à roulettes 129 67 [4, 7, 14]

Note

Nous avons gardé les choses simples en utilisant des vecteurs avec seulement trois éléments (ce qui nous aidera à les visualiser dans trois dimensions ultérieurement). En réalité, les vecteurs ont des milliers d’éléments.

Attention et incorporations

Pour déterminer les représentations vectorielles des jetons qui incluent des informations contextuelles incorporées, le transformateur utilise des couches d’attention . Une couche d’attention considère chaque jeton à son tour, dans le contexte de la séquence de jetons dans laquelle il apparaît. Les jetons autour de celui en cours sont pondérés pour refléter leur influence, et les pondérations sont utilisées pour calculer les valeurs d’élément du vecteur d'encodage du jeton en cours. Par exemple, lorsque vous envisagez le jeton « aboyer » dans le contexte « J’ai entendu un chien aboyer », les jetons pour « entendu » et « chien » reçoivent plus de poids que « je » ou « un », qui sont des indicateurs plus faibles que « aboyer ».

Initialement, le modèle ne « sait pas » quels jetons influencent les autres ; mais comme il est exposé à des volumes de texte plus volumineux, il peut apprendre de manière itérative quels jetons apparaissent généralement ensemble, et commencer à rechercher des modèles qui aident à affecter des valeurs aux éléments vectoriels qui reflètent les caractéristiques linguistiques et sémantiques des jetons, en fonction de leur proximité et de leur fréquence d’utilisation ensemble. Le processus est rendu plus efficace en utilisant l’attention multi-têtes pour prendre en compte différents éléments des vecteurs en parallèle.

Le résultat du processus d’encodage est un ensemble d’incorporations ; vecteurs qui incluent des informations contextuelles sur la façon dont les jetons du vocabulaire se rapportent les uns aux autres. Un transformateur réel produit des incorporations qui incluent des milliers d’éléments, mais pour garder les choses simples, nous allons nous tenir aux vecteurs avec seulement trois vecteurs dans notre exemple. Le résultat du processus d’encodage de notre vocabulaire peut ressembler à ceci :

Jeton ID de jeton Incorporation
I 1 [2, 0, -1]
entendu 2 [-2, 2, 4 ]
m 3 [-3, 5, 5 ]
chien 4 [10, 3, 2 ]
écorce 5 [9, 2, 10 ]
fort 6 [-3, 8, 3 ]
at 7 [-5, -1, 1]
chat 8 [10, 3, 1]
chiot 127 [5, 3, 2 ]
voiture 128 [-2, -2, 1 ]
planche à roulettes 129 [-3, -2, 2 ]
écorce 203 [2, -2, 3 ]

En observant bien, vous avez peut-être remarqué que nos résultats incluent deux incorporations pour le jeton « aboyer ». Il est important de comprendre que les incorporations représentent un jeton dans un contexte particulier ; et certains jetons peuvent être utilisés pour signifier plusieurs choses. Par exemple, l’écorce d’un chien est différente de l’écorce d’un arbre ! Les jetons couramment utilisés dans plusieurs contextes peuvent produire plusieurs incorporations.

Nous pouvons considérer les éléments des incorporations comme des dimensions dans un espace vectoriel multidimensionnel. Dans notre exemple simple, nos incorporations n’ont que trois éléments. Nous pouvons donc les visualiser en tant que vecteurs dans un espace tridimensionnel, comme suit :

Diagramme des vecteurs d’incorporation pour les jetons en trois dimensions.

Étant donné que les dimensions sont calculées en fonction de la façon dont les jetons sont liés linguistiquement les uns aux autres, les jetons utilisés dans des contextes similaires (et qui ont donc des significations similaires) entraînent des vecteurs avec des directions similaires. Par exemple, les incorporations pour « chien » et « chiot » pointent dans plus ou moins la même direction, ce qui n’est pas trop différent de l’incorporation pour « chat » ; mais très différent de l’incorporation pour « skateboard » ou « voiture ». Nous pouvons mesurer la proximité sémantique entre les jetons en calculant la similarité cosinus de leurs vecteurs.

Prédiction d’achèvements à partir d’invites

Maintenant que nous avons un ensemble d’incorporations qui encapsulent la relation contextuelle entre les jetons, nous pouvons utiliser le bloc décodeur d’un transformateur pour prédire de manière itérative le mot suivant dans une séquence en fonction d’une invite de départ.

Une fois de plus, l’attention est utilisée pour considérer chaque jeton dans le contexte ; mais cette fois, le contexte à considérer ne peut inclure que les jetons qui précèdent le jeton que nous essayons de prédire. Le modèle de décodeur est entraîné en utilisant les données pour lesquelles nous avons déjà la séquence complète, en appliquant une technique appelée attention masquée, où les tokens suivant le token actuel sont ignorés. Étant donné que nous connaissons déjà le jeton suivant lors de l’entraînement, le transformateur peut le comparer au jeton prédit et ajuster les pondérations apprises dans les itérations d’entraînement ultérieures pour réduire l’erreur dans le modèle.

Lors de la prédiction d'une nouvelle complétion, pour laquelle les tokens suivants sont inconnus, les couches d'attention calculent les vecteurs possibles pour le token suivant et le réseau feed-forward est utilisé pour déterminer le candidat le plus probable. La valeur prédite est ensuite ajoutée à la séquence, et le processus entier se répète pour prédire le jeton suivant ; et ainsi de suite, jusqu’à ce que le décodeur prédit que la séquence s’est terminée.

Par exemple, étant donné la séquence « Quand mon chien était un ... », le modèle évalue les jetons de la séquence jusqu’à présent, utilise l’attention pour affecter des poids et prédire que le prochain jeton le plus probable est « chiot » plutôt que, dit, « chat » ou « skateboard ».