Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion chapters/fr/chapter0/1.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Notez que nous ne couvrirons pas le système Windows. Si vous travaillez sous Wi

La plupart du cours repose sur le fait que vous ayez un compte Hugging Face. Si vous n'en disposez pas d'un, nous vous recommandons d'en créer un dès maintenant : [créer un compte](https://huggingface.co/join).

## Utilisation d'un <i>notebook</i> Google Colab
## Utilisation d'un notebook Google Colab

L'utilisation d'un *notebook* Google Colab est la configuration la plus simple possible. Démarrez un *notebook* dans votre navigateur et passez directement au codage !

Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter1/2.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Traitement du langage naturel (NLP pour <i>Natural Language Processing</i>)
# Traitement du langage naturel (NLP pour Natural Language Processing)

<CourseFloatingBanner
chapter={1}
Expand Down
8 changes: 4 additions & 4 deletions chapters/fr/chapter1/3.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Que peuvent faire les <i>transformers</i> ?
# Que peuvent faire les transformers ?

<CourseFloatingBanner chapter={1}
classNames="absolute z-10 right-0 top-0"
Expand All @@ -16,7 +16,7 @@ Dans cette section, nous allons voir ce que peuvent faire les *transformers* et
>
> Si vous souhaitez exécuter les codes en local, nous vous recommandons de jeter un œil au chapitre <a href="/course/fr/chapter0">configuration</a>.

## Les <i>transformers</i> sont partout !
## Les transformers sont partout !

Les *transformers* sont utilisés pour résoudre toute sorte de tâches de NLP comme celles mentionnées dans la section précédente. Voici quelques-unes des entreprises et organisations qui utilisent Hugging Face, les *transformers* et qui contribuent aussi à la communauté en partageant leurs modèles :

