Comprendre la tokenisation en PNL : guide du débutant sur le traitement de texte
Publié: 2024-11-26La tokenisation est un composant critique mais souvent négligé du traitement du langage naturel (NLP). Dans ce guide, nous expliquerons la tokenisation, ses cas d'utilisation, ses avantages et ses inconvénients, et pourquoi elle est impliquée dans presque tous les grands modèles de langage (LLM).
Table des matières
- Qu’est-ce que la tokenisation en PNL ?
- Types de tokenisation
- Comment fonctionne la tokenisation
- Applications de tokenisation
- Avantages de la tokenisation
- Les défis de la tokenisation
Qu’est-ce que la tokenisation en PNL ?
La tokenisation est une méthode NLP qui convertit le texte en formats numériques que les modèles d'apprentissage automatique (ML) peuvent utiliser. Lorsque vous envoyez votre invite à un LLM tel que Claude d'Anthropic, Gemini de Google ou un membre de la série GPT d'OpenAI, le modèle ne lit pas directement votre texte. Ces modèles ne peuvent prendre que des nombres comme entrées, le texte doit donc d'abord être converti en une séquence de nombres à l'aide d'un tokenizer.
Une façon pour un tokenizer de tokeniser du texte serait de le diviser en mots séparés et d'attribuer un numéro à chaque mot unique :
« Grammarly aime la grammaire, le ML et l'écriture » pourrait devenir :
Chaque mot (et son numéro associé) est un jeton. Un modèle ML peut utiliser la séquence de jetons ([7,102], [37], [564], [2], [9,763], [2], [231]) pour exécuter ses opérations et produire sa sortie. Cette sortie est généralement un nombre, qui est reconverti en texte en utilisant l'inverse de ce même processus de tokenisation. En pratique, cette tokenisation mot à mot est un excellent exemple mais est rarement utilisée dans l’industrie pour les raisons que nous verrons plus tard.
Une dernière chose à noter est que les tokeniseurs ont des vocabulaires, c'est-à-dire l'ensemble complet de jetons qu'ils peuvent gérer. Un tokeniseur qui connaît les mots anglais de base mais pas les noms d’entreprise peut ne pas avoir « Grammarly » comme jeton dans son vocabulaire, ce qui entraîne un échec de la tokenisation.
Types de tokenisation
En général, la tokenisation consiste à transformer un morceau de texte en une séquence de nombres. Bien qu'il soit naturel de penser à la tokenisation au niveau du mot, il existe de nombreuses autres méthodes de tokenisation, dont l'une, la tokenisation des sous-mots, est la norme de l'industrie.
Tokenisation de mots
La tokenisation des mots est l'exemple que nous avons vu précédemment, où le texte est divisé par chaque mot et par ponctuation.
Le principal avantage de la tokenisation des mots est qu’elle est facile à comprendre et à visualiser. Il présente cependant quelques défauts :
- La ponctuation, si elle est présente, est attachée aux mots, comme pour « l’écriture ».
- Les mots nouveaux ou peu courants (tels que « Grammarly ») occupent un jeton entier.
En conséquence, la tokenisation des mots peut créer des vocabulaires contenant des centaines de milliers de jetons. Le problème avec les vocabulaires volumineux est qu'ils rendent la formation et l'inférence beaucoup moins efficaces : la matrice nécessaire pour convertir entre le texte et les nombres devrait être énorme.
De plus, il y aurait de nombreux mots rarement utilisés, et les modèles PNL ne disposeraient pas de suffisamment de données d'entraînement pertinentes pour renvoyer des réponses précises pour ces mots peu fréquents. Si un nouveau mot était inventé demain, un LLM utilisant la tokenisation de mots devrait être recyclé pour incorporer ce mot.
Tokenisation des sous-mots
La tokenisation des sous-mots divise le texte en morceaux plus petits ou égaux aux mots. Il n'y a pas de taille fixe pour chaque jeton ; chaque jeton (et sa longueur) est déterminé par le processus de formation. La tokenisation des sous-mots est la norme de l'industrie pour les LLM. Vous trouverez ci-dessous un exemple, avec la tokenisation effectuée par le tokenizer GPT-4o :
Ici, le mot rare « Grammarly » est décomposé en trois jetons : « Gr », « amm » et « arly ». Pendant ce temps, les autres mots sont suffisamment courants dans le texte pour former leurs propres jetons.
La tokenisation des sous-mots permet des vocabulaires plus petits, ce qui signifie une formation et une inférence plus efficaces et moins coûteuses. Les tokeniseurs de sous-mots peuvent également décomposer des mots rares ou nouveaux en combinaisons de jetons existants plus petits. Pour ces raisons, de nombreux modèles NLP utilisent la tokenisation des sous-mots.
Tokenisation des personnages
La tokenisation des caractères divise le texte en caractères individuels. Voici à quoi ressemblerait notre exemple :
Chaque personnageuniquedevient son propre jeton. Cela nécessite en fait le plus petit vocabulaire puisqu'il n'y a que 52 lettres dans l'alphabet (les majuscules et les minuscules sont considérées comme différentes) et plusieurs signes de ponctuation. Étant donné que tout mot anglais doit être formé à partir de ces caractères, la tokenisation des caractères peut fonctionner avec n'importe quel mot nouveau ou rare.
Cependant, selon les tests LLM standard, la tokenisation des caractères ne fonctionne pas aussi bien que la tokenisation des sous-mots dans la pratique. Le jeton de sous-mot « voiture » contient beaucoup plus d'informations que le jeton de caractère « c », de sorte que le mécanisme d'attention des transformateurs a plus d'informations sur lesquelles s'exécuter.
Tokenisation des phrases
La tokenisation des phrases transforme chaque phrase du texte en son propre jeton. Notre exemple ressemblerait à :
L'avantage est que chaque jeton contient une tonne d'informations. Cependant, il existe plusieurs inconvénients. Il existe une infinité de façons de combiner des mots pour écrire des phrases. Le vocabulaire devrait donc également être infini.
De plus, chaque phrase elle-même serait assez rare puisque même des différences infimes (telles que « aussi » au lieu de « et ») signifieraient un jeton différent bien qu'elles aient la même signification. La formation et l'inférence seraient un cauchemar. La tokenisation des phrases est utilisée dans des cas d'utilisation spécialisés tels que l'analyse des sentiments des phrases, mais sinon, c'est un spectacle rare.
Compromis de tokenisation : efficacité contre performances
Choisir la bonne granularité de tokenisation pour un modèle est vraiment une relation complexe entre efficacité et performances. Avec de très gros jetons (par exemple, au niveau de la phrase), le vocabulaire devient massif. L'efficacité de la formation du modèle diminue car la matrice contenant tous ces jetons est énorme. Les performances chutent car il n'y a pas suffisamment de données de formation pour que tous les jetons uniques puissent apprendre des relations de manière significative.
À l’inverse, avec de petits jetons, le vocabulaire devient restreint. La formation devient efficace, mais les performances peuvent chuter puisque chaque jeton ne contient pas suffisamment d'informations pour que le modèle puisse apprendre les relations jeton-jeton.
La tokenisation des sous-mots se situe en plein milieu. Chaque jeton contient suffisamment d'informations pour que les modèles apprennent les relations, mais le vocabulaire n'est pas si vaste que la formation devienne inefficace.
Comment fonctionne la tokenisation
La tokenisation tourne autour de la formation et de l’utilisation des tokenizers. Les tokenizers convertissent le texte en jetons et les jetons en texte. Nous discuterons ici des tokeniseurs de sous-mots car ils sont le type le plus populaire.
Les tokeniseurs de sous-mots doivent être formés pour diviser efficacement le texte.
Pourquoi « Grammarly » est-il divisé en « Gr », « amm » et « arly » ? « Gram », « mar » et « ly » ne pourraient-ils pas également fonctionner ? Pour un œil humain, c’est certainement possible, mais le tokenizer, qui a probablement appris la représentation la plus efficace, pense différemment. Un algorithme de formation courant (bien qu'il ne soit pas utilisé dans GPT-4o) utilisé pour apprendre cette représentation est le codage par paire d'octets (BPE). Nous expliquerons BPE dans la section suivante.
Formation Tokenizer
Pour former un bon tokeniseur, vous avez besoin d’un énorme corpus de texte sur lequel vous entraîner. L'exécution de BPE sur ce corpus fonctionne comme suit :
- Divisez tout le texte du corpus en caractères individuels. Définissez-les comme jetons de départ dans le vocabulaire.
- Fusionnez les deux jetons les plus fréquemment adjacents du texte en un nouveau jeton et ajoutez-le au vocabulaire (sans supprimer les anciens jetons, c'est important).
- Répétez ce processus jusqu'à ce qu'il ne reste plus de paires fréquentes de jetons adjacents ou que la taille maximale du vocabulaire ait été atteinte.
A titre d'exemple, supposons que l'ensemble de notre corpus de formation soit constitué du texte « abc abcd » :
- Le texte serait divisé en ["a", "b", "c", " ", "a", "b", "c", "d"]. Notez que la quatrième entrée de cette liste est un caractère espace. Notre vocabulaire serait alors ["a", "b", "c", " ", "d"].
- « a » et « b » apparaissent le plus souvent côte à côte dans le texte (à égalité avec « b » et « c », mais « a » et « b » gagnent par ordre alphabétique). Nous les combinons donc en un seul jeton, « ab ». Le vocabulaire ressemble maintenant à ["a", "b", "c", " ", "d", "ab"], et le texte mis à jour (avec la fusion de jetons "ab" appliquée) ressemble à ["ab" , "c", " ", "ab", "c", "d"].
- Or, « ab » et « c » apparaissent le plus souvent ensemble dans le texte. Nous les fusionnons dans le token « abc ». Le vocabulaire ressemble alors à ["a", "b", "c", " ", "d", "ab", "abc"], et le texte mis à jour ressemble à ["abc", " ", "abc". ", "d"].
- Nous terminons le processus ici puisque chaque paire de jetons adjacents n'apparaît désormais qu'une seule fois. La fusion ultérieure des jetons rendrait les performances du modèle résultant moins bonnes sur d'autres textes. En pratique, la limite de taille du vocabulaire est le facteur limitant.
Avec notre nouvel ensemble de vocabulaire, nous pouvons faire la correspondance entre le texte et les jetons. Même le texte que nous n'avons jamais vu auparavant, comme « taxi », peut être symbolisé car nous n'avons pas supprimé les jetons à un seul caractère. Nous pouvons également renvoyer des numéros de jeton en voyant simplement la position du jeton dans le vocabulaire.
Une bonne formation en matière de tokenisation nécessite des volumes de données extrêmement élevés et beaucoup de calcul, soit plus que ce que la plupart des entreprises peuvent se permettre. Les entreprises contournent ce problème en ignorant la formation de leur propre tokenizer. Au lieu de cela, ils utilisent simplement un tokenizer pré-entraîné (tel que le tokenizer GPT-4o lié ci-dessus) pour économiser du temps et de l'argent avec une perte minimale, voire inexistante, des performances du modèle.
Utiliser le tokeniseur
Nous avons donc ce tokenizer de sous-mots formé sur un corpus massif à l'aide de BPE. Maintenant, comment l’utiliser sur un nouveau morceau de texte ?
Nous appliquons les règles de fusion que nous avons déterminées lors du processus de formation du tokenizer. Nous divisons d’abord le texte saisi en caractères. Ensuite, nous effectuons des fusions de jetons dans le même ordre que lors de la formation.
Pour illustrer, nous utiliserons un texte d'entrée légèrement différent de « dc abc » :
- Nous le divisons en caractères ["d", "c", " ", "a", "b", "c"].
- La première fusion que nous avons faite lors de l'entraînement était "ab", donc nous le faisons ici : ["d", "c", " ", "ab", "c"].
- La deuxième fusion que nous avons faite était "abc", donc nous faisons ça : ["d", "c", " ", "abc"].
- Ce sont les seules règles de fusion dont nous disposons, nous avons donc terminé la tokenisation et nous pouvons renvoyer les ID des jetons.
Si nous avons un tas d'ID de jeton et que nous voulons les convertir en texte, nous pouvons simplement rechercher chaque ID de jeton dans la liste et renvoyer son texte associé. Les LLM font cela pour transformer les intégrations (vecteurs de nombres qui capturent lasignificationdes jetons en regardant les jetons environnants) avec lesquels ils travaillent en texte lisible par l'homme.
Applications de tokenisation
La tokenisation est toujours la première étape de tout NLP. Transformer du texte en formulaires avec lesquels les modèles ML (et les ordinateurs) peuvent fonctionner nécessite une tokenisation.
Tokenisation dans les LLM
La tokenisation est généralement la première et la dernière partie de chaque appel LLM. Le texte est d'abord transformé en jetons, puis les jetons sont convertis en intégrations pour capturer la signification de chaque jeton et transmis aux parties principales du modèle (les blocs de transformation). Une fois les blocs de transformation exécutés, les intégrations sont reconverties en jetons. Enfin, le jeton qui vient d'être renvoyé est ajouté à l'entrée et renvoyé dans le modèle, en répétant à nouveau le processus. Les LLM utilisent la tokenisation des sous-mots pour équilibrer performances et efficacité.
Tokenisation dans les moteurs de recherche
Les moteurs de recherche tokenisent les requêtes des utilisateurs pour les standardiser et mieux comprendre l’intention de l’utilisateur. La tokenisation des moteurs de recherche peut impliquer de diviser le texte en mots, de supprimer les mots de remplissage (tels que « le » ou « et »), de transformer les majuscules en minuscules et de traiter des caractères tels que les traits d'union. La tokenisation des sous-mots n'est généralement pas nécessaire ici, car les performances et l'efficacité dépendent moins de la taille du vocabulaire.
Tokenisation dans la traduction automatique
La tokenisation de la traduction automatique est intéressante car les langues d'entrée et de sortie sont différentes. En conséquence, il y aura deux tokenizers, un pour chaque langue. La tokenisation des sous-mots fonctionne généralement mieux car elle équilibre le compromis entre l'efficacité et les performances du modèle. Mais certaines langues, comme le chinois, n’ont pas de composante linguistique inférieure à un mot. Là, la tokenisation des mots est nécessaire.
Avantages de la tokenisation
La tokenisation est un incontournable pour tout modèle NLP. Une bonne tokenisation permet aux modèles ML de fonctionner efficacement avec du texte et de bien gérer les nouveaux mots.
La tokenisation permet aux modèles de travailler avec du texte
En interne, les modèles ML ne fonctionnent qu'avec des nombres. L'algorithme derrière les modèles ML repose entièrement sur le calcul, qui lui-même nécessite des nombres pour être calculé. Ainsi, le texte doit être transformé en nombres avant que les modèles ML puissent fonctionner avec eux. Après la tokenisation, des techniques telles que l'attention ou l'intégration peuvent être appliquées aux nombres.
La tokenisation se généralise aux textes nouveaux et rares
Ou plus précisément,une bonnetokenisation se généralise à un texte nouveau et rare. Avec la tokenisation des sous-mots et des caractères, les nouveaux textes peuvent être décomposés en séquences de jetons existants. Ainsi, coller un article contenant des mots charabia dans ChatGPT ne provoquera pas sa rupture (même s'il ne donnera pas non plus une réponse très cohérente). Une bonne généralisation permet également aux modèles d'apprendre les relations entre les mots rares, sur la base des relations dans les sous-jetons.
Les défis de la tokenisation
La tokenisation dépend du corpus de formation et de l'algorithme, les résultats peuvent donc varier. Cela peut affecter les capacités de raisonnement des LLM et leur longueur d'entrée et de sortie.
La tokenisation affecte les capacités de raisonnement des LLM
Un problème simple qui déconcerte souvent les LLM est de compter les occurrences de la lettre « r » dans le mot « fraise ». Le modèle dirait à tort qu’il y en avait deux, alors que la réponse est en réalité trois. Cette erreur peut être due en partie à la tokenisation. Le tokenizer de sous-mots divise « fraise » en « st », « cru » et « baie ». Ainsi, le modèle n’a peut-être pas été en mesure de connecter le « r » du jeton du milieu aux deux « r » du dernier jeton. L'algorithme de tokenisation choisi affecte directement la façon dont les mots sont tokenisés et la façon dont chaque jeton est lié aux autres.
La tokenisation affecte la longueur d'entrée et de sortie LLM
Les LLM sont principalement construits sur l'architecture du transformateur, qui s'appuie sur le mécanisme d'attention pour contextualiser chaque jeton. Cependant, à mesure que le nombre de jetons augmente, le temps nécessaire à l’attention augmente quadratiquement. Ainsi, un texte avec quatre jetons prendra 16 unités de temps mais un texte avec huit jetons prendra 64 unités de temps. Cela limite les LLM à des limites d'entrée et de sortie de quelques centaines de milliers de jetons. Avec des jetons plus petits, cela peut vraiment limiter la quantité de texte que vous pouvez insérer dans le modèle, réduisant ainsi le nombre de tâches pour lesquelles vous pouvez l'utiliser.