Polydesk-logotype
Polydesk.ai — Header

SentencePiece

Definition SentencePiece est un framework de tokenisation open-source developpe par Google qui traite le texte comme une sequence brute de caracteres Unicode, sans pre-tokenisation basee sur les espaces. Il implemente les algorithmes BPE et Unigram, et est concu pour etre independant de la langue, ce qui le rend ideal pour les modeles multilingues.
ProprieteDetail
CategorieFramework de tokenisation
CreateurTaku Kudo, Google (2018)
Algorithmes supportesBPE, Unigram, char, word
ParticularitePas de pre-tokenisation, traitement brut du texte Unicode
Modeles notablesLlama (1, 2), Mistral, T5, Gemini, mBART, XLNet
LicenceApache 2.0

Principe fondamental

La particularite distinctive de SentencePiece par rapport aux autres implementations de tokenisation est son approche « language-agnostic » (independante de la langue). La plupart des tokenizers traditionnels (y compris les premieres versions de BPE) commencent par decouper le texte aux espaces, puis appliquent l’algorithme de tokenisation sur les mots individuels. Cette pre-tokenisation suppose que les espaces separent les mots, ce qui est vrai pour l’anglais, le francais ou l’allemand, mais faux pour le chinois, le japonais, le thai et d’autres langues.

SentencePiece elimine cette hypothese en traitant l’espace comme un caractere ordinaire. Il remplace les espaces par un caractere special « ▁ » (U+2581, lower one eighth block) et opere directement sur la sequence de caracteres Unicode. Le texte « bonjour le monde » devient « ▁bonjour▁le▁monde » avant tokenisation. Cela permet de reconstruire le texte original sans ambiguite a partir des tokens (y compris les espaces).

Cette conception rend SentencePiece veritablement multilingue : il fonctionne identiquement sur l’anglais, le japonais, l’arabe ou le code Python, sans aucune regle specifique a une langue. C’est pourquoi il est le choix privilegie pour les modeles multilingues comme mT5, XLM-RoBERTa et les premieres versions de Llama.

Algorithmes supportes

BPE dans SentencePiece

L’implementation de BPE dans SentencePiece suit le meme principe que le BPE standard (fusion iterative des paires les plus frequentes), mais sans pre-tokenisation. Les fusions peuvent traverser les frontieres de « mots » car il n’y a pas de frontieres predefinies. En pratique, le caractere « ▁ » (qui remplace l’espace) fonctionne comme un separateur naturel appris par le systeme.

Unigram

L’algorithme Unigram (Kudo, 2018), implemente nativement dans SentencePiece, prend l’approche inverse du BPE. Il commence avec un vocabulaire tres large (toutes les sous-chaines frequentes jusqu’a une certaine longueur) et supprime iterativement les tokens dont la suppression impacte le moins la vraisemblance globale du corpus.

Pour tokeniser un texte, Unigram cherche la segmentation qui maximise la probabilite conjointe des tokens, en utilisant l’algorithme de Viterbi. Cela signifie qu’Unigram choisit la « meilleure » decomposition globale, tandis que BPE applique des regles de fusion greedy. En theorie, Unigram produit des tokenisations legerement meilleures, avec moins de fragments arbitraires.

Unigram supporte aussi l’echantillonnage probabiliste : au lieu de toujours choisir la meilleure segmentation, on peut echantillonner parmi les segmentations possibles. Cette propriete est utilisee pour la regularisation pendant l’entrainement (subword regularization), rendant le modele plus robuste aux variations de tokenisation.

Entrainement d’un modele SentencePiece

Entrainer un tokenizer SentencePiece se fait en quelques lignes de code. L’outil en ligne de commande spm_train prend un corpus de texte brut et produit un modele (.model) et un vocabulaire (.vocab). Les parametres cles sont : la taille du vocabulaire (vocab_size), le type d’algorithme (model_type : bpe ou unigram), le corpus d’entrainement (input), et des options comme character_coverage (quelle fraction des caracteres du corpus doit etre couverte).

Le parametre character_coverage est important pour les langues avec de grands jeux de caracteres. Pour les langues latines, une couverture de 1.0 (tous les caracteres) est habituelle. Pour le japonais ou le chinois, une couverture de 0.9995 evite d’inclure des caracteres extremement rares qui gonfleraient le vocabulaire.

SentencePiece supporte egalement des tokens speciaux configurables (BOS, EOS, PAD, UNK), des tokens definis par l’utilisateur (termes techniques qui ne doivent pas etre decomposes), et des regles de normalisation Unicode (NFKC par defaut).

Utilisation pratique

