subtitles/fr/54_building-a-new-tokenizer.srt (156 lines of code) (raw):
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 !