Datasets documentation
Construire et charger
Construire et charger
Presque tout flux de travail en deep learning commence par le chargement d’un jeu de données, ce qui en fait l’une des étapes les plus importantes. Avec 🤗 Datasets, plus de 900 jeux de données sont disponibles pour vous aider à démarrer votre tâche de NLP. Il vous suffit d’appeler load_dataset() pour faire votre premier pas. Cette fonction est un véritable cheval de trait au sens propre comme au figuré, car elle construit et charge chaque jeu de données que vous utilisez.
ELI5 : load_dataset
Commençons par une explication simple, comme si on avait cinq ans.
Un jeu de données est un répertoire qui contient :
- Certains fichiers de données au format générique (JSON, CSV, Parquet, texte, etc.)
- Une carte de jeu de données nommée
README.mdqui contient la documentation du jeu de données ainsi qu'un en-tête YAML pour définir les balises et les configurations des jeux de données
La fonction load_dataset() récupère le jeu de données demandé localement ou depuis le Hugging Face Hub. Le Hub est un dépôt central où sont stockés tous les jeux de données et modèles de Hugging Face.
Si le jeu de données ne contient que des fichiers de données, load_dataset() infère automatiquement comment charger les fichiers de données à partir de leurs extensions (json, csv, parquet, tsfile, txt, etc.). Sous le capot, 🤗 Datasets utilisera un DatasetBuilder approprié en fonction du format des fichiers de données. Il existe un builder par format de fichier de données dans 🤗 Datasets :
- datasets.packaged_modules.text.Text pour le texte
- datasets.packaged_modules.csv.Csv pour les fichiers CSV et TSV
- datasets.packaged_modules.json.Json pour JSON et JSONL
- datasets.packaged_modules.parquet.Parquet pour Parquet
- datasets.packaged_modules.arrow.Arrow pour Arrow (format de fichier en streaming)
- datasets.packaged_modules.sql.Sql pour les bases de données SQL
- datasets.packaged_modules.tsfile.TsFile pour TsFile (données de séries temporelles)
- datasets.packaged_modules.imagefolder.ImageFolder pour les dossiers d'images
- datasets.packaged_modules.audiofolder.AudioFolder pour les dossiers audio
Lisez la section Partager pour en savoir plus sur la manière de partager un jeu de données.
🤗 Datasets télécharge les fichiers du jeu de données depuis l’URL d’origine, génère le jeu de données et le met en cache dans une table Arrow sur votre disque. Si vous avez déjà téléchargé le jeu de données, 🤗 Datasets le recharge depuis le cache pour vous éviter de le télécharger à nouveau.
Maintenant que vous avez une compréhension générale de la manière dont les jeux de données sont construits, examinons de plus près les mécanismes concrets qui rendent tout cela possible.
Créer un jeu de données
Lorsque vous chargez un jeu de données pour la première fois, 🤗 Datasets prend le fichier de données brut et le construit en une table de lignes et de colonnes typées. Deux classes principales sont responsables de la construction d'un jeu de données : BuilderConfig et DatasetBuilder.

BuilderConfig
BuilderConfig est la classe de configuration de DatasetBuilder. Le BuilderConfig contient les attributs de base suivants concernant un jeu de données :
| Attribut | Description |
|---|---|
name | Nom court du jeu de données. |
version | Identifiant de version du jeu de données. |
data_dir | Stocke le chemin vers un dossier local contenant les fichiers de données. |
data_files | Stocke les chemins vers les fichiers de données locaux. |
description | Description du jeu de données. |
Si vous souhaitez ajouter des attributs supplémentaires à votre jeu de données, tels que les étiquettes de classe, vous pouvez sous-classez la classe de base BuilderConfig. Il existe deux façons de définir les attributs d'une classe BuilderConfig ou d'une sous-classe :
Fournir une liste d’instances prédéfinies de la classe BuilderConfig (ou d’une sous-classe) dans l’attribut
DatasetBuilder.BUILDER_CONFIGS()des datasets.Lors de l’appel de load_dataset(), les arguments par mot-clé qui ne sont pas spécifiques à la méthode sont utilisés pour définir les attributs associés de la classe BuilderConfig. Cela écrase les attributs prédéfinis si une configuration spécifique a été sélectionnée.
Vous pouvez également définir DatasetBuilder.BUILDER_CONFIG_CLASS sur n'importe quel sous-classe personnalisé de BuilderConfig.
DatasetBuilder
DatasetBuilder accède à tous les attributs de BuilderConfig pour construire le jeu de données.

