Panduan ini mendokumentasikan semua pembuat kumpulan data khusus format yang saat ini tersedia di TFDS.
Pembuat kumpulan data khusus format adalah subkelas dari tfds.core.GeneratorBasedBuilder
yang menangani sebagian besar pemrosesan data untuk format data tertentu.
Kumpulan data berdasarkan tf.data.Dataset
Jika Anda ingin membuat kumpulan data TFDS dari kumpulan data dalam format tf.data.Dataset
( reference ), Anda dapat menggunakan tfds.dataset_builders.TfDataBuilder
(lihat dokumen API ).
Kami membayangkan dua kegunaan umum kelas ini:
- Membuat kumpulan data eksperimental di lingkungan seperti buku catatan
- Mendefinisikan pembuat kumpulan data dalam kode
Membuat kumpulan data baru dari buku catatan
Misalkan Anda bekerja di buku catatan, memuat beberapa data sebagai tf.data.Dataset
, menerapkan berbagai transformasi (peta, filter, dll) dan sekarang Anda ingin menyimpan data ini dan membagikannya dengan mudah kepada rekan satu tim atau memuatnya di buku catatan lain. Daripada harus menentukan kelas pembuat kumpulan data baru, Anda juga dapat membuat instance tfds.dataset_builders.TfDataBuilder
dan memanggil download_and_prepare
untuk menyimpan kumpulan data Anda sebagai kumpulan data TFDS.
Karena ini adalah kumpulan data TFDS, Anda dapat membuat versinya, menggunakan konfigurasi, membaginya berbeda-beda, dan mendokumentasikannya agar lebih mudah digunakan nanti. Artinya, Anda juga harus memberi tahu TFDS fitur apa saja yang ada di kumpulan data Anda.
Berikut ini contoh tiruan bagaimana Anda dapat menggunakannya.
import tensorflow as tf
import tensorflow_datasets as tfds
my_ds_train = tf.data.Dataset.from_tensor_slices({"number": [1, 2, 3]})
my_ds_test = tf.data.Dataset.from_tensor_slices({"number": [4, 5]})
# Optionally define a custom `data_dir`.
# If None, then the default data dir is used.
custom_data_dir = "/my/folder"
# Define the builder.
single_number_builder = tfds.dataset_builders.TfDataBuilder(
name="my_dataset",
config="single_number",
version="1.0.0",
data_dir=custom_data_dir,
split_datasets={
"train": my_ds_train,
"test": my_ds_test,
},
features=tfds.features.FeaturesDict({
"number": tfds.features.Scalar(dtype=tf.int64),
}),
description="My dataset with a single number.",
release_notes={
"1.0.0": "Initial release with numbers up to 5!",
}
)
# Make the builder store the data as a TFDS dataset.
single_number_builder.download_and_prepare()
Metode download_and_prepare
akan mengulangi input tf.data.Dataset
s dan menyimpan dataset TFDS yang sesuai di /my/folder/my_dataset/single_number/1.0.0
, yang akan berisi pemisahan kereta dan pengujian.
Argumen config
bersifat opsional dan dapat berguna jika Anda ingin menyimpan konfigurasi berbeda dalam kumpulan data yang sama.
Argumen data_dir
dapat digunakan untuk menyimpan kumpulan data TFDS yang dihasilkan di folder lain, misalnya di kotak pasir Anda sendiri jika Anda tidak ingin membaginya dengan orang lain (belum). Perhatikan bahwa saat melakukan ini, Anda juga harus meneruskan data_dir
ke tfds.load
. Jika argumen data_dir
tidak ditentukan, maka direktori data TFDS default akan digunakan.
Memuat kumpulan data Anda
Setelah kumpulan data TFDS disimpan, kumpulan data tersebut dapat dimuat dari skrip lain atau oleh rekan satu tim jika mereka memiliki akses ke data tersebut:
# If no custom data dir was specified:
ds_test = tfds.load("my_dataset/single_number", split="test")
# When there are multiple versions, you can also specify the version.
ds_test = tfds.load("my_dataset/single_number:1.0.0", split="test")
# If the TFDS was stored in a custom folder, then it can be loaded as follows:
custom_data_dir = "/my/folder"
ds_test = tfds.load("my_dataset/single_number:1.0.0", split="test", data_dir=custom_data_dir)
Menambahkan versi atau konfigurasi baru
Setelah melakukan iterasi lebih jauh pada kumpulan data Anda, Anda mungkin telah menambahkan atau mengubah beberapa transformasi data sumber. Untuk menyimpan dan membagikan kumpulan data ini, Anda dapat dengan mudah menyimpannya sebagai versi baru.
def add_one(example):
example["number"] = example["number"] + 1
return example
my_ds_train_v2 = my_ds_train.map(add_one)
my_ds_test_v2 = my_ds_test.map(add_one)
single_number_builder_v2 = tfds.dataset_builders.TfDataBuilder(
name="my_dataset",
config="single_number",
version="1.1.0",
data_dir=custom_data_dir,
split_datasets={
"train": my_ds_train_v2,
"test": my_ds_test_v2,
},
features=tfds.features.FeaturesDict({
"number": tfds.features.Scalar(dtype=tf.int64, doc="Some number"),
}),
description="My dataset with a single number.",
release_notes={
"1.1.0": "Initial release with numbers up to 6!",
"1.0.0": "Initial release with numbers up to 5!",
}
)
# Make the builder store the data as a TFDS dataset.
single_number_builder_v2.download_and_prepare()
Mendefinisikan kelas pembuat kumpulan data baru
Anda juga dapat menentukan DatasetBuilder
baru berdasarkan kelas ini.
import tensorflow as tf
import tensorflow_datasets as tfds
class MyDatasetBuilder(tfds.dataset_builders.TfDataBuilder):
def __init__(self):
ds_train = tf.data.Dataset.from_tensor_slices([1, 2, 3])
ds_test = tf.data.Dataset.from_tensor_slices([4, 5])
super().__init__(
name="my_dataset",
version="1.0.0",
split_datasets={
"train": ds_train,
"test": ds_test,
},
features=tfds.features.FeaturesDict({
"number": tfds.features.Scalar(dtype=tf.int64),
}),
config="single_number",
description="My dataset with a single number.",
release_notes={
"1.0.0": "Initial release with numbers up to 5!",
})
Pembuat Croissant
Formatnya
Croissant 🥐 adalah format tingkat tinggi untuk kumpulan data pembelajaran mesin yang menggabungkan metadata, deskripsi file sumber daya, struktur data, dan semantik ML default ke dalam satu file; ini berfungsi dengan kumpulan data yang ada untuk membuatnya lebih mudah ditemukan, digunakan, dan didukung dengan alat.
Croissant dibangun di atas skema.org dan kosakata sc:Dataset
nya, format yang banyak digunakan untuk mewakili kumpulan data di Web, dan membuatnya dapat dicari.
CroissantBuilder
CroissantBuilder
mendefinisikan kumpulan data TFDS berdasarkan file metadata Croissant 🥐; masing-masing record_set_ids
yang ditentukan akan menghasilkan ConfigBuilder
terpisah.
Misalnya, untuk menginisialisasi CroissantBuilder
untuk kumpulan data MNIST menggunakan definisi Croissant 🥐 :
import tensorflow_datasets as tfds
builder = tfds.dataset_builders.CroissantBuilder(
jsonld="https://raw.githubusercontent.com/mlcommons/croissant/main/datasets/0.8/huggingface-mnist/metadata.json",
file_format='array_record',
)
builder.download_and_prepare()
ds = builder.as_data_source()
print(ds['default'][0])
bersama
Formatnya
CoNLL adalah format populer yang digunakan untuk mewakili data teks beranotasi.
Data berformat CoNLL biasanya berisi satu token dengan anotasi linguistiknya per baris; dalam baris yang sama, anotasi biasanya dipisahkan dengan spasi atau tab. Garis kosong mewakili batas kalimat.
Perhatikan contoh kalimat berikut dari kumpulan data conll2003 , yang mengikuti format anotasi CoNLL:
U.N. NNP I-NP I-ORG official
NN I-NP O
Ekeus NNP I-NP I-PER
heads VBZ I-VP O
for IN I-PP O
Baghdad NNP I-NP
I-LOC . . O O
ConllDatasetBuilder
Untuk menambahkan kumpulan data berbasis CoNLL baru ke TFDS, Anda dapat mendasarkan kelas pembuat kumpulan data Anda pada tfds.dataset_builders.ConllDatasetBuilder
. Kelas dasar ini berisi kode umum untuk menangani kekhususan kumpulan data CoNLL (mengulangi format berbasis kolom, daftar fitur dan tag yang telah dikompilasi, ...).
tfds.dataset_builders.ConllDatasetBuilder
mengimplementasikan GeneratorBasedBuilder
khusus CoNLL. Lihat kelas berikut sebagai contoh minimal pembuat himpunan data CoNLL:
from tensorflow_datasets.core.dataset_builders.conll import conll_dataset_builder_utils as conll_lib
import tensorflow_datasets.public_api as tfds
class MyCoNNLDataset(tfds.dataset_builders.ConllDatasetBuilder):
VERSION = tfds.core.Version('1.0.0')
RELEASE_NOTES = {'1.0.0': 'Initial release.'}
# conllu_lib contains a set of ready-to-use CONLL-specific configs.
BUILDER_CONFIGS = [conll_lib.CONLL_2003_CONFIG]
def _info(self) -> tfds.core.DatasetInfo:
return self.create_dataset_info(
# ...
)
def _split_generators(self, dl_manager):
path = dl_manager.download_and_extract('https://data-url')
return {'train': self._generate_examples(path=path / 'train.txt'),
'test': self._generate_examples(path=path / 'train.txt'),
}
Sedangkan untuk pembuat kumpulan data standar, perlu menimpa metode kelas _info
dan _split_generators
. Bergantung pada kumpulan data, Anda mungkin juga perlu memperbarui conll_dataset_builder_utils.py untuk menyertakan fitur dan daftar tag khusus untuk kumpulan data Anda.
Metode _generate_examples
tidak memerlukan penimpaan lebih lanjut, kecuali kumpulan data Anda memerlukan implementasi khusus.
Contoh
Pertimbangkan conll2003 sebagai contoh kumpulan data yang diimplementasikan menggunakan pembuat kumpulan data khusus CoNLL.
CLI
Cara termudah untuk menulis kumpulan data baru berbasis CoNLL adalah dengan menggunakan TFDS CLI :
cd path/to/my/project/datasets/
tfds new my_dataset --format=conll # Create `my_dataset/my_dataset.py` CoNLL-specific template files
CoNLL-U
Formatnya
CoNLL-U adalah format populer yang digunakan untuk mewakili data teks beranotasi.
CoNLL-U menyempurnakan format CoNLL dengan menambahkan sejumlah fitur, seperti dukungan untuk kata multi-token . Data berformat CoNLL-U biasanya berisi satu token dengan anotasi linguistiknya per baris; dalam baris yang sama, anotasi biasanya dipisahkan oleh karakter tab tunggal. Garis kosong mewakili batas kalimat.
Biasanya, setiap baris kata beranotasi CoNLL-U berisi bidang berikut, seperti yang dilaporkan dalam dokumentasi resmi :
- ID: Indeks kata, bilangan bulat dimulai dari 1 untuk setiap kalimat baru; mungkin merupakan rentang untuk token multi-kata; mungkin berupa angka desimal untuk node kosong (angka desimal boleh lebih rendah dari 1 tetapi harus lebih besar dari 0).
- BENTUK: Bentuk kata atau simbol tanda baca.
- LEMMA: Lemma atau bentuk kata dasar.
- UPOS: Tag bagian pidato universal.
- XPOS: Tag part-of-speech khusus bahasa; garis bawah jika tidak tersedia.
- FITUR: Daftar fitur morfologi dari inventaris fitur universal atau dari ekstensi khusus bahasa tertentu; garis bawah jika tidak tersedia.
- HEAD: Kepala kata saat ini, yang dapat berupa nilai ID atau nol (0).
- DEPREL: Hubungan ketergantungan universal dengan HEAD (root iff HEAD = 0) atau subtipe khusus bahasa yang ditentukan.
- DEPS: Grafik ketergantungan yang ditingkatkan dalam bentuk daftar pasangan head-deprel.
- MISC: Anotasi lainnya.
Pertimbangkan sebagai contoh kalimat beranotasi CoNLL-U berikut dari dokumentasi resmi :
1-2 vámonos _
1 vamos ir
2 nos nosotros
3-4 al _
3 a a
4 el el
5 mar mar
ConllUDatasetBuilder
Untuk menambahkan kumpulan data berbasis CoNLL-U baru ke TFDS, Anda dapat mendasarkan kelas pembuat kumpulan data Anda pada tfds.dataset_builders.ConllUDatasetBuilder
. Kelas dasar ini berisi kode umum untuk menangani kekhususan kumpulan data CoNLL-U (mengulangi format berbasis kolom, daftar fitur dan tag yang telah dikompilasi sebelumnya, ...).
tfds.dataset_builders.ConllUDatasetBuilder
mengimplementasikan GeneratorBasedBuilder
khusus CoNLL-U. Lihat kelas berikut sebagai contoh minimal pembuat himpunan data CoNLL-U:
from tensorflow_datasets.core.dataset_builders.conll import conllu_dataset_builder_utils as conllu_lib
import tensorflow_datasets.public_api as tfds
class MyCoNNLUDataset(tfds.dataset_builders.ConllUDatasetBuilder):
VERSION = tfds.core.Version('1.0.0')
RELEASE_NOTES = {'1.0.0': 'Initial release.'}
# conllu_lib contains a set of ready-to-use features.
BUILDER_CONFIGS = [
conllu_lib.get_universal_morphology_config(
language='en',
features=conllu_lib.UNIVERSAL_DEPENDENCIES_FEATURES,
)
]
def _info(self) -> tfds.core.DatasetInfo:
return self.create_dataset_info(
# ...
)
def _split_generators(self, dl_manager):
path = dl_manager.download_and_extract('https://data-url')
return {
'train':
self._generate_examples(
path=path / 'train.txt',
# If necessary, add optional custom processing (see conllu_lib
# for examples).
# process_example_fn=...,
)
}
Sedangkan untuk pembuat kumpulan data standar, perlu menimpa metode kelas _info
dan _split_generators
. Bergantung pada kumpulan data, Anda mungkin juga perlu memperbarui conllu_dataset_builder_utils.py untuk menyertakan fitur dan daftar tag khusus untuk kumpulan data Anda.
Metode _generate_examples
tidak memerlukan penimpaan lebih lanjut, kecuali kumpulan data Anda memerlukan implementasi khusus. Perhatikan bahwa, jika kumpulan data Anda memerlukan prapemrosesan tertentu - misalnya jika kumpulan data tersebut mempertimbangkan fitur ketergantungan universal non-klasik - Anda mungkin perlu memperbarui atribut process_example_fn
dari fungsi generate_examples
Anda (lihat daset xtreme_pos sebagai contoh).
Contoh
Pertimbangkan himpunan data berikut, yang menggunakan pembuat himpunan data khusus CoNNL-U, sebagai contoh:
CLI
Cara termudah untuk menulis kumpulan data baru berbasis CoNLL-U adalah dengan menggunakan TFDS CLI :
cd path/to/my/project/datasets/
tfds new my_dataset --format=conllu # Create `my_dataset/my_dataset.py` CoNLL-U specific template files