Bu kılavuz, şu anda TFDS'de mevcut olan tüm formata özel veri kümesi oluşturucularını belgelemektedir.
Formata özgü veri kümesi oluşturucuları, belirli bir veri formatı için çoğu veri işlemeyi üstlenen tfds.core.GeneratorBasedBuilder
alt sınıflarıdır.
tf.data.Dataset
temel alan veri kümeleri
tf.data.Dataset
( referans ) biçimindeki bir veri kümesinden TFDS veri kümesi oluşturmak istiyorsanız tfds.dataset_builders.TfDataBuilder
kullanabilirsiniz ( API belgelerine bakın).
Bu sınıfın iki tipik kullanımını öngörüyoruz:
- Dizüstü bilgisayar benzeri bir ortamda deneysel veri kümeleri oluşturma
- Kodda veri kümesi oluşturucuyu tanımlama
Not defterinden yeni bir veri kümesi oluşturma
Diyelim ki bir not defterinde çalışıyorsunuz, bazı verileri tf.data.Dataset
olarak yüklediniz, çeşitli dönüşümler (harita, filtre vb) uyguladınız ve artık bu verileri saklayıp ekip arkadaşlarınızla kolayca paylaşmak veya başka not defterlerine yüklemek istiyorsunuz. Yeni bir veri kümesi oluşturucu sınıfı tanımlamak yerine, bir tfds.dataset_builders.TfDataBuilder
örneğini oluşturabilir ve veri kümenizi bir TFDS veri kümesi olarak depolamak için download_and_prepare
öğesini çağırabilirsiniz.
Bu bir TFDS veri kümesi olduğundan onu sürümlendirebilir, yapılandırmaları kullanabilir, farklı bölmelere sahip olabilir ve daha sonra daha kolay kullanmak üzere belgeleyebilirsiniz. Bu, veri kümenizdeki özelliklerin neler olduğunu TFDS'ye de söylemeniz gerektiği anlamına gelir.
İşte bunu nasıl kullanabileceğinize dair kukla bir örnek.
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()
download_and_prepare
yöntemi, tf.data.Dataset
s girişi üzerinde yinelenecek ve karşılık gelen TFDS veri kümesini, hem eğitim hem de test bölümlerini içerecek olan /my/folder/my_dataset/single_number/1.0.0
içinde depolayacaktır.
config
bağımsız değişkeni isteğe bağlıdır ve farklı yapılandırmaları aynı veri kümesi altında depolamak istiyorsanız yararlı olabilir.
data_dir
argümanı, oluşturulan TFDS veri kümesini farklı bir klasörde, örneğin bunu başkalarıyla (henüz) paylaşmak istemiyorsanız kendi sanal alanınızda depolamak için kullanılabilir. Bunu yaparken data_dir
tfds.load
dosyasına da iletmeniz gerektiğini unutmayın. data_dir
argümanı belirtilmezse, varsayılan TFDS veri dizini kullanılacaktır.
Veri kümeniz yükleniyor
TFDS veri kümesi depolandıktan sonra, diğer komut dosyalarından veya verilere erişimleri varsa ekip arkadaşları tarafından yüklenebilir:
# 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)
Yeni bir sürüm veya yapılandırma ekleme
Veri kümenizde daha fazla yineleme yaptıktan sonra, kaynak verilerdeki bazı dönüşümleri eklemiş veya değiştirmiş olabilirsiniz. Bu veri kümesini saklamak ve paylaşmak için bunu kolayca yeni bir sürüm olarak saklayabilirsiniz.
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()
Yeni bir veri kümesi oluşturucu sınıfı tanımlama
Bu sınıfa dayalı olarak yeni bir DatasetBuilder
da tanımlayabilirsiniz.
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!",
})
Kruvasan Oluşturucu
format
Croissant 🥐, meta verileri, kaynak dosya açıklamalarını, veri yapısını ve varsayılan ML semantiğini tek bir dosyada birleştiren, makine öğrenimi veri kümeleri için üst düzey bir formattır; bulmayı, kullanmayı ve araçlarla desteklemeyi kolaylaştırmak için mevcut veri kümeleriyle birlikte çalışır.
Croissant, Web'deki veri kümelerini temsil etmek ve onları aranabilir kılmak için yaygın olarak kullanılan bir format olan schema.org'u ve onun sc:Dataset
kelime dağarcığını temel alır.
CroissantBuilder
CroissantBuilder
Croissant 🥐 meta veri dosyasını temel alan bir TFDS veri kümesini tanımlar; Belirtilen record_set_ids
her biri ayrı bir ConfigBuilder
ile sonuçlanacaktır.
Örneğin, MNIST veri kümesi için Croissant 🥐 tanımını kullanarak bir CroissantBuilder
başlatmak için:
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])
KONLL
format
CoNLL, açıklamalı metin verilerini temsil etmek için kullanılan popüler bir formattır.
CoNLL formatlı veriler genellikle her satırda dilsel açıklamalarla birlikte bir belirteç içerir; aynı satırda ek açıklamalar genellikle boşluklarla veya sekmelerle ayrılır. Boş satırlar cümle sınırlarını temsil eder.
Örnek olarak conll2003 veri kümesinden alınan ve CoNLL ek açıklama formatını izleyen aşağıdaki cümleyi düşünün:
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
TFDS'ye yeni bir CoNLL tabanlı veri kümesi eklemek için veri kümesi oluşturucu sınıfınızı tfds.dataset_builders.ConllDatasetBuilder
dayandırabilirsiniz. Bu temel sınıf, CoNLL veri kümelerinin özellikleriyle başa çıkmak için ortak kod içerir (sütun tabanlı format üzerinde yineleme, önceden derlenmiş özellik ve etiket listeleri, ...).
tfds.dataset_builders.ConllDatasetBuilder
CoNLL'ye özgü bir GeneratorBasedBuilder
uygular. CoNLL veri kümesi oluşturucusunun minimum örneği olarak aşağıdaki sınıfa bakın:
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'),
}
Standart veri kümesi oluşturucularına gelince, _info
ve _split_generators
sınıf yöntemlerinin üzerine yazılmasını gerektirir. Veri kümesine bağlı olarak, veri kümenize özgü özellikleri ve etiket listesini eklemek için conll_dataset_builder_utils.py dosyasını da güncellemeniz gerekebilir.
Veri kümeniz özel bir uygulamaya ihtiyaç duymadığı sürece _generate_examples
yönteminin daha fazla üzerine yazılmasını gerektirmemesi gerekir.
Örnekler
Conll2003'ü, CoNLL'ye özgü veri kümesi oluşturucusu kullanılarak uygulanan bir veri kümesi örneği olarak düşünün.
CLI
Yeni bir CoNLL tabanlı veri kümesi yazmanın en kolay yolu TFDS CLI'yi kullanmaktır:
cd path/to/my/project/datasets/
tfds new my_dataset --format=conll # Create `my_dataset/my_dataset.py` CoNLL-specific template files
CoNLL-U
format
CoNLL-U, açıklamalı metin verilerini temsil etmek için kullanılan popüler bir formattır.
CoNLL-U , çoklu belirteçli kelimelerin desteklenmesi gibi bir dizi özellik ekleyerek CoNLL formatını geliştirir. CoNLL-U formatlı veriler genellikle her satırda dilsel açıklamalarla birlikte bir belirteç içerir; aynı satırdaki ek açıklamalar genellikle tek sekme karakterleriyle ayrılır. Boş satırlar cümle sınırlarını temsil eder.
Tipik olarak, her CoNLL-U açıklamalı kelime satırı, resmi belgelerde bildirildiği gibi aşağıdaki alanları içerir:
- ID: Kelime dizini, her yeni cümle için 1'den başlayan tamsayı; çok kelimeli belirteçler için bir aralık olabilir; boş düğümler için ondalık sayı olabilir (ondalık sayılar 1'den küçük olabilir ancak 0'dan büyük olmalıdır).
- FORM: Kelime formu veya noktalama işareti sembolü.
- LEMMA: Lemma veya kelime biçiminin kökü.
- UPOS: Evrensel konuşma parçası etiketi.
- XPOS: Dile özgü konuşma bölümü etiketi; mevcut değilse alt çizgi.
- ÖZELLİKLER: Evrensel özellik envanterinden veya tanımlanmış bir dile özgü uzantıdan morfolojik özelliklerin listesi; mevcut değilse alt çizgi.
- HEAD: ID veya sıfır (0) değeri olan geçerli kelimenin başı.
- DEPREL: HEAD'e (kök iff HEAD = 0) veya tanımlanmış dile özgü bir alt türe evrensel bağımlılık ilişkisi.
- DEPS: Kafa-deprel çiftlerinin listesi biçiminde geliştirilmiş bağımlılık grafiği.
- MISC: Başka herhangi bir açıklama.
Örnek olarak resmi belgelerden alınan aşağıdaki CoNLL-U açıklamalı cümlesini düşünün:
1-2 vámonos _
1 vamos ir
2 nos nosotros
3-4 al _
3 a a
4 el el
5 mar mar
ConllUDatasetBuilder
TFDS'ye yeni bir CoNLL-U tabanlı veri kümesi eklemek için veri kümesi oluşturucu sınıfınızı tfds.dataset_builders.ConllUDatasetBuilder
dayandırabilirsiniz. Bu temel sınıf, CoNLL-U veri kümelerinin özellikleriyle başa çıkmak için ortak kod içerir (sütun tabanlı format üzerinde yineleme, önceden derlenmiş özellik ve etiket listeleri, ...).
tfds.dataset_builders.ConllUDatasetBuilder
CoNLL-U'ya özgü bir GeneratorBasedBuilder
uygular. CoNLL-U veri kümesi oluşturucusunun minimum örneği olarak aşağıdaki sınıfa bakın:
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=...,
)
}
Standart veri kümesi oluşturucularına gelince, _info
ve _split_generators
sınıf yöntemlerinin üzerine yazılmasını gerektirir. Veri kümesine bağlı olarak, veri kümenize özgü özellikleri ve etiket listesini eklemek için conllu_dataset_builder_utils.py dosyasını da güncellemeniz gerekebilir.
Veri kümeniz özel bir uygulamaya ihtiyaç duymadığı sürece _generate_examples
yönteminin daha fazla üzerine yazılmasını gerektirmemesi gerekir. Veri kümeniz belirli bir ön işleme gerektiriyorsa (örneğin, klasik olmayan evrensel bağımlılık özelliklerini dikkate alıyorsa), generate_examples
işlevinizin process_example_fn
niteliğini güncellemeniz gerekebileceğini unutmayın (örnek olarak xtreme_pos veri kümesine bakın).
Örnekler
Örnek olarak CoNNL-U'ya özgü veri kümesi oluşturucusunu kullanan aşağıdaki veri kümelerini göz önünde bulundurun:
CLI
Yeni bir CoNLL-U tabanlı veri kümesi yazmanın en kolay yolu TFDS CLI'yi kullanmaktır:
cd path/to/my/project/datasets/
tfds new my_dataset --format=conllu # Create `my_dataset/my_dataset.py` CoNLL-U specific template files