Datasets 文档

创建音频数据集

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

创建音频数据集

您可以通过在 Hugging Face Hub 上创建一个数据集仓库,与您的团队或社区中的任何人分享数据集。

from datasets import load_dataset

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

有几种方法可以创建和分享音频数据集。

  • 在 Python 中使用 Dataset.push_to_hub() 从本地文件创建一个音频数据集。这是一个简单的方法,只需在 Python 中完成几个步骤。

  • 使用 AudioFolder 构建器创建一个音频数据集仓库。这是一个无代码解决方案,用于快速创建一个包含数千个音频文件的数据集。

您可以通过要求用户先分享他们的联系信息来控制对您数据集的访问。有关如何在 Hub 上启用此功能的更多信息,请查看访问控制数据集指南。

本地文件

您可以使用音频文件的路径加载您自己的数据集。使用 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 是一个数据集构建器,旨在快速加载包含数千个音频文件的数据集,而无需编写任何代码。

💡 查看拆分模式层次结构,了解更多关于 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 来加载包含多个拆分的数据集。为此,您的数据集目录应具有以下结构:

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

您也可以压缩您的音频文件,在这种情况下,每个压缩文件应同时包含音频文件和元数据。

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 文档

< > 在 GitHub 上更新