Datasets documentation

Создание набора данных

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Создание набора данных

Иногда вам может потребоваться создать датасет, если вы работаете со своими данными. Создание датасета с помощью 🤗 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