เพิ่มคอลเลกชันชุดข้อมูลใหม่

ปฏิบัติตามคำแนะนำนี้เพื่อสร้างคอลเล็กชันชุดข้อมูลใหม่ (ใน TFDS หรือในที่เก็บของคุณเอง)

ภาพรวม

หากต้องการเพิ่มคอลเลกชันชุดข้อมูลใหม่ my_collection ไปยัง TFDS ผู้ใช้จำเป็นต้องสร้างโฟลเดอร์ my_collection ที่มีไฟล์ต่อไปนี้:

my_collection/
  __init__.py
  my_collection.py # Dataset collection definition
  my_collection_test.py # (Optional) test
  description.md # (Optional) collection description (if not included in my_collection.py)
  citations.md # (Optional) collection citations (if not included in my_collection.py)

ตามแบบแผน ควรเพิ่มคอลเลกชันชุดข้อมูลใหม่ลงในโฟลเดอร์ tensorflow_datasets/dataset_collections/ ในที่เก็บ TFDS

เขียนคอลเลกชันชุดข้อมูลของคุณ

คอลเลกชันชุดข้อมูลทั้งหมดมีการใช้งานคลาสย่อยของ tfds.core.dataset_collection_builder.DatasetCollection

นี่คือตัวอย่างขั้นต่ำของตัวสร้างคอลเลกชันชุดข้อมูล ที่กำหนดไว้ในไฟล์ my_collection.py :

import collections
from typing import Mapping
from tensorflow_datasets.core import dataset_collection_builder
from tensorflow_datasets.core import naming

class MyCollection(dataset_collection_builder.DatasetCollection):
  """Dataset collection builder my_dataset_collection."""

  @property
  def info(self) -> dataset_collection_builder.DatasetCollectionInfo:
    return dataset_collection_builder.DatasetCollectionInfo.from_cls(
        dataset_collection_class=self.__class__,
        description="my_dataset_collection description.",
        release_notes={
            "1.0.0": "Initial release",
        },
    )

  @property
  def datasets(
      self,
  ) -> Mapping[str, Mapping[str, naming.DatasetReference]]:
    return collections.OrderedDict({
        "1.0.0":
            naming.references_for({
                "dataset_1": "natural_questions/default:0.0.2",
                "dataset_2": "media_sum:1.0.0",
            }),
        "1.1.0":
            naming.references_for({
                "dataset_1": "natural_questions/longt5:0.1.0",
                "dataset_2": "media_sum:1.0.0",
                "dataset_3": "squad:3.0.0"
            })
    })

ส่วนถัดไปจะอธิบายวิธีการเชิงนามธรรม 2 วิธีที่จะเขียนทับ

info : ข้อมูลเมตาของการรวบรวมชุดข้อมูล

เมธอด info ส่งคืน dataset_collection_builder.DatasetCollectionInfo ที่มีข้อมูลเมตาของคอลเลกชัน

ข้อมูลการรวบรวมชุดข้อมูลประกอบด้วยสี่ฟิลด์:

  • name: ชื่อของคอลเลกชันชุดข้อมูล
  • คำอธิบาย: คำอธิบายที่จัดรูปแบบมาร์กดาวน์ของคอลเลกชันชุดข้อมูล มีสองวิธีในการกำหนดคำอธิบายของคอลเลกชันชุดข้อมูล: (1) เป็นสตริง (หลายบรรทัด) โดยตรงในไฟล์ my_collection.py ของคอลเลกชัน - ในลักษณะเดียวกับที่ทำกับชุดข้อมูล TFDS แล้ว; (2) ในไฟล์ description.md ซึ่งจะต้องวางไว้ในโฟลเดอร์คอลเลกชันชุดข้อมูล
  • release_notes: การแมปจากเวอร์ชันของคอลเลกชันชุดข้อมูลไปยังบันทึกประจำรุ่นที่เกี่ยวข้อง
  • การอ้างอิง: ตัวเลือก (รายการ) การอ้างอิง BibTeX สำหรับคอลเลกชันชุดข้อมูล มีสองวิธีในการกำหนดการอ้างอิงของคอลเลกชันชุดข้อมูล: (1) เป็นสตริง (หลายบรรทัด) โดยตรงในไฟล์ my_collection.py ของคอลเลกชัน - ในลักษณะเดียวกับที่ทำกับชุดข้อมูล TFDS แล้ว; (2) ในไฟล์ citations.bib ซึ่งจะต้องวางไว้ในโฟลเดอร์คอลเลกชันชุดข้อมูล

