Dans cette vidéo, nous étudierons ensemble l'algorithme de tokenisation en sous-mots du modèle de langage
Unigram.
La stratégie globale d'entraînement d'un tokenizer Unigram LM est de commencer avec un vocabulaire très large,
puis de supprimer des tokens à chaque itération jusqu'à ce que nous atteignions la taille souhaitée.
A chaque itération, nous calculerons une perte sur notre corpus d'apprentissage grâce au modèle Unigram
.
Comme le calcul de la perte dépend du vocabulaire disponible, nous pouvons l'utiliser pour choisir comment
réduire le vocabulaire.
On regarde donc l'évolution de la perte en supprimant tour à tour chaque token du vocabulaire.
On choisira de supprimer les p pourcents qui augmentent le moins la perte.
Avant d'aller plus loin dans l'explication de l'algorithme d'entraînement, je dois expliquer
ce qu'est un modèle Unigram.
Le modèle Unigram LM est un type de modèle linguistique statistique.
Un LM statistique attribuera une probabilité à un texte en considérant que le texte est en
fait une séquence de tokens.
Les séquences de tokens les plus simples à imaginer sont les mots qui composent la phrase ou
les caractères.
La particularité de l'Unigram LM est qu'il suppose que l'occurrence de chaque mot est
indépendante de son mot précédent.
Cette hypothèse nous permet d'écrire que la probabilité d'un texte est égale au
produit des probabilités des tokens qui le composent.
Il faut noter ici qu'il s'agit d'un modèle très simple qui ne serait pas adapté à
la génération de texte puisque ce modèle générerait toujours le même token, celui qui
a la plus grande probabilité.
Néanmoins, pour faire de la tokenisation, ce modèle nous est très utile car il peut être utilisé
pour estimer la vraissemblance relative de différentes phrases.
Nous sommes maintenant prêts à revenir à notre explication de l'entraînement de l'algorithme.
Disons que nous avons comme corpus d'entraînement 10 fois le mot « hug », 12 fois le mot « pug »,
5 fois le mot « lug », 4 fois « bug » et 5 fois « dug ».
Comme dit plus tôt, l'entraînement commence par un gros vocabulaire.
Évidemment, comme nous utilisons un corpus jouet, ce vocabulaire ne sera pas si gros mais il devrait
vous montrer le principe.
Une première méthode consiste à lister toutes les sous-chaînes strictes possibles, c'est ce que nous allons faire ici.
On aurait aussi pu utiliser l'algorithme BPE avec une très grande taille de vocabulaire.
Mais maintenant les sous-chaînes strictes suffisent.
L'entraînement du tokenizer Unigram est basé sur la méthode Expectation-Maximisation : à
chaque itération,
nous estimons les probabilités des tokens du vocabulaire.
Puis on enlève les p pourcents de tokens qui minimisent la perte sur le corpus et qui
n'appartiennent pas aux caractères de base car on veut garder dans notre vocabulaire final les
caractères de base pour pouvoir tokeniser n'importe quel mot.
Allons y pour ça !
La probabilité d'un token est simplement estimée par le nombre d'apparition de ce token
dans notre corpus d'apprentissage divisé par le nombre total d'apparition de tous les tokens.
Nous pourrions utiliser ce vocabulaire pour tokeniser nos mots selon le modèle Unigram.
Nous allons le faire ensemble pour comprendre deux choses : comment on tokenise un mot avec un modèle Unigram
et comment la perte est calculée sur notre corpus.
La tokenisation Unigram LM de notre texte « hug » sera celle qui aura la probabilité d'occurrence la plus élevée
selon notre modèle Unigram.
Pour le trouver, la manière la plus simple de procéder serait de lister toutes les segmentations possibles
de notre texte « hug », de calculer la probabilité de chacune de ces segmentations puis de
choisir celle qui a la probabilité la plus élevée.
Avec le vocabulaire actuel, 2 tokenisations obtiennent exactement la même probabilité.
Nous en choisissons donc une et gardons en mémoire la probabilité associée.
Pour calculer la perte sur notre corpus d'entraînement, nous devons tokeniser comme nous venons de le faire tous les
mots restants dans le corpus.
La perte est alors la somme sur tous les mots du corpus de la fréquence d'occurrence
du mot multipliée par l'opposé du logarithme de la probabilité associée à
la tokenisation du mot.
On obtient ici une perte de 170.
Rappelez-vous, notre objectif initial était de réduire le vocabulaire.
Pour cela, nous allons retirer un token du vocabulaire et calculer la perte associée.
Supprimons par exemple le token « ug ».
On remarque que la tokenisation pour « hug » avec la lettre « h » et le tuple « ug » est désormais
impossible.
Néanmoins, comme nous l'avons vu précédemment, deux tokenisations avaient la même probabilité et nous pouvons toujours
choisir la tokenisation restante avec une probabilité 1e-02.
Les tokenisations des autres mots du vocabulaire restent également inchangées et finalement
même si on enlève le token « ug » de notre vocabulaire la perte reste égale à 170.
Pour cette première itération, si on continue le calcul, on s'apercevrait qu'on pourrait
retirez n'importe quel token sans que cela n'affecte la perte.
On choisira donc au hasard de retirer le token « ug » avant d'entamer une deuxième itération.
Nous estimons à nouveau la probabilité de chaque token avant de calculer l'impact de chaque
token sur la perte.
Par exemple, si nous supprimons maintenant le token composé des lettres « h » et « u », il ne reste plus qu'une
seule tokenisation possible pour « hug ».
La tokenisation des autres mots du vocabulaire n'est pas modifiée.
Au final, on obtient en supprimant du vocabulaire le token composé des lettres « h » et « u »
une perte de 168.
Enfin, pour choisir quel token supprimer, on va pour chaque token restant du vocabulaire
qui n'est pas un token élémentaire calculer la perte associée puis comparer ces pertes
entre elles.
Le token que nous allons supprimer est le token qui impacte le moins la perte : ici le
token « bu ».
Nous avions mentionné au début de la vidéo qu'à chaque itération nous pouvions retirer p pourcent
des tokens par itération.
Le deuxième token qui pourrait être supprimé à cette itération est le token « du ».
Et voilà, il ne nous reste plus qu'à répéter ces étapes jusqu'à obtenir le vocabulaire de la
taille souhaitée.
Une dernière chose. En pratique, quand on tokenise un mot avec un modèle Unigram on ne calcule pas
l'ensemble des probabilités des découpages possibles d'un mot avant de les comparer pour garder le
meilleur. Mais on utilise l'algorithme de Viterbi qui est beaucoup plus efficace.
Et c'est tout!
J'espère que cet exemple vous a permis de mieux comprendre l'
algorithme de tokenisation Unigram.