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 archivodescription.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 archivocitations.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 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 arriba:
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 fue confusa o no funcionó la primera vez?
Comparta sus comentarios en GitHub .