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

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

Вы можете поделиться набором данных со своей командой или с любым участником сообщества, создав репозиторий набора данных на Hugging Face Hub:

from datasets import load_dataset

dataset = load_dataset("<username>/my_dataset")

Существует несколько способов создания и обмена аудиоданными:

  • Create an audio dataset from local files in python with Dataset.push_to_hub(). This is an easy way that requires only a few steps in python.

  • Создайте репозиторий аудиоданных с помощью билдера AudioFolder. Это решение без написания кода для быстрого создания аудиодатасета, содержащего несколько тысяч аудиофайлов.

Вы можете управлять доступом к вашему набору данных, требуя, чтобы пользователи сначала предоставили свои контактные данные. Подробнее о том, как включить эту функцию на Hub, читайте в руководстве Gated datasets.

Локальные файлы

Вы можете загрузить собственный набор данных, используя пути к вашим аудиофайлам. Используйте функцию cast_column(), чтобы взять столбец с путями к аудиофайлам и привести его к типу Audio:

>>> audio_dataset = Dataset.from_dict({"audio": ["path/to/audio_1", "path/to/audio_2", ..., "path/to/audio_n"]}).cast_column("audio", Audio())
>>> audio_dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>

Затем загрузите набор данных в Hugging Face Hub с помощью Dataset.push_to_hub():

audio_dataset.push_to_hub("<username>/my_dataset")

Это создаст репозиторий датасета, содержащий ваш аудиодатасет:

my_dataset/
├── README.md
└── data/
    └── train-00000-of-00001.parquet

AudioFolder

AudioFolder — это конструктор набора данных, предназначенный для быстрого загрузки аудиоданных, содержащих несколько тысяч аудиофайлов, без необходимости писать какой-либо код.

💡 Ознакомьтесь с Иерархией паттернов разбиения, чтобы узнать, как AudioFolder создаёт разбиения датасета на основе структуры вашего репозитория с данными.

AudioFolder автоматически определяет метки классов вашего набора данных на основе имени каталога. Разместите набор данных в структуре каталогов, похожей на следующую:

folder/train/dog/golden_retriever.mp3
folder/train/dog/german_shepherd.mp3
folder/train/dog/chihuahua.mp3

folder/train/cat/maine_coon.mp3
folder/train/cat/bengal.mp3
folder/train/cat/birman.mp3

Если набор данных следует структуре AudioFolder, то его можно загрузить напрямую с помощью load_dataset():

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")

Это эквивалентно ручной передаче audiofolder в load_dataset() и указанию каталога в data_dir:

>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")

Вы также можете использовать audiofolder для загрузки наборов данных, содержащих несколько разбиений. Для этого каталог вашего набора данных должен иметь следующую структуру:

folder/train/dog/golden_retriever.mp3
folder/train/cat/maine_coon.mp3
folder/test/dog/german_shepherd.mp3
folder/test/cat/bengal.mp3

Если все аудиофайлы находятся в одной директории или на разных уровнях иерархии каталогов, столбец label не будет добавлен автоматически. Если он вам нужен, явно установите drop_labels=False.

Если вы хотите добавить дополнительную информацию о вашем наборе данных, например текстовые подписи или ограничивающие прямоугольники, добавьте её в виде файла metadata.csv в вашей папке. Это позволяет быстро создавать наборы данных для различных задач компьютерного зрения, таких как генерация текстовых подписей или обнаружение объектов. Вы также можете использовать файл JSONL metadata.jsonl или файл Parquet metadata.parquet.

folder/train/metadata.csv
folder/train/0001.mp3
folder/train/0002.mp3
folder/train/0003.mp3

Вы также можете упаковать файлы аудио в архивы zip, при этом каждый архив должен содержать как файлы аудио, так и метаданные

folder/train.zip
folder/test.zip
folder/validation.zip

Файл metadata.csv должен содержать поле file_name или *_file_name, которое связывает аудиофайлы с их метаданными:

file_name,additional_feature
0001.mp3,This is a first value of a text feature you added to your audio files
0002.mp3,This is a second value of a text feature you added to your audio files
0003.mp3,This is a third value of a text feature you added to your audio files

или с использованием metadata.jsonl:

{"file_name": "0001.mp3", "additional_feature": "This is a first value of a text feature you added to your audio files"}
{"file_name": "0002.mp3", "additional_feature": "This is a second value of a text feature you added to your audio files"}
{"file_name": "0003.mp3", "additional_feature": "This is a third value of a text feature you added to your audio files"}

Здесь file_name должно содержать имя аудиофайла, расположенного рядом с файлом метаданных. В более общем случае это должен быть относительный путь от каталога, содержащего метаданные, до аудиофайла.

В каждой строке набора данных можно указать несколько аудиофайлов, например, если и входные, и выходные данные представлены в формате аудио:

{"input_file_name": "0001.mp3", "output_file_name": "0001_output.mp3"}
{"input_file_name": "0002.mp3", "output_file_name": "0002_output.mp3"}
{"input_file_name": "0003.mp3", "output_file_name": "0003_output.mp3"}

Вы также можете определить списки аудиофайлов. В этом случае нужно назвать поле file_names или *_file_names. Вот пример:

{"recordings_file_names": ["0001_r0.mp3", "0001_r1.mp3"], label: "same_person"}
{"recordings_file_names": ["0002_r0.mp3", "0002_r1.mp3"], label: "same_person"}
{"recordings_file_names": ["0003_r0.mp3", "0003_r1.mp3"], label: "different_person"}

WebDataset

Формат WebDataset основан на архивах TAR и подходит для больших аудиодатасетов. Действительно, вы можете группировать свои аудиофайлы в архивы TAR (например, 1 ГБ аудиофайлов на один архив TAR) и иметь тысячи архивов TAR:

folder/train/00000.tar
folder/train/00001.tar
folder/train/00002.tar
...

В архивах каждый пример состоит из файлов, имеющих общий префикс:

e39871fd9fd74f55.mp3
e39871fd9fd74f55.json
f18b91585c4d3f3e.mp3
f18b91585c4d3f3e.json
ede6e66b2fb59aab.mp3
ede6e66b2fb59aab.json
ed600d57fcee4f94.mp3
ed600d57fcee4f94.json
...

Вы можете хранить метки/подписи/ограничивающие рамки для своих аудиофайлов, например, в файлах JSON или текстовых файлах.

Загрузите ваш WebDataset, и он создаст по одному столбцу для каждого суффикса файла (здесь «mp3» и «json»):

>>> from datasets import load_dataset

>>> dataset = load_dataset("webdataset", data_dir="/path/to/folder", split="train")
>>> dataset[0]["json"]
{"transcript": "Hello there !", "speaker": "Obi-Wan Kenobi"}

Также можно использовать несколько аудиофайлов на один пример, как показано ниже:

e39871fd9fd74f55.input.mp3
e39871fd9fd74f55.output.mp3
e39871fd9fd74f55.json
f18b91585c4d3f3e.input.mp3
f18b91585c4d3f3e.output.mp3
f18b91585c4d3f3e.json
...

Для получения подробной информации о формате WebDataset и библиотеке python обратитесь к документации WebDataset.

Update on GitHub