数据集文档

加载音频数据

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始

加载音频数据

您可以使用 Audio 功能加载音频数据集,该功能在您访问示例时自动解码和重采样音频文件。音频解码基于 soundfile python 包,该包在底层使用 libsndfile C 库。

安装

要使用音频数据集,您需要安装 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"]
{'array': array([ 0.        ,  0.00024414, -0.00024414, ..., -0.00024414,
         0.        ,  0.        ], dtype=float32),
 'path': 'path/to/audio_1',
 'sampling_rate': 16000}

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 将加载音频数据并创建一个包含来自 metadata.csv 的文本的 transcription 列。

>>> from datasets import load_dataset

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

对于本地数据集,这等效于在 load_dataset() 中手动传递 audiofolder 并在 data_dir 中传递目录。

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

元数据也可以指定为 JSON Lines 格式,在这种情况下,使用 metadata.jsonl 作为元数据文件的名称。当其中一列很复杂时,例如浮点数列表,此格式有助于避免解析错误或将复杂值读取为字符串。

要忽略元数据文件中的信息,请在 load_dataset() 中设置 drop_metadata=True

>>> 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 数据集的更多信息,请查看创建音频数据集指南。

有关如何加载任何类型数据集的指南,请查看通用加载指南

音频解码

默认情况下,当您迭代数据集时,音频文件会按顺序解码为 NumPy 数组。但是,可以使用多线程解码来显着加速数据集。

>>> 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() 目前仅适用于流式数据集。

< > 在 GitHub 上更新