Datasets documentation

Загрузка аудиоданных

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Загрузка аудиоданных

Вы можете загрузить аудиодataset с помощью функции Audio, которая автоматически декодирует и ресемплирует аудиофайлы при обращении к примерам. Декодирование аудио основано на пакете torchcodec, который использует C-библиотеку FFmpeg под капотом.

Установка

Для работы с аудиоданными необходимо установить зависимости audio. Ознакомьтесь с руководством по установке, чтобы узнать, как это сделать.

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

Вы можете загрузить собственный набор данных, используя пути к вашим аудиофайлам. Используйте функцию 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>

AudioFolder

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

AudioFolder с метаданными

Чтобы связать ваши аудиофайлы с метаданными, убедитесь, что в вашем наборе данных есть файл metadata.csv. Структура набора данных может выглядеть так:

folder/train/metadata.csv
folder/train/first_audio_file.mp3
folder/train/second_audio_file.mp3
folder/train/third_audio_file.mp3

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

file_name,transcription
first_audio_file.mp3,znowu się duch z ciałem zrośnie w młodocianej wstaniesz wiosnie i możesz skutkiem tych leków umierać wstawać wiek wieków dalej tam były przestrogi jak siekać głowę jak nogi
second_audio_file.mp3,już u źwierzyńca podwojów król zasiada przy nim książęta i panowie rada a gdzie wzniosły krążył ganek rycerze obok kochanek król skinął palcem zaczęto igrzysko
third_audio_file.mp3,pewnie kędyś w obłędzie ubite minęły szlaki zaczekajmy dzień jaki poślemy szukać wszędzie dziś jutro pewnie będzie posłali wszędzie sługi czekali dzień i drugi gdy nic nie doczekali z płaczem chcą jechać dali

AudioFolder загрузит аудиоданные и создаст столбец transcription с текстами из metadata.csv:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")

Для локальных наборов данных это эквивалентно ручной передаче audiofolder в load_dataset() и указанию каталога в data_dir:

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

Метаданные также можно указать в формате JSON Lines, в этом случае в качестве имени файла метаданных используйте metadata.jsonl. Этот формат полезен в сценариях, когда одна из колонок содержит сложные данные, например список чисел с плавающей точкой, чтобы избежать ошибок разбора или чтения сложных значений как строк.

Чтобы игнорировать информацию в файле метаданных, установите drop_metadata=True в load_dataset():

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)

Если у вас нет файла метаданных, AudioFolder автоматически определяет имя метки по имени каталога. Если вы хотите отбросить автоматически созданные метки, установите drop_labels=True. В этом случае ваш набор данных будет содержать только столбец с аудио:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)

Наконец, аргумент filters позволяет загрузить только часть набора данных на основе условия, наложенного на метку или метаданные. Это особенно полезно, если метаданные хранятся в формате Parquet, поскольку этот формат обеспечивает быструю фильтрацию. Также рекомендуется использовать этот аргумент вместе с streaming=True, так как по умолчанию набор данных полностью загружается до применения фильтрации.

>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)

Для получения дополнительной информации о создании собственного набора данных AudioFolder обратитесь к руководству Создание аудиодатасета.

Справочник по загрузке любого типа набора данных — в общем руководстве по загрузке.

Декодирование аудио

По умолчанию аудиофайлы декодируются последовательно как объекты AudioDecoder из torchcodec при итерации по набору данных. Однако можно значительно ускорить работу с набором данных, используя многопоточное декодирование:

>>> import os
>>> num_threads = num_threads = min(32, (os.cpu_count() or 1) + 4)
>>> dataset = dataset.decode(num_threads=num_threads)
>>> for example in dataset:  # up to 20 times faster !
...     ...

Вы можете включить многопоточность с помощью num_threads. Это особенно полезно для ускорения потоковой передачи удалённых данных. Однако для локальных данных на быстрых дисках это может работать медленнее, чем num_threads=0.

Если вам не нужны изображения, декодированные в виде массивов NumPy, и вы хотите получить доступ к пути/байтам, вы можете отключить декодирование:

>>> dataset = dataset.decode(False)

Примечание: IterableDataset.decode() в настоящее время доступен только для потоковых наборов данных.

Update on GitHub