Expand Down Expand Up @@ -87,7 +87,7 @@ Voici une liste non-exhaustive des [pipelines disponibles](https://huggingface.c

Regardons de plus près certains d'entre eux !

## <i>Zero-shot classification</i>
## Zero-shot classification

Nous allons commencer par nous attaquer à une tâche plus difficile où nous devons classer des textes qui n'ont pas été annotés. C'est un scénario très répandu dans les projets réels car l'annotation de textes est généralement longue et nécessite parfois une expertise dans un domaine. Pour ce cas d'usage, le pipeline `zero-shot-classification` est très puissant : il vous permet de spécifier les labels à utiliser pour la classification, de sorte que vous n'ayez pas à vous soucier des labels du modèle pré-entraîné. Nous avons déjà vu comment le modèle peut classer un texte comme positif ou négatif en utilisant ces deux labels mais il peut également classer le texte en utilisant n'importe quel autre ensemble de labels que vous souhaitez.

Expand Down Expand Up @@ -147,7 +147,7 @@ Il est possible de contrôler le nombre de séquences générées avec l'argumen
> ✏️ **Essayez !** Utilisez les arguments `num_return_sequences` et `max_length` pour générer deux phrases de 15 mots chacune.


## Utiliser n'importe quel modèle du <i>Hub</i> dans un pipeline
## Utiliser n'importe quel modèle du Hub dans un pipeline

Les exemples précédents utilisaient le modèle par défaut pour la tâche en question mais vous pouvez aussi choisir un modèle particulier du *Hub* et l'utiliser dans un pipeline pour une tâche spécifique comme par exemple la génération de texte. Rendez-vous sur le [*Hub*](https://huggingface.co/models) et cliquez sur le *filtre* correspondant sur la gauche pour afficher seulement les modèles supportés pour cette tâche. Vous devriez arriver sur une page comme [celle-ci](https://huggingface.co/models?pipeline_tag=text-generation).

Expand Down
10 changes: 5 additions & 5 deletions chapters/fr/chapter1/4.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Comment fonctionnent les <i>transformers</i> ?
# Comment fonctionnent les transformers ?

<CourseFloatingBanner
chapter={1}
Expand All @@ -7,7 +7,7 @@

Dans cette partie, nous allons jeter un coup d'œil à l'architecture des *transformers*.

## Court historique des <i>transformers</i>
## Court historique des transformers

Voici quelques dates clefs dans la courte histoire des *transformers* :

Expand Down Expand Up @@ -38,7 +38,7 @@ Cette liste est loin d'être exhaustive et met en lumière certains *transformer

Nous verrons plus en profondeur ces familles de modèles plus tard.

## Les <i>transformers</i> sont des modèles de langage
## Les transformers sont des modèles de langage

Tous les *transformers* mentionnés ci-dessus (GPT, BERT, BART, T5, etc.) ont été entraînés comme des *modèles de langage*. Cela signifie qu'ils ont été entraînés sur une large quantité de textes bruts de manière autosupervisée. L'apprentissage autosupervisé est un type d'entraînement dans lequel l'objectif est automatiquement calculé à partir des entrées du modèle. Cela signifie que les humains ne sont pas nécessaires pour étiqueter les données !

Expand All @@ -57,7 +57,7 @@ Un autre exemple est la *modélisation du langage masqué*, dans laquelle le mod
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/masked_modeling-dark.svg" alt="Example of masked language modeling in which a masked word from a sentence is predicted.">
</div>

## Les <i>transformers</i> sont énormes
## Les transformers sont énormes

En dehors de quelques exceptions (comme DistilBERT), la stratégie générale pour obtenir de meilleure performance consiste à augmenter la taille des modèles ainsi que la quantité de données utilisées pour l'entraînement de ces derniers.

Expand Down Expand Up @@ -166,7 +166,7 @@ Notez que la première couche d'attention dans un bloc décodeur prête attentio

Le *masque d'attention* peut également être utilisé dans l'encodeur/décodeur pour empêcher le modèle de prêter attention à certains mots spéciaux. Par exemple, le mot de remplissage spécial (le *padding*) utilisé pour que toutes les entrées aient la même longueur lors du regroupement de phrases.

## Architectures contre <i>checkpoints</i>
## Architectures contre checkpoints

En approfondissant l'étude des <i>transformers</i> dans ce cours, vous verrez des mentions d'<i>architectures</i> et de <i>checkpoints</i> ainsi que de <i>modèles</i>. Ces termes ont tous des significations légèrement différentes :

Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter2/2.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Comme nous l'avons vu dans le [chapitre 1](/course/fr/chapter1), ce pipeline reg

Passons rapidement en revue chacun de ces éléments.

## Prétraitement avec un <i>tokenizer</i>
## Prétraitement avec un tokenizer

Comme d'autres réseaux de neurones, les *transformers* ne peuvent pas traiter directement le texte brut, donc la première étape de notre pipeline est de convertir les entrées textuelles en nombres afin que le modèle puisse les comprendre. Pour ce faire, nous utilisons un *tokenizer*, qui sera responsable de :
- diviser l'entrée en mots, sous-mots, ou symboles (comme la ponctuation) qui sont appelés *tokens*,
Expand Down
4 changes: 2 additions & 2 deletions chapters/fr/chapter2/3.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ La classe `TFAutoModel` et toutes les classes apparentées sont en fait de simpl

Cependant, si vous connaissez le type de modèle que vous voulez utiliser, vous pouvez utiliser directement la classe qui définit son architecture. Voyons comment cela fonctionne avec un modèle BERT.

## Création d’un <i>transformer</i>
## Création d’un transformer

La première chose que nous devons faire pour initialiser un modèle BERT est de charger un objet configuration :

Expand Down Expand Up @@ -184,7 +184,7 @@ Le fichier *tf_model.h5* est connu comme le *dictionnaire d'état*. Il contient

{/if}

### Utilisation d'un <i>transformer</i> pour l'inférence
### Utilisation d'un transformer pour l'inférence

Maintenant que vous savez comment charger et sauvegarder un modèle, essayons de l'utiliser pour faire quelques prédictions. Les *transformers* ne peuvent traiter que des nombres. Des nombres que le *tokenizer* génère. Mais avant de parler des *tokenizers*, explorons les entrées que le modèle accepte.

Expand Down
8 changes: 4 additions & 4 deletions chapters/fr/chapter2/4.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<FrameworkSwitchCourse {fw} />

# Les <i>tokenizers</i>
# Les tokenizers

{#if fw === 'pt'}

Expand Down Expand Up @@ -41,7 +41,7 @@ Les modèles ne pouvant traiter que des nombres, nous devons trouver un moyen de

Voyons quelques exemples d'algorithmes de tokénisation et essayons de répondre à certaines des questions que vous pouvez vous poser à ce sujet.

## <i>Tokenizer</i> basé sur les mots
## Tokenizer basé sur les mots


<Youtube id="nhJxYji1aho"/>
Expand Down Expand Up @@ -75,7 +75,7 @@ Enfin, nous avons besoin d'un *token* personnalisé pour représenter les mots q
Une façon de réduire la quantité de *tokens* inconnus est d'aller un niveau plus profond, en utilisant un *tokenizer* basé sur les caractères.


## <i>Tokenizer</i> basé sur les caractères
## Tokenizer basé sur les caractères

<Youtube id="ssLq_EK2jLE"/>

Expand Down Expand Up @@ -215,7 +215,7 @@ La sortie de cette méthode est une liste de chaînes de caractères ou de *toke

Ce *tokenizer* est un *tokenizer* de sous-mots : il découpe les mots jusqu'à obtenir des *tokens* qui peuvent être représentés par son vocabulaire. C'est le cas ici avec `transformer` qui est divisé en deux *tokens* : `transform` et `##er`.

### De <i>tokens</i> aux identifiants d'entrée
### De tokens aux identifiants d'entrée

La conversion en identifiants d'entrée est gérée par la méthode `convert_tokens_to_ids()` du *tokenizer* :

Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter2/5.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ Il s'agit d'un batch de deux séquences identiques !

Utiliser des *batchs* permet au modèle de fonctionner lorsque vous lui donnez plusieurs séquences. Utiliser plusieurs séquences est aussi simple que de construire un batch avec une seule séquence. Il y a cependant un deuxième problème. Lorsque vous essayez de regrouper deux phrases (ou plus), elles peuvent être de longueurs différentes. Si vous avez déjà travaillé avec des tenseurs, vous savez qu'ils doivent être de forme rectangulaire. Vous ne pourrez donc pas convertir directement la liste des identifiants d'entrée en un tenseur. Pour contourner ce problème, nous avons l'habitude de *rembourrer*/*remplir* (le *padding* en anglais) les entrées.

## <i>Padding</i> des entrées
## Padding des entrées

La liste de listes suivante ne peut pas être convertie en un tenseur :

Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter2/6.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ print(tokenizer.decode(ids))

Le *tokenizer* a ajouté le mot spécial `[CLS]` au début et le mot spécial `[SEP]` à la fin. C'est parce que le modèle a été pré-entraîné avec ces mots, donc pour obtenir les mêmes résultats pour l'inférence, nous devons également les ajouter. Notez que certains modèles n'ajoutent pas de mots spéciaux, ou en ajoutent des différents. Les modèles peuvent aussi ajouter ces mots spéciaux seulement au début, ou seulement à la fin. Dans tous les cas, le *tokenizer* sait lesquels sont attendus et s'en occupe pour vous.

## Conclusion : du <i>tokenizer</i> au modèle
## Conclusion : du tokenizer au modèle

Maintenant que nous avons vu toutes les étapes individuelles que l'objet `tokenizer` utilise lorsqu'il est appliqué sur des textes, voyons une dernière fois comment il peut gérer plusieurs séquences (*padding*), de très longues séquences (*troncation*) et plusieurs types de tenseurs avec son API principale :

Expand Down
4 changes: 2 additions & 2 deletions chapters/fr/chapter2/8.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
]}
/>

