# Quiz de fin de chapitre

Testez ce que vous avez appris dans ce chapitre !

### 1. Le jeu de données `emotion` contient des messages Twitter étiquetés avec des émotions. Cherchez-le dans le [*Hub*](https://huggingface.co/datasets) et lisez la carte du jeu de données. Laquelle de ces émotions n'est pas une de ses émotions de base ?

### 2. Cherchez le jeu de données `ar_sarcasme` dans le [*Hub*](https://huggingface.co/datasets). Quelle tâche prend-il en charge ?

tags.",
            correct: true
		},
		{
			text: "Traduction automatique",
			explain: "Ce n'est pas ça. Jetez un autre coup d'œil à la carte du jeu de données !"
		},
		{
			text: "Reconnaissance des entités nommées",
			explain: "Ce n'est pas ça. Jetez un autre coup d'œil à la carte du jeu de données !"
		},
        {
			text: "Réponse aux questions",
			explain: "Hélas, cette question n'a pas reçu de réponse correcte. Essayez à nouveau !"
		}
	]}
/>

### 3. Comment le modèle BERT attend-il qu'une paire de phrases soit traitée ?

[SEP] est nécessaire pour séparer les deux phrases, mais ce n'est pas tout !"
		},
		{
			text: "[CLS] Tokens_de_la_phrase_1 Tokens_de_la_phrase_2",
			explain: "Un jeton spécial [CLS] est requis au début, mais ce n'est pas la seule chose !"
		},
		{
			text: "[CLS] Tokens_de_la_phrase_1 [SEP] Tokens_de_la_phrase_2 [SEP]",
			explain: "C'est exact !",
            correct: true
		},
        {
			text: "[CLS] Tokens_de_la_phrase_1 [SEP] Tokens_de_la_phrase_2",
			explain: "Un jeton spécial [CLS] est nécessaire au début, ainsi qu'un jeton spécial [SEP] pour séparer les deux phrases, mais ce n'est pas tout !"
		}
	]}
/>

{#if fw === 'pt'}
### 4. Quels sont les avantages de la méthode `Dataset.map()` ?

### 5. Que signifie le remplissage (*padding*) dynamique ?

tokens que la précédente dans le jeu de données.",
			explain: "Cela n'a pas de sens de regarder l'ordre dans le jeu de données puisque nous le mélangeons pendant l'entraînement."
		},
	]}
/>

### 6. Quel est le but d'une fonction d'assemblement ?

DataCollatorWithPadding."
		},
		{
			text: "Elle rassemble tous les échantillons dans un batch.",
			explain: "Vous pouvez passer la fonction d'assemblement comme argument d'une fonction DataLoader. Nous avons utilisé la fonction DataCollatorWithPadding qui remplit tous les éléments d'un batch pour qu'ils aient la même longueur.",
            correct: true
		},
		{
			text: "Elle pré-traite tout le jeu de données.",
			explain: "Ce serait une fonction de prétraitement, pas une fonction d'assemblement."
		},
        {
			text: "Elle tronque les séquences dans le jeu de données.",
			explain: "Une fonction d'assemblement est impliquée dans le traitement des batchs individuels, et non de tout le jeu de données. Si vous êtes intéressé par la troncature, vous pouvez utiliser la fonction truncate en argument du tokenizer."
		}
	]}
/>

### 7. Que se passe-t-il lorsque vous instanciez une des classes `AutoModelForXxx` avec un modèle de langage pré-entraîné (tel que `bert-base-uncased`) qui correspond à une tâche différente de celle pour laquelle il a été entraîné ?

AutoModelForSequenceClassification avec bert-base-uncased, nous avons eu des messages d'avertissement lors de l'instanciation du modèle. La tête pré-entraînée n'est pas utilisée pour la tâche de classification de séquences, elle est donc supprimée et une nouvelle tête est instanciée avec des poids aléatoires..",
            correct: true
		},
		{
			text: "La tête du modèle pré-entraîné est supprimée.",
			explain: "Quelque chose d'autre doit se produire. Essayez encore !"
		},
        {
			text: "Rien, puisque le modèle peut encore être finetuné pour les différentes tâches.",
			explain: "La tête du modèle pré-entraîné n'a pas été entraînée à résoudre cette tâche, nous devons donc la supprimer !"
		}
	]}
