Chargement

Jetons : pourquoi certaines entrées coûtent plus cher que d'autres

L'utilisation de Claude est mesurée en jetons. Que vous surveilliez une facture d'utilisation ou que vous vous demandiez quand une limite de débit se déclenchera, les jetons sont l'unité de mesure. Découvrez ce qu'est un jeton, prédisez combien un texte en utilisera, et voyez comment les jetons encodent le sens.

15 min

Vous vous souvenez peut-être d'une époque où la plupart des LLM n'étaient pas capables de vous dire combien de « r » comporte « strawberry ». Mais pourquoi cela se produit-il ? La réponse explique une surprenante quantité de choses sur ce que les modèles de langage font bien, ce qu'ils trouvent difficile, et comment ils utilisent les mathématiques pour produire du texte. Elle explique aussi comment votre utilisation est calculée, ce qui influe sur la rapidité à laquelle vous atteindrez une limite de débit ou sur l'apparence de votre facture d'API.

Commençons par une petite inversion des rôles.

Il s'agit d'une question d'échauffement, alors contentez-vous de faire une supposition éclairée.

Vérification rapide

Si vous tapez "Hello Claude" et appuyez sur envoyer, qu'imaginez-vous qu'il arrive au modèle ?

Trois façons de représenter du texte

Pensez à cette chaîne de trois caractères : "Hi!". Maintenant, pensez à trois façons différentes dont nous pourrions transmettre cette information à un modèle de langage.

  1. Exactement comme vous la voyez. Une chaîne de caractères : "Hi!".
  2. Comme une liste de caractères. ['H', 'i', '!']. Les crochets [ ] signifient liste ; cette liste particulière contient trois éléments.
  3. Comme un nombre par caractère. Chaque caractère pourrait correspondre à un nombre standard : 'H' vaut 72, 'i' vaut 105, '!' vaut 33.
string:      "Hi!"
characters:  [ 'H', 'i', '!' ]
numbers:     [ 72,  105, 33  ]

Bien que ces trois approches aient leur utilité dans le code, les modèles de langage font une quatrième chose, plus stratégique. Ce qui arrive est toujours une liste de nombres, mais pas un nombre par caractère issu d'une table fixe : c'est un nombre par fragment de texte, issu d'un vocabulaire que le modèle a appris.

Un fragment de texte accompagné de son identifiant numérique est appelé un jeton.

Jetons

Le widget ci-dessous contient plusieurs extraits de texte que vous pouvez tokeniser. Parcourez les exemples, tokenisez chacun d'eux, et constatez par vous-même : en quoi un jeton diffère-t-il d'un mot ?

Chargement

Trop ou pas assez ?

Maintenant que vous savez à quoi ressemblent les jetons, voyez si vous pouvez prédire combien de jetons seront produits en tokenisant les chaînes suivantes.

Chargement

Pourquoi des sous-mots ?

Vous vous demandez peut-être : pourquoi ne pas simplement utiliser un jeton par caractère, ou un par mot ?

L'ensemble des identifiants de jetons uniques qu'un tokeniseur peut produire s'appelle son vocabulaire. Déterminer la taille de jeton et la taille de vocabulaire idéales reste une question d'exploration et de recherche, mais la plupart des tokeniseurs publics visent une zone idéale. Examinons la phrase "The tokenizer rocks." découpée de trois façons différentes par trois tokeniseurs différents.

Avec des jetons minuscules (un par caractère), la phrase coûte 20 jetons. Ça va être lent et coûteux à traiter !

[T] [h] [e] [ ] [t] [o] [k] [e] [n] [i] [z] [e] [r] [ ] [r] [o] [c] [k] [s] [.]

Avec des jetons volumineux (un par mot), la phrase ne coûte que 4 jetons, mais le modèle va devoir apprendre un immense vocabulaire pour connaître des mots de niche comme « tokenizer » :

[The] [ tokenizer???] [ rocks] [.]

Avec un juste milieu (un jeton par mot ou sous-mot), la phrase coûte 5 jetons, sans que le vocabulaire ait à inclure autant de mots spécialisés :

[The] [ token] [izer] [ rocks] [.]

Le vocabulaire d'un tokeniseur est intégré au modèle et ne peut pas être modifié une fois l'entraînement terminé. On dit qu'un modèle spécifique est « verrouillé sur un tokeniseur », car il n'a jamais appris que ce que signifie token 4062, et non ce que signifie "quick".

