Découvrez les principales différences entre la tokenization et les embeddings dans les grands modèles de langage (LLMs) comme GPT. Apprenez comment la tokenization décompose le texte en unités gérables, tandis que les embeddings fournissent des représentations vectorielles riches de ces tokens. Comprendre ces processus est essentiel pour exploiter le potentiel des LLMs dans les tâches de traitement du langage naturel.
Introduction
La tokenization et les embeddings sont des composants fondamentaux des grands modèles de langage (LLMs) comme GPT, essentiels pour comprendre et générer du texte. La tokenization consiste à décomposer le texte brut en unités gérables appelées tokens, tandis que les embeddings fournissent des représentations vectorielles riches de ces tokens. Comprendre les différences entre tokenization et embeddings est indispensable pour saisir les subtilités de la façon dont les LLMs traitent les données linguistiques.
Qu’est-ce que la tokenization ?
Les tokens sont fréquemment discutés dans la recherche en IA, comme dans l’article sur Llama 2, où les auteurs mentionnent un entraînement sur 2 billions de tokens de données. Les tokens servent d’unité fondamentale, analogue à l’« atome », pour les grands modèles de langage (LLMs). La tokenization implique la traduction de chaînes de caractères (c’est-à-dire du texte) en séquences de tokens et vice versa.
Dans le domaine de l’apprentissage automatique, un token ne correspond généralement pas à un mot unique. Au lieu de cela, il peut représenter une unité plus petite, comme un caractère ou une partie d’un mot, ou plus grande, comme une phrase entière. La taille des tokens varie selon l’approche de tokenization utilisée.
La tokenization est généralement gérée par un composant appelé « Tokenizer ». Ce module fonctionne indépendamment du grand modèle de langage et possède son propre ensemble de données d’entraînement textuel, qui peut être totalement différent des données d’entraînement du LLM.
Pourquoi la tokenization est-elle importante ?
La tokenization est souvent à l’origine de nombreuses particularités observées dans les grands modèles de langage (LLMs). Bien que certains problèmes puissent initialement sembler provenir de l’architecture du réseau neuronal ou du LLM lui-même, ils peuvent en réalité être attribués à la tokenization. Voici une liste non exhaustive de problèmes qui peuvent être attribués à la tokenization :
- Des inexactitudes orthographiques
- Des difficultés avec des tâches simples de traitement de chaînes, comme l’inversion d’une chaîne
- Des performances moindres pour les langues non anglaises, comme le japonais
- Des performances médiocres dans les opérations arithmétiques de base
- Des difficultés avec les tâches de codage, comme Python, rencontrées par GPT-2
- Des problèmes liés aux espaces de fin
- Des cas où les premières versions de GPT affichaient un comportement erratique lorsqu’on leur demandait à propos de « SolidGoldMagikarp »
- Une préférence pour YAML plutôt que JSON dans le traitement des données structurées
Nous approfondirons comment la tokenization contribue à ces problèmes dans cet article.
Détails de la tokenization
Voici un aperçu des étapes impliquées dans la tokenization. Bien que certaines de ces étapes ne soient pas immédiatement claires, nous les détaillerons au fur et à mesure de cet article.
Pré-entraînement : établir le vocabulaire
- Rassembler les données d’entraînement : constituer un large corpus de données textuelles à partir duquel le modèle apprendra.
- Tokenization initiale : utiliser des méthodes de tokenization initiales pour diviser le texte en unités fondamentales, comme des mots, des sous-mots ou des caractères.
- Création du vocabulaire : sélectionner un algorithme de tokenization, comme Byte Pair Encoding (BPE), WordPiece ou SentencePiece, pour générer un ensemble de tokens gérable et efficace.
- Application de l’algorithme : implémenter l’algorithme choisi sur les tokens initiaux pour produire un ensemble de tokens de sous-mots ou de caractères qui capturent les nuances linguistiques présentes dans les données d’entraînement.
- Attribution des identifiants : attribuer un identifiant entier unique à chaque token du vocabulaire résultant.
Processus de tokenization en temps réel
- Transformer le texte entrant en tokens selon le vocabulaire établi, en assurant une couverture complète de tout le texte.
- Associer chaque token à son identifiant entier respectif tel que défini dans le vocabulaire préétabli.
- Incorporer les tokens spéciaux essentiels dans la séquence pour répondre aux exigences de traitement du modèle.
Comprendre les défis de la tokenization
N’hésitez pas à taper des phrases et observez comment les tokens sont générés (et notez l’augmentation correspondante du nombre de tokens et du prix par requête).
Survolez le texte sur le côté droit après avoir activé la case à cocher « Show whitespace », et vous observerez les tokens mis en évidence. Ces tokens consistent généralement en « morceaux » qui incluent souvent le caractère espace au début.

Voici un autre exemple :

