Datasets 文件

載入音訊資料

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"]
<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")

對於本地資料集,這相當於在 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 資料集的更多資訊,請參閱建立音訊資料集指南。

有關如何載入任何型別資料集的指南,請參閱通用載入指南

音訊解碼

預設情況下,當您迭代資料集時,音訊檔案會作為 torchcodec AudioDecoder 物件按順序解碼。但是,可以使用多執行緒解碼顯著加速資料集。

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

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