/>

### 8. Quel est le but de `TrainingArguments` ?

Trainer.",
			explain: "",
            correct: true
		},
		{
			text: "Préciser la taille du modèle.",
			explain: "La taille du modèle est définie par la configuration du modèle, et non par la classe TrainingArguments."
		},
		{
			text: "Juste contenir les hyperparamètres utilisés pour l'évaluation.",
			explain: "Dans l'exemple, nous avons spécifié où le modèle et ses checkpoints seront sauvegardés. Essayez à nouveau !"
		},
        {
			text: "Contenir seulement les hyperparamètres utilisés pour l'entraînement.",
			explain: "Dans l'exemple, nous avons utilisé une evaluation_strategy également, ce qui a un impact sur l'évaluation. Essayez à nouveau !"
		}
	]}
/>

### 9. Pourquoi devriez-vous utiliser la librairie 🤗 *Accelerate* ?

Accelerate ne fournit aucun modèles."
		},
		{
			text: "Elle fournit une API de haut niveau qui évite d'avoir à mettre en place sa propre boucle d'entraînement.",
			explain: "C'est ce que nous avons fait avec le Trainer mais pas avec la librairie 🤗 Accelerate. Essayez à nouveau !"
		},
		{
			text: "Elle permet à nos boucles d'entraînement de fonctionner avec des stratégies distribuées.",
			explain: "Avec 🤗 Accelerate, vos boucles d'entraînement fonctionneront pour plusieurs GPUs et TPUs.",
            correct: true
		},
        {
			text: "Elle offre davantage de fonctions d'optimisation.",
			explain: "Non, la librairie 🤗 Accelerate ne fournit pas de fonctions d'optimisation."
		}
	]}
/>

{:else}
### 4. Que se passe-t-il lorsque vous instanciez une des classes `TFAutoModelForXxx` avec un modèle de langage pré-entraîné (tel que `bert-base-uncased`) qui correspond à une tâche différente de celle pour laquelle il a été entraîné ?

TFAutoModelForSequenceClassification avec bert-base-uncased, nous avons eu des messages d'avertissement lors de l'instanciation du modèle. La tête pré-entraînée n'est pas utilisée pour la tâche de classification de séquences, elle est donc supprimée et une nouvelle tête est instanciée avec des poids aléatoires..",
            correct: true
		},
		{
			text: "La tête du modèle pré-entraîné est supprimée.",
			explain: "Quelque chose d'autre doit se produire. Essayez encore !"
		},
        {
			text: "Rien, puisque le modèle peut encore être finetuné pour les différentes tâches.",
			explain: "La tête du modèle pré-entraîné n'a pas été entraînée à résoudre cette tâche, nous devons donc la supprimer !"
		}
	]}
/>

### 5. Les modèles TensorFlow de `transformers` sont déjà des modèles Keras. Quel avantage cela offre-t-il ?

TPUStrategy, y compris l'initialisation du modèle."
		},
		{
			text: "Vous pouvez tirer parti des méthodes existantes telles que compile(), fit() et predict().",
			explain: "Une fois que vous disposez des données, l'entraînement sur celles-ci ne demande que très peu de travail.",
            correct: true
		},
		{
			text: "Vous apprendrez à connaître Keras ainsi que transformers.",
			explain: "Mais nous cherchons quelque chose d'autre :)",
			correct: true
		},
        {
			text: "Vous pouvez facilement calculer les métriques liées au jeu de données.",
			explain: "Keras nous aide à entraîner et à évaluer le modèle, et non à calculer les paramètres liés aux jeux de données."
		}
	]}
/>

### 6. Comment pouvez-vous définir votre propre métrique personnalisée ?

tf.keras.metrics.Metric.",
			explain: "Excellent !",
			correct: true
		},
		{
			text: "Utilisation de l'API fonctionnelle de Keras.",
			explain: "Essayez à nouveau !"
		},
		{
			text: "En utilisant un callable avec la signature metric_fn(y_true, y_pred).",
			explain: " ",
			correct: true
		},
        {
			text: "En le googlant.",
			explain: "Ce n'est pas la réponse que nous cherchons, mais cela devrait vous aider à la trouver.",
			correct: true
		}
	]}
/>

{/if}