Observez comment les morceaux de tokens et leurs représentations numériques varient selon :
- La présence d’un espace avant le mot
- L’existence d’une ponctuation
- La casse des lettres
Le grand modèle de langage (LLM) doit apprendre à partir des données brutes que malgré ces différences dans les tokens, les mots représentent le même concept ou sont au moins extrêmement similaires. Cette variabilité peut diminuer les performances.
Autres langues humaines
En comparant la taille des morceaux pour l’anglais avec d’autres langues, vous remarquerez souvent un nombre significativement plus élevé de tokens utilisés pour les langues autres que l’anglais. Cette différence provient du fait que les morceaux pour les autres langues ont tendance à être plus fragmentés, ce qui entraîne une longueur de séquence gonflée dans les documents.
Dans le mécanisme d’attention des transformeurs en apprentissage automatique, il y a une plus grande probabilité de dépassement du contexte pour les langues non anglaises. Même en transmettant le même message, plus de tokens sont consommés parce que les morceaux sont plus petits. Cette disparité est influencée à la fois par l’ensemble d’entraînement utilisé pour le tokenizer et par le tokenizer lui-même.
En fin de compte, cette utilisation inefficace de la fenêtre de contexte pour les langues non anglaises entraîne de moins bonnes performances du grand modèle de langage (LLM) lors du traitement de requêtes non anglaises.
Tokenization et code — Python
Dans le cas de Python, l’encodeur GPT-2 d’OpenAI dépensait souvent un grand nombre de tokens pour les caractères d’espacement individuels utilisés dans l’indentation des segments de code Python. Ce comportement, semblable aux défis rencontrés avec les langues non anglaises, conduit à un gonflement considérable de la fenêtre de contexte du modèle de langage limité (LLM) et, par conséquent, à une baisse des performances.
Configuration : YAML vs. JSON
Il a été découvert que YAML présente une densité plus élevée que JSON, nécessitant moins de tokens pour accomplir la même tâche.
Voici une illustration simple :


JSON : 46 tokens
Le gonflement accru de JSON entraîne :
- Une plus grande difficulté pour le LLM à comprendre (moins de densité, plus enclin à dépasser la fenêtre de contexte).
- Des dépenses plus élevées pour les utilisateurs (car ils paient essentiellement par token lors des appels API à OpenAI).
Problèmes de tokenization
La tokenization est au cœur de nombreuses anomalies observées dans les grands modèles de langage (LLMs). Plusieurs problèmes qui peuvent initialement sembler liés à l’architecture du réseau neuronal ou au LLM lui-même peuvent en réalité être attribués à la tokenization. Par exemple :
- Les LLMs ont du mal à épeler des mots ou à exécuter des tâches simples de traitement de chaînes comme l’inversion de chaîne.
- Les performances ont tendance à se dégrader pour les langues non anglaises.
- Les LLMs montrent des performances médiocres dans le traitement d’arithmétique simple.
- GPT-2 a rencontré des difficultés importantes lorsqu’il était chargé de coder en Python.
- Des avertissements étranges peuvent apparaître concernant les espaces de fin.
- La phrase « Solid Gold Magikarp » amène souvent les LLMs à dévier vers des tangentes sans rapport.
- YAML est préféré à JSON lors du travail avec des LLMs.
Tokenization dans les grands modèles de langage
Dans l’entraînement des grands modèles de langage (LLMs), le processus consiste à prendre des chaînes de caractères et à les convertir en entiers à partir d’un vocabulaire prédéfini. Ces entiers sont ensuite utilisés pour récupérer des vecteurs à partir d’une table d’embedding, qui sont ensuite introduits dans le modèle Transformer. Ce processus devient complexe car il nécessite non seulement de prendre en charge l’alphabet anglais de base, mais aussi d’accueillir diverses langues et caractères spéciaux comme les emojis.
Chaînes en Python et points de code Unicode
En Python, les chaînes sont des séquences immuables composées de points de code Unicode. Ces points de code sont définis par le Consortium Unicode dans le standard Unicode, qui comprend actuellement environ 150 000 caractères couvrant 161 écritures. Le standard Unicode est maintenu activement, la dernière version 15.1 ayant été publiée en septembre 2023.
Pour récupérer le point de code Unicode d’un seul caractère en Python, nous pouvons utiliser la fonction ord(). Par exemple :

