คู่มือนี้จัดทำเอกสารเกี่ยวกับตัวสร้างชุดข้อมูลเฉพาะรูปแบบทั้งหมดที่มีอยู่ใน TFDS ในปัจจุบัน
ตัวสร้างชุดข้อมูลเฉพาะรูปแบบคือคลาสย่อยของ tfds.core.GeneratorBasedBuilder
ซึ่งดูแลการประมวลผลข้อมูลส่วนใหญ่สำหรับรูปแบบข้อมูลเฉพาะ
ชุดข้อมูลที่อิงตาม tf.data.Dataset
หากคุณต้องการสร้างชุดข้อมูล TFDS จากชุดข้อมูลที่อยู่ในรูปแบบ tf.data.Dataset
( อ้างอิง ) คุณสามารถใช้ tfds.dataset_builders.TfDataBuilder
(ดู เอกสาร API )
เราจินตนาการถึงการใช้งานทั่วไปสองประการของคลาสนี้:
- การสร้างชุดข้อมูลทดลองในสภาพแวดล้อมแบบโน้ตบุ๊ก
- การกำหนดตัวสร้างชุดข้อมูลในโค้ด
การสร้างชุดข้อมูลใหม่จากสมุดบันทึก
สมมติว่าคุณกำลังทำงานในสมุดบันทึก โหลดข้อมูลบางส่วนเป็น tf.data.Dataset
ใช้การแปลงต่างๆ (แผนที่ ตัวกรอง ฯลฯ) และตอนนี้คุณต้องการจัดเก็บข้อมูลนี้และแชร์กับเพื่อนร่วมทีมอย่างง่ายดาย หรือโหลดลงในสมุดบันทึกอื่น แทนที่จะต้องกำหนดคลาสตัวสร้างชุดข้อมูลใหม่ คุณยังสามารถสร้างอินสแตนซ์ tfds.dataset_builders.TfDataBuilder
และเรียก download_and_prepare
เพื่อจัดเก็บชุดข้อมูลของคุณเป็นชุดข้อมูล TFDS
เนื่องจากเป็นชุดข้อมูล TFDS คุณจึงกำหนดเวอร์ชัน ใช้การกำหนดค่า มีการแยกที่แตกต่างกัน และจัดทำเอกสารไว้เพื่อใช้ได้ง่ายขึ้นในภายหลัง ซึ่งหมายความว่าคุณต้องบอก TFDS ด้วยว่าฟีเจอร์ต่างๆ ในชุดข้อมูลของคุณมีอะไรบ้าง
นี่คือตัวอย่างคร่าวๆ ของวิธีการใช้งาน
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
จะวนซ้ำอินพุต tf.data.Dataset
s และจัดเก็บชุดข้อมูล TFDS ที่เกี่ยวข้องใน /my/folder/my_dataset/single_number/1.0.0
ซึ่งจะมีทั้งการแยกรถไฟและการทดสอบ
อาร์กิวเมนต์ config
เป็นทางเลือกและมีประโยชน์หากคุณต้องการจัดเก็บการกำหนดค่าที่แตกต่างกันภายใต้ชุดข้อมูลเดียวกัน
อาร์กิวเมนต์ data_dir
สามารถใช้เพื่อจัดเก็บชุดข้อมูล TFDS ที่สร้างขึ้นในโฟลเดอร์อื่น เช่น ในแซนด์บ็อกซ์ของคุณเอง หากคุณไม่ต้องการแชร์สิ่งนี้กับผู้อื่น (ยัง) โปรดทราบว่าเมื่อทำเช่นนี้ คุณจะต้องส่ง data_dir
ไปที่ tfds.load
ด้วย หากไม่ได้ระบุอาร์กิวเมนต์ data_dir
ดังนั้นข้อมูล dir ของ TFDS เริ่มต้นจะถูกนำมาใช้
กำลังโหลดชุดข้อมูลของคุณ
หลังจากจัดเก็บชุดข้อมูล TFDS แล้ว จะสามารถโหลดจากสคริปต์อื่นหรือโดยเพื่อนร่วมทีมได้หากพวกเขามีสิทธิ์เข้าถึงข้อมูล:
# 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)
การเพิ่มเวอร์ชันใหม่หรือการกำหนดค่า
หลังจากทำซ้ำเพิ่มเติมในชุดข้อมูลของคุณ คุณอาจเพิ่มหรือเปลี่ยนแปลงการแปลงข้อมูลต้นฉบับบางส่วน หากต้องการจัดเก็บและแชร์ชุดข้อมูลนี้ คุณสามารถจัดเก็บเป็นเวอร์ชันใหม่ได้อย่างง่ายดาย
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()
การกำหนดคลาสตัวสร้างชุดข้อมูลใหม่
คุณยังสามารถกำหนด DatasetBuilder
ใหม่ตามคลาสนี้ได้
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!",
})
ครัวซองต์Builder
รูปแบบ
Croissant 🥐 เป็นรูปแบบระดับสูงสำหรับชุดข้อมูลการเรียนรู้ของเครื่องที่รวมข้อมูลเมตา คำอธิบายไฟล์ทรัพยากร โครงสร้างข้อมูล และความหมาย ML เริ่มต้นไว้ในไฟล์เดียว โดยทำงานร่วมกับชุดข้อมูลที่มีอยู่เพื่อให้ค้นหา ใช้งาน และสนับสนุนด้วยเครื่องมือได้ง่ายขึ้น
ครัวซองต์สร้างขึ้นบน schema.org และคำศัพท์ sc:Dataset
ซึ่งเป็นรูปแบบที่ใช้กันอย่างแพร่หลายในการนำเสนอชุดข้อมูลบนเว็บ และทำให้สามารถค้นหาได้
CroissantBuilder
CroissantBuilder
กำหนดชุดข้อมูล TFDS ตามไฟล์ข้อมูลเมตา Croissant 🥐 แต่ละ record_set_ids
ที่ระบุจะส่งผลให้ ConfigBuilder
แยกกัน
ตัวอย่างเช่น ในการเริ่มต้น CroissantBuilder
สำหรับชุดข้อมูล MNIST โดยใช้ คำจำกัดความ 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])
คอนเอ็นแอล
รูปแบบ
CoNLL เป็นรูปแบบยอดนิยมที่ใช้เพื่อแสดงข้อมูลข้อความที่มีคำอธิบายประกอบ
ข้อมูลที่จัดรูปแบบ CoNLL มักจะมีหนึ่งโทเค็นพร้อมคำอธิบายประกอบทางภาษาต่อบรรทัด ภายในบรรทัดเดียวกัน คำอธิบายประกอบมักจะคั่นด้วยช่องว่างหรือแท็บ บรรทัดว่างแสดงถึงขอบเขตของประโยค
พิจารณาเป็นตัวอย่างประโยคต่อไปนี้จากชุดข้อมูล conll2003 ซึ่งเป็นไปตามรูปแบบคำอธิบายประกอบ 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
หากต้องการเพิ่มชุดข้อมูลที่ใช้ CoNLL ใหม่ลงใน TFDS คุณสามารถสร้างคลาสตัวสร้างชุดข้อมูลเป็นฐานบน tfds.dataset_builders.ConllDatasetBuilder
คลาสพื้นฐานนี้มีโค้ดทั่วไปเพื่อจัดการกับข้อมูลเฉพาะของชุดข้อมูล CoNLL (วนซ้ำในรูปแบบตามคอลัมน์ รายการคุณลักษณะและแท็กที่คอมไพล์ไว้ล่วงหน้า ...)
tfds.dataset_builders.ConllDatasetBuilder
ใช้งาน GeneratorBasedBuilder
เฉพาะ CoNLL อ้างถึงคลาสต่อไปนี้เป็นตัวอย่างขั้นต่ำของตัวสร้างชุดข้อมูล 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'),
}
สำหรับตัวสร้างชุดข้อมูลมาตรฐาน จำเป็นต้องเขียนทับเมธอดคลาส _info
และ _split_generators
คุณอาจต้องอัปเดต conll_dataset_builder_utils.py ด้วยเพื่อรวมคุณลักษณะและรายการแท็กเฉพาะสำหรับชุดข้อมูลของคุณ ทั้งนี้ขึ้นอยู่กับชุดข้อมูล
เมธอด _generate_examples
ไม่ควรต้องมีการเขียนทับเพิ่มเติม เว้นแต่ชุดข้อมูลของคุณต้องการการใช้งานที่เฉพาะเจาะจง
ตัวอย่าง
พิจารณา conll2003 เป็นตัวอย่างของชุดข้อมูลที่นำไปใช้งานโดยใช้ตัวสร้างชุดข้อมูลเฉพาะของ CoNLL
คลีไอ
วิธีที่ง่ายที่สุดในการเขียนชุดข้อมูลที่ใช้ CoNLL ใหม่คือการใช้ 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
รูปแบบ
CoNLL-U เป็นรูปแบบยอดนิยมที่ใช้เพื่อแสดงข้อมูลข้อความที่มีคำอธิบายประกอบ
CoNLL-U ปรับปรุงรูปแบบ CoNLL โดยการเพิ่มคุณลักษณะหลายอย่าง เช่น การรองรับ คำที่มีหลายโทเค็น ข้อมูลที่จัดรูปแบบ CoNLL-U มักจะมีหนึ่งโทเค็นพร้อมคำอธิบายประกอบทางภาษาต่อบรรทัด ภายในบรรทัดเดียวกัน คำอธิบายประกอบมักจะคั่นด้วยอักขระแท็บเดียว บรรทัดว่างแสดงถึงขอบเขตของประโยค
โดยทั่วไป แต่ละบรรทัดคำที่มีคำอธิบายประกอบ CoNLL-U จะมีฟิลด์ต่อไปนี้ ตามที่รายงานใน เอกสารอย่างเป็นทางการ :
- ID: ดัชนีคำ จำนวนเต็มเริ่มต้นที่ 1 สำหรับแต่ละประโยคใหม่ อาจเป็นช่วงสำหรับโทเค็นหลายคำ อาจเป็นเลขฐานสิบสำหรับโหนดว่าง (เลขฐานสิบสามารถต่ำกว่า 1 แต่ต้องมากกว่า 0)
- FORM: รูปแบบคำหรือสัญลักษณ์เครื่องหมายวรรคตอน
- LEMMA: บทแทรกหรือก้านของรูปแบบคำ
- UPOS: แท็กส่วนหนึ่งของคำพูดสากล
- XPOS: แท็กส่วนของคำพูดเฉพาะภาษา ขีดเส้นใต้หากไม่มี
- FEATS: รายการคุณสมบัติทางสัณฐานวิทยาจากรายการคุณสมบัติสากลหรือจากส่วนขยายเฉพาะภาษาที่กำหนด ขีดเส้นใต้หากไม่มี
- HEAD: ส่วนหัวของคำปัจจุบัน ซึ่งเป็นค่า ID หรือศูนย์ (0)
- DEPREL: ความสัมพันธ์การพึ่งพาสากลกับ HEAD (root iff HEAD = 0) หรือประเภทย่อยเฉพาะภาษาที่กำหนดของประเภทหนึ่ง
- DEPS: กราฟการพึ่งพาที่ได้รับการปรับปรุงในรูปแบบของรายการคู่ head-deprel
- MISC: คำอธิบายประกอบอื่นๆ
พิจารณาเป็นตัวอย่างประโยคที่มีคำอธิบายประกอบ CoNLL-U ต่อไปนี้จาก เอกสารอย่างเป็นทางการ :
1-2 vámonos _
1 vamos ir
2 nos nosotros
3-4 al _
3 a a
4 el el
5 mar mar
ConllUDatasetBuilder
หากต้องการเพิ่มชุดข้อมูลที่ใช้ CoNLL-U ใหม่ลงใน TFDS คุณสามารถสร้างคลาสตัวสร้างชุดข้อมูลเป็นฐานบน tfds.dataset_builders.ConllUDatasetBuilder
คลาสพื้นฐานนี้มีโค้ดทั่วไปเพื่อจัดการกับลักษณะเฉพาะของชุดข้อมูล CoNLL-U (วนซ้ำในรูปแบบตามคอลัมน์ รายการคุณลักษณะและแท็กที่คอมไพล์ไว้ล่วงหน้า ...)
tfds.dataset_builders.ConllUDatasetBuilder
ใช้งาน GeneratorBasedBuilder
เฉพาะ CoNLL-U อ้างถึงคลาสต่อไปนี้เป็นตัวอย่างขั้นต่ำของตัวสร้างชุดข้อมูล 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=...,
)
}
สำหรับตัวสร้างชุดข้อมูลมาตรฐาน จำเป็นต้องเขียนทับเมธอดคลาส _info
และ _split_generators
คุณอาจต้องอัปเดต conllu_dataset_builder_utils.py ด้วยเพื่อรวมคุณลักษณะและรายการแท็กเฉพาะสำหรับชุดข้อมูลของคุณ ทั้งนี้ขึ้นอยู่กับชุดข้อมูล
เมธอด _generate_examples
ไม่ควรต้องมีการเขียนทับเพิ่มเติม เว้นแต่ชุดข้อมูลของคุณต้องการการใช้งานที่เฉพาะเจาะจง โปรดทราบว่า หากชุดข้อมูลของคุณต้องการการประมวลผลล่วงหน้าเฉพาะ เช่น หากพิจารณา คุณลักษณะการพึ่งพาสากล ที่ไม่ใช่แบบคลาสสิก คุณอาจต้องอัปเดตแอตทริบิวต์ process_example_fn
ของฟังก์ชัน generate_examples
ของคุณ (ดู xtreme_pos daset เป็นตัวอย่าง)
ตัวอย่าง
พิจารณาชุดข้อมูลต่อไปนี้ ซึ่งใช้ตัวสร้างชุดข้อมูลเฉพาะ ConNNL-U เป็นตัวอย่าง:
คลีไอ
วิธีที่ง่ายที่สุดในการเขียนชุดข้อมูลที่ใช้ CoNLL-U ใหม่คือการใช้ 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