# 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()](/docs/datasets/main/fr/package_reference/loading_methods#datasets.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.md` qui 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()](/docs/datasets/main/fr/package_reference/loading_methods#datasets.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()](/docs/datasets/main/fr/package_reference/loading_methods#datasets.load_dataset) infère automatiquement comment charger les fichiers de données à partir de leurs extensions (json, csv, parquet, tsfile, txt, etc.). En interne, 🤗 Datasets utilise un [DatasetBuilder](/docs/datasets/main/fr/package_reference/builder_classes#datasets.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](/docs/datasets/main/fr/package_reference/loading_methods#datasets.packaged_modules.text.Text) pour le texte
* [datasets.packaged_modules.csv.Csv](/docs/datasets/main/fr/package_reference/loading_methods#datasets.packaged_modules.csv.Csv) pour les fichiers CSV et TSV
* [datasets.packaged_modules.json.Json](/docs/datasets/main/fr/package_reference/loading_methods#datasets.Json) pour JSON et JSONL
* [datasets.packaged_modules.parquet.Parquet](/docs/datasets/main/fr/package_reference/loading_methods#datasets.packaged_modules.parquet.Parquet) pour Parquet
* [datasets.packaged_modules.arrow.Arrow](/docs/datasets/main/fr/package_reference/loading_methods#datasets.packaged_modules.arrow.Arrow) pour Arrow (format de fichier en streaming)
* [datasets.packaged_modules.sql.Sql](/docs/datasets/main/fr/package_reference/loading_methods#datasets.packaged_modules.sql.Sql) pour les bases de données SQL
* [datasets.packaged_modules.tsfile.TsFile](/docs/datasets/main/fr/package_reference/loading_methods#datasets.packaged_modules.tsfile.TsFile) pour TsFile (données de séries temporelles)
* [datasets.packaged_modules.imagefolder.ImageFolder](/docs/datasets/main/fr/package_reference/loading_methods#datasets.packaged_modules.imagefolder.ImageFolder) pour les dossiers d'images
* [datasets.packaged_modules.audiofolder.AudioFolder](/docs/datasets/main/fr/package_reference/loading_methods#datasets.packaged_modules.audiofolder.AudioFolder) pour les dossiers audio

> [!TIP]
> Lisez la section [Partager](./upload_dataset) 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 qui sous-tendent tout cela.

## 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](/docs/datasets/main/fr/package_reference/builder_classes#datasets.BuilderConfig) et [DatasetBuilder](/docs/datasets/main/fr/package_reference/builder_classes#datasets.DatasetBuilder).

   

### BuilderConfig[[datasets-builderconfig]]

[BuilderConfig](/docs/datasets/main/fr/package_reference/builder_classes#datasets.BuilderConfig) est la classe de configuration de [DatasetBuilder](/docs/datasets/main/fr/package_reference/builder_classes#datasets.DatasetBuilder). Le [BuilderConfig](/docs/datasets/main/fr/package_reference/builder_classes#datasets.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](/docs/datasets/main/fr/package_reference/builder_classes#datasets.BuilderConfig). Il existe deux façons de définir les attributs d'une classe [BuilderConfig](/docs/datasets/main/fr/package_reference/builder_classes#datasets.BuilderConfig) ou d'une sous-classe :

- Fournir une liste d’instances prédéfinies de la classe [BuilderConfig](/docs/datasets/main/fr/package_reference/builder_classes#datasets.BuilderConfig) (ou d’une sous-classe) dans l’attribut `DatasetBuilder.BUILDER_CONFIGS()` des datasets.

- Lors de l’appel de [load_dataset()](/docs/datasets/main/fr/package_reference/loading_methods#datasets.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](/docs/datasets/main/fr/package_reference/builder_classes#datasets.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](/docs/datasets/main/fr/package_reference/builder_classes#datasets.BuilderConfig) sur n'importe quel sous-classe personnalisé de [BuilderConfig](/docs/datasets/main/fr/package_reference/builder_classes#datasets.BuilderConfig).

### DatasetBuilder[[datasets-datasetbuilder]]

[DatasetBuilder](/docs/datasets/main/fr/package_reference/builder_classes#datasets.DatasetBuilder) accède à tous les attributs de [BuilderConfig](/docs/datasets/main/fr/package_reference/builder_classes#datasets.BuilderConfig) pour construire le jeu de données.

   

Il existe trois méthodes principales dans [DatasetBuilder](/docs/datasets/main/fr/package_reference/builder_classes#datasets.DatasetBuilder) :

1. `DatasetBuilder._info()` est chargé de définir les attributs du jeu de données. Lorsque vous appelez `dataset.info`, 🤗 Datasets renvoie les informations stockées ici. De même, les [Features](/docs/datasets/main/fr/package_reference/main_classes#datasets.Features) sont également spécifiées ici. N’oubliez pas que les [Features](/docs/datasets/main/fr/package_reference/main_classes#datasets.Features) sont comme le squelette du jeu de données. Elles fournissent les noms et les types de chaque colonne.

2. `DatasetBuilder._split_generator` té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](/docs/datasets/main/fr/package_reference/builder_classes#datasets.DownloadManager) qui télécharge des fichiers ou les récupère depuis votre système de fichiers local. Au sein du [DownloadManager](/docs/datasets/main/fr/package_reference/builder_classes#datasets.DownloadManager), il existe une méthode [DownloadManager.download_and_extract()](/docs/datasets/main/fr/package_reference/builder_classes#datasets.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](/docs/datasets/main/fr/package_reference/builder_classes#datasets.SplitGenerator) les organise en splits. Le [SplitGenerator](/docs/datasets/main/fr/package_reference/builder_classes#datasets.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.

3. `DatasetBuilder._generate_examples` lit 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é dans `features` de `DatasetBuilder._info()`. L’entrée de `DatasetBuilder._generate_examples` est en réalité le `filepath` fourni 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'attribut `DEFAULT_WRITER_BATCH_SIZE` dans [DatasetBuilder](/docs/datasets/main/fr/package_reference/builder_classes#datasets.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()](/docs/datasets/main/fr/package_reference/loading_methods#datasets.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()](/docs/datasets/main/fr/package_reference/loading_methods#datasets.load_dataset) vérifie :

- Le nombre de partitions dans le `DatasetDict` généré.
- Le nombre d'échantillons dans chaque partie du `DatasetDict` gé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()](/docs/datasets/main/fr/package_reference/loading_methods#datasets.load_dataset). Chaque fois que vous voyez 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](https://huggingface.co/docs/hub/security#malware-scanning).

