Dans cette vidéo, nous verrons comment vous pouvez créer votre propre tokenizer à partir de zéro !
Pour créer votre propre tokenizer vous devrez réfléchir à chacune des opérations impliquées
dans la tokenisation, à savoir : la normalisation, la prétokénisation, le modèle, le post-traitement et le décodage.
Si vous ne savez pas ce que sont la normalisation, la prétokénisation et le modèle, je vous conseille d'aller
voir les vidéos en lien ci-dessous.
Le post-traitement regroupe toutes les modifications que nous allons effectuer sur le texte tokenisé.
Cela peut inclure l'ajout de tokens spéciaux, la création d'un masque d'attention mais aussi
la génération d'une liste d'identifiants de tokens.
L'opération de décodage se produit à la toute fin et permettra de passer de la séquence
des identifiants dans une phrase.
Par exemple, vous pouvez voir que les # ont été supprimés et les tokens
composant le mot « .today » ont été regroupés.
Dans un tokeniseur rapide, tous ces composants sont regroupés dans l'attribut `backend_tokenizer`.
Comme vous pouvez le voir avec ce petit extrait de code, il s'agit d'une instance d'un tokenizer de la
bibliothèque Tokenizers.
Ainsi, pour créer votre propre tokenizer, vous devrez suivre ces étapes.
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
et troisièmement chargez ce tokenizer dans le tokenizer de la bibliothèque Transformers.
Pour comprendre ces étapes, je propose de recréer ensemble un tokenizer BERT.
La première chose à faire est de créer un jeu de données.
Avec cet extrait de code, vous pouvez créer un itérateur sur le jeu de données wikitext-2-raw-v1 qui est
un jeu de données plutôt petit en anglais, parfait pour un exemple.
On attaque ici le gros morceau : la conception de notre tokenizer avec la bibliothèque Tokenizers.
Nous commençons par initialiser une instance de tokenizer avec un modèle WordPiece car c'est le modèle
utilisé par BERT.
Ensuite, nous pouvons définir notre normaliseur.
Nous le définirons comme une succession de deux normalisations servant à nettoyer les caractères non visibles dans
le texte, 1 normalisation en minuscule et 2 normalisations servant à supprimer les accents.
Pour la pré-tokenisation, nous allons chaîner deux prétokenizer.
Le premier séparant le texte au niveau des espaces et le second isolant les
signes de ponctuation.
Maintenant, nous pouvons définir le `trainer` qui nous permettra d'entraîner le modèle WordPiece choisi
au départ.
Pour réaliser l'entraînement, il va falloir choisir une taille de vocabulaire. Ici on en choisit 25 000.
Et on annonce aussi les tokens spéciaux qu'on veut absolument ajouter à notre vocabulaire.
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.
Une fois le modèle entraîné, nous pouvons récupérer les identifiants des tokens de classe spéciale et de séparation
car nous en aurons besoin pour post-traiter notre séquence.
Grâce à la classe `TemplateProcessing`, nous pouvons ajouter le token [CLS] au début de
chaque séquence et le token [SEP] à la fin de la séquence et entre deux phrases
si nous tokenisons une paire de texte.
Enfin, il ne nous reste plus qu'à définir notre décodeur qui nous permettra de supprimer les ##
au début des tokens qu'il faut rattacher au token précédent.
Et voilà, vous avez toutes les lignes de code nécessaires pour définir votre propre tokenizer avec la bibliothèque Tokenizers.
Maintenant que nous avons un tout nouveau tokenizer avec la bibliothèque Tokenizers, il nous suffit de le
charger dans un tokenizer rapide de la bibliothèque Transformers.
Là encore nous avons plusieurs possibilités.
Nous pouvons le charger dans la classe générique `PreTrainedTokenizerFast` ou dans la classe `BertTokenizerFast` puisque nous
avons ici construit un tokenizer de type BERT.
J'espère que cette vidéo vous a aidé à comprendre comment vous pouvez créer votre propre tokenizer et
que vous êtes prêt à naviguer dans la documentation de la bibliothèque Tokenizers pour choisir les composants
de votre tout nouveau tokenizer !