বিন্যাস-নির্দিষ্ট ডেটাসেট নির্মাতা

এই নির্দেশিকাটি বর্তমানে TFDS-এ উপলব্ধ সমস্ত ফর্ম্যাট-নির্দিষ্ট ডেটাসেট নির্মাতাদের নথিভুক্ত করে।

ফর্ম্যাট-নির্দিষ্ট ডেটাসেট নির্মাতারা tfds.core.GeneratorBasedBuilder এর সাবক্লাস যা একটি নির্দিষ্ট ডেটা ফর্ম্যাটের জন্য বেশিরভাগ ডেটা প্রক্রিয়াকরণের যত্ন নেয়।

tf.data.Dataset এর উপর ভিত্তি করে ডেটাসেট

আপনি যদি tf.data.Dataset ( রেফারেন্স ) বিন্যাসে একটি ডেটাসেট থেকে একটি TFDS ডেটাসেট তৈরি করতে চান, তাহলে আপনি tfds.dataset_builders.TfDataBuilder ব্যবহার করতে পারেন ( এপিআই ডক্স দেখুন)।

আমরা এই শ্রেণীর দুটি সাধারণ ব্যবহার কল্পনা করি:

  • একটি নোটবুকের মতো পরিবেশে পরীক্ষামূলক ডেটাসেট তৈরি করা
  • কোডে একটি ডেটাসেট নির্মাতাকে সংজ্ঞায়িত করা

একটি নোটবুক থেকে একটি নতুন ডেটাসেট তৈরি করা

ধরুন আপনি একটি নোটবুকে কাজ করছেন, tf.data.Dataset হিসাবে কিছু ডেটা লোড করেছেন, বিভিন্ন রূপান্তর (মানচিত্র, ফিল্টার, ইত্যাদি) প্রয়োগ করেছেন এবং এখন আপনি এই ডেটা সংরক্ষণ করতে চান এবং সহজেই সতীর্থদের সাথে ভাগ করতে চান বা অন্য নোটবুকে লোড করতে চান৷ একটি নতুন ডেটাসেট বিল্ডার ক্লাস সংজ্ঞায়িত করার পরিবর্তে, আপনি একটি tfds.dataset_builders.TfDataBuilder ইনস্ট্যান্টিয়েট করতে পারেন এবং একটি TFDS ডেটাসেট হিসাবে আপনার ডেটাসেট সংরক্ষণ করতে download_and_prepare কল করতে পারেন৷

যেহেতু এটি একটি 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 ডেটাসেটকে একটি ভিন্ন ফোল্ডারে সংরক্ষণ করতে ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ আপনার নিজের স্যান্ডবক্সে যদি আপনি এটি অন্যদের সাথে শেয়ার করতে না চান (এখনও)। মনে রাখবেন যে এটি করার সময়, আপনাকে tfds.loaddata_dir পাস করতে হবে। যদি data_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!",
        })

CroissantBuilder

বিন্যাস

Croissant 🥐 হল মেশিন লার্নিং ডেটাসেটের জন্য একটি উচ্চ-স্তরের বিন্যাস যা মেটাডেটা, রিসোর্স ফাইলের বিবরণ, ডেটা স্ট্রাকচার এবং ডিফল্ট ML শব্দার্থবিদ্যাকে একটি ফাইলে একত্রিত করে; এটি বিদ্যমান ডেটাসেটগুলির সাথে কাজ করে যাতে সেগুলিকে খুঁজে পাওয়া, ব্যবহার করা এবং সরঞ্জামগুলির সাহায্যে সহায়তা করা সহজ হয়৷

Croissant schema.org এবং এর sc:Dataset শব্দভান্ডারে তৈরি করে, ওয়েবে ডেটাসেটগুলিকে উপস্থাপন করতে এবং সেগুলিকে অনুসন্ধানযোগ্য করে তুলতে একটি বহুল ব্যবহৃত ফর্ম্যাট৷

CroissantBuilder

একটি CroissantBuilder একটি Croissant 🥐 মেটাডেটা ফাইলের উপর ভিত্তি করে একটি TFDS ডেটাসেট সংজ্ঞায়িত করে; নির্দিষ্ট করা প্রতিটি record_set_ids একটি পৃথক ConfigBuilder তৈরি করবে।

