Tambahkan koleksi kumpulan data baru

Ikuti panduan ini untuk membuat kumpulan dataset baru (baik di TFDS atau di repositori Anda sendiri).

Ringkasan

Untuk menambahkan kumpulan data baru my_collection ke TFDS, pengguna perlu membuat folder my_collection yang berisi file berikut:

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)

Sesuai konvensi, koleksi kumpulan data baru harus ditambahkan ke folder tensorflow_datasets/dataset_collections/ di repositori TFDS.

Tulis koleksi kumpulan data Anda

Semua koleksi kumpulan data diimplementasikan subkelas tfds.core.dataset_collection_builder.DatasetCollection .

Berikut adalah contoh minimal pembuat kumpulan data, yang ditentukan dalam file 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"
            })
    })

Bagian selanjutnya menjelaskan 2 metode abstrak untuk ditimpa.

info : metadata kumpulan data

Metode info mengembalikan dataset_collection_builder.DatasetCollectionInfo yang berisi metadata koleksi.

Info pengumpulan kumpulan data berisi empat bidang:

  • name : nama kumpulan dataset.
  • deskripsi: deskripsi koleksi kumpulan data dengan format penurunan harga. Ada dua cara untuk mendefinisikan deskripsi kumpulan data: (1) Sebagai string (multi-baris) langsung di file my_collection.py koleksi - sama seperti yang telah dilakukan untuk kumpulan data TFDS; (2) Dalam file description.md , yang harus ditempatkan di folder kumpulan dataset.
  • release_notes: pemetaan dari versi kumpulan data ke catatan rilis yang sesuai.
  • kutipan: (daftar) kutipan BibTeX opsional untuk pengumpulan kumpulan data. Ada dua cara untuk menentukan kutipan kumpulan data: (1) Sebagai string (multi-baris) langsung di file my_collection.py koleksi - sama seperti yang telah dilakukan untuk kumpulan data TFDS; (2) Dalam file citations.bib yang harus ditempatkan di folder kumpulan dataset.

datasets : menentukan kumpulan data dalam koleksi

Metode datasets mengembalikan himpunan data TFDS dalam koleksi.

Ini didefinisikan sebagai kamus versi, yang menggambarkan evolusi pengumpulan kumpulan data.

Untuk setiap versi, kumpulan data TFDS yang disertakan disimpan sebagai kamus mulai dari nama kumpulan data hingga naming.DatasetReference . Misalnya:

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

Metode naming.references_for menyediakan cara yang lebih ringkas untuk mengekspresikan hal yang sama seperti di atas:

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

Uji unit koleksi kumpulan data Anda

DatasetCollectionTestBase adalah kelas pengujian dasar untuk koleksi set data. Ini memberikan sejumlah pemeriksaan sederhana untuk menjamin bahwa kumpulan data didaftarkan dengan benar, dan datasetnya ada di TFDS.

Satu-satunya atribut kelas yang harus disetel adalah DATASET_COLLECTION_CLASS , yang menentukan objek kelas kumpulan data yang akan diuji.

Selain itu, pengguna dapat mengatur atribut kelas berikut:

  • VERSION : Versi kumpulan data yang digunakan untuk menjalankan pengujian (default ke versi terbaru).
  • DATASETS_TO_TEST : Daftar berisi kumpulan data yang akan diuji keberadaannya di TFDS (default untuk semua kumpulan data dalam koleksi).
  • CHECK_DATASETS_VERSION : Apakah akan memeriksa keberadaan himpunan data berversi dalam kumpulan himpunan data, atau versi defaultnya (defaultnya adalah true).

Tes valid paling sederhana untuk pengumpulan kumpulan data adalah:

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

class TestMyCollection(DatasetCollectionTestBase):
  DATASET_COLLECTION_CLASS = my_collection.MyCollection

Jalankan perintah berikut untuk menguji pengumpulan dataset.

python my_dataset_test.py

Masukan

Kami terus berupaya meningkatkan alur kerja pembuatan kumpulan data, namun hal ini hanya dapat dilakukan jika kami menyadari masalahnya. Masalah atau kesalahan apa yang Anda temui saat membuat kumpulan dataset? Apakah ada bagian yang membingungkan, atau tidak berfungsi pada kali pertama?

Silakan bagikan tanggapan Anda di GitHub .