Vous êtes au bon endroit si vous voulez
comprendre ce qu'est l'algorithme de tokenisation en sous-mots « Byte Pair Encoding », comment l'entraîner
et comment la tokenisation d'un texte est effectuée avec cet algorithme.
L'algorithme BPE a été initialement proposé en tant qu'algorithme de compression de texte
mais il est également très bien adapté en tant que tokenizer pour vos modèles de langage.
L'idée de BPE est de diviser les mots en une séquence d'unités de sous-mots qui sont des unités
qui apparaissent fréquemment dans un corpus de référence, qui est le corpus que nous avons utilisé pour l'entraîner.
Comment un tokenizer BPE est-il entrapiné ? Tout d'abord, nous devons obtenir un corpus de textes. Nous n'entraînerons pas
notre tokenizer sur ce texte brut, mais nous le normaliserons d'abord, puis le prétokeniserons. Comme la
prétokénisation divise le texte en une liste de mots, nous pouvons représenter notre corpus d'une autre
manière en rassemblant les mêmes mots et en maintenant un compteur, ici représenté en bleu.
Pour comprendre le fonctionnement de l'entraînement, nous considérons ce corpus jouet composé des mots suivants :
huggingface, hugging, hug, hugger, etc. BPE est un algorithme qui commence par un vocabulaire initial
puis l'augmente jusqu'à la taille souhaitée.
Pour construire le vocabulaire initial, on commence par séparer chaque mot du corpus
en une liste d'unités élémentaires qui les composent, ici les caractères.
Nous listons dans notre vocabulaire tous les caractères qui apparaissent et qui constitueront notre vocabulaire initial !
Voyons maintenant comment l'augmenter. Nous revenons à notre corpus divisé, nous allons parcourir les mots
un par un et compter toutes les occurrences de paires de tokens. La première paire est composée du token « h »
et « u », la seconde « u » et « g », et nous continuons ainsi jusqu'à ce que nous ayons la liste complète.
Une fois que nous connaissons tous les couples et leur fréquence d'apparition, nous choisirons celui qui
apparaît le plus fréquemment : ici, il s'agit du couple composé des lettres « l » et « e ».
Nous notons notre première règle de fusion et nous ajoutons le nouveau token à notre vocabulaire.
Nous pouvons ensuite appliquer cette règle de fusion à nos divisions :
vous pouvez voir que nous avons fusionné toutes les paires de tokens composées des tokens « l » et « e ».
Et maintenant il ne nous reste plus qu'à reproduire les mêmes étapes avec nos nouvelles divisions :
on calcule la fréquence d'occurrence de chaque paire de tokens,
on sélectionne la paire avec la fréquence la plus élevée, on la note dans nos règles de fusion,
on ajoute la nouvelle à le vocabulaire,
puis nous fusionnons toutes les paires de tokens composées du token « le » et « a » dans nos divisions.
Et nous pouvons répéter cette opération jusqu'à atteindre la taille de vocabulaire souhaitée.
Ici, nous nous sommes arrêtés lorsque notre vocabulaire a atteint 21 tokens. Nous pouvons voir maintenant que les mots de notre
corpus sont maintenant divisés en beaucoup moins de tokens qu'au début de la entraînement. Nous pouvons voir que
notre algorithme a appris les radicaux « hug » et « learn » ainsi que la terminaison verbale « ing ».
Maintenant que nous avons appris notre vocabulaire et nos règles de fusion, nous pouvons tokeniser de nouveaux textes.
Par exemple, si nous voulons symboliser le mot
« hugs » : nous allons d'abord le diviser en unités élémentaires afin qu'il devienne une séquence de caractères.
Ensuite, nous passerons en revue nos règles de fusion jusqu'à ce que nous en ayons une que nous puissions appliquer.
Ici, nous pouvons fusionner les lettres « h » et « u ». Et ici, nous pouvons fusionner 2 tokens pour obtenir le nouveau token « hug ».
Lorsque nous arrivons à la fin de notre règle de fusion, la tokenisation est terminée.
Et ça y est, j'espère que maintenant l'algorithme BPE n'a plus de secret pour vous !