Cependant, utiliser ces entiers de points de code bruts pour la tokenization n’est pas réalisable, car cela entraînerait un vocabulaire excessivement grand (150 000+) qui serait également instable en raison de l’évolution continue du standard Unicode.
Encodages d’octets Unicode
À la recherche d’une solution de tokenization plus efficace, nous nous tournons vers les encodages d’octets Unicode comme ASCII, UTF-8, UTF-16 et UTF-32. Ces encodages dictent les méthodes de traduction des points de code Unicode abstraits en octets concrets adaptés au stockage et à la transmission.
Encodages d’octets Unicode, ASCII, UTF-8, UTF-16, UTF-32
Le Consortium Unicode délimite trois types d’encodages : UTF-8, UTF-16 et UTF-32. Ces encodages servent de moyens pour convertir le texte Unicode en données binaires ou flux d’octets.
Parmi ces encodages, UTF-8 est le plus répandu. Il traduit chaque point de code Unicode en un flux d’octets de un à quatre octets, selon le point de code. Les 128 premiers points de code (ASCII) ne nécessitent qu’un seul octet. Les 1 920 points de code suivants nécessitent deux octets pour l’encodage, englobant la plupart des alphabets latins. Trois octets sont requis pour les 61 440 points de code restants dans le plan multilingue de base (BMP). Quatre octets couvrent les autres plans Unicode, comprenant des caractères CJK moins courants, diverses écritures historiques et des symboles mathématiques.

Utiliser directement les octets UTF-8 bruts serait très inefficace pour les modèles de langage, entraînant des séquences excessivement longues avec une taille de vocabulaire limitée à seulement 256 valeurs d’octets possibles. Une telle contrainte entrave la capacité du modèle à traiter des contextes suffisamment longs.
La solution réside dans l’utilisation d’un algorithme de Byte Pair Encoding (BPE) pour compresser ces séquences d’octets de manière variable. Cette approche permet une représentation efficace du texte avec une taille de vocabulaire plus grande mais ajustable.
Quelle est la différence entre tokenization et embeddings ?
La tokenization et les embeddings sont des processus séparés mais interdépendants au sein des grands modèles de langage (LLMs) comme GPT, contribuant à la manière dont ces modèles comprennent et génèrent du texte. Voici un bref aperçu de chacun et de leurs distinctions :
Tokenization dans les LLMs
Objectif : La tokenization vise à transformer le texte brut en une séquence de tokens, qui peuvent inclure des mots, des sous-mots ou des caractères, selon l’approche de tokenization choisie.
Procédure : Elle implique la dissection du texte en segments gérables que le modèle peut interpréter. Cela peut nécessiter une segmentation initiale du texte en fonction des espaces et de la ponctuation, suivie d’une segmentation supplémentaire en sous-mots ou caractères s’ils sont absents du vocabulaire prédéfini du modèle.
Résultat : Le résultat est une séquence de tokens qui représente le texte original dans un format propice au traitement par le modèle. Chaque token se voit attribuer un identifiant entier unique correspondant au vocabulaire du modèle.
Embeddings
Objectif : Les embeddings sont des représentations vectorielles compactes, de faible dimension et continues des tokens. Ils encodent les significations sémantiques et syntaxiques, facilitant la compréhension des nuances linguistiques par le modèle.
Procédure : Après la tokenization, chaque token (représenté par son identifiant entier) est associé à un vecteur d’embedding. Ces vecteurs sont acquis pendant la phase d’entraînement du modèle et sont stockés dans une matrice ou une table d’embedding.
Résultat : Les embeddings servent d’entrée aux couches du réseau neuronal du LLM, permettant au modèle d’effectuer des calculs sur les tokens et de discerner les relations et les motifs dans l’ensemble de données.
Trouvez plus d’informations détaillées sur les embeddings dans les LLMs dans notre blog : What is LLM Embeddings: All You Need To Know

Caractéristiques distinctives
Étape de traitement : La tokenization sert d’étape de prétraitement initiale, convertissant le texte dans un format compréhensible pour le modèle (tokens), tandis que les embeddings interviennent après la tokenization, traduisant les tokens en représentations vectorielles détaillées.
Fonction : La tokenization consiste principalement à déconstruire structurellement et à représenter le texte, tandis que les embeddings se concentrent sur la capture et l’exploitation des significations sémantiques et syntaxiques intégrées dans les tokens.
Représentation : La tokenization produit des représentations discrètes, basées sur des entiers, des composants du texte, tandis que les embeddings transforment ces entiers en vecteurs continus qui encodent des informations linguistiques.
Conclusion
En conclusion, la tokenization et les embeddings jouent des rôles essentiels dans le fonctionnement des grands modèles de langage. Alors que la tokenization structure le texte en tokens, les embeddings fournissent des significations sémantiques et syntaxiques à ces tokens via des représentations vectorielles. En comprenant ces processus, nous obtenons un aperçu de la manière dont les LLMs interprètent et génèrent du texte, contribuant ainsi aux avancées dans le traitement du langage naturel.
novita.ai, la plateforme tout-en-un pour une créativité illimitée qui vous donne accès à plus de 100 APIs. De la génération d’images au traitement du langage, en passant par l’amélioration audio et la manipulation vidéo, avec un paiement à l’utilisation avantageux, elle vous libère des tracas de la maintenance GPU tout en construisant vos propres produits. Essayez-le gratuitement.
Lectures recommandées
Novita AI LLM Inference Engine: the largest throughput and cheapest inference available