উদাহরণস্বরূপ, MNIST ডেটাসেটের জন্য Croissant 🥐 সংজ্ঞা ব্যবহার করে একটি CroissantBuilder শুরু করতে:

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

TFDS-এ একটি নতুন CoNLL-ভিত্তিক ডেটাসেট যোগ করতে, আপনি tfds.dataset_builders.ConllDatasetBuilder এ আপনার ডেটাসেট বিল্ডার ক্লাসের ভিত্তি করতে পারেন। এই বেস ক্লাসে CoNLL ডেটাসেটের বিশেষত্বের সাথে মোকাবিলা করার জন্য সাধারণ কোড রয়েছে (কলাম-ভিত্তিক বিন্যাসে পুনরাবৃত্তি করা, বৈশিষ্ট্য এবং ট্যাগের পূর্ব-সংকলিত তালিকা, ...)।

tfds.dataset_builders.ConllDatasetBuilder একটি CoNLL-নির্দিষ্ট GeneratorBasedBuilder প্রয়োগ করে। একটি 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 পদ্ধতিতে আর ওভাররাইট করার প্রয়োজন হবে না, যদি না আপনার ডেটাসেটের নির্দিষ্ট বাস্তবায়নের প্রয়োজন হয়।

উদাহরণ

CoNLL-নির্দিষ্ট ডেটাসেট বিল্ডার ব্যবহার করে বাস্তবায়িত একটি ডেটাসেটের উদাহরণ হিসাবে conll2003 কে বিবেচনা করুন।

সিএলআই

একটি নতুন 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: লেমা বা শব্দ ফর্মের স্টেম।
  • ইউপিওএস: ইউনিভার্সাল পার্ট-অফ-স্পীচ ট্যাগ।
  • XPOS: ভাষা-নির্দিষ্ট অংশ-অফ-স্পীচ ট্যাগ; উপলব্ধ না হলে আন্ডারস্কোর।
  • FEATS: সার্বজনীন বৈশিষ্ট্য তালিকা থেকে বা একটি সংজ্ঞায়িত ভাষা-নির্দিষ্ট এক্সটেনশন থেকে রূপগত বৈশিষ্ট্যের তালিকা; উপলব্ধ না হলে আন্ডারস্কোর।
  • HEAD: বর্তমান শব্দের প্রধান, যা হয় ID এর মান বা শূন্য (0)।
  • DEPREL: HEAD এর সাথে সার্বজনীন নির্ভরতা সম্পর্ক (root IF 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

TFDS-এ একটি নতুন CoNLL-U ভিত্তিক ডেটাসেট যোগ করতে, আপনি tfds.dataset_builders.ConllUDatasetBuilder এ আপনার ডেটাসেট বিল্ডার ক্লাসের ভিত্তি করতে পারেন। এই বেস ক্লাসে CoNLL-U ডেটাসেটের বিশেষত্বের সাথে মোকাবিলা করার জন্য সাধারণ কোড রয়েছে (কলাম-ভিত্তিক বিন্যাস, বৈশিষ্ট্য এবং ট্যাগের পূর্বে সংকলিত তালিকা, ...)।

tfds.dataset_builders.ConllUDatasetBuilder একটি CoNLL-U নির্দিষ্ট GeneratorBasedBuilder প্রয়োগ করে। একটি 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 পদ্ধতিতে আর ওভাররাইট করার প্রয়োজন হবে না, যদি না আপনার ডেটাসেটের নির্দিষ্ট বাস্তবায়নের প্রয়োজন হয়। মনে রাখবেন, যদি আপনার ডেটাসেটের নির্দিষ্ট প্রিপ্রসেসিংয়ের প্রয়োজন হয় - উদাহরণস্বরূপ যদি এটি নন-ক্লাসিক সার্বজনীন নির্ভরতা বৈশিষ্ট্যগুলি বিবেচনা করে - আপনাকে আপনার generate_examples ফাংশনের process_example_fn বৈশিষ্ট্য আপডেট করতে হতে পারে (একটি উদাহরণ হিসাবে xtreme_pos ডেসেটটি দেখুন)।

উদাহরণ

উদাহরণ হিসাবে নিম্নলিখিত ডেটাসেটগুলি বিবেচনা করুন, যা CoNNL-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