Datasets documentation
Tải dữ liệu âm thanh
Tải dữ liệu âm thanh
Bạn có thể tải một tập dữ liệu âm thanh bằng tính năng Audio, tính năng này sẽ tự động giải mã và lấy lại tần số mẫu của các tệp âm thanh khi bạn truy cập vào các ví dụ.
Việc giải mã âm thanh dựa trên gói python torchcodec, sử dụng thư viện C FFmpeg bên trong.
Cài đặt
Để làm việc với các bộ dữ liệu âm thanh, bạn cần cài đặt các phụ thuộc audio.
Xem hướng dẫn cài đặt để tìm hiểu cách cài đặt.
Tệp cục bộ
Bạn có thể tải bộ dữ liệu của riêng mình bằng cách sử dụng đường dẫn đến các tệp âm thanh. Sử dụng hàm cast_column() để lấy một cột chứa đường dẫn tệp âm thanh và chuyển đổi nó thành đặc trưng 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
Bạn cũng có thể tải một dataset bằng dataset builder AudioFolder. Nó không yêu cầu viết một dataloader tùy chỉnh, giúp ích cho việc tạo và tải nhanh các dataset âm thanh có hàng nghìn tệp âm thanh.
AudioFolder với metadata
Để liên kết các tệp âm thanh của bạn với thông tin metadata, hãy đảm bảo bộ dữ liệu của bạn có tệp metadata.csv. Cấu trúc bộ dữ liệu của bạn có thể trông như sau:
folder/train/metadata.csv
folder/train/first_audio_file.mp3
folder/train/second_audio_file.mp3
folder/train/third_audio_file.mp3Tệp metadata.csv của bạn phải có cột file_name để liên kết các tệp âm thanh với metadata của chúng. Một tệp metadata.csv mẫu có thể trông như sau:
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 sẽ tải dữ liệu âm thanh và tạo một cột transcription chứa văn bản từ metadata.csv:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")Đối với các bộ dữ liệu cục bộ, điều này tương đương với việc truyền audiofolder thủ công trong load_dataset() và thư mục trong data_dir:
>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")Metadata cũng có thể được chỉ định dưới dạng JSON Lines, trong trường hợp đó hãy dùng metadata.jsonl làm tên tệp metadata. Định dạng này hữu ích trong các kịch bản khi một trong các cột có cấu trúc phức tạp, ví dụ như một danh sách các số float, để tránh lỗi phân tích hoặc việc đọc các giá trị phức tạp dưới dạng chuỗi.
Để bỏ qua thông tin trong tệp metadata, đặt drop_metadata=True trong load_dataset():
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)Nếu bạn không có tệp metadata, AudioFolder sẽ tự động suy ra tên nhãn từ tên thư mục.
Nếu bạn muốn loại bỏ các nhãn được tạo tự động, hãy đặt drop_labels=True.
Trong trường hợp này, tập dữ liệu của bạn sẽ chỉ chứa một cột âm thanh:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)Cuối cùng, đối số filters cho phép bạn chỉ tải một tập con của bộ dữ liệu, dựa trên điều kiện về nhãn hoặc metadata. Điều này đặc biệt hữu ích nếu metadata ở định dạng Parquet, vì định dạng này cho phép lọc nhanh. Cũng nên sử dụng đối số này cùng với streaming=True, vì mặc định bộ dữ liệu sẽ được tải xuống hoàn toàn trước khi lọc.
>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)Để biết thêm thông tin về việc tạo bộ dữ liệu
AudioFoldercủa riêng bạn, hãy xem hướng dẫn Tạo bộ dữ liệu âm thanh.
Để tìm hiểu cách tải bất kỳ loại bộ dữ liệu nào, hãy xem hướng dẫn tải chung.
Giải mã âm thanh
Mặc định, các tệp âm thanh được giải mã tuần tự dưới dạng các đối tượng AudioDecoder của torchcodec khi bạn lặp qua một tập dữ liệu.
Tuy nhiên, bạn có thể tăng tốc đáng kể tập dữ liệu bằng cách sử dụng giải mã đa luồng:
>>> 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 !
... ...Bạn có thể bật đa luồng bằng cách sử dụng num_threads. Điều này đặc biệt hữu ích để tăng tốc độ truyền dữ liệu từ xa.
Tuy nhiên, nó có thể chậm hơn so với num_threads=0 đối với dữ liệu cục bộ trên các ổ đĩa nhanh.
Nếu bạn không quan tâm đến các hình ảnh được giải mã dưới dạng mảng NumPy và muốn truy cập đường dẫn/bộ nhớ đệm (bytes) thay vào đó, bạn có thể tắt việc giải mã:
>>> dataset = dataset.decode(False)Lưu ý: IterableDataset.decode() hiện chỉ khả dụng cho các bộ dữ liệu dạng streaming.
Update on GitHub