이 가이드에는 현재 TFDS에서 사용할 수 있는 모든 형식별 데이터세트 빌더가 설명되어 있습니다.
형식별 데이터세트 빌더는 특정 데이터 형식에 대한 대부분의 데이터 처리를 관리하는 tfds.core.GeneratorBasedBuilder
의 하위 클래스입니다.
tf.data.Dataset
기반 데이터세트
tf.data.Dataset
( 참조 ) 형식의 데이터세트에서 TFDS 데이터세트를 생성하려면 tfds.dataset_builders.TfDataBuilder
사용할 수 있습니다( API 문서 참조).
우리는 이 클래스의 두 가지 일반적인 용도를 구상합니다.
- 노트북과 같은 환경에서 실험 데이터세트 생성
- 코드에서 데이터 세트 빌더 정의
노트북에서 새 데이터 세트 만들기
노트북에서 작업하고 일부 데이터를 tf.data.Dataset
으로 로드하고 다양한 변환(맵, 필터 등)을 적용한 후 이제 이 데이터를 저장하고 팀원과 쉽게 공유하거나 다른 노트북에 로드한다고 가정해 보겠습니다. 새 데이터세트 빌더 클래스를 정의할 필요 없이 tfds.dataset_builders.TfDataBuilder
를 인스턴스화하고 download_and_prepare
호출하여 데이터세트를 TFDS 데이터세트로 저장할 수도 있습니다.
TFDS 데이터 세트이기 때문에 버전을 지정하고, 구성을 사용하고, 다양한 분할을 갖고, 나중에 쉽게 사용할 수 있도록 문서화할 수 있습니다. 즉, 데이터세트에 어떤 기능이 있는지 TFDS에 알려주어야 합니다.
다음은 이를 사용하는 방법에 대한 더미 예입니다.
import tensorflow as tf
import tensorflow_datasets as tfds
my_ds_train = tf.data.Dataset.from_tensor_slices({"number": [1, 2, 3]})
my_ds_test = tf.data.Dataset.from_tensor_slices({"number": [4, 5]})
# Optionally define a custom `data_dir`.
# If None, then the default data dir is used.
custom_data_dir = "/my/folder"
# Define the builder.
single_number_builder = tfds.dataset_builders.TfDataBuilder(
name="my_dataset",
config="single_number",
version="1.0.0",
data_dir=custom_data_dir,
split_datasets={
"train": my_ds_train,
"test": my_ds_test,
},
features=tfds.features.FeaturesDict({
"number": tfds.features.Scalar(dtype=tf.int64),
}),
description="My dataset with a single number.",
release_notes={
"1.0.0": "Initial release with numbers up to 5!",
}
)
# Make the builder store the data as a TFDS dataset.
single_number_builder.download_and_prepare()
download_and_prepare
메소드는 입력 tf.data.Dataset
를 반복하고 해당 TFDS 데이터 세트를 /my/folder/my_dataset/single_number/1.0.0
에 저장합니다. 여기에는 열차 및 테스트 분할이 모두 포함됩니다.
config
인수는 선택 사항이며 동일한 데이터세트에 다른 구성을 저장하려는 경우 유용할 수 있습니다.
data_dir
인수를 사용하면 생성된 TFDS 데이터세트를 다른 폴더(예: 아직 다른 사람과 공유하고 싶지 않은 경우 자체 샌드박스)에 저장할 수 있습니다. 이 작업을 수행할 때 data_dir
도 tfds.load
에 전달해야 합니다. data_dir
인수가 지정되지 않으면 기본 TFDS 데이터 디렉토리가 사용됩니다.
데이터 세트 로드
TFDS 데이터 세트가 저장되면 다른 스크립트에서 로드하거나 데이터에 액세스할 수 있는 팀원이 로드할 수 있습니다.
# If no custom data dir was specified:
ds_test = tfds.load("my_dataset/single_number", split="test")
# When there are multiple versions, you can also specify the version.
ds_test = tfds.load("my_dataset/single_number:1.0.0", split="test")
# If the TFDS was stored in a custom folder, then it can be loaded as follows:
custom_data_dir = "/my/folder"
ds_test = tfds.load("my_dataset/single_number:1.0.0", split="test", data_dir=custom_data_dir)
새 버전 또는 구성 추가
데이터 세트를 추가로 반복한 후 소스 데이터의 일부 변환을 추가하거나 변경했을 수 있습니다. 이 데이터세트를 저장하고 공유하려면 새 버전으로 쉽게 저장할 수 있습니다.
def add_one(example):
example["number"] = example["number"] + 1
return example
my_ds_train_v2 = my_ds_train.map(add_one)
my_ds_test_v2 = my_ds_test.map(add_one)
single_number_builder_v2 = tfds.dataset_builders.TfDataBuilder(
name="my_dataset",
config="single_number",
version="1.1.0",
data_dir=custom_data_dir,
split_datasets={
"train": my_ds_train_v2,
"test": my_ds_test_v2,
},
features=tfds.features.FeaturesDict({
"number": tfds.features.Scalar(dtype=tf.int64, doc="Some number"),
}),
description="My dataset with a single number.",
release_notes={
"1.1.0": "Initial release with numbers up to 6!",
"1.0.0": "Initial release with numbers up to 5!",
}
)
# Make the builder store the data as a TFDS dataset.
single_number_builder_v2.download_and_prepare()
새로운 데이터 세트 빌더 클래스 정의
이 클래스를 기반으로 새 DatasetBuilder
정의할 수도 있습니다.
import tensorflow as tf
import tensorflow_datasets as tfds
class MyDatasetBuilder(tfds.dataset_builders.TfDataBuilder):
def __init__(self):
ds_train = tf.data.Dataset.from_tensor_slices([1, 2, 3])
ds_test = tf.data.Dataset.from_tensor_slices([4, 5])
super().__init__(
name="my_dataset",
version="1.0.0",
split_datasets={
"train": ds_train,
"test": ds_test,
},
features=tfds.features.FeaturesDict({
"number": tfds.features.Scalar(dtype=tf.int64),
}),
config="single_number",
description="My dataset with a single number.",
release_notes={
"1.0.0": "Initial release with numbers up to 5!",
})
크로아상빌더
형식
Croissant 🥐는 메타데이터, 리소스 파일 설명, 데이터 구조 및 기본 ML 의미 체계를 단일 파일로 결합하는 기계 학습 데이터 세트를 위한 상위 수준 형식입니다. 기존 데이터 세트와 함께 작동하여 도구를 통해 더 쉽게 찾고, 사용하고, 지원할 수 있습니다.
Croissant는 웹에서 데이터 세트를 표현하고 검색 가능하게 만드는 데 널리 사용되는 형식인 sc:Dataset
어휘와 Schema.org를 기반으로 합니다.
CroissantBuilder
CroissantBuilder
Croissant 🥐 메타데이터 파일을 기반으로 TFDS 데이터세트를 정의합니다. 지정된 각 record_set_ids
는 별도의 ConfigBuilder
생성합니다.
예를 들어 Croissant 🥐 정의를 사용하여 MNIST 데이터세트에 대한 CroissantBuilder
초기화하려면 다음을 수행합니다.
import tensorflow_datasets as tfds
builder = tfds.dataset_builders.CroissantBuilder(
jsonld="https://raw.githubusercontent.com/mlcommons/croissant/main/datasets/0.8/huggingface-mnist/metadata.json",
file_format='array_record',
)
builder.download_and_prepare()
ds = builder.as_data_source()
print(ds['default'][0])
콘엘
형식
CoNLL은 주석이 달린 텍스트 데이터를 나타내는 데 사용되는 널리 사용되는 형식입니다.
CoNLL 형식의 데이터에는 일반적으로 한 줄에 언어 주석이 포함된 하나의 토큰이 포함됩니다. 같은 줄 내에서 주석은 일반적으로 공백이나 탭으로 구분됩니다. 빈 줄은 문장 경계를 나타냅니다.
CoNLL 주석 형식을 따르는 conll2003 데이터 세트의 다음 문장을 예로 들어 보겠습니다.
U.N. NNP I-NP I-ORG official
NN I-NP O
Ekeus NNP I-NP I-PER
heads VBZ I-VP O
for IN I-PP O
Baghdad NNP I-NP
I-LOC . . O O
ConllDatasetBuilder
새로운 CoNLL 기반 데이터 세트를 TFDS에 추가하려면 tfds.dataset_builders.ConllDatasetBuilder
기반으로 데이터 세트 빌더 클래스를 기반으로 하면 됩니다. 이 기본 클래스에는 CoNLL 데이터 세트의 특수성을 처리하기 위한 공통 코드가 포함되어 있습니다(열 기반 형식, 미리 컴파일된 기능 및 태그 목록 반복...).
tfds.dataset_builders.ConllDatasetBuilder
는 CoNLL 관련 GeneratorBasedBuilder
구현합니다. CoNLL 데이터세트 빌더의 최소 예시로 다음 클래스를 참조하세요.
from tensorflow_datasets.core.dataset_builders.conll import conll_dataset_builder_utils as conll_lib
import tensorflow_datasets.public_api as tfds
class MyCoNNLDataset(tfds.dataset_builders.ConllDatasetBuilder):
VERSION = tfds.core.Version('1.0.0')
RELEASE_NOTES = {'1.0.0': 'Initial release.'}
# conllu_lib contains a set of ready-to-use CONLL-specific configs.
BUILDER_CONFIGS = [conll_lib.CONLL_2003_CONFIG]
def _info(self) -> tfds.core.DatasetInfo:
return self.create_dataset_info(
# ...
)
def _split_generators(self, dl_manager):
path = dl_manager.download_and_extract('https://data-url')
return {'train': self._generate_examples(path=path / 'train.txt'),
'test': self._generate_examples(path=path / 'train.txt'),
}
표준 데이터세트 빌더의 경우 _info
및 _split_generators
클래스 메서드를 덮어써야 합니다. 데이터세트에 따라 데이터세트와 관련된 기능과 태그 목록을 포함하도록 conll_dataset_builder_utils.py 도 업데이트해야 할 수도 있습니다.
데이터 세트에 특정 구현이 필요한 경우를 제외하고 _generate_examples
메서드는 추가 덮어쓰기를 요구하지 않아야 합니다.
예
CoNLL 관련 데이터 세트 빌더를 사용하여 구현된 데이터 세트의 예로 conll2003을 고려하십시오.
CLI
새로운 CoNLL 기반 데이터 세트를 작성하는 가장 쉬운 방법은 TFDS CLI를 사용하는 것입니다.
cd path/to/my/project/datasets/
tfds new my_dataset --format=conll # Create `my_dataset/my_dataset.py` CoNLL-specific template files
ConLL-U
형식
CoNLL-U는 주석이 달린 텍스트 데이터를 나타내는 데 사용되는 널리 사용되는 형식입니다.
CoNLL-U는 멀티 토큰 단어 지원과 같은 다양한 기능을 추가하여 CoNLL 형식을 향상시킵니다. CoNLL-U 형식의 데이터에는 일반적으로 한 줄에 언어 주석이 포함된 하나의 토큰이 포함됩니다. 같은 줄 내에서 주석은 일반적으로 단일 탭 문자로 구분됩니다. 빈 줄은 문장 경계를 나타냅니다.
일반적으로 각 CoNLL-U 주석이 달린 단어 줄에는 공식 문서 에 보고된 대로 다음 필드가 포함되어 있습니다.
- ID: 단어 색인, 각 새 문장에 대해 1부터 시작하는 정수; 여러 단어 토큰의 범위일 수 있습니다. 빈 노드에 대한 십진수일 수 있습니다(십진수는 1보다 낮을 수 있지만 0보다 커야 합니다).
- FORM: 단어 형식 또는 구두점 기호.
- LEMMA: Lemma 또는 단어 형태의 어간입니다.
- UPOS: 범용 품사 태그.
- XPOS: 언어별 품사 태그; 사용할 수 없는 경우 밑줄을 긋습니다.
- FEATS: 범용 기능 목록 또는 정의된 언어별 확장의 형태학적 기능 목록입니다. 사용할 수 없는 경우 밑줄을 긋습니다.
- HEAD: 현재 단어의 머리 부분으로, ID 값 또는 0입니다.
- DEPREL: HEAD(루트 iff HEAD = 0) 또는 정의된 언어별 하위 유형에 대한 범용 종속성 관계입니다.
- DEPS: 헤드-디프렐 쌍 목록 형태의 향상된 종속성 그래프입니다.
- MISC: 기타 주석입니다.
예를 들어 공식 문서 에 있는 다음 CoNLL-U 주석 문장을 고려해 보세요.
1-2 vámonos _
1 vamos ir
2 nos nosotros
3-4 al _
3 a a
4 el el
5 mar mar
ConllUDatasetBuilder
새로운 CoNLL-U 기반 데이터 세트를 TFDS에 추가하려면 tfds.dataset_builders.ConllUDatasetBuilder
기반으로 데이터 세트 빌더 클래스를 기반으로 할 수 있습니다. 이 기본 클래스에는 CoNLL-U 데이터 세트의 특수성을 처리하기 위한 공통 코드가 포함되어 있습니다(열 기반 형식, 사전 컴파일된 기능 및 태그 목록 반복...).
tfds.dataset_builders.ConllUDatasetBuilder
는 CoNLL-U 특정 GeneratorBasedBuilder
구현합니다. CoNLL-U 데이터세트 빌더의 최소 예로 다음 클래스를 참조하세요.
from tensorflow_datasets.core.dataset_builders.conll import conllu_dataset_builder_utils as conllu_lib
import tensorflow_datasets.public_api as tfds
class MyCoNNLUDataset(tfds.dataset_builders.ConllUDatasetBuilder):
VERSION = tfds.core.Version('1.0.0')
RELEASE_NOTES = {'1.0.0': 'Initial release.'}
# conllu_lib contains a set of ready-to-use features.
BUILDER_CONFIGS = [
conllu_lib.get_universal_morphology_config(
language='en',
features=conllu_lib.UNIVERSAL_DEPENDENCIES_FEATURES,
)
]
def _info(self) -> tfds.core.DatasetInfo:
return self.create_dataset_info(
# ...
)
def _split_generators(self, dl_manager):
path = dl_manager.download_and_extract('https://data-url')
return {
'train':
self._generate_examples(
path=path / 'train.txt',
# If necessary, add optional custom processing (see conllu_lib
# for examples).
# process_example_fn=...,
)
}
표준 데이터세트 빌더의 경우 _info
및 _split_generators
클래스 메서드를 덮어써야 합니다. 데이터세트에 따라 데이터세트와 관련된 기능과 태그 목록을 포함하도록 conllu_dataset_builder_utils.py 도 업데이트해야 할 수도 있습니다.
데이터세트에 특정 구현이 필요한 경우를 제외하고 _generate_examples
메서드는 추가 덮어쓰기를 요구하지 않아야 합니다. 데이터 세트에 특정 사전 처리가 필요한 경우(예: 비클래식 범용 종속성 기능을 고려하는 경우) generate_examples
함수의 process_example_fn
속성을 업데이트해야 할 수도 있습니다(예로 xtreme_pos 데이터 세트 참조).
예
예를 들어 CoNNL-U 특정 데이터 세트 빌더를 사용하는 다음 데이터 세트를 고려하십시오.
CLI
새로운 CoNLL-U 기반 데이터 세트를 작성하는 가장 쉬운 방법은 TFDS CLI를 사용하는 것입니다.
cd path/to/my/project/datasets/
tfds new my_dataset --format=conllu # Create `my_dataset/my_dataset.py` CoNLL-U specific template files