subtitles/fr/09_what-happens-inside-the-pipeline-function-(tensorflow).srt (144 lines of code) (raw):
1
00:00:05,360 --> 00:00:07,680
Que se passe-t-il dans la fonction pipeline ?
2
00:00:09,840 --> 00:00:14,800
Dans cette vidéo, nous allons voir ce qui se passe réellement lorsque nous utilisons la fonction pipeline de
3
00:00:14,800 --> 00:00:20,880
la bibliothèque Transformers. Plus précisément, nous examinerons le pipeline d'analyse des sentiments et
4
00:00:20,880 --> 00:00:26,720
comment il est passé des deux phrases suivantes aux étiquettes positives et négatives avec leurs scores respectifs.
5
00:00:28,560 --> 00:00:34,160
Comme nous l'avons vu dans la présentation du pipeline, il y a trois étapes dans le pipeline. Tout d'abord,
6
00:00:34,800 --> 00:00:38,880
nous convertissons les textes bruts en nombres que le modèle peut comprendre, à l'aide d'un tokenizer.
7
00:00:40,000 --> 00:00:43,520
Ensuite, ces chiffres passent par le modèle, qui génère des logits.
8
00:00:44,400 --> 00:00:49,120
Enfin, les étapes de post-traitement transforment ces logits en étiquettes et scores.
9
00:00:50,720 --> 00:00:54,960
Examinons en détail ces trois étapes et comment les reproduire à l'aide de la bibliothèque Transformers, en
10
00:00:54,960 --> 00:01:03,280
commençant par la première étape, la tokenisation. Le processus de tokenisation comporte plusieurs étapes. Tout d'abord,
11
00:01:03,280 --> 00:01:09,120
le texte est divisé en petits morceaux appelés tokens. Il peut s'agir de mots, de parties de mots ou de
12
00:01:09,120 --> 00:01:17,440
symboles de ponctuation. Ensuite, le tokenizer aura des tokens spéciaux (si le modèle les attend). Ici, le modèle
13
00:01:17,440 --> 00:01:22,800
utilise attend un token [CLS] au début et un token [SEP] à la fin de la phrase à classer.
14
00:01:23,760 --> 00:01:28,880
Enfin, le tokenizer associe chaque token à son ID unique dans le vocabulaire du modèle pré-entraîné.
15
00:01:28,880 --> 00:01:34,640
Pour charger un tel tokenizer de tokens, la bibliothèque Transformers fournit l'API AutoTokenizer.
16
00:01:35,680 --> 00:01:40,640
La méthode la plus importante de cette classe est `from_pretrained`, qui téléchargera et mettra en cache
17
00:01:40,640 --> 00:01:47,200
la configuration et le vocabulaire associés à un checkpoint donné. Ici, le checkpoint utilisé
18
00:01:47,200 --> 00:01:53,840
par défaut pour le pipeline d'analyse des sentiments est `distilbert base uncased finetuned sst2 english`.
19
00:01:56,560 --> 00:02:01,440
Nous instancions un tokenizer associé à ce checkpoint, puis lui envoyons les deux phrases.
20
00:02:02,640 --> 00:02:07,360
Étant donné que ces deux phrases n'ont pas la même taille, nous devrons remplir la plus courte pour
21
00:02:07,360 --> 00:02:11,680
être en mesure de créer un tableau. Cette opération est effectuée par le tokenizer avec l'option `padding=True`.
22
00:02:13,840 --> 00:02:18,960
Avec `truncation=True`, nous nous assurons que toute phrase plus longue que le maximum que le modèle peut gérer
23
00:02:18,960 --> 00:02:25,600
est tronquée. Enfin, l'option `return_tensors` indique au tokenizer de renvoyer un tenseur TensorFlow.
24
00:02:26,720 --> 00:02:29,680
En regardant le résultat, nous voyons que nous avons un dictionnaire avec deux clés.
25
00:02:30,240 --> 00:02:37,280
Les ID d'entrée contiennent les ID des deux phrases, avec des 0 où le rembourrage est appliqué. La deuxième clé,
26
00:02:37,280 --> 00:02:42,080
masque d'attention, indique où le rembourrage a été appliqué, de sorte que le modèle n'y prête pas
27
00:02:42,080 --> 00:02:48,000
attention. C'est tout ce qui se trouve à l'intérieur de l'étape de tokenisation. Examinons maintenant la deuxième étape,
28
00:02:48,640 --> 00:02:54,960
le modèle. Comme pour le tokenizer, il existe une API TFAutoModel, avec une méthode `from_pretrained`.
29
00:02:55,600 --> 00:02:59,840
Il téléchargera et mettra en cache la configuration du modèle ainsi que les pondérations pré-entraînées.
30
00:02:59,840 --> 00:03:05,600
Cependant, l'API TFAutoModel n'instanciera que le corps du modèle,
31
00:03:06,320 --> 00:03:10,640
c'est-à-dire la partie du modèle qui reste une fois la tête de pré-entraînement retirée.
32
00:03:12,000 --> 00:03:16,960
Il produira un tenseur de grande dimension qui est une représentation des phrases passées,
33
00:03:16,960 --> 00:03:20,080
mais qui n'est pas directement utile pour notre problème de classification.
34
00:03:21,760 --> 00:03:28,080
Ici, le tenseur a deux phrases, chacune de 16 tokens et la dernière dimension est la taille cachée
35
00:03:28,080 --> 00:03:34,320
de notre modèle 768. Pour obtenir une sortie liée à notre problème de classification, nous devons
36
00:03:34,320 --> 00:03:40,000
utiliser la classe TFAutoModelForSequenceClassification. Elle fonctionne exactement comme la classe AutoModel,
37
00:03:40,000 --> 00:03:45,440
sauf qu'elle créera un modèle avec une tête de classification. Il existe une classe automatique pour
38
00:03:45,440 --> 00:03:52,160
chaque tâche NLP courante dans la bibliothèque Transformers. Ici, après avoir donné à notre modèle les deux phrases,
39
00:03:52,160 --> 00:03:59,120
nous obtenons un tenseur de taille 2 par 2 : un résultat pour chaque phrase et pour chaque étiquette possible. Ces
40
00:03:59,120 --> 00:04:04,800
sorties ne sont pas encore des probabilités (nous pouvons voir qu'elles ne somment pas à 1). En effet, chaque modèle de la
41
00:04:04,800 --> 00:04:10,960
bibliothèque Transformers renvoie des logits. Pour donner un sens à ces logits, nous devons approfondir la troisième et
42
00:04:10,960 --> 00:04:17,520
dernière étape du pipeline : le post-traitement. Pour convertir les logits en probabilités, nous devons leur
43
00:04:17,520 --> 00:04:22,800
appliquer une couche SoftMax. Comme nous pouvons le voir, cela les transforme en nombres positifs qui
44
00:04:22,800 --> 00:04:28,160
somment à 1. La dernière étape consiste à savoir lequel d'entre eux correspond à l'étiquette positive ou négative.
45
00:04:28,160 --> 00:04:34,720
Ceci est donné par le champ `id2label` de la configuration du modèle. Les premières probabilités
46
00:04:34,720 --> 00:04:40,800
(indice 0) correspondent à l'étiquette négative et les secondes (indice 1) correspondent à l'
47
00:04:40,800 --> 00:04:46,640
étiquette positive. C'est ainsi que notre classifieur construit avec la fonction de pipeline a sélectionné ces étiquettes et calculé
48
00:04:46,640 --> 00:04:55,840
ces scores. Maintenant que vous connaissez le fonctionnement de chaque étape, vous pouvez facilement les adapter à vos besoins.