### 2. Combien de dimensions le tenseur produit par le <i>transformer</i> de base possède-t-il et quelles sont-elles ?
### 2. Combien de dimensions le tenseur produit par le transformer de base possède-t-il et quelles sont-elles ?


<Question
Expand Down Expand Up @@ -195,7 +195,7 @@
]}
/>

### 8. Autour de quelle méthode s'articule la majeure partie de l'API <i>tokenizer</i> ?
### 8. Autour de quelle méthode s'articule la majeure partie de l'API tokenizer ?

<Question
choices={[
Expand Down
4 changes: 2 additions & 2 deletions chapters/fr/chapter3/2.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ Evidemment, entraîner un modèle avec seulement deux phrases ne va pas donner d

Dans cette section, nous allons utiliser comme exemple le jeu de données MRPC (*Microsoft Research Paraphrase Corpus*) présenté dans un [papier](https://www.aclweb.org/anthology/I05-5002.pdf) par William B. Dolan et Chris Brockett. Ce jeu de données contient 5801 paires de phrases avec un label indiquant si ces paires sont des paraphrases ou non (i.e. si elles ont la même signification). Nous l'avons choisi pour ce chapitre parce que c'est un petit jeu de données et cela rend donc simples les expériences d'entraînement sur ce jeu de données.

### Charger un jeu de données depuis le <i>Hub</i>
### Charger un jeu de données depuis le Hub

{#if fw === 'pt'}
<Youtube id="_BZearw7f0w"/>
Expand Down Expand Up @@ -288,7 +288,7 @@ Notre `tokenize_function` retourne un dictionnaire avec les clés `input_ids`, `

La dernière chose que nous devrons faire est de remplir tous les exemples à la longueur de l'élément le plus long lorsque nous regroupons les éléments, une technique que nous appelons le *padding dynamique*.

### <i>Padding</i> dynamique
### Padding dynamique

<Youtube id="7q5NyFT8REg"/>

Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter3/3.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<FrameworkSwitchCourse {fw} />

# <i>Finetuner</i> un modèle avec l'API Trainer
# Finetuner un modèle avec l'API Trainer

<CourseFloatingBanner chapter={3}
classNames="absolute z-10 right-0 top-0"
Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter3/3_tf.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<FrameworkSwitchCourse {fw} />

# <i>Finetuner</i> un modèle avec Keras
# Finetuner un modèle avec Keras

<CourseFloatingBanner chapter={3}
classNames="absolute z-10 right-0 top-0"
Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter3/4.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ Une fois encore, vos résultats seront légèrement différents en raison du car
> [!TIP]
> ✏️ **Essayez** Modifiez la boucle d'entraînement précédente pour *finetuner* votre modèle sur le jeu de données SST-2.

### Optimisez votre boucle d'entraînement avec 🤗 <i>Accelerate</i>
### Optimisez votre boucle d'entraînement avec 🤗 Accelerate

<Youtube id="s7dy8QRgjJ0" />

Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter3/5.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<FrameworkSwitchCourse {fw} />

# <i>Finetuning</i>, coché !
# Finetuning, coché !

<CourseFloatingBanner
chapter={3}
Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter4/1.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Le <i>Hub</i> d'Hugging Face
# Le Hub d'Hugging Face

<CourseFloatingBanner
chapter={4}
Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter5/2.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Que faire si mon jeu de données n'est pas sur le <i>Hub</i> ?
# Que faire si mon jeu de données n'est pas sur le Hub ?

<CourseFloatingBanner chapter={5}
classNames="absolute z-10 right-0 top-0"
Expand Down
6 changes: 3 additions & 3 deletions chapters/fr/chapter5/4.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Données massives ? 🤗 <i>Datasets</i> à la rescousse !
# Données massives ? 🤗 Datasets à la rescousse !


<CourseFloatingBanner chapter={5}
Expand All @@ -18,7 +18,7 @@ Heureusement, 🤗 *Datasets* a été conçu pour surmonter ces limitations. Il

Dans cette section, nous allons explorer ces fonctionnalités de 🤗 *Datasets* avec un énorme corpus de 825 Go connu sous le nom de [*The Pile*](https://pile.eleuther.ai). Commençons !

## Qu'est-ce que <i>The Pile</i> ?
## Qu'est-ce que The Pile ?

*The Pile* est un corpus de texte en anglais créé par [EleutherAI](https://www.eleuther.ai) pour entraîner des modèles de langage à grande échelle. Il comprend une gamme variée de jeux de données, couvrant des articles scientifiques, des référentiels de code GitHub et du texte Web filtré. Le corpus d’entraînement est disponible en [morceaux de 14 Go](https://the-eye.eu/public/AI/pile/) et vous pouvez aussi télécharger plusieurs des [composants individuels]( https://the-eye.eu/public/AI/pile_preliminary_components/). Commençons par jeter un coup d'œil au jeu de données *PubMed Abstracts*, qui est un corpus de résumés de 15 millions de publications biomédicales sur [PubMed](https://pubmed.ncbi.nlm.nih.gov/). Le jeu de données est au [format JSON Lines](https://jsonlines.org) et est compressé à l'aide de la bibliothèque `zstandard`. Nous devons donc d'abord installer cette bibliothèque :

Expand Down Expand Up @@ -64,7 +64,7 @@ pubmed_dataset[0]

Cela ressemble au résumé d'un article médical. Voyons maintenant combien de RAM nous avons utilisé pour charger le jeu de données !

## La magie du <i>memory mapping</i>
## La magie du memory mapping

Un moyen simple de mesurer l'utilisation de la mémoire dans Python consiste à utiliser la bibliothèque [`psutil`](https://psutil.readthedocs.io/en/latest/) qui peut être installée avec `pip` comme suit :

Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter5/5.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ La dernière étape consiste à enregistrer le jeu de données augmentées avec
issues_with_comments_dataset.to_json("issues-datasets-with-comments.jsonl")
```

## Téléchargement du jeu de données sur le <i>Hub</i>
## Téléchargement du jeu de données sur le Hub

<Youtube id="HaN6qCr_Afc"/>

Expand Down
2 changes: 1 addition & 1 deletion chapters/fr/chapter5/7.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 🤗 <i>Datasets</i>, coché !
# 🤗 Datasets, coché !

<CourseFloatingBanner
chapter={5}
Expand Down
16 changes: 8 additions & 8 deletions chapters/fr/chapter6/10.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

Testons ce que vous avez appris dans ce chapitre !

### 1. Quand devez-vous entraîner un nouveau <i>tokenizer</i> ?
### 1. Quand devez-vous entraîner un nouveau tokenizer ?

<Question
choices={[
Expand All @@ -33,7 +33,7 @@ Testons ce que vous avez appris dans ce chapitre !
]}
/>

### 2. Quel est l'avantage d'utiliser un générateur de listes par rapport à une liste de listes lors de l'utilisation de <code>train_new_from_iterator()</code> ?
### 2. Quel est l'avantage d'utiliser un générateur de listes par rapport à une liste de listes lors de l'utilisation de `train_new_from_iterator()` ?

<Question
choices={[
Expand All @@ -57,7 +57,7 @@ Testons ce que vous avez appris dans ce chapitre !
]}
/>

### 3. Quels sont les avantages d'utiliser un <i>tokenizer</i> « rapide » ?
### 3. Quels sont les avantages d'utiliser un tokenizer « rapide » ?

<Question
choices={[
Expand All @@ -82,7 +82,7 @@ Testons ce que vous avez appris dans ce chapitre !
]}
/>

### 4. Comment le pipeline `token-classification` gère-t-il les entités qui s'étendent sur plusieurs <i>tokens</i> ?
### 4. Comment le pipeline `token-classification` gère-t-il les entités qui s'étendent sur plusieurs tokens ?

<Question
choices={[
Expand Down Expand Up @@ -156,7 +156,7 @@ Testons ce que vous avez appris dans ce chapitre !
]}
/>

### 7. Qu'est-ce que la pré-tokénisation pour un <i>tokenizer</i> en sous-mots ?
### 7. Qu'est-ce que la pré-tokénisation pour un tokenizer en sous-mots ?

<Question
choices={[
Expand All @@ -180,7 +180,7 @@ Testons ce que vous avez appris dans ce chapitre !
]}
/>

### 8. Sélectionnez les phrases qui s'appliquent au <i>tokenizer</i> BPE.
### 8. Sélectionnez les phrases qui s'appliquent au tokenizer BPE.

<Question
choices={[
Expand Down Expand Up @@ -214,7 +214,7 @@ Testons ce que vous avez appris dans ce chapitre !
]}
/>

### 9. Sélectionnez les phrases qui s'appliquent au <i>tokenizer</i> WordPiece.
### 9. Sélectionnez les phrases qui s'appliquent au tokenizer WordPiece.

<Question
choices={[
Expand Down Expand Up @@ -248,7 +248,7 @@ Testons ce que vous avez appris dans ce chapitre !
]}
/>

### 10. Sélectionnez les phrases qui s'appliquent au <i>tokenizer</i> Unigram.
### 10. Sélectionnez les phrases qui s'appliquent au tokenizer Unigram.

<Question
choices={[
Expand Down
6 changes: 3 additions & 3 deletions chapters/fr/chapter6/2.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Entraîner un nouveau <i>tokenizer</i> à partir d'un ancien
# Entraîner un nouveau tokenizer à partir d'un ancien

<CourseFloatingBanner chapter={6}
classNames="absolute z-10 right-0 top-0"
Expand Down Expand Up @@ -131,7 +131,7 @@ def get_training_corpus():
qui produit exactement le même générateur que précédemment mais permet d'utiliser une logique plus complexe que celle que vous pouvez utiliser dans une compréhension de liste.


## Entraînement d'un nouveau <i>tokenizer</i>
## Entraînement d'un nouveau tokenizer

Maintenant que nous avons notre corpus sous la forme d'un itérateur de batchs de textes, nous sommes prêts à entraîner un nouveau *tokenizer*. Pour ce faire, nous devons d'abord charger le *tokenizer* que nous voulons coupler avec notre modèle (ici, le GPT-2) :

Expand Down Expand Up @@ -224,7 +224,7 @@ tokenizer.tokenize(example)

En plus du *token* correspondant à une indentation, on peut également voir ici un *token* pour une double indentation : `ĊĠĠĠĠĠĠĠĠĠ`. Les mots spéciaux de Python comme `class`, `init`, `call`, `self`, et `return` sont tous tokenizés comme un seul *token*. Nous pouvons voir qu'en plus de séparer sur `_` et `.` le tokenizer sépare correctement même les noms en minuscules. Par exemple `LinearLayer` est tokenisé comme `["ĠLinear", "Layer"]`.

## Sauvegarde du <i>tokenizer</i>
## Sauvegarde du tokenizer

Pour être sûr de pouvoir l'utiliser plus tard, nous devons sauvegarder notre nouveau *tokenizer*. Comme pour les modèles, ceci est fait avec la méthode `save_pretrained()` :

Expand Down
Loading
Loading