subtitles/fr/53_unigram-tokenization.srt (285 lines of code) (raw):
1
00:00:05,330 --> 00:00:11,090
Dans cette vidéo, nous étudierons ensemble l'algorithme de tokenisation en sous-mots du modèle de langage
2
00:00:11,090 --> 00:00:12,090
Unigram.
3
00:00:12,090 --> 00:00:20,080
La stratégie globale d'entraînement d'un tokenizer Unigram LM est de commencer avec un vocabulaire très large,
4
00:00:20,080 --> 00:00:27,439
puis de supprimer des tokens à chaque itération jusqu'à ce que nous atteignions la taille souhaitée.
5
00:00:27,439 --> 00:00:32,250
A chaque itération, nous calculerons une perte sur notre corpus d'apprentissage grâce au modèle Unigram
6
00:00:32,250 --> 00:00:33,250
.
7
00:00:33,250 --> 00:00:39,160
Comme le calcul de la perte dépend du vocabulaire disponible, nous pouvons l'utiliser pour choisir comment
8
00:00:39,160 --> 00:00:41,590
réduire le vocabulaire.
9
00:00:41,590 --> 00:00:48,090
On regarde donc l'évolution de la perte en supprimant tour à tour chaque token du vocabulaire.
10
00:00:48,090 --> 00:00:56,730
On choisira de supprimer les p pourcents qui augmentent le moins la perte.
11
00:00:56,730 --> 00:01:01,030
Avant d'aller plus loin dans l'explication de l'algorithme d'entraînement, je dois expliquer
12
00:01:01,030 --> 00:01:04,199
ce qu'est un modèle Unigram.
13
00:01:04,199 --> 00:01:08,119
Le modèle Unigram LM est un type de modèle linguistique statistique.
14
00:01:08,119 --> 00:01:15,550
Un LM statistique attribuera une probabilité à un texte en considérant que le texte est en
15
00:01:15,550 --> 00:01:18,189
fait une séquence de tokens.
16
00:01:18,189 --> 00:01:23,900
Les séquences de tokens les plus simples à imaginer sont les mots qui composent la phrase ou
17
00:01:23,900 --> 00:01:25,410
les caractères.
18
00:01:25,410 --> 00:01:32,080
La particularité de l'Unigram LM est qu'il suppose que l'occurrence de chaque mot est
19
00:01:32,080 --> 00:01:34,670
indépendante de son mot précédent.
20
00:01:34,670 --> 00:01:40,271
Cette hypothèse nous permet d'écrire que la probabilité d'un texte est égale au
21
00:01:40,271 --> 00:01:44,430
produit des probabilités des tokens qui le composent.
22
00:01:44,430 --> 00:01:51,880
Il faut noter ici qu'il s'agit d'un modèle très simple qui ne serait pas adapté à
23
00:01:51,880 --> 00:01:58,630
la génération de texte puisque ce modèle générerait toujours le même token, celui qui
24
00:01:58,630 --> 00:02:00,140
a la plus grande probabilité.
25
00:02:00,140 --> 00:02:07,409
Néanmoins, pour faire de la tokenisation, ce modèle nous est très utile car il peut être utilisé
26
00:02:07,409 --> 00:02:14,209
pour estimer la vraissemblance relative de différentes phrases.
27
00:02:14,209 --> 00:02:20,000
Nous sommes maintenant prêts à revenir à notre explication de l'entraînement de l'algorithme.
28
00:02:20,000 --> 00:02:25,349
Disons que nous avons comme corpus d'entraînement 10 fois le mot « hug », 12 fois le mot « pug »,
29
00:02:25,349 --> 00:02:33,270
5 fois le mot « lug », 4 fois « bug » et 5 fois « dug ».
30
00:02:33,270 --> 00:02:38,910
Comme dit plus tôt, l'entraînement commence par un gros vocabulaire.
31
00:02:38,910 --> 00:02:45,280
Évidemment, comme nous utilisons un corpus jouet, ce vocabulaire ne sera pas si gros mais il devrait
32
00:02:45,280 --> 00:02:46,840
vous montrer le principe.
33
00:02:46,840 --> 00:02:54,870
Une première méthode consiste à lister toutes les sous-chaînes strictes possibles, c'est ce que nous allons faire ici.
34
00:02:54,870 --> 00:03:00,379
On aurait aussi pu utiliser l'algorithme BPE avec une très grande taille de vocabulaire.
35
00:03:00,379 --> 00:03:07,200
Mais maintenant les sous-chaînes strictes suffisent.
36
00:03:07,200 --> 00:03:13,629
L'entraînement du tokenizer Unigram est basé sur la méthode Expectation-Maximisation : à
37
00:03:13,629 --> 00:03:15,210
chaque itération,
38
00:03:15,210 --> 00:03:19,190
nous estimons les probabilités des tokens du vocabulaire.
39
00:03:19,190 --> 00:03:26,430
Puis on enlève les p pourcents de tokens qui minimisent la perte sur le corpus et qui
40
00:03:26,430 --> 00:03:33,500
n'appartiennent pas aux caractères de base car on veut garder dans notre vocabulaire final les
41
00:03:33,500 --> 00:03:37,980
caractères de base pour pouvoir tokeniser n'importe quel mot.
42
00:03:37,980 --> 00:03:39,230
Allons y pour ça !
43
00:03:39,230 --> 00:03:44,660
La probabilité d'un token est simplement estimée par le nombre d'apparition de ce token
44
00:03:44,660 --> 00:03:51,590
dans notre corpus d'apprentissage divisé par le nombre total d'apparition de tous les tokens.
45
00:03:51,590 --> 00:03:57,239
Nous pourrions utiliser ce vocabulaire pour tokeniser nos mots selon le modèle Unigram.
46
00:03:57,239 --> 00:04:04,080
Nous allons le faire ensemble pour comprendre deux choses : comment on tokenise un mot avec un modèle Unigram
47
00:04:04,080 --> 00:04:09,160
et comment la perte est calculée sur notre corpus.
48
00:04:09,160 --> 00:04:14,610
La tokenisation Unigram LM de notre texte « hug » sera celle qui aura la probabilité d'occurrence la plus élevée
49
00:04:14,610 --> 00:04:19,140
selon notre modèle Unigram.
50
00:04:19,140 --> 00:04:24,090
Pour le trouver, la manière la plus simple de procéder serait de lister toutes les segmentations possibles
51
00:04:24,090 --> 00:04:29,949
de notre texte « hug », de calculer la probabilité de chacune de ces segmentations puis de
52
00:04:29,949 --> 00:04:32,490
choisir celle qui a la probabilité la plus élevée.
53
00:04:32,490 --> 00:04:38,630
Avec le vocabulaire actuel, 2 tokenisations obtiennent exactement la même probabilité.
54
00:04:38,630 --> 00:04:43,789
Nous en choisissons donc une et gardons en mémoire la probabilité associée.
55
00:04:43,789 --> 00:04:48,850
Pour calculer la perte sur notre corpus d'entraînement, nous devons tokeniser comme nous venons de le faire tous les
56
00:04:48,850 --> 00:04:52,810
mots restants dans le corpus.
57
00:04:52,810 --> 00:04:57,930
La perte est alors la somme sur tous les mots du corpus de la fréquence d'occurrence
58
00:04:57,930 --> 00:05:04,220
du mot multipliée par l'opposé du logarithme de la probabilité associée à
59
00:05:04,220 --> 00:05:07,720
la tokenisation du mot.
60
00:05:07,720 --> 00:05:12,700
On obtient ici une perte de 170.
61
00:05:12,700 --> 00:05:18,750
Rappelez-vous, notre objectif initial était de réduire le vocabulaire.
62
00:05:18,750 --> 00:05:27,810
Pour cela, nous allons retirer un token du vocabulaire et calculer la perte associée.
63
00:05:27,810 --> 00:05:32,020
Supprimons par exemple le token « ug ».
64
00:05:32,020 --> 00:05:38,569
On remarque que la tokenisation pour « hug » avec la lettre « h » et le tuple « ug » est désormais
65
00:05:38,569 --> 00:05:39,970
impossible.
66
00:05:39,970 --> 00:05:45,810
Néanmoins, comme nous l'avons vu précédemment, deux tokenisations avaient la même probabilité et nous pouvons toujours
67
00:05:45,810 --> 00:05:50,870
choisir la tokenisation restante avec une probabilité 1e-02.
68
00:05:50,870 --> 00:05:58,210
Les tokenisations des autres mots du vocabulaire restent également inchangées et finalement
69
00:05:58,210 --> 00:06:06,710
même si on enlève le token « ug » de notre vocabulaire la perte reste égale à 170.
70
00:06:06,710 --> 00:06:11,550
Pour cette première itération, si on continue le calcul, on s'apercevrait qu'on pourrait
71
00:06:11,550 --> 00:06:16,190
retirez n'importe quel token sans que cela n'affecte la perte.
72
00:06:16,190 --> 00:06:24,620
On choisira donc au hasard de retirer le token « ug » avant d'entamer une deuxième itération.
73
00:06:24,620 --> 00:06:29,600
Nous estimons à nouveau la probabilité de chaque token avant de calculer l'impact de chaque
74
00:06:29,600 --> 00:06:32,280
token sur la perte.
75
00:06:32,280 --> 00:06:37,840
Par exemple, si nous supprimons maintenant le token composé des lettres « h » et « u », il ne reste plus qu'une
76
00:06:37,840 --> 00:06:42,020
seule tokenisation possible pour « hug ».
77
00:06:42,020 --> 00:06:46,580
La tokenisation des autres mots du vocabulaire n'est pas modifiée.
78
00:06:46,580 --> 00:06:51,880
Au final, on obtient en supprimant du vocabulaire le token composé des lettres « h » et « u »
79
00:06:51,880 --> 00:06:54,650
une perte de 168.
80
00:06:54,650 --> 00:07:02,550
Enfin, pour choisir quel token supprimer, on va pour chaque token restant du vocabulaire
81
00:07:02,550 --> 00:07:10,090
qui n'est pas un token élémentaire calculer la perte associée puis comparer ces pertes
82
00:07:10,090 --> 00:07:11,850
entre elles.
83
00:07:11,850 --> 00:07:18,100
Le token que nous allons supprimer est le token qui impacte le moins la perte : ici le
84
00:07:18,100 --> 00:07:20,129
token « bu ».
85
00:07:20,129 --> 00:07:25,710
Nous avions mentionné au début de la vidéo qu'à chaque itération nous pouvions retirer p pourcent
86
00:07:25,710 --> 00:07:29,540
des tokens par itération.
87
00:07:29,540 --> 00:07:35,850
Le deuxième token qui pourrait être supprimé à cette itération est le token « du ».
88
00:07:35,850 --> 00:07:42,690
Et voilà, il ne nous reste plus qu'à répéter ces étapes jusqu'à obtenir le vocabulaire de la
89
00:07:42,690 --> 00:07:45,240
taille souhaitée.
90
00:07:45,240 --> 00:07:51,129
Une dernière chose. En pratique, quand on tokenise un mot avec un modèle Unigram on ne calcule pas
91
00:07:51,129 --> 00:07:57,210
l'ensemble des probabilités des découpages possibles d'un mot avant de les comparer pour garder le
92
00:07:57,210 --> 00:08:05,560
meilleur. Mais on utilise l'algorithme de Viterbi qui est beaucoup plus efficace.
93
00:08:05,560 --> 00:08:07,300
Et c'est tout!
94
00:08:07,300 --> 00:08:15,000
J'espère que cet exemple vous a permis de mieux comprendre l'
95
00:08:15,000 --> 00:08:18,190
algorithme de tokenisation Unigram.