Datasets documentation

Créer un jeu de données

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Créer un jeu de données

Parfois, vous devez créer un jeu de données si vous travaillez avec vos propres données. La création d’un jeu de données avec 🤗 Datasets confère à celui-ci tous les avantages de la bibliothèque : chargement et traitement rapides, flux de jeux de données énormes, memory-mapping, et plus encore. Vous pouvez créer un jeu de données facilement et rapidement grâce aux approches low-code de 🤗 Datasets, réduisant ainsi le temps nécessaire pour commencer à entraîner un modèle. Dans de nombreux cas, il suffit de glisser-déposer vos fichiers de données dans un dépôt de jeu de données sur le Hub.

Dans ce tutoriel, vous apprendrez à utiliser les méthodes low-code de 🤗 Datasets pour créer des jeux de données à partir de vos propres données.

Remarque

Si vous souhaitez apprendre à charger des jeux de données existants, ou à charger des fichiers locaux et distants (CSV, JSON, Parquet, etc.), consultez le guide de chargement.

Ce tutoriel aborde :

  • Constructeurs basés sur des dossiers pour créer rapidement un jeu de données d'images ou d'audio
  • méthodes from_ pour créer des jeux de données à partir d'objets Python locaux

Constructeurs basés sur des fichiers

🤗 Datasets prend en charge de nombreux formats courants tels que csv, json/jsonl, parquet, txt.

Par exemple, il peut lire un jeu de données composé d'un ou de plusieurs fichiers CSV (dans ce cas, passez vos fichiers CSV sous forme de liste) :

>>> from datasets import load_dataset
>>> dataset = load_dataset("csv", data_files="my_file.csv")

Pour obtenir la liste des formats pris en charge et des exemples de code, suivez ce guide ici.

Constructeurs basés sur des dossiers

Deux constructeurs basés sur des dossiers existent : ImageFolder et AudioFolder. Il s’agit de méthodes à faible code permettant de créer rapidement un jeu de données d’images ou de parole et d’audio comptant plusieurs milliers d’exemples. Ils sont idéaux pour prototyper rapidement des modèles de vision par ordinateur et de traitement de la parole avant de passer à un jeu de données plus volumineux. Les constructeurs basés sur des dossiers prennent vos données et génèrent automatiquement les caractéristiques, les partitions et les étiquettes du jeu de données. En interne :

  • ImageFolder utilise la fonctionnalité Image pour décoder un fichier image. De nombreux formats d’extensions d’images sont pris en charge, tels que jpg et png, mais d’autres formats sont également supportés. Vous pouvez consulter la liste complète des extensions d’images prises en charge.
  • AudioFolder utilise la fonctionnalité Audio pour décoder un fichier audio. Les extensions telles que wav, mp3 et même mp4 sont prises en charge, et vous pouvez consulter la liste complète des extensions audio supportées. Le décodage est effectué via ffmpeg.

Les divisions du jeu de données sont générées à partir de la structure du dépôt, et les noms des étiquettes sont inférés automatiquement à partir du nom du répertoire.

Par exemple, si votre jeu de données d'images (il en va de même pour un jeu de données audio) est stocké de la manière suivante :

pokemon/train/grass/bulbasaur.png
pokemon/train/fire/charmander.png
pokemon/train/water/squirtle.png

pokemon/test/grass/ivysaur.png
pokemon/test/fire/charmeleon.png
pokemon/test/water/wartortle.png

Voici comment le constructeur basé sur des dossiers génère un exemple :

Créez le jeu de données d’images en spécifiant imagefolder dans load_dataset() :

>>> from datasets import load_dataset

>>> dataset = load_dataset("imagefolder", data_dir="/path/to/pokemon")

Un jeu de données audio est créé de la même manière, à l’exception du fait que vous spécifiez audiofolder dans load_dataset() à la place :

>>> from datasets import load_dataset

>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")

Toute information supplémentaire sur votre jeu de données, telle que des légendes ou des transcriptions, peut être incluse dans un fichier metadata.csv situé dans le dossier contenant votre jeu de données. Le fichier de métadonnées doit comporter une colonne file_name qui associe le fichier image ou audio à ses métadonnées correspondantes :

file_name, text
bulbasaur.png, There is a plant seed on its back right from the day this Pokémon is born.
charmander.png, It has a preference for hot things.
squirtle.png, When it retracts its long neck into its shell, it squirts out water with vigorous force.

Pour en savoir plus sur chacun de ces constructeurs basés sur des dossiers, consultez les guides ImageFolder, AudioFolder ou MeshFolder.

À partir de dictionnaires Python

Vous pouvez également créer un jeu de données à partir de données contenues dans des dictionnaires Python. Il existe deux façons de créer un jeu de données à l'aide des méthodes from_ :

  • La méthode from_generator() est la façon la plus efficace en termes de mémoire de créer un jeu de données à partir d'un generator, en raison du comportement itératif des générateurs. C'est particulièrement utile lorsque vous travaillez avec un jeu de données très volumineux qui ne peut pas tenir en mémoire, car le jeu de données est généré progressivement sur le disque puis mappé en mémoire.

    >>> from datasets import Dataset
    >>> def gen():
    ...     yield {"pokemon": "bulbasaur", "type": "grass"}
    ...     yield {"pokemon": "squirtle", "type": "water"}
    >>> ds = Dataset.from_generator(gen)
    >>> ds[0]
    {"pokemon": "bulbasaur", "type": "grass"}

    Un IterableDataset basé sur un générateur doit être itéré, par exemple avec une boucle for :

    >>> from datasets import IterableDataset
    >>> ds = IterableDataset.from_generator(gen)
    >>> for example in ds:
    ...     print(example)
    {"pokemon": "bulbasaur", "type": "grass"}
    {"pokemon": "squirtle", "type": "water"}
  • La méthode from_dict() est un moyen simple de créer un jeu de données à partir d'un dictionnaire :

    >>> from datasets import Dataset
    >>> ds = Dataset.from_dict({"pokemon": ["bulbasaur", "squirtle"], "type": ["grass", "water"]})
    >>> ds[0]
    {"pokemon": "bulbasaur", "type": "grass"}

    Pour créer un jeu de données d’images ou d’audio, enchaînez la méthode cast_column() avec from_dict() et spécifiez la colonne et le type de fonctionnalité. Par exemple, pour créer un jeu de données audio :

    >>> audio_dataset = Dataset.from_dict({"audio": ["path/to/audio_1", ..., "path/to/audio_n"]}).cast_column("audio", Audio())

Maintenant que vous savez comment créer un jeu de données, envisagez de le partager sur le Hub afin que la communauté puisse également bénéficier de votre travail ! Passez à la section suivante pour apprendre à partager votre jeu de données.

Update on GitHub