Comment découper et trancher un jeu de données.
La plupart du temps, les données avec lesquelles vous travaillez ne sont pas parfaitement préparées pour les modèles d'entraînement.
Dans cette vidéo, nous allons explorer différentes fonctionnalités fournies par Datasets pour nettoyer vos données.
La bibliothèque Datasets fournit plusieurs méthodes intégrées qui vous permettent d'organiser vos données de diverses manières.
Dans cette vidéo, nous verrons comment mélanger et diviser vos données, sélectionner les lignes qui vous
intéressent, modifier les colonnes et appliquer des fonctions de traitement avec la méthode `map()`.
Commençons par mélanger. C'est généralement une bonne idée d'appliquer un mélange au jeu d'entraînement
afin que votre modèle n'apprenne aucun classement artificiel dans les données.
Si vous souhaitez mélanger l'intégralité de le jeu de données, vous pouvez appliquer la méthode `shuffle()` correctement nommée
à votre jeu de données. Vous pouvez voir un exemple de cette méthode en action ici, où nous avons téléchargé
l'échantillon d'entraînement du jeu de données SQUAD et mélangé toutes les lignes de manière aléatoire. Une autre
façon de mélanger les données consiste à créer des échantillons d'entraînement et de test aléatoires.
Cela peut être utile si vous devez créer vos propres échantillons de test à partir de données brutes. Pour ce faire, il vous suffit
d'appliquer la méthode `train_test_split` et de spécifier la taille de la répartition de test. Dans cet exemple,
nous avons spécifié que le jeu de test doit représenter 10 % de la taille totale du jeu de données. Vous pouvez voir que
la sortie de `train_test_split` est un objet `DatasetDict`, dont les clés correspondent aux nouveaux échantillons.
Maintenant que nous savons comment mélanger un jeu de données, examinons comment renvoyer les lignes qui
nous intéressent. La méthode la plus courante consiste à utiliser la méthode `select`.
Cette méthode attend une liste ou un générateur d'indices du jeu de données,
et renverra ensuite un nouvel objet Dataset contenant uniquement ces lignes.
Si vous souhaitez créer un échantillon aléatoire de lignes, vous pouvez le faire en enchaînant les méthodes de mélange et de sélection
Dans cet exemple, nous avons créé un échantillon de cinq éléments à partir du jeu de données SQuAD.
La dernière façon de sélectionner des lignes spécifiques dans un jeu de données consiste à appliquer la méthode `filter`.
Cette méthode vérifie si chaque ligne remplit une condition ou non.
Par exemple, nous avons créé ici une petite fonction lambda qui vérifie si le
titre commence par la lettre « L ». Une fois que nous appliquons cette fonction avec la méthode `filter`,
nous obtenons un sous-ensemble de données composé uniquement de ces lignes.
Jusqu'à présent, nous avons parlé des lignes d'un jeu de données, mais qu'en est-il des colonnes ?
La bibliothèque Datasets propose deux méthodes principales pour transformer les colonnes :
une méthode `rename_column` pour modifier le nom d'une colonne,
et une méthode `remove_columns` pour les supprimer. Vous pouvez voir des exemples de ces deux méthodes ici.
Certains jeux de données ont des colonnes imbriquées et vous pouvez les développer en appliquant la méthode `flatten`.
Par exemple, dans le jeu de données SQUAD, la colonne des réponses contient un texte et un champ answer_start.
Si nous voulons les promouvoir dans leurs propres colonnes distinctes, nous pouvons appliquer `flatten` comme indiqué ici.
Bien sûr, aucune discussion sur la bibliothèque Datasets ne serait complète sans mentionner la
fameuse méthode `map`. Cette méthode applique une fonction de traitement personnalisée à chaque ligne du jeu de données.
Par exemple, ici, nous définissons d'abord une fonction `lowercase_title` qui met simplement le texte en minuscules dans la
colonne de titre, puis nous transmettons cela à la méthode `map` et voilà ! Nous avons maintenant des titres en minuscules.
La méthode `map` peut également être utilisée pour fournir des batchs de lignes à la fonction de traitement.
Ceci est particulièrement utile pour la tokenisation, où les tokenizers sont soutenus par la
bibliothèque Tokenizers peut utiliser le multithreading rapide pour traiter les batchs en parallèle.