このガイドに従って、新しいデータセット コレクション (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
を返します。
データセット コレクション情報には、次の 4 つのフィールドが含まれます。
- name: データセット コレクションの名前。
- description: データセット コレクションのマークダウン形式の説明。データセット コレクションの説明を定義するには 2 つの方法があります。(1) コレクションの
my_collection.py
ファイル内で直接 (複数行の) 文字列として定義する - TFDS データセットに対して既に行われているのと同様です。 (2)description.md
ファイル内。このファイルはデータセット コレクション フォルダーに配置する必要があります。 - release_notes: データセット コレクションのバージョンから対応するリリース ノートへのマッピング。
- 引用: データセット コレクションの BibTeX 引用 (複数可) のオプション (リスト)。データセット コレクションの引用を定義するには 2 つの方法があります。(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でフィードバックを共有してください。