Datasets documentation

Construir y cargar

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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() 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

Comencemos 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() 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() 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 adecuado según el formato de los archivos de datos. Existe un builder por cada formato de archivo de datos en 🤗 Datasets:

Lee la sección Share 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 y DatasetBuilder.

BuilderConfig

BuilderConfig es la clase de configuración de DatasetBuilder. El BuilderConfig contiene los siguientes atributos básicos sobre un conjunto de datos:

AtributoDescripción
nameNombre corto del conjunto de datos.
versionIdentificador de la versión del conjunto de datos.
data_dirAlmacena la ruta a una carpeta local que contiene los archivos de datos.
data_filesAlmacena las rutas de los archivos de datos locales.
descriptionDescripció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. Hay dos formas de poblar los atributos de una clase BuilderConfig o subclase:

  • Proporciona una lista de instancias predefinidas de la clase BuilderConfig (o de una subclase) en el atributo DatasetBuilder.BUILDER_CONFIGS() de los datasets.

  • Cuando se llama a 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. Esto anulará los atributos predefinidos si se seleccionó una configuración específica.

También puede establecer DatasetBuilder.BUILDER_CONFIG_CLASS en cualquier subclase personalizada de BuilderConfig.

DatasetBuilder

DatasetBuilder accede a todos los atributos dentro de BuilderConfig para construir el conjunto de datos real.

Hay tres métodos principales en 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 también se especifican aquí. Recuerde que las 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 que descarga archivos o los obtiene de tu sistema de archivos local. Dentro del DownloadManager, hay un método 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 los organiza en splits. El 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. Recomendamos no superar un tamaño de 200 MB.

Mantener la integridad

Para garantizar que un conjunto de datos esté completo, 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() 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(). 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í.

Update on GitHub