Добавить новую коллекцию наборов данных

Следуйте этому руководству, чтобы создать новую коллекцию наборов данных (в TFDS или в вашем собственном репозитории).

Обзор

Чтобы добавить новую коллекцию набора данных my_collection в TFDS, пользователям необходимо создать папку my_collection , содержащую следующие файлы:

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)

По соглашению новые коллекции наборов данных следует добавлять в папку tensorflow_datasets/dataset_collections/ в репозитории TFDS.

Напишите свою коллекцию наборов данных

Все коллекции наборов данных являются реализованными подклассами tfds.core.dataset_collection_builder.DatasetCollection .

Вот минимальный пример построителя коллекции наборов данных, определенный в файле 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"
            })
    })

В следующих разделах описаны два абстрактных метода для перезаписи.

info : метаданные коллекции набора данных.

Метод info возвращает dataset_collection_builder.DatasetCollectionInfo , содержащий метаданные коллекции.

Информация о сборе набора данных содержит четыре поля:

  • name: имя коллекции набора данных.
  • описание: описание коллекции набора данных в формате уценки. Существует два способа определить описание коллекции набора данных: (1) В виде (многострочной) строки непосредственно в файле my_collection.py коллекции — аналогично тому, как это уже сделано для наборов данных TFDS; (2) В description.md , который должен быть помещен в папку сбора набора данных.
  • Release_notes: сопоставление версии коллекции набора данных с соответствующими примечаниями к выпуску.
  • цитата: необязательный (список) цитат BibTeX для коллекции набора данных. Существует два способа определить цитирование коллекции набора данных: (1) В виде (многострочной) строки непосредственно в файле my_collection.py коллекции — аналогично тому, как это уже сделано для наборов данных TFDS; (2) В файле citations.bib , который необходимо поместить в папку сбора набора данных.

datasets : определите наборы данных в коллекции.

Метод datasets возвращает наборы данных TFDS в коллекции.

Он определяется как словарь версий, которые описывают эволюцию коллекции набора данных.

Для каждой версии включенные наборы данных TFDS хранятся в виде словаря от имен наборов данных до naming.DatasetReference . Например:

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

Метод naming.references_for предоставляет более компактный способ выразить то же самое, что и выше:

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

Проведите модульное тестирование вашей коллекции наборов данных

DatasetCollectionTestBase — это базовый тестовый класс для коллекций наборов данных. Он обеспечивает ряд простых проверок, чтобы гарантировать, что коллекция наборов данных правильно зарегистрирована и ее наборы данных существуют в TFDS.

Единственный атрибут класса, который нужно установить, — это DATASET_COLLECTION_CLASS , который указывает объект класса коллекции набора данных для тестирования.

Кроме того, пользователи могут установить следующие атрибуты класса:

  • VERSION : версия коллекции набора данных, использованная для запуска теста (по умолчанию — последняя версия).
  • DATASETS_TO_TEST : список, содержащий наборы данных для проверки существования в TFDS (по умолчанию для всех наборов данных в коллекции).
  • CHECK_DATASETS_VERSION : следует ли проверять наличие версионных наборов данных в коллекции наборов данных или их версии по умолчанию (по умолчанию — true).

Самый простой действительный тест для сбора набора данных будет следующим:

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

class TestMyCollection(DatasetCollectionTestBase):
  DATASET_COLLECTION_CLASS = my_collection.MyCollection

Запустите следующую команду, чтобы протестировать коллекцию набора данных.

python my_dataset_test.py

Обратная связь

Мы постоянно пытаемся улучшить рабочий процесс создания наборов данных, но сможем сделать это только в том случае, если будем знать о проблемах. С какими проблемами или ошибками вы столкнулись при создании коллекции набора данных? Была ли какая-то часть, которая сбивала с толку или не работала с первого раза?

Поделитесь своим отзывом на GitHub .