Dodaj nową kolekcję zestawu danych

Postępuj zgodnie z tym przewodnikiem, aby utworzyć nową kolekcję zbiorów danych (w TFDS lub we własnym repozytorium).

Przegląd

Aby dodać nową kolekcję zbiorów danych my_collection do TFDS, użytkownicy muszą wygenerować folder my_collection zawierający następujące pliki:

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)

Tradycyjnie nowe kolekcje zbiorów danych należy dodawać do folderu tensorflow_datasets/dataset_collections/ w repozytorium TFDS.

Zapisz swoją kolekcję zbiorów danych

Wszystkie kolekcje zestawów danych są zaimplementowanymi podklasami tfds.core.dataset_collection_builder.DatasetCollection .

Oto minimalny przykład kreatora kolekcji zbiorów danych zdefiniowany w pliku 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"
            })
    })

W następnych sekcjach opisano 2 abstrakcyjne metody nadpisywania.

info : metadane zbioru danych

Metoda info zwraca wartość dataset_collection_builder.DatasetCollectionInfo zawierającą metadane kolekcji.

Informacje o zbiorze zbioru danych zawierają cztery pola:

  • nazwa: nazwa kolekcji zestawu danych.
  • opis: opis zbioru danych w formacie przeceny. Istnieją dwa sposoby zdefiniowania opisu kolekcji zbioru danych: (1) Jako ciąg (wieloliniowy) bezpośrednio w pliku my_collection.py kolekcji - podobnie jak ma to już miejsce w przypadku zbiorów danych TFDS; (2) W pliku description.md , który należy umieścić w folderze zbioru danych.
  • release_notes: mapowanie wersji zbioru danych na odpowiednie uwagi do wydania.
  • cytaty: Opcjonalne (lista) cytatów BibTeX-owych dla zbioru danych. Istnieją dwa sposoby definiowania cytowania kolekcji zbioru danych: (1) Jako ciąg (wieloliniowy) bezpośrednio w pliku my_collection.py kolekcji - podobnie jak ma to już miejsce w przypadku zbiorów danych TFDS; (2) W pliku citations.bib , który należy umieścić w folderze zbioru danych.

datasets : zdefiniuj zestawy danych w kolekcji

Metoda datasets zwraca zestawy danych TFDS w kolekcji.

Definiuje się go jako słownik wersji opisujących ewolucję zbioru danych.

Dla każdej wersji dołączone zestawy danych TFDS są przechowywane jako słownik od nazw zestawów danych do naming.DatasetReference . Na przykład:

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

Metoda naming.references_for zapewnia bardziej zwarty sposób wyrażenia tego samego, co powyżej:

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

Przetestuj jednostkowo swoją kolekcję zbiorów danych

DatasetCollectionTestBase to podstawowa klasa testowa dla kolekcji zestawów danych. Zapewnia szereg prostych kontroli gwarantujących, że zbiór danych jest poprawnie zarejestrowany i że jego zbiory danych istnieją w TFDS.

Jedynym atrybutem klasy, który należy ustawić, jest DATASET_COLLECTION_CLASS , który określa obiekt klasy zbioru danych do przetestowania.

Dodatkowo użytkownicy mogą ustawić następujące atrybuty klasy:

  • VERSION : Wersja zbioru danych użytego do uruchomienia testu (domyślnie jest to najnowsza wersja).
  • DATASETS_TO_TEST : Lista zawierająca zestawy danych do sprawdzenia w TFDS (domyślnie wszystkie zestawy danych w kolekcji).
  • CHECK_DATASETS_VERSION : Określa, czy sprawdzać istnienie wersjonowanych zestawów danych w kolekcji zestawów danych, czy też ich wersje domyślne (wartość domyślna to true).

Najprostszym prawidłowym testem zbioru danych byłoby:

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

class TestMyCollection(DatasetCollectionTestBase):
  DATASET_COLLECTION_CLASS = my_collection.MyCollection

Uruchom następujące polecenie, aby przetestować kolekcję zestawu danych.

python my_dataset_test.py

Informacja zwrotna

Nieustannie staramy się udoskonalać proces tworzenia zestawu danych, ale możemy to zrobić tylko wtedy, gdy jesteśmy świadomi problemów. Jakie problemy lub błędy napotkałeś podczas tworzenia zbioru danych? Czy była jakaś część, która była myląca lub nie działała za pierwszym razem?

Podziel się swoją opinią na GitHubie .