Следуйте этому руководству, чтобы создать новую коллекцию наборов данных (в 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 .