이 가이드에 따라 새 데이터세트 컬렉션을 생성하세요(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)
관례적으로 새로운 데이터세트 컬렉션은 TFDS 저장소의 tensorflow_datasets/dataset_collections/
폴더에 추가되어야 합니다.
데이터 세트 컬렉션 작성
모든 데이터 세트 컬렉션은 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: 데이터 세트 컬렉션 버전에서 해당 릴리스 노트로의 매핑입니다.
- citation: 데이터 세트 컬렉션에 대한 BibTeX 인용(들)의 선택적(목록)입니다. 데이터 세트 컬렉션의 인용을 정의하는 방법에는 두 가지가 있습니다. (1) 컬렉션의
my_collection.py
파일에서 직접 (여러 줄) 문자열로 - TFDS 데이터 세트에 대해 이미 수행된 것과 유사합니다. (2)citations.bib
파일에서 데이터 세트 컬렉션 폴더에 있어야 합니다.
datasets
: 컬렉션의 데이터세트를 정의합니다.
datasets
메서드는 컬렉션의 TFDS 데이터세트를 반환합니다.
이는 데이터세트 컬렉션의 발전 과정을 설명하는 버전 사전으로 정의됩니다.
각 버전에 포함된 TFDS 데이터 세트는 데이터 세트 이름부터 naming.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
: 데이터 세트 컬렉션에 버전이 지정된 데이터 세트가 있는지 또는 기본 버전이 있는지 확인할지 여부(기본값은 true)입니다.
데이터세트 컬렉션에 대한 가장 간단하고 유효한 테스트는 다음과 같습니다.
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 에서 피드백을 공유해 주세요.