Datasets documentation

Crear un conjunto de datos

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

Crear un conjunto de datos

A veces, es posible que necesites crear un conjunto de datos si trabajas con tus propios datos. Crear un conjunto de datos con 🤗 Datasets otorga a tu conjunto de datos todas las ventajas de la biblioteca: carga y procesamiento rápidos, transmisión de conjuntos de datos enormes, mapeo de memoria y más. Puedes crear un conjunto de datos de forma fácil y rápida con los enfoques de bajo código de 🤗 Datasets, reduciendo el tiempo necesario para comenzar a entrenar un modelo. En muchos casos, es tan sencillo como arrastrar y soltar tus archivos de datos en un repositorio de conjuntos de datos en el Hub.

En este tutorial, aprenderás a usar los métodos de bajo código de 🤗 Datasets para crear conjuntos de datos a partir de tus propios datos.

Nota

Si quieres aprender a cargar conjuntos de datos existentes, o a cargar archivos locales y remotos (CSV, JSON, Parquet, etc.), consulta la Guía de carga.

Este tutorial cubre:

  • Constructores basados en carpetas para crear rápidamente un conjunto de datos de imágenes o audio
  • métodos from_ para crear conjuntos de datos a partir de objetos Python locales

Constructores basados en archivos

🤗 Datasets admite muchos formatos comunes, como csv, json/jsonl, parquet, txt.

Por ejemplo, puede leer un conjunto de datos compuesto por uno o varios archivos CSV (en este caso, pase sus archivos CSV como una lista):

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

Para obtener la lista de formatos compatibles y ejemplos de código, siga esta guía aquí.

Constructores basados en carpetas

Hay dos constructores basados en carpetas, ImageFolder y AudioFolder. Son métodos de bajo código para crear rápidamente un conjunto de datos de imágenes o de voz y audio con varios miles de ejemplos. Son ideales para prototipar rápidamente modelos de visión por computadora y de voz antes de escalar a un conjunto de datos más grande. Los constructores basados en carpetas toman tus datos y generan automáticamente las características, las divisiones y las etiquetas del conjunto de datos. En el interior:

  • ImageFolder utiliza la función Image para decodificar un archivo de imagen. Se admiten muchos formatos de extensión de imagen, como jpg y png, pero también se admiten otros formatos. Puede consultar la lista completa de extensiones de imagen admitidas.
  • AudioFolder utiliza la característica Audio para decodificar un archivo de audio. Se admiten extensiones como wav, mp3 e incluso mp4, y puede consultar la lista completa de extensiones de audio admitidas. La decodificación se realiza mediante ffmpeg.

Las divisiones del conjunto de datos se generan a partir de la estructura del repositorio, y los nombres de las etiquetas se infieren automáticamente a partir del nombre del directorio.

Por ejemplo, si tu conjunto de datos de imágenes (lo mismo aplica para un conjunto de datos de audio) se almacena de la siguiente manera:

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

Entonces, así es como el generador basado en carpetas crea un ejemplo:

Cree el conjunto de datos de imágenes especificando imagefolder en load_dataset():

>>> from datasets import load_dataset

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

Un conjunto de datos de audio se crea de la misma manera, excepto que se especifica audiofolder en load_dataset() en su lugar:

>>> from datasets import load_dataset

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

Cualquier información adicional sobre su conjunto de datos, como descripciones de texto o transcripciones, puede incluirse mediante un archivo metadata.csv en la carpeta que contiene su conjunto de datos. El archivo de metadatos debe tener una columna file_name que vincule el archivo de imagen o audio con sus metadatos correspondientes:

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.

Para obtener más información sobre cada uno de estos constructores basados en carpetas, consulte las guías de ImageFolder, AudioFolder o MeshFolder.

Desde diccionarios de Python

También puedes crear un dataset a partir de datos en diccionarios de Python. Hay dos formas de crear un dataset usando los métodos from_:

  • El método from_generator() es la forma más eficiente en memoria de crear un conjunto de datos a partir de un generator debido al comportamiento iterativo de los generadores. Esto resulta especialmente útil cuando se trabaja con un conjunto de datos muy grande que podría no caber en la memoria, ya que el conjunto de datos se genera progresivamente en el disco y luego se mapea en memoria.

    >>> 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 basado en generadores debe iterarse, por ejemplo, con un bucle for:

    >>> from datasets import IterableDataset
    >>> ds = IterableDataset.from_generator(gen)
    >>> for example in ds:
    ...     print(example)
    {"pokemon": "bulbasaur", "type": "grass"}
    {"pokemon": "squirtle", "type": "water"}
  • El método from_dict() es una forma sencilla de crear un conjunto de datos a partir de un diccionario:

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

    Para crear un conjunto de datos de imágenes o audio, encadena el método cast_column() con from_dict() y especifica la columna y el tipo de característica. Por ejemplo, para crear un conjunto de datos de audio:

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

Ahora que sabes cómo crear un conjunto de datos, considera compartirlo en el Hub para que la comunidad también se beneficie de tu trabajo. Pasa a la siguiente sección para aprender cómo compartir tu conjunto de datos.

Update on GitHub