Quand on parle de LLMs, on se retrouve face à des concepts qui ne sont pas toujours forcément compris.

Après tout, on peut très bien se servir de GPT-4 sans comprendre ce que sont les tokens ou la température.

Cependant, lorsque l’on cherche à aller plus loin dans l’utilisation, il est nécessaire de comprendre ces différents concepts et c’est ce que nous allons faire maintenant pour les tokens.

Les tokens ou l’alphabet du LLM

Les tokens c’est avant tout la manière dont OpenAI et les autres fournisseurs de LLMs font payer leurs API alors en général tout le monde connait.

Ce qui est moins clair, c’est de comprendre à quoi correspond un token par rapport à du texte et surtout combien de caractères pour un token.

You can think of tokens as pieces of words, where 1,000 tokens is about 750 words

OpenAI Pricing Page

Un token serait donc à peu près 4 caractères. Néanmoins, cette estimation n’est valable que pour le texte en anglais.

Dans cet exemple, le texte français est découpé en 22% de tokens en plus.

D’ailleurs, même dans le même langage, le nombre de tokens n’est pas lié au nombre de caractères. Dans cet exemple, le même nombre de caractères produit 6% de tokens en moins.

Les tokens sont une représentation de l’alphabet du LLM. Par exemple, LlaMa 3 possède un « alphabet » de 128000 tokens.

Chacun de ces tokens est enfaite un nombre qui correspond à une suite de lettres. On peut d’ailleurs voir ces nombres dans l’outil tokenizer d’Open AI:

Les tokens sont donc comparables à des idéogrammes chinois ou chaque idéogramme correspond à un concept.

Pour un LLM, chaque token correspond également à un concept interne abstrait ayant des relations probabilistes avec d’autres tokens tout comme l’idéogramme « chien » (ç‹—) est souvent proche de celui pour « os » (骨).

Le tokenizer pour découper le texte en tokens

Un tokenizer c’est l’algorithme qui permet de découper un texte en série de tokens.

Chaque LLM possède son tokenizer, c’est ce dernier qui contient la table de correspondance entre les suites de caractères et les tokens correspondants.

La liste des tokens est calculé afin de réduire un maximum le nombre de tokens nécessaire pour représenter un texte.

Cette liste est construite en utilisant les statistiques d’apparition des caractères dans différents langages.

Par exemple, le tokenizer d’OpenAI est optimisé pour représenter les textes en anglais et dans les principales langues européennes.

Prévoir le nombre de tokens pour éviter les mauvaises surprises

Il est conseillé d’utiliser le tokenizer du LLM que l’on souhaite utiliser afin de calculer le nombre de tokens dans un texte.

Cela permet d’évaluer les coûts d’une requête avec précision mais aussi d’éviter les erreurs de dépassement de fenêtre de contexte lors de l’utilisation d’un modèle d’embedding par exemple.

En Javascript et avec Open AI, il est possible d’utiliser la bibliothèque @dqdb/tiktoken:

import { encoding_for_model } from 'tiktoken'

// Choose the model, it can be 'gpt4' for example
const tokenEncoder = encoding_for_model('text-embedding-ada-002')

// Contains an array of Uint32 ([-0.102, 0.62, ..])
const tokens = tokenEncoder.encode(text)

// Number of tokens
console.log(tokens.length)

// Retrieve truncated text corresponding to 8096 tokens
const truncatedText = Buffer.from(
  tokenEncoder.decode(tokens.slice(0, 8096))
).toString()
import { encoding_for_model } from 'tiktoken'

// Choose the model, it can be 'gpt4' for example
const tokenEncoder = encoding_for_model('text-embedding-ada-002')

// Contains an array of Uint32 ([-0.102, 0.62, ..])
const tokens = tokenEncoder.encode(text)

// Number of tokens
console.log(tokens.length)

// Retrieve truncated text corresponding to 8096 tokens
const truncatedText = Buffer.from(
  tokenEncoder.decode(tokens.slice(0, 8096))
).toString()

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Trending