資料集文件

建立音訊資料集

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 建構器建立音訊資料集儲存庫。這是一個無需程式碼的解決方案,可快速建立包含數千個音訊檔案的音訊資料集。

您可以要求使用者先分享其聯絡資訊,藉此控管對資料集的存取權限。請查看 Gated datasets (受限資料集) 指南,了解如何在 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 是一個資料集建構器,旨在快速載入包含數千個音訊檔案的音訊資料集,無需您編寫任何程式碼。

💡 請參閱 分割模式階層 (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 來載入包含多個分割 (splits) 的資料集。為此,您的資料集目錄應具有以下結構:

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 檔案。這讓您可以快速為不同的電腦視覺任務建立資料集,例如文字描述 (captioning) 或物件偵測。您也可以使用 metadata.jsonl (JSONL 檔案) 或 metadata.parquet (Parquet 檔案)。

folder/train/metadata.csv
folder/train/0001.mp3
folder/train/0002.mp3
folder/train/0003.mp3

您也可以將音訊檔案壓縮成 ZIP 檔,在這種情況下,每個 ZIP 檔應同時包含音訊檔案和元數據 (metadata)。

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
...

在壓縮檔中,每個範例都由共用相同前綴 (prefix) 的檔案組成。

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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.