Polydesk-logotype
Polydesk.ai — Header

BPE (Byte Pair Encoding)

Definition Le BPE (Byte Pair Encoding) est un algorithme de compression de donnees adapte a la tokenisation de texte pour les LLMs. Il construit un vocabulaire de sous-mots en fusionnant iterativement les paires de symboles les plus frequentes dans un corpus, partant des caracteres individuels et construisant des tokens de plus en plus longs.
ProprieteDetail
CategorieAlgorithme de tokenisation
OrigineGage (1994) pour la compression, Sennrich et al. (2016) pour le NLP
PrincipeFusion iterative des paires de symboles les plus frequentes
Utilise parGPT, Claude, Llama, GPT-4o
Variante principaleByte-level BPE (opere sur les bytes, pas les caracteres Unicode)
Implementationstiktoken (OpenAI), HuggingFace Tokenizers, SentencePiece

Algorithme d’entrainement etape par etape

L’entrainement d’un tokenizer BPE sur un corpus de texte suit un processus iteratif precis. On commence par decomposer tout le corpus en caracteres individuels (ou en bytes pour le byte-level BPE). Chaque caractere unique constitue le vocabulaire initial. On ajoute egalement des tokens speciaux comme les marqueurs de debut/fin de sequence.

A chaque iteration, on compte la frequence de toutes les paires adjacentes de tokens dans le corpus. La paire la plus frequente est selectionnee et fusionnee en un nouveau token, qui est ajoute au vocabulaire. Toutes les occurrences de cette paire dans le corpus sont remplacees par le nouveau token. Les frequences des paires sont recalculees, et on repete le processus.

Prenons un exemple concret sur un mini-corpus. Supposons que le corpus soit {« low », « low », « low », « lowest », « newer », « newer », « wider »}. Le vocabulaire initial contient les caracteres : {l, o, w, e, s, t, n, r, i, d}. On compte les paires : « lo » apparait 4 fois, « ow » 4 fois, « we » 2 fois, etc. La paire « lo » (ou « ow ») est la plus frequente : on fusionne, par exemple, « l » + « o » en « lo ». Le vocabulaire devient {l, o, w, e, s, t, n, r, i, d, lo}. On recommence avec les nouvelles frequences.

Ce processus continue jusqu’a atteindre la taille de vocabulaire desiree (par exemple, 50 000 ou 100 000 tokens). Les premieres fusions capturent les combinaisons de lettres les plus frequentes dans la langue, et les fusions tardives creent des tokens correspondant a des mots entiers courants.

Tokenisation a l’inference

A l’inference (quand on tokenise un nouveau texte), l’algorithme applique les regles de fusion apprises dans l’ordre ou elles ont ete apprises. Le texte est d’abord decompose en caracteres (ou bytes), puis les fusions sont appliquees sequentiellement de la plus prioritaire (la premiere apprise) a la moins prioritaire.

En pratique, les implementations modernes comme tiktoken et HuggingFace Tokenizers utilisent des optimisations (tries, tables de hachage, algorithmes gourmands) pour effectuer la tokenisation en temps quasi-lineaire, bien plus rapidement que l’application naive des regles de fusion une par une.

Un point important : la tokenisation BPE est deterministe. Un meme texte produira toujours exactement la meme sequence de tokens avec le meme tokenizer. C’est une propriete essentielle pour la reproductibilite des resultats de LLMs.

Byte-level BPE

Le BPE original de Sennrich et al. (2016) operait au niveau des caracteres Unicode. Le byte-level BPE, introduit par Radford et al. (2019) dans GPT-2, opere au niveau des bytes (octets). Chaque byte (0 a 255) constitue le vocabulaire de base, et les fusions sont apprises au niveau des sequences de bytes.

L’avantage est universel : tout texte, dans n’importe quelle langue, dans n’importe quel encodage, peut etre represente sans aucun token « inconnu ». Un caractere Unicode multi-byte (comme un emoji ou un caractere chinois) est decompose en ses bytes constitutifs si le tokenizer n’a pas appris de token specifique pour ce caractere. Cela elimine completement le probleme des « out-of-vocabulary » (OOV) tokens.

Le byte-level BPE est devenu le standard pour les LLMs modernes. GPT-4, GPT-4o, Claude, et Llama 3 utilisent tous des variantes de byte-level BPE. La principale implementation est tiktoken (OpenAI), ecrite en Rust pour des performances optimales.

BPE vs autres algorithmes

CritereBPEWordPieceUnigram
DirectionBottom-up (fusions)Bottom-up (fusions basees sur vraisemblance)Top-down (suppressions)
Critere de fusionFrequence pureMaximisation de vraisemblanceImpact minimal sur vraisemblance
DeterminismeOui (une seule segmentation)OuiProbabiliste (multiple segmentations possibles)
Modeles notablesGPT, Claude, LlamaBERTT5, Gemini
Qualite vocabulaireBonne, parfois fragments arbitrairesBonneLegerement meilleure (moins de fragments)
Vitesse entrainementRapideModereePlus lente

Impact de la taille du vocabulaire