Décodage de la sortie

Vous savez donc maintenant que le texte que vous envoyez à un modèle devient une liste d'identifiants de jetons avant d'être traité. La sortie d'un modèle est elle aussi une liste d'identifiants de jetons. Essayez de décoder cette réponse.

Chargement

Des jetons au sens

La tokenisation attribue un nombre à chaque fragment de texte, mais des jetons avec des identifiants proches comme 9906 et 9907 ne sont pas liés entre eux - ce sont simplement des voisins dans une liste. Un modèle a besoin d'un moyen de savoir que chat et chaton sont proches en termes de sens, même si leurs identifiants sont éloignés l'un de l'autre dans le vocabulaire. Les modèles y parviennent en attribuant à chaque jeton un score multidimensionnel.

Commençons par un système de notation en 2D.

Chargement

Embeddings

Un embedding de LLM fonctionne de la même manière que la notation que vous venez d'effectuer. Chaque mot (ou plus exactement, chaque jeton) devient un point, et les mots (jetons) similaires se retrouvent près les uns des autres. Les embeddings réels sont plus complexes de deux façons :

  1. Un embedding de LLM compte des milliers de dimensions, pas seulement deux. Vous pouvez imaginer que nous pourrions également inclure un axe pour « dangereux » qui pourrait nous aider à distinguer notre tigre de notre chaton.
  2. Le sens capturé dans une seule dimension n'est pas étiqueté, et peut en réalité signifier quelque chose pour lequel il n'existe même pas de mot humain satisfaisant. La mignonnerie est présente quelque part, mais il n'existe pas d'axe explicitement nommé « mignonnerie » - le modèle invente ou découvre les dimensions pendant l'entraînement, et le processus consistant à décoder leur signification est l'un des axes de recherche de l'interprétabilité.

Examinez « chat » en 2, 3 et des milliers de dimensions

2 dimensions       "cat" = [ 8.0,  3.5 ]                                cute, big
3 dimensions       "cat" = [ 8.0,  3.5,  1.0 ]                          cute, big, dangerous
4,096 dimensions   "cat" = [ 0.031, -0.184, 0.772, …, -0.094 ]          (no labels)

The exact number of dimensions varies by model. 4,096 is a common size in open-weight models.

Envie d'explorer davantage les embeddings ? Demandez à Claude de vous construire une visualisation :

J'apprends les embeddings. Je comprends qu'un jeton devient un point dans un espace à de nombreuses dimensions, que les jetons similaires se retrouvent proches les uns des autres, et que les dimensions ne sont pas étiquetées avec des mots humains. Aide-moi à développer mon intuition en créant une visualisation interactive : place une vingtaine de mots du quotidien dans un petit espace d'embedding, laisse-moi choisir n'importe quel mot et voir ses voisins les plus proches, et laisse-moi ajouter un mot de mon choix pour voir où il atterrit et pourquoi.

Récapitulatif

Vous savez donc maintenant que le texte que vous envoyez à un LLM devient une série de jetons, et que les jetons deviennent des embeddings.

text:        "Hi"
token:       [ 13347 ]
embedding:   [ 0.12, -0.48, 0.91, …, 0.07 ]

Félicitations ! C'est une avancée majeure vers la compréhension du fonctionnement d'un modèle de langage.

Vous pressentez peut-être déjà que les informations capturées dans les embeddings (à quel point les choses sont mignonnes, grandes et tout ce que vous voulez) jouent un rôle majeur dans la manière dont un modèle de langage donne du sens à ses entrées et choisit les bonnes sorties. Si c'est le cas, votre intuition est correcte !

Si ces quatre affirmations vous semblent vraies, vous avez acquis ce que cette leçon visait à enseigner.

  • Vous pouvez expliquer pourquoi une URL de 100 caractères coûte plus de jetons qu'une phrase de 100 caractères.
  • Vous pouvez prédire approximativement combien de jetons représentera un fragment de texte.
  • Vous savez pourquoi un modèle est verrouillé sur son tokeniseur, et pourquoi les mots plus rares sont découpés en morceaux.
  • Vous pouvez expliquer ce qu'est un embedding et pourquoi c'est important en utilisant les mots « score », « dimension » et « proche ».

Suivant : Comment le contexte affecte les performances et le coût de Claude · Choisir le bon modèle Claude · choisir un niveau d'effort dans Claude · dans Claude Code

En savoir plus : Comment fonctionne l'IA · Capacités et limites de l'IA