1
00:00:05,680 --> 00:00:12,000
L'étape de post-traitement d'une tâche de réponse aux questions. Lors de la réponse aux questions,

2
00:00:12,000 --> 00:00:17,440
le traitement du jeu de données initial implique de diviser les exemples en plusieurs caractéristiques, qui

3
00:00:17,440 --> 00:00:23,760
peuvent ou non contenir la réponse. Passer ces caractéristiques à travers le modèle nous donnera des logits pour

4
00:00:23,760 --> 00:00:29,280
les positions de début et de fin, puisque nos étiquettes sont les indices des tokens qui correspondent au

5
00:00:29,280 --> 00:00:35,600
début et à la fin de la réponse. Nous devons ensuite ces logits en une réponse, puis

6
00:00:35,600 --> 00:00:40,480
choisir l'une des différentes réponses que chaque caractéristique donne pour être LA réponse pour un exemple donné.

7
00:00:42,080 --> 00:00:46,080
Pour l'étape de traitement, vous devez vous référer à la vidéo ci-dessous. Ce n'est pas très

8
00:00:46,080 --> 00:00:50,240
différent pour la validation, nous avons juste besoin d'ajouter quelques lignes pour garder une trace de deux choses :

9
00:00:51,440 --> 00:00:56,000
au lieu de supprimer la correspondance de décalage, nous les conservons, et y incluons également les

10
00:00:56,000 --> 00:01:01,440
informations sur l'emplacement du contexte en définissant les décalages de les tokens spéciaux et la question

11
00:01:01,440 --> 00:01:06,400
sur `None`. Puis, nous gardons aussi une trace de l'`exemple_id`` pour chaque caractéristique,

12
00:01:06,400 --> 00:01:10,160
afin de pouvoir faire correspondre la caractéristique aux exemples dont elle est issue.

13
00:01:11,680 --> 00:01:15,840
Si vous ne souhaitez pas calculer la perte de validation, vous n'aurez pas besoin d'inclure tout le code spécial

14
00:01:15,840 --> 00:01:21,360
que nous avons utilisé pour créer les étiquettes. Ceci fait, nous pouvons appliquer cette fonction de prétraitement à l'aide de la

15
00:01:21,360 --> 00:01:26,160
méthode `map`. Nous prenons le jeu de données SQUAD comme dans la vidéo « Traitement des données pour la réponse aux questions ».

16
00:01:27,520 --> 00:01:31,920
Une fois cela fait, l'étape suivante consiste à créer notre modèle. Nous utilisons ici le modèle par défaut du

17
00:01:31,920 --> 00:01:36,000
pipeline de réponses aux questions, mais vous devez utiliser n'importe quel modèle que vous souhaitez évaluer.

18
00:01:36,720 --> 00:01:41,200
Nous allons exécuter une boucle d'évaluation manuelle, nous créons donc un PyTorch DataLoader avec nos caractéristiques.

19
00:01:42,240 --> 00:01:46,400
Avec lui, nous pouvons calculer et rassembler tous les logits de début et de fin comme celui-ci,

20
00:01:46,400 --> 00:01:52,240
avec une boucle d'évaluation PyTorch standard. Ceci fait, nous pouvons vraiment plonger dans le post-traitement.

21
00:01:53,680 --> 00:01:57,440
Nous aurons besoin d'une correspondance des exemples aux caractéristiques, que nous pouvons créer comme ceci.

22
00:01:58,560 --> 00:02:02,720
Maintenant, pour la partie principale du post-traitement, voyons comment extraire une réponse des

23
00:02:02,720 --> 00:02:08,480
logits. Nous pourrions simplement prendre le meilleur indice pour les logits de début et de fin et terminer, mais si notre modèle

24
00:02:08,480 --> 00:02:13,200
prédit quelque chose d'impossible, comme des tokens dans la question, nous examinerons davantage de logits.

25
00:02:15,040 --> 00:02:19,120
Notez que dans le pipeline de réponses aux questions, nous avons attribué un score à chaque réponse en fonction des

26
00:02:19,120 --> 00:02:24,560
probabilités, que nous n'avons pas calculées ici. En termes de logits, la multiplication que nous avions

27
00:02:24,560 --> 00:02:31,520
dans les scores devient une addition. Pour aller vite, nous ne regardons pas tous les logits de début et de fin possibles,

28
00:02:31,520 --> 00:02:37,120
mais les vingt meilleurs suffissent. Nous ignorons les logits qui génèrent des réponses impossibles ou des réponses

29
00:02:37,120 --> 00:02:43,040
trop longues. Comme nous l'avons vu dans le prétraitement, les étiquettes (0, 0) correspondent à aucune réponse,

30
00:02:43,040 --> 00:02:48,400
sinon nous utilisons les décalages pour obtenir la réponse à l'intérieur du contexte. Examinons la

31
00:02:48,400 --> 00:02:52,640
réponse prédite pour la première caractéristique, qui est la réponse avec le meilleur score (ou le meilleur

32
00:02:52,640 --> 00:02:58,720
score logit puisque la SoftMax est une fonction croissante). Le modèle a bien compris ! Ensuite, nous

33
00:02:58,720 --> 00:03:03,920
devons simplement boucler cela pour chaque exemple, en choisissant pour chacun la réponse avec le meilleur score logit dans toutes

34
00:03:03,920 --> 00:03:15,440
les caractéristiques générées par l'exemple. Vous savez maintenant comment obtenir des réponses à partir des prédictions de votre modèle !