Il existe trois méthodes principales dans DatasetBuilder :
DatasetBuilder._info()est chargé de définir les attributs du jeu de données. Lorsque vous appelezdataset.info, 🤗 Datasets renvoie les informations stockées ici. De même, les Features sont également spécifiées ici. N’oubliez pas que les Features sont comme le squelette du jeu de données. Elles fournissent les noms et les types de chaque colonne.DatasetBuilder._split_generatortélécharge ou récupère les fichiers de données demandés, les organise en splits et définit des arguments spécifiques pour le processus de génération. Cette méthode possède un DownloadManager qui télécharge des fichiers ou les récupère depuis votre système de fichiers local. Au sein du DownloadManager, il existe une méthode DownloadManager.download_and_extract() qui accepte un dictionnaire d’URL vers les fichiers de données d’origine et télécharge les fichiers demandés. Les entrées acceptées incluent : une URL ou un chemin unique, ou une liste/un dictionnaire d’URL ou de chemins. Tous les types de fichiers compressés tels que les archives TAR, GZIP et ZIP seront automatiquement extraits.Une fois les fichiers téléchargés, SplitGenerator les organise en splits. Le SplitGenerator contient le nom du split ainsi que les arguments par mot-clé fournis à la méthode
DatasetBuilder._generate_examples. Ces arguments par mot-clé peuvent être spécifiques à chaque split et comprennent généralement au moins le chemin local des fichiers de données pour chaque split.DatasetBuilder._generate_exampleslit et analyse les fichiers de données d’une partition. Il génère ensuite des exemples de jeu de données conformément au format spécifié dansfeaturesdeDatasetBuilder._info(). L’entrée deDatasetBuilder._generate_examplesest en réalité lefilepathfourni dans les arguments par mot-clé de la dernière méthode.Le jeu de données est généré par un générateur Python, qui ne charge pas toutes les données en mémoire. En conséquence, le générateur peut traiter de grands jeux de données. Toutefois, avant que les échantillons générés ne soient écrits dans le fichier du jeu de données sur le disque, ils sont stockés dans un tampon
ArrowWriter. Cela signifie que les échantillons générés sont écrits par lot. Si les échantillons de votre jeu de données consomment beaucoup de mémoire (images ou vidéos), veillez à spécifier une valeur faible pour l’attributDEFAULT_WRITER_BATCH_SIZEdans DatasetBuilder. Nous recommandons de ne pas dépasser une taille de 200 Mo.
Maintenir l'intégrité
Pour s’assurer qu’un jeu de données est complet, load_dataset() effectue une série de tests sur les fichiers téléchargés afin de vérifier que tout est présent. Ainsi, vous évitez toute surprise lorsque le jeu de données demandé n’est pas généré comme prévu. load_dataset() vérifie :
- Le nombre de partitions dans le
DatasetDictgénéré. - Le nombre d'échantillons dans chaque partie du
DatasetDictgénéré. - La liste des fichiers téléchargés.
- Les sommes de contrôle SHA256 des fichiers téléchargés (désactivées par défaut).
Si le jeu de données ne passe pas les vérifications, il est probable que l’auteur du jeu de données ait apporté des modifications aux fichiers de données.
Dans ce cas, une erreur est levée pour signaler que le jeu de données a changé.
Pour ignorer l’erreur, il faut spécifier verification_mode="no_checks" dans load_dataset().
Chaque fois que vous rencontrez une erreur de vérification, n’hésitez pas à ouvrir une discussion ou une pull request dans l’onglet « Community » du jeu de données concerné, afin que les contrôles d’intégrité de ce jeu de données soient mis à jour.
Sécurité
Les dépôts de jeux de données sur le Hub sont scannés à la recherche de logiciels malveillants, plus d'informations ici.
Update on GitHub