Thêm bộ sưu tập dữ liệu mới

Làm theo hướng dẫn này để tạo bộ sưu tập tập dữ liệu mới (trong TFDS hoặc trong kho lưu trữ của riêng bạn).

Tổng quan

Để thêm bộ sưu tập tập dữ liệu mới my_collection vào TFDS, người dùng cần tạo thư mục my_collection chứa các tệp sau:

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)

Theo quy ước, các bộ sưu tập tập dữ liệu mới phải được thêm vào thư mục tensorflow_datasets/dataset_collections/ trong kho lưu trữ TFDS.

Viết bộ sưu tập dữ liệu của bạn

Tất cả các bộ sưu tập dữ liệu đều là các lớp con được triển khai của tfds.core.dataset_collection_builder.DatasetCollection .

Dưới đây là ví dụ tối thiểu về trình tạo bộ sưu tập tập dữ liệu, được xác định trong tệp 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"
            })
    })

Phần tiếp theo mô tả 2 phương thức trừu tượng để ghi đè.

info : siêu dữ liệu bộ sưu tập dữ liệu

Phương thức info trả về dataset_collection_builder.DatasetCollectionInfo chứa siêu dữ liệu của bộ sưu tập.

Thông tin bộ sưu tập tập dữ liệu chứa bốn trường:

  • name: tên của bộ sưu tập dữ liệu.
  • mô tả: mô tả được định dạng đánh dấu của bộ sưu tập dữ liệu. Có hai cách để xác định mô tả của bộ sưu tập tập dữ liệu: (1) Dưới dạng một chuỗi (nhiều dòng) trực tiếp trong tệp my_collection.py của bộ sưu tập - tương tự như đã được thực hiện cho bộ dữ liệu TFDS; (2) Trong tệp description.md , tệp này phải được đặt trong thư mục thu thập dữ liệu.
  • Release_notes: ánh xạ từ phiên bản của bộ sưu tập dữ liệu tới ghi chú phát hành tương ứng.
  • trích dẫn: Một (danh sách) (các) trích dẫn BibTeX tùy chọn cho bộ sưu tập dữ liệu. Có hai cách để xác định trích dẫn của bộ sưu tập tập dữ liệu: (1) Dưới dạng chuỗi (nhiều dòng) trực tiếp trong tệp my_collection.py của bộ sưu tập - tương tự như đã được thực hiện cho bộ dữ liệu TFDS; (2) Trong tệp citations.bib , tệp này phải được đặt trong thư mục thu thập dữ liệu.

datasets : xác định các bộ dữ liệu trong bộ sưu tập

Phương thức datasets trả về bộ dữ liệu TFDS trong bộ sưu tập.

Nó được định nghĩa là một từ điển các phiên bản, mô tả sự phát triển của bộ sưu tập dữ liệu.

Đối với mỗi phiên bản, các bộ dữ liệu TFDS đi kèm được lưu trữ dưới dạng từ điển từ tên tập dữ liệu đến naming.DatasetReference . Ví dụ:

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"),
        },
        ...
    }

Phương thức naming.references_for cung cấp một cách ngắn gọn hơn để diễn đạt tương tự như trên:

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",
            }),
        ...
    }

Kiểm tra đơn vị bộ sưu tập dữ liệu của bạn

DatasetCollectionTestBase là lớp kiểm tra cơ sở cho các bộ sưu tập dữ liệu. Nó cung cấp một số kiểm tra đơn giản để đảm bảo rằng bộ sưu tập dữ liệu được đăng ký chính xác và các bộ dữ liệu của nó tồn tại trong TFDS.

Thuộc tính lớp duy nhất cần đặt là DATASET_COLLECTION_CLASS , thuộc tính này chỉ định đối tượng lớp của bộ sưu tập dữ liệu cần kiểm tra.

Ngoài ra, người dùng có thể đặt các thuộc tính lớp sau:

  • VERSION : Phiên bản của bộ sưu tập dữ liệu được sử dụng để chạy thử nghiệm (mặc định là phiên bản mới nhất).
  • DATASETS_TO_TEST : Danh sách chứa các tập dữ liệu để kiểm tra sự tồn tại trong TFDS (mặc định là tất cả các tập dữ liệu trong bộ sưu tập).
  • CHECK_DATASETS_VERSION : Kiểm tra sự tồn tại của các tập dữ liệu được phiên bản trong bộ sưu tập tập dữ liệu hay các phiên bản mặc định của chúng (mặc định là đúng).

Thử nghiệm hợp lệ đơn giản nhất cho bộ sưu tập dữ liệu sẽ là:

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

class TestMyCollection(DatasetCollectionTestBase):
  DATASET_COLLECTION_CLASS = my_collection.MyCollection

Chạy lệnh sau để kiểm tra bộ sưu tập dữ liệu.

python my_dataset_test.py

Nhận xét

Chúng tôi liên tục cố gắng cải thiện quy trình tạo tập dữ liệu nhưng chỉ có thể làm như vậy nếu chúng tôi nhận thức được vấn đề. Bạn gặp phải vấn đề hoặc lỗi nào khi tạo bộ sưu tập dữ liệu? Có phần nào khó hiểu hoặc không hoạt động trong lần đầu tiên không?

Vui lòng chia sẻ phản hồi của bạn trên GitHub .