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

Descripció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 TFDS.

Escribe tu colección de conjuntos de datos

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

A continuación se muestra un ejemplo mínimo de un generador de colecciones 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 recopilació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 del conjunto de datos.
  • descripción: una descripción con formato de rebajas 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) citas BibTeX opcionales 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 de datasets devuelve los conjuntos de datos TFDS de la colección.

Se define como un diccionario de versiones, que describen la evolución de la recopilació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 el anterior:

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",
            }),
        ...
    }

Pruebe unitariamente su colección de conjuntos de datos

DatasetCollectionTestBase es una clase de prueba base para colecciones de conjuntos de datos. Proporciona una serie de comprobaciones sencillas para garantizar que la recopilación del conjunto de datos esté registrada correctamente 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 colección de conjuntos de datos que se va a probar.

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

  • VERSION : La versión de la colección del conjunto de datos utilizada para ejecutar la prueba (el valor predeterminado es la última versión).
  • DATASETS_TO_TEST : Lista que contiene los conjuntos de datos para probar la existencia en TFDS (el valor predeterminado es todos los conjuntos de datos de la colección).
  • CHECK_DATASETS_VERSION : si se debe 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 recopilació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 del conjunto de datos.

python my_dataset_test.py

Comentario

Intentamos continuamente 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 del conjunto de datos? ¿Hubo alguna parte que resultó confusa o no funcionó la primera vez?

Comparta sus comentarios en GitHub .