Transformers documentation

Algorithmes de tokenisation

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Algorithmes de tokenisation

Transformers prend en charge trois algorithmes de tokenisation en sous-mots : Byte pair encoding (BPE), Unigram et WordPiece. Ils découpent le texte en unités situées entre les mots et les caractères, ce qui permet de maintenir un vocabulaire compact tout en capturant des fragments significatifs. Les mots courants restent intacts sous forme de jetons uniques, tandis que les mots rares ou inconnus sont décomposés en sous-mots.

Par exemple, annoyingly peut être découpé en ["annoying", "ly"] ou en ["annoy", "ing", "ly"] selon le vocabulaire. Le découpage en sous-mots permet au modèle de représenter des mots inconnus à partir de sous-mots connus.

La tokenisation en sous-mots est particulièrement utile pour des langues comme le turc, où l’on peut former de longs mots complexes en enchaînant des sous-mots.

Encodage par paires de bytes (BPE)

Byte pair encoding (BPE) est l'algorithme de tokenisation le plus populaire dans Transformers, utilisé par des modèles tels que Llama, Gemma, Qwen2, et d'autres.

  1. Un pré-tokeniseur découpe le texte sur les espaces ou d'autres règles, produisant un ensemble de mots uniques et leurs fréquences.
("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)
  1. L'algorithme BPE crée un vocabulaire de base, ["b", "g", "h", "n", "p", "s", "u"], à partir de tous les caractères.
("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)
  1. BPE commence par des caractères individuels et fusionne itérativement la paire adjacente la plus fréquente. "u" et "g" apparaissent ensemble le plus souvent dans "hug", "pug" et "hugs", BPE les fusionne donc en "ug" et l'ajoute au vocabulaire.
("h" "ug", 10), ("p" "ug", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "ug" "s", 5)
  1. La paire la plus courante qui suit est "u" et "n", qui apparaissent dans "pun" et "bun", et qui fusionnent donc en "un".
("h" "ug", 10), ("p" "ug", 5), ("p" "un", 12), ("b" "un", 4), ("h" "ug" "s", 5)
  1. Le vocabulaire est désormais ["b", "g", "h", "n", "p", "s", "u", "ug", "un"]. BPE continue d’apprendre des règles de fusion jusqu’à atteindre la taille de vocabulaire cible, qui est égale à la taille du vocabulaire de base plus le nombre de fusions. GPT utilise BPE avec une taille de vocabulaire de 40 478 (478 jetons de base + 40 000 fusions).

Tout caractère absent du vocabulaire de base est mappé sur un jeton inconnu tel que "<unk>". En pratique, le vocabulaire de base couvre tous les caractères observés lors de l'entraînement, de sorte que les jetons inconnus sont rares.

BPE au niveau des octets

Inclure tous les caractères Unicode rendrait le vocabulaire de base énorme. Le BPE au niveau des octets utilise à la place les 256 valeurs d’octets comme vocabulaire de base, garantissant que chaque mot peut être tokenisé sans le jeton "<unk>". GPT-2 utilise le BPE au niveau des octets avec une taille de vocabulaire de 50 257 (256 jetons d’octets + 50 000 fusions + jeton spécial de fin de texte).

Unigram

Unigram est le deuxième algorithme de tokenisation le plus populaire dans Transformers, utilisé par des modèles tels que T5, BigBird, Pegasus, et d'autres.

  1. Unigram commence avec un grand ensemble de sous-mots candidats, et chaque candidat reçoit un score de probabilité basé sur sa fréquence d’apparition.
("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)
["b", "g", "h", "n", "p", "s", "u", "hu", "ug", "un", "pu", "bu", "gs", "hug", "pug", "pun", "bun", "ugs", "hugs"]
  1. Unigram évalue à quelle mesure le vocabulaire actuel tokenise les données d’entraînement à chaque étape.

  2. Pour chaque jeton, Unigram mesure dans quelle mesure la suppression du jeton augmenterait la perte globale. Par exemple, la suppression de "pu" n'a presque aucun effet sur la perte, car "pug" et "pun" peuvent toujours être tokenisés en ["p", "ug"] et ["p", "un"].

    Mais supprimer "ug" augmenterait considérablement la perte, car "hug", "pug" et "hugs" en dépendent tous.

  3. Unigram supprime les jetons dont l’augmentation de la perte est la plus faible, généralement les 10 à 20 % les moins performants. Les caractères de base sont toujours conservés afin que tout mot puisse être tokenisé. Des jetons tels que "bu", "pu", "gs", "pug" et "bun" sont supprimés car ils contribuaient le moins à la vraisemblance globale.

["b", "g", "h", "n", "p", "s", "u", "hu", "ug", "un", "hug", "pun", "ugs", "hugs"]
  1. Les étapes 2 à 4 se répètent jusqu'à ce que le vocabulaire atteigne la taille cible.

Lors de l’inférence, Unigram peut tokeniser un mot de plusieurs manières. "hugs" peut devenir ["hug", "s"], ["h", "ug", "s"] ou ["h", "u", "g", "s"]. Unigram choisit la tokenisation ayant la probabilité la plus élevée. Contrairement à BPE, qui est déterministe et repose sur des règles de fusion, Unigram est probabiliste et peut échantillonner des tokenisations différentes pendant l’entraînement.

SentencePiece

SentencePiece est une bibliothèque de tokenisation qui applique directement BPE ou Unigram sur le texte brut. Le BPE et l’Unigram standard supposent que les espaces séparent les mots, ce qui ne fonctionne pas pour des langues comme le chinois et le japonais, qui n’utilisent pas d’espaces.

  1. SentencePiece traite le texte d’entrée comme un flux brut d’octets ou de caractères et inclut le caractère espace, représenté par "▁", dans le vocabulaire.
("▁hug", 10), ("▁pug", 5), ("▁pun", 12), ("▁bun", 4), ("▁hugs", 5)
  1. SentencePiece applique ensuite BPE ou Unigramme au texte.

Lors du décodage, SentencePiece concatène tous les jetons et remplace "▁" par un espace.

WordPiece

WordPiece est l'algorithme de tokenisation des modèles de la famille BERT, tels que DistilBERT et Electra.

C’est similaire à BPE et fusionne itérativement des paires de bas en haut, mais diffère dans la manière dont il sélectionne les paires.

("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)

WordPiece fusionne les paires qui maximisent la vraisemblance des données d’entraînement.

score("u", "g") = frequency("ug") / (frequency("u") × frequency("g"))
pairefréquencescore
"u" + "g"2020 / (36 × 20) = 0.028
"u" + "n"1616 / (36 × 16) = 0.028
"h" + "u"1515 / (15 × 36) = 0.028
"g" + "s"55 / (20 × 5) = 0.050

Le score favorise la fusion de "g" et "s" lorsque le jeton combiné apparaît plus souvent que ce qui serait attendu à partir des fréquences des jetons individuels. BPE fusionne simplement la paire qui apparaît le plus. WordPiece mesure à quel point chaque fusion est informative. Deux jetons qui apparaissent ensemble bien plus souvent que ce que prédit le hasard sont fusionnés en premier.

Tokenisation au niveau du mot

La tokenisation au niveau du mot découpe le texte en jetons selon les espaces, la ponctuation ou des règles spécifiques à la langue.

["Do", "n't", "you", "love", "🤗", "Transformers", "?", "We", "sure", "do", "."]

La taille du vocabulaire devient extrêmement grande, car chaque mot unique nécessite son propre jeton, y compris toutes ses variations ("love", "loving", "loved", "lovingly"). La matrice d'incorporation (embedding) qui en résulte est énorme, ce qui augmente la mémoire et les calculs. Les mots absents du vocabulaire sont associés à un jeton "<unk>", de sorte que le modèle ne peut pas traiter les nouveaux mots.

Tokenisation au niveau des caractères

La tokenisation au niveau des caractères découpe le texte en caractères individuels.

["D", "o", "n", "'", "t", "y", "o", "u", "l", "o", "v", "e"]

Le vocabulaire est petit et chaque mot peut être représenté, il n’y a donc pas de problème de "<unk>". Mais les séquences deviennent beaucoup plus longues. Un caractère comme "l" porte beaucoup moins de sens que "love", ce qui dégrade les performances.

Ressources

  • Le chapitre 6 du cours sur les LLM vous apprend à entraîner un tokenizer à partir de zéro et explique les différences entre les algorithmes BPE, Unigram et WordPiece.
Update on GitHub