Datasets documentation
오디오 데이터 로드
오디오 데이터 로드
Audio 기능을 사용하여 오디오 데이터셋을 로드할 수 있으며, 이 기능은 예시를 접근할 때 오디오 파일을 자동으로 디코딩하고 리샘플링합니다.
오디오 디코딩은 torchcodec 파이썬 패키지에 기반하며, 이 패키지는 내부적으로 FFmpeg C 라이브러리를 사용합니다.
설치
오디오 데이터셋을 다루려면 audio 의존성이 설치되어 있어야 합니다. 설치 방법은 설치 가이드를 참고하세요.
로컬 파일
오디오 파일의 경로를 사용하여 자체 데이터셋을 로드할 수 있습니다. cast_column() 함수를 사용하여 오디오 파일 경로 컬럼을 가져와 Audio feature로 변환합니다:
>>> 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 데이터셋 빌더를 사용하여 데이터셋을 로드할 수도 있습니다. 이 방법은 커스텀 dataloader를 작성할 필요가 없어, 수천 개의 오디오 파일로 구성된 오디오 데이터셋을 빠르게 생성하고 로드하는 데 유용합니다.
메타데이터가 포함된 AudioFolder
오디오 파일과 메타데이터 정보를 연결하려면 데이터셋에 metadata.csv 파일이 있는지 확인하세요. 데이터셋 구조는 다음과 같을 수 있습니다:
folder/train/metadata.csv
folder/train/first_audio_file.mp3
folder/train/second_audio_file.mp3
folder/train/third_audio_file.mp3metadata.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을 사용합니다. 이 형식은 컬럼 중 하나가 복잡한 값(예: float 목록)인 경우 파싱 오류를 방지하거나 복잡한 값을 문자열로 읽는 문제를 피하는 데 유용합니다.
메타데이터 파일의 정보를 무시하려면 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데이터셋을 직접 만드는 방법에 대한 자세한 내용은 오디오 데이터셋 만들기 가이드를 참고하세요.
모든 유형의 데이터를 로드하는 방법에 대한 가이드는 일반 로드 가이드를 참고하세요.
오디오 디코딩
기본적으로 데이터셋을 반복할 때 오디오 파일은 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()는 현재 스트리밍 데이터셋에서만 사용할 수 있습니다.
Update on GitHub