1
00:00:05,350 --> 00:00:11,360
Dans cette vidéo, nous verrons comment vous pouvez créer votre propre tokenizer à partir de zéro !

2
00:00:11,360 --> 00:00:18,370
Pour créer votre propre tokenizer vous devrez réfléchir à chacune des opérations impliquées

3
00:00:18,370 --> 00:00:25,220
dans la tokenisation, à savoir : la normalisation, la prétokénisation, le modèle, le post-traitement et le décodage.

4
00:00:25,220 --> 00:00:32,310
Si vous ne savez pas ce que sont la normalisation, la prétokénisation et le modèle, je vous conseille d'aller

5
00:00:32,310 --> 00:00:34,800
voir les vidéos en lien ci-dessous.

6
00:00:34,800 --> 00:00:40,329
Le post-traitement regroupe toutes les modifications que nous allons effectuer sur le texte tokenisé.

7
00:00:40,329 --> 00:00:46,690
Cela peut inclure l'ajout de tokens spéciaux, la création d'un masque d'attention mais aussi

8
00:00:46,690 --> 00:00:50,200
la génération d'une liste d'identifiants de tokens.

9
00:00:50,200 --> 00:00:55,350
L'opération de décodage se produit à la toute fin et permettra de passer de la séquence

10
00:00:55,350 --> 00:00:59,000
des identifiants dans une phrase.

11
00:00:59,000 --> 00:01:04,220
Par exemple, vous pouvez voir que les # ont été supprimés et les tokens

12
00:01:04,220 --> 00:01:10,820
composant le mot « .today » ont été regroupés.

13
00:01:10,820 --> 00:01:17,472
Dans un tokeniseur rapide, tous ces composants sont regroupés dans l'attribut `backend_tokenizer`.

14
00:01:17,472 --> 00:01:22,720
Comme vous pouvez le voir avec ce petit extrait de code, il s'agit d'une instance d'un tokenizer de la

15
00:01:22,720 --> 00:01:24,860
bibliothèque Tokenizers.

16
00:01:24,860 --> 00:01:33,799
Ainsi, pour créer votre propre tokenizer, vous devrez suivre ces étapes.

17
00:01:33,799 --> 00:01:40,510
Créez d'abord un jeu de données d'entraînement. Deuxièmement, créez et entraînez un tokenizer avec la bibliothèque Tokenizers

18
00:01:40,510 --> 00:01:49,430
et troisièmement chargez ce tokenizer dans le tokenizer de la bibliothèque Transformers.

19
00:01:49,430 --> 00:01:56,510
Pour comprendre ces étapes, je propose de recréer ensemble un tokenizer BERT.

20
00:01:56,510 --> 00:01:59,500
La première chose à faire est de créer un jeu de données.

21
00:01:59,500 --> 00:02:05,650
Avec cet extrait de code, vous pouvez créer un itérateur sur le jeu de données wikitext-2-raw-v1 qui est

22
00:02:05,650 --> 00:02:08,610
un jeu de données plutôt petit en anglais, parfait pour un exemple.

23
00:02:08,610 --> 00:02:18,830
On attaque ici le gros morceau : la conception de notre tokenizer avec la bibliothèque Tokenizers.

24
00:02:18,830 --> 00:02:25,349
Nous commençons par initialiser une instance de tokenizer avec un modèle WordPiece car c'est le modèle

25
00:02:25,349 --> 00:02:29,240
utilisé par BERT.

26
00:02:29,240 --> 00:02:32,110
Ensuite, nous pouvons définir notre normaliseur.

27
00:02:32,110 --> 00:02:39,930
Nous le définirons comme une succession de deux normalisations servant à nettoyer les caractères non visibles dans

28
00:02:39,930 --> 00:02:46,659
le texte, 1 normalisation en minuscule et 2 normalisations servant à supprimer les accents.

29
00:02:46,659 --> 00:02:54,459
Pour la pré-tokenisation, nous allons chaîner deux prétokenizer.

30
00:02:54,459 --> 00:02:59,959
Le premier séparant le texte au niveau des espaces et le second isolant les

31
00:02:59,959 --> 00:03:02,450
signes de ponctuation.

32
00:03:02,450 --> 00:03:08,430
Maintenant, nous pouvons définir le `trainer` qui nous permettra d'entraîner le modèle WordPiece choisi

33
00:03:08,430 --> 00:03:11,209
au départ.

34
00:03:11,209 --> 00:03:17,280
Pour réaliser l'entraînement, il va falloir choisir une taille de vocabulaire. Ici on en choisit 25 000.

35
00:03:17,280 --> 00:03:29,099
Et on annonce aussi les tokens spéciaux qu'on veut absolument ajouter à notre vocabulaire.

36
00:03:29,099 --> 00:03:39,209
En une ligne de code, nous pouvons entraîner notre modèle WordPiece en utilisant l'itérateur que nous avons défini précédemment.

37
00:03:39,209 --> 00:03:45,800
Une fois le modèle entraîné, nous pouvons récupérer les identifiants des tokens de classe spéciale et de séparation

38
00:03:45,800 --> 00:03:49,750
car nous en aurons besoin pour post-traiter notre séquence.

39
00:03:49,750 --> 00:03:55,790
Grâce à la classe `TemplateProcessing`, nous pouvons ajouter le token [CLS] au début de

40
00:03:55,790 --> 00:04:01,780
chaque séquence et le token [SEP] à la fin de la séquence et entre deux phrases

41
00:04:01,780 --> 00:04:07,060
si nous tokenisons une paire de texte.

42
00:04:07,060 --> 00:04:12,099
Enfin, il ne nous reste plus qu'à définir notre décodeur qui nous permettra de supprimer les ##

43
00:04:12,099 --> 00:04:17,810
au début des tokens qu'il faut rattacher au token précédent.

44
00:04:17,810 --> 00:04:30,930
Et voilà, vous avez toutes les lignes de code nécessaires pour définir votre propre tokenizer avec la bibliothèque Tokenizers.

45
00:04:30,930 --> 00:04:35,120
Maintenant que nous avons un tout nouveau tokenizer avec la bibliothèque Tokenizers, il nous suffit de le

46
00:04:35,120 --> 00:04:40,070
charger dans un tokenizer rapide de la bibliothèque Transformers.

47
00:04:40,070 --> 00:04:42,660
Là encore nous avons plusieurs possibilités.

48
00:04:42,660 --> 00:04:48,830
Nous pouvons le charger dans la classe générique `PreTrainedTokenizerFast` ou dans la classe `BertTokenizerFast` puisque nous

49
00:04:48,830 --> 00:04:56,380
avons ici construit un tokenizer de type BERT.

50
00:04:56,380 --> 00:05:01,600
J'espère que cette vidéo vous a aidé à comprendre comment vous pouvez créer votre propre tokenizer et

51
00:05:01,600 --> 00:05:10,669
que vous êtes prêt à naviguer dans la documentation de la bibliothèque Tokenizers pour choisir les composants

52
00:05:10,669 --> 00:05:16,490
de votre tout nouveau tokenizer !