Siga este guia para criar uma nova coleção de conjuntos de dados (no TFDS ou em seu próprio repositório).
Visão geral
Para adicionar uma nova coleção de conjuntos de dados my_collection
ao TFDS, os usuários precisam gerar uma pasta my_collection
contendo os seguintes arquivos:
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)
Como convenção, novas coleções de conjuntos de dados devem ser adicionadas à pasta tensorflow_datasets/dataset_collections/
no repositório TFDS.
Escreva sua coleção de conjuntos de dados
Todas as coleções de conjuntos de dados são subclasses implementadas de tfds.core.dataset_collection_builder.DatasetCollection
.
Aqui está um exemplo mínimo de construtor de coleção de conjuntos de dados, definido no arquivo 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"
})
})
As próximas seções descrevem os 2 métodos abstratos para substituir.
info
: metadados de coleta de conjunto de dados
O método info
retorna o dataset_collection_builder.DatasetCollectionInfo
contendo os metadados da coleção.
As informações de coleta do conjunto de dados contêm quatro campos:
- nome: o nome da coleção de conjuntos de dados.
- descrição: uma descrição formatada em markdown da coleção do conjunto de dados. Existem duas maneiras de definir a descrição de uma coleção de conjuntos de dados: (1) Como uma string (multilinhas) diretamente no arquivo
my_collection.py
da coleção - da mesma forma que já é feito para conjuntos de dados TFDS; (2) Em um arquivodescription.md
, que deve ser colocado na pasta de coleta do conjunto de dados. - release_notes: um mapeamento da versão da coleção do conjunto de dados para as notas de lançamento correspondentes.
- citação: Uma (lista de) citações opcionais do BibTeX para a coleção do conjunto de dados. Existem duas maneiras de definir a citação de uma coleção de conjuntos de dados: (1) Como uma string (multilinhas) diretamente no arquivo
my_collection.py
da coleção - da mesma forma que já é feito para conjuntos de dados TFDS; (2) Em um arquivocitations.bib
, que deve ser colocado na pasta de coleta do conjunto de dados.
datasets
: defina os conjuntos de dados na coleção
O método datasets
retorna os conjuntos de dados TFDS na coleção.
É definido como um dicionário de versões, que descreve a evolução da coleção do conjunto de dados.
Para cada versão, os conjuntos de dados TFDS incluídos são armazenados como um dicionário desde os nomes dos conjuntos de dados até naming.DatasetReference
. Por exemplo:
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"),
},
...
}
O método naming.references_for
fornece uma maneira mais compacta de expressar o mesmo que acima:
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",
}),
...
}
Teste de unidade sua coleção de conjunto de dados
DatasetCollectionTestBase é uma classe de teste base para coleções de conjuntos de dados. Ele fornece uma série de verificações simples para garantir que a coleção do conjunto de dados esteja registrada corretamente e que seus conjuntos de dados existam no TFDS.
O único atributo de classe a ser definido é DATASET_COLLECTION_CLASS
, que especifica o objeto de classe da coleção de conjunto de dados a ser testado.
Além disso, os usuários podem definir os seguintes atributos de classe:
-
VERSION
: A versão da coleção do conjunto de dados usada para executar o teste (o padrão é a versão mais recente). -
DATASETS_TO_TEST
: Lista contendo os conjuntos de dados para testar a existência no TFDS (o padrão é todos os conjuntos de dados na coleção). -
CHECK_DATASETS_VERSION
: para verificar a existência dos conjuntos de dados com versão na coleção de conjuntos de dados ou suas versões padrão (o padrão é verdadeiro).
O teste válido mais simples para uma coleta de conjunto de dados seria:
from tensorflow_datasets.testing.dataset_collection_builder_testing import DatasetCollectionTestBase
from . import my_collection
class TestMyCollection(DatasetCollectionTestBase):
DATASET_COLLECTION_CLASS = my_collection.MyCollection
Execute o comando a seguir para testar a coleção de conjuntos de dados.
python my_dataset_test.py
Opinião
Tentamos continuamente melhorar o fluxo de trabalho de criação de conjuntos de dados, mas só poderemos fazê-lo se estivermos cientes dos problemas. Quais problemas ou erros você encontrou ao criar a coleção do conjunto de dados? Houve alguma parte que foi confusa ou não funcionou da primeira vez?
Compartilhe seus comentários no GitHub .