按照本指南创建新的数据集集合(可在 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:数据集集合的名称。
- description:数据集集合的 markdown 格式描述。可以通过两种方式定义数据集集合的描述:(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 上分享您的反馈。