資料集文件

載入音訊資料

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

載入音訊資料

您可以使用 Audio 特徵(feature)來載入音訊資料集,當您存取範例時,它會自動解碼並重新採樣(resample)音訊檔案。音訊解碼是基於 torchcodec Python 套件,該套件底層使用了 FFmpeg 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 資料集建構器(dataset builder)來載入資料集。它不需要撰寫自訂的資料載入器(dataloader),因此非常適合用於快速建立及載入包含數千個音訊檔案的資料集。

帶有中繼資料的 AudioFolder

若要將您的音訊檔案與中繼資料(metadata)連結,請確保您的資料集中包含一個 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 資料集的更多資訊,請參閱建立音訊資料集指南。

關於如何載入各類資料集的指南,請參考通用載入指南

音訊解碼

預設情況下,當您在資料集上進行迭代時,音訊檔案會作為 torchcodec AudioDecoder 物件循序解碼。不過,透過多執行緒(multithreaded)解碼可以顯著加快資料集的存取速度。

>>> 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 陣列,而是希望存取路徑或位元組(bytes),則可以停用解碼功能。

>>> dataset = dataset.decode(False)

注意:IterableDataset.decode() 目前僅適用於串流數據集。

在 GitHub 上更新

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