Dans cette vidéo, nous allons voir comment charger et finetuner un modèle pré-entraîné.
C'est très rapide, et si vous avez regardé nos vidéos sur le pipeline, que je mettrai en lien ci-dessous, le
processus est très similaire.
Cette fois, cependant, nous allons utiliser l'apprentissage par transfert et faire l'entraînement
nous-mêmes, plutôt que de simplement charger un modèle et de l'utiliser tel quel.
Pour en savoir plus sur l'apprentissage par transfert, rendez-vous sur la vidéo « Qu'est-ce que l'apprentissage par transfert ? »
que nous mettrons également en lien ci-dessous !
Mais maintenant regardons ce code.
Pour commencer, nous choisissons le modèle avec lequel nous voulons commencer. Dans ce cas, nous allons utiliser le
célèbre BERT original.
Mais que signifie cette monstruosité, `TFAutoModelForSequenceClassification` ?
Eh bien, le TF signifie TensorFlow, et le reste signifie « prenez un modèle de langue et collez-y
une tête de classification de séquence s'il n'en a pas déjà une ».
Donc, ce que nous allons faire ici, c'est charger BERT, un modèle de langue général, puis faire un
apprentissage par transfert pour l'utiliser sur notre tâche d'intérêt.
Nous chargeons ici le modèle de langue avec cette seule ligne de code, en utilisant la méthode `from_pretrained`
.
Cette méthode doit connaître deux choses : premièrement, le nom du modèle que vous souhaitez charger,
et deuxièmement, le nombre de classes de votre problème.
Si vous souhaitez suivre avec vidéos sur Datasets, que je vais lier
ci-dessous, vous aurez alors deux classes, positive et négative, et donc `num_labels` est égal à deux.
Qu'en est-il de cette chose `.compile` ?
Si vous connaissez Keras, vous l'avez probablement déjà vu, mais si ce n'est pas le cas, c'est l'une
de ses méthodes de base que vous allez voir encore et encore. Vous devez toujours compiler votre modèle avant de l'entraîner.
La compilation doit connaître deux choses. Premièrement la fonction de perte : qu'essayons-nous d'
optimiser ?
Ici, nous importons la fonction de perte `SparseCategoricalCrossentropy` c'est une bouchée, mais c'est
la fonction de perte standard pour tout réseau de neurones qui effectue une tâche de classification.
Cela encourage essentiellement le réseau à produire des valeurs élevées pour la bonne classe et des
valeurs faibles pour les mauvaises classes.
Notez que vous pouvez spécifier la fonction de perte sous forme de chaîne, comme nous l'avons fait avec l'optimiseur,
mais il y a un risque ici, il y a un piège dans lequel les gens tombent très courant comme quoi par défaut, cette perte suppose que la sortie est des probabilités
après une couche softmax, mais ce que notre modèle a réellement produit est les valeurs avant le
softmax, souvent appelées logits. Vous les avez déjà vues dans les vidéos sur le pipeline.
Si vous vous trompez, votre modèle ne s'entraînera pas et il sera très ennuyeux de comprendre pourquoi.
Dans de prochaies vidéos, nous verrons comment utiliser les pertes internes au modèle, de sorte que vous n'aurez pas à spécifier de perte vous-même, vous n'aurez pas à vous soucier de ce détail. Mais pour maintenant n'oubliez pas de mettre `from_logits=True`
La deuxième chose que `.compile` doit savoir est l'optimiseur que vous voulez.
Dans notre cas, nous utilisons Adam, qui est en quelque sorte l'optimiseur standard en apprentissage profond de nos
jours.
La seule chose que vous voudrez peut-être changer est le taux d'apprentissage, et pour ce faire, nous
devrons importer l'optimiseur réel plutôt que de simplement l'appeler par chaîne, mais nous en
parlerons dans une autre vidéo, que j'indiquerais en dessous.
Pour l'instant, essayons simplement d'entraîner le modèle !
Alors, comment entraîner un modèle ?
Eh bien, si vous avez déjà utilisé Keras, tout cela vous sera très familier - mais
sinon, regardons ce que nous faisons ici.
`.fit()` est à peu près la méthode centrale pour les modèles Keras : elle indique au modèle de s'entraîner sur les modèles qu'on lui passe.
Donc ici nous passons le jeu de données que nous avons crée dans la section précédente. Il contient les entrées et les étiquettes.
Donc nous n'avons pas besoin de spécifier les étiquettes séparemment quand on appelle `.fit()`.
Puis nous faisons la même chose avec les données de validation et nous pouvons spécifier des détails comme le nombre d'epochs ou autre argument que l'on peut passer à `.fit()`.
A la fin, on passe le tout et on exécute.
Si tout fonctionne, vous devriez voir une petite barre de progression de l'entraînement au fur et à mesure que votre perte
diminue.
Et c'est tout. Pendant que cela tourne, vous pouvez appelez votre supérieur et lui dire que vous êtes maintenant un ingénieur en ML/NLP senior maintenant
et que vous allez vouloir une révision de salaire le trimestre prochain.
C'est vraiment tout ce qu'il faut pour appliquer la puissance d'un énorme modèle de langage pré-entraîné à
votre problème de NLP.
Pouvons-nous faire mieux que ça ?
Nous pourrions certainement, avec quelques fonctionnalités Keras plus avancées comme un taux d'apprentissage réglé et programmé,
nous pouvons obtenir une perte encore plus faible et un modèle encore plus précis.
Et qu'est-ce qu'on fait de notre modèle une fois qu'il est entraîné ?
Je couvrirai cela et plus encore dans les vidéos liées qui suivent donc restez connectés !