Datasets documentation
Загрузка аудиоданных
Загрузка аудиоданных
Вы можете загрузить аудиод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