# Construir y cargar

Casi todos los flujos de trabajo de deep learning comienzan con la carga de un conjunto de datos, lo que lo convierte en uno de los pasos más importantes. Con 🤗 Datasets, hay más de 900 conjuntos de datos disponibles para ayudarte a comenzar con tu tarea de NLP. Solo tienes que llamar a [load_dataset()](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.load_dataset) para dar tu primer paso. Esta función es un verdadero caballo de batalla en todos los sentidos, ya que construye y carga cada conjunto de datos que utilices.

## ELI5: `load_dataset`

Empecemos con una explicación básica como si tuviéramos cinco años.

Un conjunto de datos es un directorio que contiene:

- Algunos archivos de datos en formatos genéricos (JSON, CSV, Parquet, texto, etc.)
- Una tarjeta de conjunto de datos llamada `README.md` que contiene documentación sobre el conjunto de datos, así como una cabecera YAML para definir las etiquetas y configuraciones de los conjuntos de datos

La función [load_dataset()](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.load_dataset) obtiene el conjunto de datos solicitado localmente o desde el Hugging Face Hub. El Hub es un repositorio central donde se almacenan todos los conjuntos de datos y modelos de Hugging Face.

Si el conjunto de datos solo contiene archivos de datos, [load_dataset()](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.load_dataset) infiere automáticamente cómo cargar los archivos de datos a partir de sus extensiones (json, csv, parquet, tsfile, txt, etc.). Internamente, 🤗 Datasets utilizará un [DatasetBuilder](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.DatasetBuilder) adecuado según el formato de los archivos de datos. Existe un builder por cada formato de archivo de datos en 🤗 Datasets:

* [datasets.packaged_modules.text.Text](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.packaged_modules.text.Text) para texto
* [datasets.packaged_modules.csv.Csv](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.packaged_modules.csv.Csv) para CSV y TSV
* [datasets.packaged_modules.json.Json](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.Json) para JSON y JSONL
* [datasets.packaged_modules.parquet.Parquet](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.packaged_modules.parquet.Parquet) para Parquet
* [datasets.packaged_modules.arrow.Arrow](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.packaged_modules.arrow.Arrow) para Arrow (formato de archivo de streaming)
* [datasets.packaged_modules.sql.Sql](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.packaged_modules.sql.Sql) para bases de datos SQL
* [datasets.packaged_modules.tsfile.TsFile](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.packaged_modules.tsfile.TsFile) para TsFile (datos de series temporales)
* [datasets.packaged_modules.imagefolder.ImageFolder](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.packaged_modules.imagefolder.ImageFolder) para carpetas de imágenes
* [datasets.packaged_modules.audiofolder.AudioFolder](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.packaged_modules.audiofolder.AudioFolder) para carpetas de audio

> [!TIP]
> Lee la sección [Share](./upload_dataset) para obtener más información sobre cómo compartir un conjunto de datos.

🤗 Datasets descarga los archivos del conjunto de datos desde la URL original, genera el conjunto de datos y lo almacena en caché en una tabla Arrow en tu unidad. Si ya has descargado el conjunto de datos antes, 🤗 Datasets lo volverá a cargar desde la caché para ahorrarte la molestia de descargarlo de nuevo.

Ahora que tienes una comprensión general de cómo se construyen los conjuntos de datos, echemos un vistazo más detallado a los detalles técnicos de cómo funciona todo esto.

## Creación de un conjunto de datos

Cuando cargas un dataset por primera vez, 🤗 Datasets toma el archivo de datos en bruto y lo convierte en una tabla de filas y columnas tipadas. Hay dos clases principales responsables de construir un dataset: [BuilderConfig](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.BuilderConfig) y [DatasetBuilder](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.DatasetBuilder).

   

### BuilderConfig[[datasets-builderconfig]]

[BuilderConfig](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.BuilderConfig) es la clase de configuración de [DatasetBuilder](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.DatasetBuilder). El [BuilderConfig](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.BuilderConfig) contiene los siguientes atributos básicos sobre un conjunto de datos:

| Atributo     | Descripción                                                  |
|---------------|--------------------------------------------------------------|
| `name`        | Nombre corto del conjunto de datos.                                   |
| `version`     | Identificador de la versión del conjunto de datos.                                  |
| `data_dir`    | Almacena la ruta a una carpeta local que contiene los archivos de datos. |
| `data_files`  | Almacena las rutas de los archivos de datos locales.                            |
| `description` | Descripción del conjunto de datos.                                  |

Si desea agregar atributos adicionales a su conjunto de datos, como las etiquetas de clase, puede subclasear la clase base [BuilderConfig](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.BuilderConfig). Hay dos formas de poblar los atributos de una clase [BuilderConfig](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.BuilderConfig) o subclase:

- Proporciona una lista de instancias predefinidas de la clase [BuilderConfig](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.BuilderConfig) (o de una subclase) en el atributo `DatasetBuilder.BUILDER_CONFIGS()` de los datasets.

