מדריך זה מתעד את כל בוני הנתונים הספציפיים לפורמט הזמינים כעת ב-TFDS.
בוני נתונים ספציפיים לפורמט הם תת-מחלקות של tfds.core.GeneratorBasedBuilder
אשר דואגים לרוב עיבוד הנתונים עבור פורמט נתונים ספציפי.
מערכי נתונים המבוססים על tf.data.Dataset
אם ברצונך ליצור מערך נתונים של TFDS מתוך מערך נתונים בפורמט tf.data.Dataset
( reference ), אז אתה יכול להשתמש ב- 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
my_dataset/single_number/1.0.0, שיכיל גם את פיצולי הרכבת וגם את הבדיקה.
הארגומנט config
הוא אופציונלי ויכול להיות שימושי אם ברצונך לאחסן תצורות שונות תחת אותו מערך נתונים.
ניתן להשתמש בארגומנט data_dir
כדי לאחסן את מערך הנתונים של TFDS שנוצר בתיקייה אחרת, למשל בארגז החול שלך אם אינך רוצה לשתף את זה עם אחרים (עדיין). שימו לב שכאשר עושים זאת, עליכם גם להעביר את data_dir
אל tfds.load
. אם הארגומנט data_dir
לא צוין, אזי ישמש ברירת המחדל של TFDS data dir.
טוען את מערך הנתונים שלך
לאחר שמערך הנתונים של 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!",
})
CroissantBuilder
הפורמט
Croissant 🥐 הוא פורמט ברמה גבוהה עבור מערכי נתונים של למידת מכונה המשלב מטא נתונים, תיאורי קבצי משאבים, מבנה נתונים וסמנטיקה של ברירת מחדל של ML לקובץ אחד; זה עובד עם מערכי נתונים קיימים כדי להקל עליהם למצוא, להשתמש בהם ולתמוך בהם בכלים.
Croissant בונה על 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.
CLI
הדרך הקלה ביותר לכתוב מערך נתונים חדש מבוסס 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 מכילה את השדות הבאים, כפי שדווח בתיעוד הרשמי :
- מזהה: אינדקס מילים, מספר שלם שמתחיל ב-1 עבור כל משפט חדש; עשוי להיות טווח עבור אסימונים מרובי מילים; יכול להיות מספר עשרוני עבור צמתים ריקים (מספרים עשרוניים יכולים להיות נמוכים מ-1 אך חייבים להיות גדולים מ-0).
- צורה: צורת מילה או סמל פיסוק.
- LEMMA: Lemma או גזע של צורת מילה.
- UPOS: תג חלק-דיבור אוניברסלי.
- XPOS: תג חלק-דיבור ספציפי לשפה; קו תחתון אם אינו זמין.
- הישגים: רשימה של מאפיינים מורפולוגיים מתוך מלאי התכונות האוניברסליות או מהרחבה מוגדרת ספציפית לשפה; קו תחתון אם אינו זמין.
- HEAD: ראש המילה הנוכחית, שהיא ערך של ID או אפס (0).
- DEPREL: קשר תלות אוניברסלי ל-HEAD (שורש אם HEAD = 0) או תת-סוג מוגדר לשפה ספציפית של אחד.
- DEPS: גרף תלות משופר בצורה של רשימה של זוגות ראש-דפרל.
- 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 כדוגמה).
דוגמאות
שקול את מערכי הנתונים הבאים, המשתמשים בבונה הנתונים הספציפי של CoNNL-U, כדוגמאות:
CLI
הדרך הקלה ביותר לכתוב מערך נתונים חדש מבוסס 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