La tokenisation est le processus qui consiste à diviser un texte en unités discrètes appelées jetons, lesquels constituent le vocabulaire de base qu'un grand modèle de langage lit en entrée et produit en sortie. Les jetons sont généralement des morceaux de sous-mots plutôt que des mots entiers ou des caractères individuels, un choix de conception qui équilibre la taille du vocabulaire et la longueur des séquences.
Pourquoi pas des mots ou des caractères
Diviser un texte en mots entiers nécessiterait un vocabulaire assez vaste pour couvrir chaque forme de mot dans chaque langue prise en charge par un modèle, y compris les mots rares, les fautes d'orthographe et les noms propres, tout en échouant dès qu'un mot véritablement nouveau apparaît. Diviser un texte en caractères individuels évite ce problème de vocabulaire mais produit des séquences beaucoup plus longues à traiter pour un modèle, ce qui est coûteux étant donné que les transformeurs et leurs mécanismes d'attention s'adaptent mal à l'augmentation de la longueur des séquences. La tokenisation par sous-mots est un compromis : les mots courants sont généralement représentés par un seul jeton, tandis que les mots plus rares sont décomposés en morceaux plus petits et réutilisables, et même des combinaisons de caractères entièrement inédites peuvent encore être représentées comme une séquence d'unités de sous-mots connues.
Méthodes
La méthode de tokenisation par sous-mots la plus utilisée est l'encodage par paires d'octets, adapté pour les modèles de langage à partir d'un algorithme de compression de données de 1994 et s'appuyant sur des techniques statistiques antérieures de traitement du langage naturel pour gérer les mots non vus pendant l'entraînement. Elle fonctionne en partant de caractères ou d'octets individuels et en fusionnant itérativement les paires les plus fréquemment co-occurrentes en de nouveaux jetons, construisant ainsi un vocabulaire de taille fixe composé des unités de sous-mots les plus utiles observées dans un grand corpus d'entraînement. Des variantes telles que SentencePiece et WordPiece suivent une logique de fusion similaire avec un prétraitement et une gestion des espaces différents. Le vocabulaire résultant, généralement composé de dizaines de milliers de jetons, est fixé une fois le modèle entraîné et ne peut être modifié sans un réentraînement.
Des jetons aux nombres
Une fois le texte divisé en jetons, chaque jeton est mappé à un index entier puis à une représentation vectorielle apprise appelée plongement, qui est ce que le réseau de neurones traite réellement. GPT-2 et GPT-3 ont tous deux utilisé des tokeniseurs à encodage par paires d'octets au niveau des octets, et la plupart des grands modèles de langage ultérieurs ont suivi des approches similaires, parfois avec des vocabulaires élargis pour mieux représenter les langues non anglaises et le code.
Implications pratiques
La tokenisation a plusieurs conséquences visibles pour les utilisateurs de modèles de langage, même sans aucune connaissance technique. La fenêtre de contexte d'un modèle, c'est-à-dire la quantité maximale de texte qu'il peut traiter à la fois, est mesurée en jetons plutôt qu'en mots ou en caractères, et les API commerciales facturent généralement par jeton, ce qui rend la tokenisation directement pertinente pour le coût. Les schémas de tokenisation entraînés principalement sur des textes anglais ont tendance à diviser les textes non anglais, en particulier les langues avec des systèmes d'écriture différents, en un plus grand nombre de jetons par mot que l'anglais, ce qui peut rendre l'utilisation d'un modèle plus coûteuse et réduire effectivement la fenêtre de contexte utilisable pour les locuteurs de ces langues. La tokenisation peut également produire des comportements surprenants sur des tâches nécessitant un raisonnement sur des caractères individuels, comme compter les lettres dans un mot, car un modèle peut ne jamais voir le mot décomposé en ses caractères composants.