Datasets documentation

Estructura tu repositorio

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

Estructura tu repositorio

Para alojar y compartir tu conjunto de datos, crea un repositorio de datos en Hugging Face Hub y sube tus archivos de datos.

Esta guía te mostrará cómo estructurar tu repositorio de datos al subirlo. Un conjunto de datos con una estructura y un formato de archivo admitidos (.txt, .csv, .parquet, .jsonl, .mp3, .jpg, .zip, etc.) se carga automáticamente con load_dataset() y tendrá un visor de datos en su página de conjunto de datos en el Hub.

Caso de uso principal

La estructura de datos más simple tiene dos archivos: train.csv y test.csv (esto funciona con cualquier formato de archivo admitido).

Tu repositorio también contendrá un archivo README.md, la ficha del conjunto de datos que se muestra en la página de tu conjunto de datos.

my_dataset_repository/
├── README.md
├── train.csv
└── test.csv

En este caso simple, obtendrás un dataset con dos splits: train (que contiene ejemplos de train.csv) y test (que contiene ejemplos de test.csv).

Defina sus divisiones y subconjuntos en YAML

Divisiones

Si tienes varios archivos y quieres definir en qué división va cada uno, puedes usar el campo configs de YAML en la parte superior de tu README.md.

Por ejemplo, dado un repositorio como este:

my_dataset_repository/
├── README.md
├── data.csv
└── holdout.csv

Puedes definir tus divisiones añadiendo el campo configs en el bloque YAML en la parte superior de tu README.md:

---
configs:
- config_name: default
  data_files:
  - split: train
    path: "data.csv"
  - split: test
    path: "holdout.csv"
---

Puede seleccionar varios archivos por división usando una lista de rutas:

my_dataset_repository/
├── README.md
├── data/
│   ├── abc.csv
│   └── def.csv
└── holdout/
    └── ghi.csv
---
configs:
- config_name: default
  data_files:
  - split: train
    path:
    - "data/abc.csv"
    - "data/def.csv"
  - split: test
    path: "holdout/ghi.csv"
---

O bien, puede usar patrones glob para listar automáticamente todos los archivos que necesita:

---
configs:
- config_name: default
  data_files:
  - split: train
    path: "data/*.csv"
  - split: test
    path: "holdout/*.csv"
---

Tenga en cuenta que el campo config_name es obligatorio incluso si tiene una sola configuración.

Configuraciones

Es posible que su conjunto de datos tenga varios subconjuntos de datos que desee poder cargar por separado. En ese caso, puede definir una lista de configuraciones dentro del campo configs en YAML:

my_dataset_repository/
├── README.md
├── main_data.csv
└── additional_data.csv
---
configs:
- config_name: main_data
  data_files: "main_data.csv"
- config_name: additional_data
  data_files: "additional_data.csv"
---

Cada configuración se muestra por separado en el Hugging Face Hub y se puede cargar pasando su nombre como segundo parámetro:

from datasets import load_dataset

main_data = load_dataset("my_dataset_repository", "main_data")
additional_data = load_dataset("my_dataset_repository", "additional_data")

Parámetros del constructor

No solo data_files, sino también otros parámetros específicos del builder pueden pasarse mediante YAML, lo que permite mayor flexibilidad en la forma de cargar los datos sin necesidad de código personalizado. Por ejemplo, define qué separador usar en qué configuración para cargar tus archivos csv:

---
configs:
- config_name: tab
  data_files: "main_data.csv"
  sep: "\t"
- config_name: comma
  data_files: "additional_data.csv"
  sep: ","
---

Consulte la documentación de los constructores específicos para ver qué parámetros de configuración tienen.

Puede configurar una configuración predeterminada usando default: true, por ejemplo, puede ejecutar main_data = load_dataset("my_dataset_repository") si configura

- config_name: main_data
  data_files: "main_data.csv"
  default: true

Detección automática de divisiones

Si no se proporciona un YAML, 🤗 Datasets busca ciertos patrones en el repositorio del conjunto de datos para inferir automáticamente las divisiones del conjunto de datos. Existe un orden en los patrones, que comienza con el formato de división de nombre de archivo personalizado y termina tratando todos los archivos como una única división si no se encuentra ningún patrón.

