Adicione uma nova coleção de conjuntos de dados

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 arquivo description.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 arquivo citations.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 .