Datasets documentation
Создание набора данных
Создание набора данных
Иногда вам может потребоваться создать датасет, если вы работаете со своими данными. Создание датасета с помощью 🤗 Datasets предоставляет вашему набору данных все преимущества библиотеки: быстрая загрузка и обработка, стриминг огромных датасетов, memory-mapping и многое другое. Вы можете легко и быстро создать датасет с помощью низкокодовых подходов 🤗 Datasets, сокращая время, необходимое для начала обучения модели. Во многих случаях это так же просто, как перетащить файлы данных в репозиторий датасета на Hub.
В этом руководстве вы узнаете, как использовать методы с низким уровнем кода 🤗 Datasets для создания наборов данных из собственных данных.
Примечание
Если вы хотите узнать, как загружать существующие наборы данных или локальные и удалённые файлы (CSV, JSON, Parquet и т. д.), обратитесь к руководству по загрузке.
В этом руководстве рассматриваются:
- Создатели на основе папок для быстрого создания набора данных изображений или аудио
from_методы для создания наборов данных из локальных объектов Python
Создатели на основе файлов
🤗 Datasets поддерживает многие распространённые форматы, такие как csv, json/jsonl, parquet, txt.
Например, он может читать набор данных, состоящий из одного или нескольких файлов CSV (в этом случае передайте ваши файлы CSV в виде списка):
>>> from datasets import load_dataset
>>> dataset = load_dataset("csv", data_files="my_file.csv")Чтобы получить список поддерживаемых форматов и примеры кода, следуйте этому руководству здесь.
Сборщики на основе папок
Существуют два сборщика на основе папок: ImageFolder и AudioFolder. Это методы с минимальным количеством кода, позволяющие быстро создать набор данных изображений или аудио с несколькими тысячами примеров. Они отлично подходят для быстрого прототипирования моделей компьютерного зрения и распознавания речи перед переходом к более крупным наборам данных. Сборщики на основе папок берут ваши данные и автоматически генерируют признаки, разбиения и метки набора данных. Под капотом:
ImageFolderиспользует функцию Image для декодирования файла изображения. Поддерживается множество форматов расширений изображений, таких как jpg и png, но также поддерживаются и другие форматы. Полный список поддерживаемых расширений изображений можно найти здесь.AudioFolderиспользует функцию Audio для декодирования аудиофайла. Поддерживаются расширения wav, mp3 и даже mp4; полный список поддерживаемых расширений аудиофайлов можно найти по ссылке. Декодирование выполняется с помощью ffmpeg.
Разметки датасета генерируются на основе структуры репозитория, а имена меток автоматически выводятся из имени каталога.
Например, если ваш набор данных изображений (то же самое касается аудиоданных) хранится в следующем виде:
pokemon/train/grass/bulbasaur.png
pokemon/train/fire/charmander.png
pokemon/train/water/squirtle.png
pokemon/test/grass/ivysaur.png
pokemon/test/fire/charmeleon.png
pokemon/test/water/wartortle.pngТогда вот как генератор на основе папок создаёт пример:

Создайте набор данных изображений, указав imagefolder в load_dataset():
>>> from datasets import load_dataset
>>> dataset = load_dataset("imagefolder", data_dir="/path/to/pokemon")Аудиодатасет создается аналогичным образом, за исключением того, что в load_dataset() вместо этого указывается audiofolder:
>>> from datasets import load_dataset
>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")Любая дополнительная информация о вашем наборе данных, например текстовые подписи или транскрипты, может быть включена с помощью файла metadata.csv в папке, содержащей ваш набор данных. Файл метаданных должен содержать столбец file_name, который связывает файл изображения или аудио с соответствующими метаданными:
file_name, text
bulbasaur.png, There is a plant seed on its back right from the day this Pokémon is born.
charmander.png, It has a preference for hot things.
squirtle.png, When it retracts its long neck into its shell, it squirts out water with vigorous force.Чтобы узнать больше о каждом из этих сборщиков на основе папок, обратитесь к руководствам ImageFolder, AudioFolder или MeshFolder.
Из словарей Python
Вы также можете создать набор данных из данных в словарях Python. Существует два способа создания набора данных с помощью методов from_:
Метод from_generator() является наиболее экономичным по памяти способом создания набора данных из generator благодаря итеративной природе генераторов. Это особенно полезно при работе с очень большими наборами данных, которые могут не поместиться в оперативную память, поскольку набор данных последовательно генерируется на диске, а затем отображается в память (memory-mapped).
>>> from datasets import Dataset >>> def gen(): ... yield {"pokemon": "bulbasaur", "type": "grass"} ... yield {"pokemon": "squirtle", "type": "water"} >>> ds = Dataset.from_generator(gen) >>> ds[0] {"pokemon": "bulbasaur", "type": "grass"}Генераторный IterableDataset нужно проитерировать, например, с помощью цикла
for:>>> from datasets import IterableDataset >>> ds = IterableDataset.from_generator(gen) >>> for example in ds: ... print(example) {"pokemon": "bulbasaur", "type": "grass"} {"pokemon": "squirtle", "type": "water"}Метод from_dict() — это простой способ создать набор данных из словаря:
>>> from datasets import Dataset >>> ds = Dataset.from_dict({"pokemon": ["bulbasaur", "squirtle"], "type": ["grass", "water"]}) >>> ds[0] {"pokemon": "bulbasaur", "type": "grass"}Чтобы создать набор данных изображений или аудио, объедините метод cast_column() с from_dict() и укажите столбец и тип признака. Например, чтобы создать набор данных аудио:
>>> audio_dataset = Dataset.from_dict({"audio": ["path/to/audio_1", ..., "path/to/audio_n"]}).cast_column("audio", Audio())
Теперь, когда вы знаете, как создать набор данных, подумайте о том, чтобы поделиться им на Hub, чтобы сообщество тоже могло воспользоваться вашим трудом! Переходите к следующему разделу, чтобы узнать, как поделиться своим набором данных.
Update on GitHub