La taille du vocabulaire est un hyperparametre critique du BPE. Un vocabulaire petit (8K-16K tokens) produit des sequences longues mais un embedding compact. Un vocabulaire grand (100K-256K tokens) produit des sequences courtes (chaque token couvre plus de texte) mais une matrice d’embedding plus volumineuse et un risque de fragmentation excessive pour les tokens rares.

Les tendances en 2026 vont vers des vocabulaires plus grands. GPT-4o utilise 200K tokens, Llama 3 utilise 128K tokens, contre 50K pour GPT-2. Des vocabulaires plus grands permettent une meilleure efficacite multilingue (moins de tokens par texte non-anglais), un meilleur traitement du code, et une utilisation plus efficace de la fenetre de contexte.

Le compromis se situe dans la taille de la couche d’embedding (qui croit lineairement avec le vocabulaire) et dans le risque de tokens rares mal entraines. Un token qui apparait tres rarement dans les donnees d’entrainement aura un embedding de faible qualite, ce qui peut degrader les performances sur les textes qui l’utilisent.

Pre-tokenisation

Avant d’appliquer BPE, la plupart des implementations effectuent une etape de pre-tokenisation qui decoupe le texte en morceaux a l’aide de regles (souvent des expressions regulieres). Par exemple, tiktoken utilise une regex qui separe les lettres, les chiffres, la ponctuation et les espaces en groupes. Les fusions BPE ne traversent jamais les frontieres de pre-tokenisation.

Cette pre-tokenisation empeche des fusions absurdes (comme fusionner le dernier caractere d’un mot avec le premier du suivant) et accelere l’entrainement. La regex de pre-tokenisation est un hyperparametre important : la regex de GPT-4 traite les espaces differemment de celle de GPT-2, produisant des tokenisations plus propres.

SentencePiece prend l’approche opposee : pas de pre-tokenisation, tout le texte est traite comme une sequence de caracteres bruts. Cela le rend plus universel pour les langues sans separateurs de mots.

Limites du BPE

Le BPE n’est pas sans defauts. La tokenisation est sensible a la casse et aux variantes orthographiques : « Hello » et « hello » peuvent etre tokenises differemment. Les mots avec des prefixes ou suffixes frequents sont souvent decomposes de maniere sous-optimale sur le plan morphologique (le BPE ne « comprend » pas la morphologie, il ne voit que les frequences statistiques).

Le BPE peut aussi produire des tokens « toxiques » qui contiennent des fragments de plusieurs mots fusionnes de maniere inappropriee. La qualite du tokenizer depend fortement de la composition du corpus d’entrainement : un corpus trop anglophone produira un tokenizer inefficace pour les autres langues.

Des recherches recentes explorent des alternatives au BPE, comme les tokenizers morphologiquement informes, les tokenizers a granularite variable (qui s’adaptent au contexte), et les architectures byte-level qui contournent completement la tokenisation en operant directement sur les bytes sans vocabulaire appris.

Astuce Polydesk Pour visualiser comment le BPE tokenise votre texte, utilisez l’outil en ligne de OpenAI (platform.openai.com/tokenizer) ou tiktokenizer.vercel.app. Collez votre texte francais et observez les decoupages : vous verrez que les mots courants sont des tokens uniques, tandis que les mots techniques ou rares sont decomposes en fragments.

Questions frequentes

Que signifie BPE ?

BPE signifie Byte Pair Encoding (encodage par paires d’octets). A l’origine, c’est un algorithme de compression de donnees (Gage, 1994). Sennrich et al. (2016) l’ont adapte a la tokenisation de texte pour le NLP, et c’est devenu l’algorithme de tokenisation dominant dans les LLMs.

Pourquoi BPE et pas une simple tokenisation par mots ?

La tokenisation par mots cree un vocabulaire gigantesque, ne peut pas representer les mots inconnus (OOV), et est inefficace pour les langues agglutinantes. Le BPE produit un vocabulaire de taille controlable, represente n’importe quel texte sans OOV (en decomposant les mots rares en sous-parties), et s’adapte a toutes les langues.

Comment le BPE gere-t-il les langues non-latines ?

Le byte-level BPE gere toutes les langues car il opere sur les bytes bruts. Les caracteres multi-byte (chinois, arabe, emoji) sont representes par leurs bytes constitutifs, ou par des tokens appris si le corpus d’entrainement contenait suffisamment de texte dans ces langues. Un corpus plus diversifie produit un BPE plus efficace pour les langues non-latines.

Quelle est la difference entre BPE et SentencePiece ?

SentencePiece est un framework d’implementation, pas un algorithme concurrent du BPE. SentencePiece peut implementer le BPE ou l’algorithme Unigram. Sa particularite est de traiter le texte comme une sequence brute de caracteres sans pre-tokenisation basee sur les espaces, ce qui le rend plus adapte aux langues sans separateurs de mots.

Peut-on entrainer son propre tokenizer BPE ?

Oui. La librairie HuggingFace Tokenizers (pip install tokenizers) permet d’entrainer un BPE sur votre propre corpus en quelques lignes de code. C’est utile si vous entrainez un modele specialise sur un domaine specifique (code, medical, juridique) dont le vocabulaire differe significativement du texte general.

Polydesk.ai — Footer