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.