En Python, SentencePiece expose une API simple. Apres installation (pip install sentencepiece), on charge un modele pre-entraine et on tokenise : sp.encode(« Bonjour le monde ») retourne une liste de token IDs, et sp.decode(ids) reconstruit le texte original. La librairie supporte aussi l’encodage en pieces (sous-mots lisibles) via encode_as_pieces.

HuggingFace Transformers integre SentencePiece de maniere transparente : quand vous chargez un modele comme Llama ou Mistral, l’AutoTokenizer correspondant utilise SentencePiece en arriere-plan. Vous n’avez generalement pas besoin d’interagir directement avec la librairie SentencePiece.

SentencePiece vs tiktoken

CritereSentencePiecetiktoken
CreateurGoogleOpenAI
Pre-tokenisationAucune (traitement brut)Regex-based
AlgorithmesBPE, UnigramByte-level BPE uniquement
Gestion des espacesRemplaces par ▁Inclus dans les tokens
LanguesExcellent multilingueBon (byte-level)
PerformanceBonne (C++)Excellente (Rust)
Entrainement customOui (spm_train)Non (vocabulaires pre-definis)
Modeles notablesLlama, Mistral, T5GPT-4, Claude, Llama 3

La tendance en 2026 est que les nouveaux modeles adoptent de plus en plus tiktoken (byte-level BPE avec pre-tokenisation regex) plutot que SentencePiece. Llama 3 est passe de SentencePiece (utilise par Llama 1 et 2) a tiktoken, illustrant ce mouvement. Cependant, SentencePiece reste tres utilise et activement maintenu.

Subword Regularization

L’une des contributions uniques de SentencePiece est la subword regularization, qui exploite la capacite de l’algorithme Unigram a produire plusieurs segmentations possibles pour un meme texte. Pendant l’entrainement du modele de langage, au lieu de toujours utiliser la segmentation optimale, on echantillonne differentes segmentations. Cela rend le modele plus robuste aux variations de tokenisation.

Par exemple, le mot « international » peut etre tokenise comme « inter » + « national », « in » + « ter » + « national », ou « inter » + « nation » + « al ». En variant la segmentation pendant l’entrainement, le modele apprend que ces differentes decompositions representent le meme mot, ameliorant sa robustesse. Cette technique est analogue au data augmentation en vision par ordinateur.

Astuce Polydesk Si vous entrainez un modele multilingue ou un modele sur des langues sans espaces (chinois, japonais), SentencePiece avec l’algorithme Unigram est le choix recommande. Pour un modele principalement anglais avec du code, tiktoken (byte-level BPE) sera plus efficace. Le choix du tokenizer est une decision architecturale qui se prend avant l’entrainement et ne peut plus etre changee ensuite.

Questions frequentes

SentencePiece est-il un algorithme de tokenisation ?

Non, SentencePiece est un framework qui implemente plusieurs algorithmes (BPE et Unigram). Sa particularite est le traitement du texte brut sans pre-tokenisation, ou les espaces sont traites comme des caracteres ordinaires. C’est cette approche qui le differencie, pas un nouvel algorithme.

Pourquoi SentencePiece remplace-t-il les espaces par ▁ ?

Le caractere ▁ permet de preserver l’information de positionnement des espaces dans le texte original. Sans cette substitution, la reconstruction du texte serait ambigue : on ne saurait pas si un token est un debut de mot (precede d’un espace) ou une continuation. Le ▁ rend la conversion tokens vers texte parfaitement reversible.

Quels modeles utilisent SentencePiece ?

T5, mT5, XLM-RoBERTa, Llama 1 et 2, Mistral, Gemini, ALBERT, mBART et XLNet utilisent SentencePiece. Cependant, les modeles plus recents comme Llama 3 sont passes a tiktoken (byte-level BPE).

Comment entrainer son propre modele SentencePiece ?

Installez SentencePiece (pip install sentencepiece), preparez un fichier texte corpus.txt, puis executez : import sentencepiece as spm; spm.SentencePieceTrainer.train(input=’corpus.txt’, model_prefix=’my_model’, vocab_size=32000, model_type=’bpe’). Le resultat est un fichier my_model.model utilisable directement.

BPE ou Unigram dans SentencePiece : lequel choisir ?

BPE est le choix par defaut, simple et eprouve. Unigram produit un vocabulaire legerement plus propre et supporte la subword regularization (echantillonnage de segmentations), utile pour la robustesse du modele. En pratique, les differences de performance sont faibles. T5 et Gemini utilisent Unigram, la majorite des autres modeles utilisent BPE.

Polydesk.ai — Footer