Ajouter une nouvelle collection de jeux de données

Suivez ce guide pour créer une nouvelle collection d'ensembles de données (soit dans TFDS, soit dans votre propre référentiel).

Aperçu

Pour ajouter une nouvelle collection d'ensembles de données my_collection à TFDS, les utilisateurs doivent générer un dossier my_collection contenant les fichiers suivants :

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)

Par convention, les nouvelles collections d'ensembles de données doivent être ajoutées au dossier tensorflow_datasets/dataset_collections/ dans le référentiel TFDS.

Écrivez votre collection de jeux de données

Toutes les collections d'ensembles de données sont des sous-classes implémentées de tfds.core.dataset_collection_builder.DatasetCollection .

Voici un exemple minimal de générateur de collection de jeux de données, défini dans le fichier 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"
            })
    })

Les sections suivantes décrivent les 2 méthodes abstraites d'écrasement.

info : métadonnées de la collection de jeux de données

La méthode info renvoie le dataset_collection_builder.DatasetCollectionInfo contenant les métadonnées de la collection.

Les informations sur la collecte de l'ensemble de données contiennent quatre champs :

  • name : le nom de la collection de jeux de données.
  • description : une description au format markdown de la collection d'ensembles de données. Il existe deux manières de définir la description d'une collection d'ensembles de données : (1) Sous forme de chaîne (multiligne) directement dans le fichier my_collection.py de la collection - de la même manière que c'est déjà le cas pour les ensembles de données TFDS ; (2) Dans un fichier description.md , qui doit être placé dans le dossier de collecte du jeu de données.
  • release_notes : un mappage de la version de la collection de jeux de données vers les notes de version correspondantes.
  • citation : une (liste de) citation(s) BibTeX facultative pour la collection d'ensembles de données. Il existe deux manières de définir la citation d'une collection d'ensembles de données : (1) Sous forme de chaîne (multiligne) directement dans le fichier my_collection.py de la collection - de la même manière que c'est déjà le cas pour les ensembles de données TFDS ; (2) Dans un fichier citations.bib , qui doit être placé dans le dossier de collecte du jeu de données.

datasets : définir les jeux de données dans la collection

La méthode datasets renvoie les ensembles de données TFDS de la collection.

Il est défini comme un dictionnaire de versions décrivant l’évolution de la collection de données.

Pour chaque version, les ensembles de données TFDS inclus sont stockés sous forme de dictionnaire, des noms d'ensembles de données à naming.DatasetReference . Par exemple:

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

La méthode naming.references_for fournit une manière plus compacte d'exprimer la même chose que ci-dessus :

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

Testez unitairement votre collection d’ensembles de données

DatasetCollectionTestBase est une classe de test de base pour les collections d'ensembles de données. Il fournit un certain nombre de contrôles simples pour garantir que la collection d'ensembles de données est correctement enregistrée et que ses ensembles de données existent dans TFDS.

Le seul attribut de classe à définir est DATASET_COLLECTION_CLASS , qui spécifie l'objet de classe de la collection d'ensembles de données à tester.

De plus, les utilisateurs peuvent définir les attributs de classe suivants :

  • VERSION : la version de la collection d'ensembles de données utilisée pour exécuter le test (par défaut, la dernière version).
  • DATASETS_TO_TEST : liste contenant les ensembles de données pour lesquels tester l'existence dans TFDS (par défaut, tous les ensembles de données de la collection).
  • CHECK_DATASETS_VERSION : s'il faut vérifier l'existence des ensembles de données versionnés dans la collection d'ensembles de données, ou leurs versions par défaut (la valeur par défaut est true).

Le test valide le plus simple pour une collection d’ensembles de données serait :

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

class TestMyCollection(DatasetCollectionTestBase):
  DATASET_COLLECTION_CLASS = my_collection.MyCollection

Exécutez la commande suivante pour tester la collection d’ensembles de données.

python my_dataset_test.py

Retour

Nous essayons continuellement d'améliorer le flux de travail de création d'ensembles de données, mais nous ne pouvons le faire que si nous sommes conscients des problèmes. Quels problèmes ou erreurs avez-vous rencontrés lors de la création de la collection d’ensembles de données ? Y avait-il une partie qui prêtait à confusion ou qui ne fonctionnait pas du premier coup ?

Veuillez partager vos commentaires sur GitHub .