Cours
La tokenisation est une tâche fondamentale en traitement du langage naturel (NLP). Elle consiste à découper un texte en unités plus petites, appelées jetons (tokens), qui peuvent être des mots, des sous-mots ou des caractères.
Une tokenisation efficace est cruciale pour les performances des modèles de langage. C’est une étape indispensable pour de nombreuses tâches de NLP, comme la génération de texte, la traduction et le résumé.
Tiktoken est une bibliothèque de tokenisation rapide et efficace développée par OpenAI. Elle offre une solution robuste pour convertir du texte en jetons, et inversement. Sa vitesse et son efficacité en font un excellent choix pour les développeurs et data scientists qui travaillent avec de grands jeux de données et des modèles complexes.
Ce guide s’adresse aux développeurs, aux data scientists et à toute personne souhaitant utiliser Tiktoken et recherchant un guide pratique avec des exemples.
Principes fondamentaux de l'OpenAI
Commencez à utiliser l'API OpenAI et plus encore !
Bien démarrer avec Tiktoken
Pour commencer à utiliser Tiktoken, nous devons l’installer dans notre environnement Python (Tiktoken est aussi disponible pour d’autres langages). Cela se fait avec la commande suivante :
pip install tiktoken
Vous pouvez consulter le code de la version open source Python de Tiktoken dans ce dépôt GitHub.
Pour importer la bibliothèque, exécutez :
import tiktoken
Modèles d’encodage
Les modèles d’encodage dans Tiktoken définissent les règles de découpage du texte en jetons. Ils sont déterminants, car ils précisent comment le texte est segmenté et encodé, ce qui impacte l’efficacité et la précision des tâches de traitement du langage. Différents modèles OpenAI reposent sur des encodages différents.
Tiktoken propose trois modèles d’encodage optimisés selon les usages :
- o200k_base : encodage pour le tout dernier modèle GPT-4o-Mini.
- cl100k_base : modèle d’encodage pour les modèles OpenAI plus récents, comme GPT-4 et GPT-3.5-Turbo.
- p50k_base : encodage pour les modèles Codex, utilisés pour les applications de code.
- r50k_base : ancien encodage pour différentes versions de GPT-3.
Tous ces modèles sont disponibles via l’API d’OpenAI. Notez que l’API donne accès à bien plus de modèles que ceux listés ici. Heureusement, la bibliothèque Tiktoken fournit un moyen simple d’identifier quel encodage utiliser avec chaque modèle.
Par exemple, si je dois savoir quel modèle d’encodage utilise le modèle text-embedding-3-small, je peux exécuter la commande suivante et obtenir la réponse en sortie :
print(tiktoken.encoding_for_model('text-embedding-3-small'))
La sortie renvoie <Encoding 'cl100k_base'>. Avant de passer à la pratique avec Tiktoken, je souhaite mentionner qu’OpenAI propose une application web de tokenisation pour visualiser la tokenisation de différentes chaînes : vous pouvez y accéder ici. Il existe aussi un tokenizer en ligne tiers, Tiktokenizer, qui prend en charge des modèles non OpenAI.
Encoder un texte en jetons
Pour encoder un texte en jetons avec Tiktoken, vous devez d’abord obtenir un objet d’encodage. Deux méthodes permettent de l’initialiser. D’abord, via le nom du tokenizer :
encoding = tiktoken.get_encoding("[name of the tokenizer]")
Ou bien, vous pouvez utiliser la fonction encoding_for_model mentionnée plus haut pour obtenir l’encodeur d’un modèle spécifique :
encoding = tiktoken.encoding_for_model("[name of the model]")
Nous pouvons maintenant appeler la méthode encode de notre objet encoding pour encoder une chaîne. Par exemple, nous pouvons encoder la chaîne « I love DataCamp » comme suit — ici, j’utilise l’encodeur cl100k_base :
print(encoding.encode("I love DataCamp"))
La sortie est [40, 3021, 2956, 34955].
Décoder des jetons en texte
Pour décoder des jetons vers du texte, utilisez la méthode .decode() de l’objet encoding.
Décodons les jetons suivants [40, 4048, 264, 2763, 505, 2956, 34955] :
print(encoding.decode([40, 4048, 264, 2763, 505, 2956, 34955]))
Les jetons se décodent en « I learn a lot from DataCamp. »
Cas d’usage et conseils pratiques
Au-delà de l’encodage et du décodage, deux autres cas d’usage méritent d’être cités.
Estimation et gestion des coûts
Connaître le nombre de jetons avant d’envoyer une requête à l’API OpenAI vous aide à gérer vos coûts. Comme la facturation d’OpenAI repose sur le nombre de jetons traités, pré-tokeniser votre texte permet d’estimer le coût de votre usage de l’API. Voici comment compter les jetons d’un texte avec Tiktoken :
tokens = encoding.encode(text)
print(len(tokens))
Il suffit d’examiner la longueur du tableau pour connaître le nombre de jetons. En le sachant à l’avance, vous pouvez décider de raccourcir le texte ou d’ajuster votre usage pour rester dans votre budget.
Vous pouvez en lire davantage dans ce tutoriel : Estimating The Cost of GPT Using The tiktoken Library in Python.
Validation de la longueur d’entrée
Lorsque vous utilisez les modèles OpenAI via l’API, vous êtes contraint par un nombre maximal de jetons pour les entrées et les sorties. Dépasser ces limites peut entraîner des erreurs ou des sorties tronquées. Avec Tiktoken, vous pouvez valider la longueur d’entrée et vous assurer qu’elle respecte les limites de jetons.
Conclusion
Tiktoken est une bibliothèque open source de tokenisation offrant vitesse et efficacité, conçue pour les modèles de langage d’OpenAI.
Comprendre comment encoder et décoder du texte avec Tiktoken, ainsi que ses différents modèles d’encodage, peut considérablement améliorer votre travail avec les grands modèles de langage.
