Yeni bir veri kümesi koleksiyonu ekleme

Yeni bir veri kümesi koleksiyonu oluşturmak için bu kılavuzu izleyin (TFDS'de veya kendi veri havuzunuzda).

Genel Bakış

TFDS'ye yeni bir veri kümesi koleksiyonu my_collection eklemek için kullanıcıların aşağıdaki dosyaları içeren bir my_collection klasörü oluşturması gerekir:

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)

Kural olarak, TFDS deposundaki tensorflow_datasets/dataset_collections/ klasörüne yeni veri kümesi koleksiyonları eklenmelidir.

Veri kümesi koleksiyonunuzu yazın

Tüm veri kümesi koleksiyonları, tfds.core.dataset_collection_builder.DatasetCollection öğesinin uygulanan alt sınıflarıdır.

Burada my_collection.py dosyasında tanımlanan veri kümesi toplama oluşturucusunun minimal bir örneği verilmiştir:

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

Sonraki bölümlerde üzerine yazmanın 2 soyut yöntemi açıklanmaktadır.

info : veri kümesi koleksiyonu meta verileri

info yöntemi, koleksiyonun meta verilerini içeren dataset_collection_builder.DatasetCollectionInfo öğesini döndürür.

Veri kümesi toplama bilgileri dört alan içerir:

  • name: veri kümesi koleksiyonunun adı.
  • açıklama: veri kümesi koleksiyonunun işaretleme biçimli açıklaması. Bir veri kümesi koleksiyonunun açıklamasını tanımlamanın iki yolu vardır: (1) Doğrudan koleksiyonun my_collection.py dosyasında (çok satırlı) bir dize olarak - TFDS veri kümeleri için zaten yapıldığına benzer şekilde; (2) Veri kümesi toplama klasörüne yerleştirilmesi gereken bir description.md dosyasında.
  • sürüm_notları: veri kümesi koleksiyonunun sürümünden ilgili sürüm notlarına eşleme.
  • Alıntı: Veri kümesi koleksiyonu için isteğe bağlı bir BibTeX alıntı(lar)ının listesi. Bir veri kümesi koleksiyonunun alıntısını tanımlamanın iki yolu vardır: (1) Doğrudan koleksiyonun my_collection.py dosyasında (çok satırlı) bir dize olarak - TFDS veri kümeleri için zaten yapıldığına benzer şekilde; (2) Veri kümesi toplama klasörüne yerleştirilmesi gereken bir citations.bib dosyasında.

datasets : koleksiyondaki veri kümelerini tanımlayın

datasets yöntemi, koleksiyondaki TFDS veri kümelerini döndürür.

Veri kümesi koleksiyonunun gelişimini açıklayan sürümler sözlüğü olarak tanımlanır.

Her sürüm için, dahil edilen TFDS veri kümeleri, veri kümesi adlarından naming.DatasetReference kadar bir sözlük olarak depolanır. Örneğin:

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 yöntemi, yukarıdakiyle aynı ifadeyi ifade etmenin daha kompakt bir yolunu sağlar:

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

Veri kümesi koleksiyonunuzu birim testiyle test edin

DatasetCollectionTestBase , veri kümesi koleksiyonları için temel bir test sınıfıdır. Veri kümesi koleksiyonunun doğru şekilde kaydedildiğini ve veri kümelerinin TFDS'de mevcut olduğunu garanti etmek için bir dizi basit kontrol sağlar.

Ayarlanacak tek sınıf özelliği, test edilecek veri kümesi koleksiyonunun sınıf nesnesini belirten DATASET_COLLECTION_CLASS .

Ayrıca kullanıcılar aşağıdaki sınıf niteliklerini de ayarlayabilir:

  • VERSION : Testi çalıştırmak için kullanılan veri kümesi koleksiyonunun sürümü (varsayılan olarak en son sürümdür).
  • DATASETS_TO_TEST : TFDS'de varlığı test edilecek veri kümelerini içeren liste (koleksiyondaki tüm veri kümeleri için varsayılandır).
  • CHECK_DATASETS_VERSION : Veri kümesi koleksiyonundaki sürümlendirilmiş veri kümelerinin varlığının mı yoksa varsayılan sürümlerinin mi (varsayılanı true'dur) kontrol edilip edilmeyeceği.

Bir veri kümesi koleksiyonu için en basit geçerli test şöyle olacaktır:

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

class TestMyCollection(DatasetCollectionTestBase):
  DATASET_COLLECTION_CLASS = my_collection.MyCollection

Veri kümesi koleksiyonunu test etmek için aşağıdaki komutu çalıştırın.

python my_dataset_test.py

Geri bildirim

Veri kümesi oluşturma iş akışını sürekli olarak iyileştirmeye çalışıyoruz ancak bunu yalnızca sorunların farkında olduğumuzda yapabiliriz. Veri kümesi koleksiyonunu oluştururken hangi sorunlarla veya hatalarla karşılaştınız? Kafa karıştırıcı olan veya ilk seferde çalışmayan bir kısım var mıydı?

Lütfen geri bildiriminizi GitHub'da paylaşın.