Aggiungi una nuova raccolta di set di dati

Segui questa guida per creare una nuova raccolta di set di dati (in TFDS o nel tuo repository).

Panoramica

Per aggiungere una nuova raccolta di set di dati my_collection a TFDS, gli utenti devono generare una cartella my_collection contenente i seguenti file:

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)

Per convenzione, le nuove raccolte di set di dati dovrebbero essere aggiunte alla cartella tensorflow_datasets/dataset_collections/ nel repository TFDS.

Scrivi la tua raccolta di set di dati

Tutte le raccolte di set di dati sono sottoclassi implementate di tfds.core.dataset_collection_builder.DatasetCollection .

Ecco un esempio minimo di un costruttore di raccolte di set di dati, definito nel file 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"
            })
    })

Le sezioni successive descrivono i 2 metodi astratti per sovrascrivere.

info : metadati della raccolta del set di dati

Il metodo info restituisce dataset_collection_builder.DatasetCollectionInfo contenente i metadati della raccolta.

Le informazioni sulla raccolta del set di dati contengono quattro campi:

  • nome: il nome della raccolta del set di dati.
  • descrizione: una descrizione in formato markdown della raccolta del set di dati. Esistono due modi per definire la descrizione di una raccolta di set di dati: (1) Come una stringa (su più righe) direttamente nel file my_collection.py della raccolta, in modo simile a quanto già fatto per i set di dati TFDS; (2) In un file description.md , che deve essere inserito nella cartella di raccolta del set di dati.
  • release_notes: una mappatura dalla versione della raccolta del set di dati alle corrispondenti note di rilascio.
  • citazione: una(e) citazione(i) BibTeX opzionale(i) per la raccolta del set di dati. Esistono due modi per definire la citazione di una raccolta di set di dati: (1) Come una stringa (su più righe) direttamente nel file my_collection.py della raccolta, in modo simile a quanto già fatto per i set di dati TFDS; (2) In un file citations.bib , che deve essere inserito nella cartella di raccolta del dataset.

datasets : definisce i set di dati nella raccolta

Il metodo datasets restituisce i set di dati TFDS nella raccolta.

È definito come un dizionario di versioni, che descrivono l'evoluzione della raccolta dei dati.

Per ogni versione, i set di dati TFDS inclusi vengono archiviati come dizionario dai nomi dei set di dati a naming.DatasetReference . Per esempio:

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

Il metodo naming.references_for fornisce un modo più compatto per esprimere lo stesso di cui sopra:

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

Esegui test unitari della raccolta di set di dati

DatasetCollectionTestBase è una classe di test di base per le raccolte di set di dati. Fornisce una serie di semplici controlli per garantire che la raccolta di set di dati sia registrata correttamente e che i relativi set di dati esistano in TFDS.

L'unico attributo di classe da impostare è DATASET_COLLECTION_CLASS , che specifica l'oggetto classe della raccolta del set di dati da testare.

Inoltre, gli utenti possono impostare i seguenti attributi di classe:

  • VERSION : la versione della raccolta del set di dati utilizzata per eseguire il test (per impostazione predefinita è la versione più recente).
  • DATASETS_TO_TEST : elenco contenente i set di dati di cui testare l'esistenza in TFDS (per impostazione predefinita sono tutti i set di dati nella raccolta).
  • CHECK_DATASETS_VERSION : se verificare l'esistenza dei set di dati con versione nella raccolta di set di dati o le loro versioni predefinite (il valore predefinito è true).

Il test valido più semplice per una raccolta di set di dati sarebbe:

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

class TestMyCollection(DatasetCollectionTestBase):
  DATASET_COLLECTION_CLASS = my_collection.MyCollection

Eseguire il comando seguente per testare la raccolta del set di dati.

python my_dataset_test.py

Feedback

Cerchiamo continuamente di migliorare il flusso di lavoro di creazione del set di dati, ma possiamo farlo solo se siamo consapevoli dei problemi. Quali problemi o errori hai riscontrato durante la creazione della raccolta del set di dati? C'era una parte che creava confusione o non funzionava la prima volta?

Per favore condividi il tuo feedback su GitHub .