Nombre del directorio

Los archivos de datos también pueden colocarse en directorios distintos denominados train, test y validation, donde cada directorio contiene los archivos de datos para esa división:

my_dataset_repository/
├── README.md
└── data/
    ├── train/
    │   └── bees.csv
    ├── test/
    │   └── more_bees.csv
    └── validation/
        └── even_more_bees.csv

Divisiones de nombre de archivo

Si no tiene divisiones no tradicionales, puede colocar el nombre de la división en cualquier parte del archivo de datos y se inferirá automáticamente. La única regla es que el nombre de la división debe estar delimitado por caracteres no alfanuméricos, por ejemplo test-file.csv en lugar de testfile.csv. Los delimitadores admitidos incluyen guiones bajos, guiones, espacios, puntos y números.

Por ejemplo, los siguientes nombres de archivo son todos aceptables:

  • conjunto de entrenamiento: train.csv, my_train_file.csv, train1.csv
  • conjunto de validación: validation.csv, my_validation_file.csv, validation1.csv
  • conjunto de prueba: test.csv, my_test_file.csv, test1.csv

A continuación se muestra un ejemplo en el que todos los archivos se colocan en un directorio llamado data:

my_dataset_repository/
├── README.md
└── data/
    ├── train.csv
    ├── test.csv
    └── validation.csv

División con nombre de archivo personalizado

Si las divisiones de tu conjunto de datos tienen nombres personalizados que no son train, test o validation, puedes nombrar tus archivos de datos como data/<split_name>-xxxxx-of-xxxxx.csv.

Aquí hay un ejemplo con tres divisiones, train, test y random:

my_dataset_repository/
├── README.md
└── data/
    ├── train-00000-of-00003.csv
    ├── train-00001-of-00003.csv
    ├── train-00002-of-00003.csv
    ├── test-00000-of-00001.csv
    ├── random-00000-of-00003.csv
    ├── random-00001-of-00003.csv
    └── random-00002-of-00003.csv

División única

Cuando 🤗 Datasets no encuentra ninguno de los patrones anteriores, trata todos los archivos como una única partición de entrenamiento. Si las particiones de tu conjunto de datos no se cargan como se espera, es posible que se deba a un patrón incorrecto.

Palabras clave del nombre dividido

Existen varias formas de nombrar las divisiones. Las divisiones de validación a veces se llaman “dev”, y las divisiones de prueba pueden referirse como “eval”. Estos otros nombres de división también se admiten, y las siguientes palabras clave son equivalentes:

  • train, training
  • validación, válido, val, dev
  • test, testing, eval, evaluation

La estructura siguiente es un repositorio válido:

my_dataset_repository/
├── README.md
└── data/
    ├── training.csv
    ├── eval.csv
    └── valid.csv

Varios archivos por división

Si una de tus divisiones comprende varios archivos, 🤗 Datasets aún puede inferir si se trata de la división de entrenamiento, validación o prueba a partir del nombre del archivo. Por ejemplo, si tus divisiones de entrenamiento y prueba abarcan varios archivos:

my_dataset_repository/
├── README.md
├── train_0.csv
├── train_1.csv
├── train_2.csv
├── train_3.csv
├── test_0.csv
└── test_1.csv

Asegúrate de que todos los archivos de tu conjunto train tengan train en sus nombres (lo mismo para test y validación). Incluso si agregas un prefijo o sufijo a train en el nombre del archivo (por ejemplo, my_train_file_00001.csv), 🤗 Datasets aún puede inferir la división adecuada.

Para mayor comodidad, también puede colocar sus archivos de datos en directorios diferentes. En este caso, el nombre de la división se infiere a partir del nombre del directorio.

my_dataset_repository/
├── README.md
└── data/
    ├── train/
    │   ├── shard_0.csv
    │   ├── shard_1.csv
    │   ├── shard_2.csv
    │   └── shard_3.csv
    └── test/
        ├── shard_0.csv
        └── shard_1.csv
Update on GitHub