datasets : กำหนดชุดข้อมูลในคอลเลกชัน

เมธอด datasets ส่งคืนชุดข้อมูล TFDS ในคอลเลกชัน

โดยถูกกำหนดให้เป็นพจนานุกรมของเวอร์ชันต่างๆ ซึ่งอธิบายวิวัฒนาการของการรวบรวมชุดข้อมูล

สำหรับแต่ละเวอร์ชัน ชุดข้อมูล TFDS ที่รวมไว้จะถูกจัดเก็บเป็นพจนานุกรมตั้งแต่ชื่อชุดข้อมูลไปจนถึง naming.DatasetReference DatasetReference ตัวอย่างเช่น:

class MyCollection(dataset_collection_builder.DatasetCollection):
  ...
  @property
  def datasets(self):
    return {
        "1.0.0": {
            "yes_no":
                naming.DatasetReference(
                    dataset_name="yes_no", version="1.0.0"),
            "sst2":
                naming.DatasetReference(
                    dataset_name="glue", config="sst2", version="2.0.0"),
            "assin2":
                naming.DatasetReference(
                    dataset_name="assin2", version="1.0.0"),
        },
        ...
    }

เมธอด naming.references_for ให้วิธีที่กระชับยิ่งขึ้นในการแสดงสิ่งเดียวกับข้างต้น:

class MyCollection(dataset_collection_builder.DatasetCollection):
  ...
  @property
  def datasets(self):
    return {
        "1.0.0":
            naming.references_for({
                "yes_no": "yes_no:1.0.0",
                "sst2": "glue/sst:2.0.0",
                "assin2": "assin2:1.0.0",
            }),
        ...
    }

ทดสอบหน่วยการรวบรวมชุดข้อมูลของคุณ

DatasetCollectionTestBase เป็นคลาสทดสอบพื้นฐานสำหรับคอลเลกชันชุดข้อมูล มีการตรวจสอบง่ายๆ หลายรายการเพื่อรับประกันว่าการรวบรวมชุดข้อมูลได้รับการลงทะเบียนอย่างถูกต้อง และชุดข้อมูลนั้นมีอยู่ใน TFDS

แอตทริบิวต์คลาสเดียวที่จะตั้งค่าคือ DATASET_COLLECTION_CLASS ซึ่งระบุคลาสอ็อบเจ็กต์ของคอลเลกชันชุดข้อมูลที่จะทดสอบ

นอกจากนี้ ผู้ใช้สามารถตั้งค่าแอตทริบิวต์คลาสต่อไปนี้:

  • VERSION : เวอร์ชันของคอลเลกชันชุดข้อมูลที่ใช้ในการรันการทดสอบ (ค่าเริ่มต้นเป็นเวอร์ชันล่าสุด)
  • DATASETS_TO_TEST : รายการที่มีชุดข้อมูลที่จะทดสอบการมีอยู่ของ TFDS (ค่าเริ่มต้นของชุดข้อมูลทั้งหมดในคอลเลกชัน)
  • CHECK_DATASETS_VERSION : ไม่ว่าจะตรวจสอบการมีอยู่ของชุดข้อมูลที่มีเวอร์ชันในคอลเลกชันชุดข้อมูล หรือเวอร์ชันเริ่มต้น (ค่าเริ่มต้นเป็นจริง)

การทดสอบที่ถูกต้องที่สุดสำหรับการรวบรวมชุดข้อมูลคือ:

from tensorflow_datasets.testing.dataset_collection_builder_testing import DatasetCollectionTestBase
from . import my_collection

class TestMyCollection(DatasetCollectionTestBase):
  DATASET_COLLECTION_CLASS = my_collection.MyCollection

เรียกใช้คำสั่งต่อไปนี้เพื่อทดสอบคอลเลกชันชุดข้อมูล

python my_dataset_test.py

ข้อเสนอแนะ

เรากำลังพยายามปรับปรุงเวิร์กโฟลว์การสร้างชุดข้อมูลอย่างต่อเนื่อง แต่จะทำได้ก็ต่อเมื่อเราทราบปัญหาเท่านั้น คุณพบปัญหาหรือข้อผิดพลาดใดขณะสร้างคอลเลกชันชุดข้อมูล มีส่วนที่ทำให้เกิดความสับสนหรือใช้งานไม่ได้ในครั้งแรกหรือไม่?

กรุณาแบ่งปันความคิดเห็นของคุณเกี่ยวกับ GitHub