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>

然后使用 Dataset.push_to_hub() 将数据集上传到 Hugging Face Hub:

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

这将创建一个包含您的音频数据集的数据集仓库:

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

AudioFolder

AudioFolder 是一个数据集构建器,旨在快速加载包含数千个音频文件的音频数据集,且无需编写任何代码。

💡 查看 Split pattern hierarchy 以了解 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")

这相当于在 load_dataset() 中手动传入 audiofolder 以及 data_dir 中的目录:

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

您还可以使用 audiofolder 来加载涉及多个 split 的数据集。为此,您的数据集目录应具有以下结构:

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 文件,在这种情况下,每个 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 归档中(例如,每个 TAR 归档包含 1GB 的音频文件),并拥有数千个 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