- Cuando se llama a [load_dataset()](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.load_dataset), cualquier argumento de palabra clave que no sea específico del método se utilizará para establecer los atributos asociados de la clase [BuilderConfig](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.BuilderConfig). Esto anulará los atributos predefinidos si se seleccionó una configuración específica.

También puede establecer [DatasetBuilder.BUILDER_CONFIG_CLASS](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.BuilderConfig) en cualquier subclase personalizada de [BuilderConfig](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.BuilderConfig).

### DatasetBuilder[[datasets-datasetbuilder]]

[DatasetBuilder](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.DatasetBuilder) accede a todos los atributos dentro de [BuilderConfig](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.BuilderConfig) para construir el conjunto de datos real.

   

Hay tres métodos principales en [DatasetBuilder](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.DatasetBuilder):

1. `DatasetBuilder._info()` se encarga de definir los atributos del conjunto de datos. Cuando se llama a `dataset.info`, 🤗 Datasets devuelve la información almacenada aquí. Del mismo modo, las [Features](/docs/datasets/v5.2.0/es/package_reference/main_classes#datasets.Features) también se especifican aquí. Recuerde que las [Features](/docs/datasets/v5.2.0/es/package_reference/main_classes#datasets.Features) son como el esqueleto del conjunto de datos. Proporciona los nombres y tipos de cada columna.

2. `DatasetBuilder._split_generator` descarga o recupera los archivos de datos solicitados, los organiza en divisiones y define argumentos específicos para el proceso de generación. Este método tiene un [DownloadManager](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.DownloadManager) que descarga archivos o los obtiene de tu sistema de archivos local. Dentro del [DownloadManager](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.DownloadManager), hay un método [DownloadManager.download_and_extract()](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.DownloadManager.download_and_extract) que acepta un diccionario de URLs a los archivos de datos originales y descarga los archivos solicitados. Las entradas aceptadas incluyen: una sola URL o ruta, o una lista/diccionario de URLs o rutas. Los tipos de archivos comprimidos, como los archivos TAR, GZIP y ZIP, se extraerán automáticamente.

   Una vez que los archivos se han descargado, [SplitGenerator](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.SplitGenerator) los organiza en splits. El [SplitGenerator](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.SplitGenerator) contiene el nombre del split y los argumentos de palabra clave que se proporcionan al método `DatasetBuilder._generate_examples`. Los argumentos de palabra clave pueden ser específicos de cada split y, por lo general, incluyen al menos la ruta local a los archivos de datos de cada split.

3. `DatasetBuilder._generate_examples` lee y analiza los archivos de datos de una división. A continuación, genera ejemplos del conjunto de datos según el formato especificado en `features` de `DatasetBuilder._info()`. La entrada de `DatasetBuilder._generate_examples` es en realidad el `filepath` proporcionado en los argumentos de palabras clave del último método.

   El conjunto de datos se genera con un generador de Python, que no carga todos los datos en memoria. Como resultado, el generador puede manejar conjuntos de datos grandes. Sin embargo, antes de que las muestras generadas se escriban en el archivo del conjunto de datos en el disco, se almacenan en un búfer de `ArrowWriter`. Esto significa que las muestras generadas se escriben por lotes. Si las muestras de tu conjunto de datos consumen mucha memoria (imágenes o videos), asegúrate de especificar un valor bajo para el atributo `DEFAULT_WRITER_BATCH_SIZE` en [DatasetBuilder](/docs/datasets/v5.2.0/es/package_reference/builder_classes#datasets.DatasetBuilder). Recomendamos no superar un tamaño de 200 MB.

## Mantener la integridad

Para garantizar que un conjunto de datos esté completo, [load_dataset()](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.load_dataset) ejecuta una serie de pruebas en los archivos descargados para asegurarse de que todo esté presente. De esta manera, no se encontrará con sorpresas si el conjunto de datos solicitado no se genera como se esperaba. [load_dataset()](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.load_dataset) verifica:

- El número de divisiones en el `DatasetDict` generado.
- El número de muestras en cada división del `DatasetDict` generado.
- La lista de archivos descargados.
- Las sumas de verificación SHA256 de los archivos descargados (desactivado de forma predeterminada).

Si el conjunto de datos no supera las verificaciones, es probable que el autor del conjunto de datos haya realizado algunos cambios en los archivos de datos.

En este caso, se genera un error para alertar de que el conjunto de datos ha cambiado. Para ignorar el error, es necesario especificar `verification_mode="no_checks"` en [load_dataset()](/docs/datasets/v5.2.0/es/package_reference/loading_methods#datasets.load_dataset). Cada vez que veas un error de verificación, puedes abrir una discusión o una solicitud de extracción en la pestaña "Community" del conjunto de datos correspondiente, para que se actualicen las comprobaciones de integridad de ese conjunto de datos.

## Seguridad

Los repositorios de conjuntos de datos en el Hub se escanean en busca de malware, más información [aquí](https://huggingface.co/docs/hub/security#malware-scanning).

