Agregar una nueva colección de conjuntos de datos

Siga esta guía para crear una nueva colección de conjuntos de datos (ya sea en TFDS o en su propio repositorio).

Visión general

Para agregar una nueva colección de conjuntos de datos my_collection a TFDS, los usuarios deben generar una carpeta my_collection que contenga los siguientes archivos:

my_collection/
  __init__.py
  my_collection.py # Dataset collection definition
  my_collection_test.py # (Optional) test
  description.md # (Optional) collection description (if not included in my_collection.py)
  citations.md # (Optional) collection citations (if not included in my_collection.py)

Como convención, las nuevas colecciones de conjuntos de datos deben agregarse a la carpeta tensorflow_datasets/dataset_collections/ en el repositorio de TFDS.

Escriba su colección de conjuntos de datos

Todas las colecciones de conjuntos de datos son subclases implementadas de tfds.core.dataset_collection_builder.DatasetCollection .

Aquí hay un ejemplo mínimo de un generador de colección de conjuntos de datos, definido en el archivo my_collection.py :

import collections
from typing import Mapping
from tensorflow_datasets.core import dataset_collection_builder
from tensorflow_datasets.core import naming

class MyCollection(dataset_collection_builder.DatasetCollection):
  """Dataset collection builder my_dataset_collection."""

  @property
  def info(self) -> dataset_collection_builder.DatasetCollectionInfo:
    return dataset_collection_builder.DatasetCollectionInfo.from_cls(
        dataset_collection_class=self.__class__,
        description="my_dataset_collection description.",
        release_notes={
            "1.0.0": "Initial release",
        },
    )

  @property
  def datasets(
      self,
  ) -> Mapping[str, Mapping[str, naming.DatasetReference]]:
    return collections.OrderedDict({
        "1.0.0":
            naming.references_for({
                "dataset_1": "natural_questions/default:0.0.2",
                "dataset_2": "media_sum:1.0.0",
            }),
        "1.1.0":
            naming.references_for({
                "dataset_1": "natural_questions/longt5:0.1.0",
                "dataset_2": "media_sum:1.0.0",
                "dataset_3": "squad:3.0.0"
            })
    })

Las siguientes secciones describen los 2 métodos abstractos para sobrescribir.

info : metadatos de la colección de conjuntos de datos

El método info devuelve dataset_collection_builder.DatasetCollectionInfo que contiene los metadatos de la colección.

La información de recopilación del conjunto de datos contiene cuatro campos:

  • nombre: el nombre de la colección de conjuntos de datos.
  • descripción: una descripción con formato de descuento de la colección del conjunto de datos. Hay dos formas de definir la descripción de una colección de conjuntos de datos: (1) como una cadena (de varias líneas) directamente en el archivo my_collection.py de la colección, de manera similar a como ya se hace para los conjuntos de datos TFDS; (2) En un archivo description.md , que debe colocarse en la carpeta de recopilación del conjunto de datos.
  • release_notes: una asignación de la versión de la colección del conjunto de datos a las notas de la versión correspondientes.
  • citación: Una (lista de) cita(s) BibTeX opcional(es) para la colección del conjunto de datos. Hay dos formas de definir la cita de una colección de conjuntos de datos: (1) como una cadena (de varias líneas) directamente en el archivo my_collection.py de la colección, de manera similar a como ya se hace para los conjuntos de datos TFDS; (2) En un archivo citations.bib , que debe colocarse en la carpeta de recopilación del conjunto de datos.

datasets : define los conjuntos de datos en la colección

El método datasets devuelve los conjuntos de datos TFDS en la colección.

Se define como un diccionario de versiones, que describen la evolución de la colección de conjuntos de datos.

Para cada versión, los conjuntos de datos TFDS incluidos se almacenan como un diccionario desde los nombres de los conjuntos de datos hasta naming.DatasetReference . Por ejemplo:

class MyCollection(dataset_collection_builder.DatasetCollection):
  ...
  @property
  def datasets(self):
    return {
        "1.0.0": {
            "yes_no":
                naming.DatasetReference(
                    dataset_name="yes_no", version="1.0.0"),
            "sst2":
                naming.DatasetReference(
                    dataset_name="glue", config="sst2", version="2.0.0"),
            "assin2":
                naming.DatasetReference(
                    dataset_name="assin2", version="1.0.0"),
        },
        ...
    }

El método naming.references_for proporciona una forma más compacta de expresar lo mismo que antes:

class MyCollection(dataset_collection_builder.DatasetCollection):
  ...
  @property
  def datasets(self):
    return {
        "1.0.0":
            naming.references_for({
                "yes_no": "yes_no:1.0.0",
                "sst2": "glue/sst:2.0.0",
                "assin2": "assin2:1.0.0",
            }),
        ...
    }

Realice pruebas unitarias de su colección de conjuntos de datos

DatasetCollectionTestBase es una clase de prueba base para colecciones de conjuntos de datos. Proporciona una serie de controles simples para garantizar que la recopilación de conjuntos de datos esté correctamente registrada y que sus conjuntos de datos existan en TFDS.

El único atributo de clase que se debe establecer es DATASET_COLLECTION_CLASS , que especifica el objeto de clase de la recopilación del conjunto de datos que se va a probar.

Además, los usuarios pueden establecer los siguientes atributos de clase:

  • VERSION : La versión de la colección de conjuntos de datos utilizada para ejecutar la prueba (predeterminada a la última versión).
  • DATASETS_TO_TEST : Lista que contiene los conjuntos de datos para probar la existencia en TFDS (predeterminado para todos los conjuntos de datos en la colección).
  • CHECK_DATASETS_VERSION : si verificar la existencia de los conjuntos de datos versionados en la colección de conjuntos de datos o sus versiones predeterminadas (el valor predeterminado es verdadero).

La prueba válida más simple para una colección de conjuntos de datos sería:

from tensorflow_datasets.testing.dataset_collection_builder_testing import DatasetCollectionTestBase
from . import my_collection

class TestMyCollection(DatasetCollectionTestBase):
  DATASET_COLLECTION_CLASS = my_collection.MyCollection

Ejecute el siguiente comando para probar la colección de conjuntos de datos.

python my_dataset_test.py

Retroalimentación

Continuamente intentamos mejorar el flujo de trabajo de creación de conjuntos de datos, pero solo podemos hacerlo si somos conscientes de los problemas. ¿Qué problemas o errores encontró al crear la colección de conjuntos de datos? ¿Había una parte que era confusa o no funcionaba la primera vez?

Comparta sus comentarios en GitHub .