1 00:00:05,520 --> 00:00:09,360 Dans cette vidéo, nous examinons le traitement des données nécessaire pour entraîner 2 00:00:09,360 --> 00:00:15,920 des modèles de langage causal. La modélisation du langage causal consiste à prédire le token suivant en fonction 3 00:00:15,920 --> 00:00:20,880 du token précédent. Un autre terme pour la modélisation du langage causal est la modélisation autorégressive. 4 00:00:21,760 --> 00:00:26,560 Dans l'exemple que vous voyez ici, le token suivant pourrait par exemple être « NLP » 5 00:00:26,560 --> 00:00:33,280 ou « apprentissage automatique ». Un exemple populaire de modèle de langage causal est la famille de modèles GPT. 6 00:00:35,680 --> 00:00:40,400 Pour entraîner des modèles tels que GPT-2, nous commençons généralement avec un grand corpus de fichiers texte. 7 00:00:41,280 --> 00:00:45,760 Ces fichiers peuvent être des pages Web extraites d'Internet, telles que le jeu de données Common Crawl, 8 00:00:45,760 --> 00:00:51,920 ou des fichiers Python de GitHub, comme vous pouvez le voir ici. Dans un premier temps, nous devons tokeniser 9 00:00:51,920 --> 00:00:57,520 ces fichiers afin de pouvoir les donner au modèle. Ici, nous montrons les textes tokenisés sous forme de barres de 10 00:00:57,520 --> 00:01:06,000 illustrant qu'ils y en a des longs et des courts. Ceci est trian commun lorsque l'on travail avec du texte. 11 00:01:06,000 --> 00:01:07,440 Cependant les transformers ont une 12 00:01:07,440 --> 00:01:12,960 longueur de contexte limitée et, selon la source de données, il est possible que les textes tokenisés 13 00:01:12,960 --> 00:01:18,640 soient beaucoup plus longs que cette longueur de contexte. Dans ce cas, nous pourrions simplement tronquer la séquence 14 00:01:18,640 --> 00:01:24,160 à la longueur du contexte, mais cela signifierait que nous perdons tout après la longueur du contexte. 15 00:01:25,360 --> 00:01:30,960 À l'aide de `return_overflowing_tokens`, nous pouvons utiliser le tokenizer pour créer des morceaux 16 00:01:30,960 --> 00:01:36,960 chacun étant de la taille de la longueur du contexte. Parfois, il peut arriver que le dernier morceau soit 17 00:01:36,960 --> 00:01:41,440 trop court s'il n'y a pas assez de tokens pour le remplir. Dans ce cas, nous aimerions le supprimer. 18 00:01:43,440 --> 00:01:48,800 Avec le mot-clé `return_length`, nous obtenons également la longueur de chaque bloc du tokenizer. 19 00:01:51,760 --> 00:01:57,280 Cette fonction affiche toutes les étapes nécessaires pour préparer le jeu de données. D'abord, nous tokenisons le 20 00:01:57,280 --> 00:02:03,520 jeu de données avec les indicateurs que je viens de mentionner. Ensuite, nous parcourons chaque morceau et si sa longueur correspond à 21 00:02:03,520 --> 00:02:08,960 la longueur du contexte, nous l'ajoutons aux entrées que nous renvoyons. Nous pouvons appliquer cette fonction à l'ensemble du jeu de 22 00:02:08,960 --> 00:02:17,520 données et nous nous assurons d'utiliser des batchs et de supprimer les colonnes existantes. Nous devons supprimer des colonnes 23 00:02:17,520 --> 00:02:23,280 car nous pouvons créer plusieurs échantillons par texte et les formes du jeu de données ne correspondraient pas dans ce cas. 24 00:02:26,960 --> 00:02:32,400 Si la longueur du contexte est similaire à celle des fichiers, cette approche ne fonctionne plus aussi bien. 25 00:02:33,520 --> 00:02:39,440 Dans cet exemple, les échantillons 1 et 2 sont plus courts que la taille du contexte et seraient ignorés avec 26 00:02:39,440 --> 00:02:46,400 l'approche précédente. Dans ce cas, il est préférable de commencer par segmenter chaque échantillon sans troncature 27 00:02:46,400 --> 00:02:52,000 puis de concaténer les échantillons segmentés avec un token de fin de chaîne, ou « EOS », entre les deux. 28 00:02:53,840 --> 00:02:57,440 Enfin, nous pouvons fragmenter cette longue séquence avec la longueur du contexte 29 00:02:57,440 --> 00:03:05,840 et nous ne perdons aucune séquence car elles sont trop courtes. Jusqu'à présent, nous n'avons parlé que 30 00:03:05,840 --> 00:03:10,720 des entrées pour la modélisation du langage causal, mais pas des étiquettes nécessaires à l'entraînement supervisée. 31 00:03:11,600 --> 00:03:16,480 Lorsque nous effectuons une modélisation du langage causal, nous n'avons pas besoin d'étiquettes supplémentaires pour les séquences d'entrée 32 00:03:16,480 --> 00:03:22,080 car les séquences d'entrée elles-mêmes sont les étiquettes. Dans cet exemple, lorsque nous transmettons 33 00:03:22,080 --> 00:03:26,560 le token « Trans » au prochain token que nous voulons que le modèle prédise est « formers ». 34 00:03:27,280 --> 00:03:33,360 À l'étape suivante, nous donnons « Trans » et « formers » au modèle et l'étiquette que nous voulons prédire est « are ». 35 00:03:35,280 --> 00:03:42,400 Ce schéma se poursuit et, comme vous pouvez le voir, la séquence d'entrée est l'étiquette qui vient d'être décalée d'une unité. 36 00:03:43,440 --> 00:03:48,000 Étant donné que le modèle n'effectue une prédiction qu'après le premier token, le premier élément 37 00:03:48,000 --> 00:03:54,480 de la séquence d'entrée, dans ce cas « Trans », n'est pas utilisé comme étiquette. De même, nous n'avons pas 38 00:03:54,480 --> 00:04:00,400 d'étiquette pour le dernier token de la séquence puisqu'il n'y a pas de token après la fin de la séquence. 39 00:04:03,920 --> 00:04:09,200 Voyons ce que nous devons faire pour créer les étiquettes pour la modélisation du langage causal dans le code. Si 40 00:04:10,160 --> 00:04:15,600 nous voulons calculer la perte sur un batch, nous pouvons simplement transmettre les `input_ids` en tant qu'étiquettes et tout le 41 00:04:15,600 --> 00:04:19,432 décalage est géré dans le modèle en interne. 42 00:04:19,432 --> 00:04:21,600 Donc vous voyez qu'il n'y a pas de magie 43 00:04:21,600 --> 00:04:27,840 impliquée dans le traitement des données pour la modélisation du langage causal et ne nécessite que quelques étapes simples !