Adicione uma nova coleção de conjuntos de dados

Siga este guia para criar uma nova coleção de conjunto de dados (no TFDS ou em seu próprio repositório).

Visão geral

Para adicionar uma nova coleção de conjunto 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 um 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 da coleção 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:

  • name: o nome da coleção de conjunto de dados.
  • descrição: uma descrição formatada em markdown da coleção de conjunto de dados. Há duas maneiras de definir a descrição de uma coleção de conjunto de dados: (1) Como uma string (de várias linhas) 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 de conjunto de dados para as notas de versão correspondentes.
  • citação: Uma (lista de) citação(ões) BibTeX opcional(is) para a coleta do conjunto de dados. Há duas maneiras de definir a citação de uma coleção de conjunto de dados: (1) Como uma string (de várias linhas) 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 de conjuntos de dados.

Para cada versão, os conjuntos de dados TFDS incluídos são armazenados como um dicionário de nomes de conjuntos de dados para 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 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 conjuntos de dados

DatasetCollectionTestBase é uma classe de teste base para coleções de conjuntos de dados. Ele fornece várias verificações simples para garantir que a coleta do conjunto de dados seja 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 de 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 (padrão para todos os conjuntos de dados na coleção).
  • CHECK_DATASETS_VERSION : se deve 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 coleção 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 seguinte comando para testar a coleção de conjuntos de dados.

python my_dataset_test.py

Comentários

Estamos continuamente tentando melhorar o fluxo de trabalho de criação do conjunto de dados, mas só podemos fazer isso se estivermos cientes dos problemas. Quais problemas ou erros você encontrou ao criar a coleção de conjuntos de dados? Houve alguma parte que foi confusa ou não funcionou na primeira vez?

Por favor, compartilhe seus comentários no GitHub .