1. 기본
먼저 가장 기본적인 구조로 오디오 데이터셋을 구성해보자.
train, test, validation은 분리되지 않고, 모든 데이터가 train에 할당된다.
폴더 구조는 아래와 같다.
기본 경로(예시에서는 my_audio_dataset)에 metadata.csv 파일이 있으며 되며, 오디오 파일들은 data_dir 의 data 디렉토리에 위치해있으면 된다.
(오디오 파일들이 반드시 data 디렉토리에 위치해있지 않아도 된다. metadata.csv에서 각 오디오 파일 경로만 잘 적혀 있으면 된다.)
my_audio_dataset/
+ metadata.csv
+ data/
+ 000000001.wav
+ 000000002.wav
+ 000000003.wav
+ ...
metadata.csv 는 아래와 같이 구성된다.
file_name 열은 필수이나, 그 외는 필요한 라벨에 따라 자유롭게 구성하면 된다. 나는 음성 오디오에 대한 전사값이 필요하여 transcription열을 추가해주었다. 위에서도 언급했지만, file_name의 경로는 각 오디오의 실제 경로로 맞춰서 적어주면 된다.
# metadata.csv
file_name,transcription
data/00000001.wav,"안녕하세요."
data/00000002.wav,"만나서 반갑습니다."
data/00000003.wav,"이름이 어떻게 되시나요?"
로컬 환경에 metadata와 오디오 파일들이 다 준비가 되었다면 아래와 같이 간단한 코드를 실행시켜 허깅페이스에 데이터셋을 업로드 해주면 끝!
from datasets import load_dataset
audio_dataset = load_dataset("audiofolder", data_dir="my_audio_dataset")
# 샘플 확인해보기
print("===== ===== =====")
print("sample :")
print(audio_dataset)
print(audio_dataset["train"][0])
print("===== ===== =====")
# 허깅페이스 업로드
audio_dataset.push_to_hub("hf_id/dataset_name", private=True)
2. train, test 분리해서 올리기
다음으로 데이터셋을 train, test(, validation)로 미리 나눈 상태에서 업로드하는 방법이다. 기본적인 방법과 크게 다르지 않고, 메타데이터 파일을 그 스플릿에 해당하는 디렉토리 밑에 별도로 구성한다는 점만 유의하면 된다.
일단 폴더 구조는 아래와 같다.
my_audio_dataset/
+ train/
+ metadata.csv
+ 000000001.wav
+ 000000002.wav
+ 000000003.wav
+ ...
+ test/
+ metadata.csv
+ 000000004.wav
+ 000000005.wav
+ 000000006.wav
+ ...
해당 폴더 구조 하에서 metadata.csv는 아래와 같이 구성될 것이다. metadata.csv 와 오디오 파일들이 동일한 위치에 있어 file_name의 경로가 달라짐에 유의하자.
# train/metadata.csv
file_name,transcription
00000001.wav,"안녕하세요."
00000002.wav,"만나서 반갑습니다."
00000003.wav,"이름이 어떻게 되시나요?"
# train/metadata.csv
file_name,transcription
00000004.wav,"오늘 서울 날씨는?"
00000005.wav,"당신은 누구신가요?"
00000006.wav,"안녕히 가세요."
위의 과정이 모두 끝났다면 마찬가지로 간단한 파이썬 코드를 실행시켜 데이터셋을 업로드하면 끝이다.
from datasets import load_dataset
audio_dataset = load_dataset("audiofolder", data_dir="my_audio_dataset")
# 샘플 확인해보기
print("===== ===== =====")
print("sample :")
print(audio_dataset)
print(audio_dataset["train"][0])
print(audio_dataset["test"][0])
print("===== ===== =====")
# 허깅페이스 업로드
audio_dataset.push_to_hub("hf_id/dataset_name", private=True)
참고로, 위의 print 결과는 아래와 같다.
===== ===== =====
sample :
DatasetDict({
train: Dataset({
features: ['audio', 'transcription'],
num_rows: 250
})
test: Dataset({
features: ['audio', 'transcription'],
num_rows: 250
})
})
{'audio': {'path': '[오디오파일 절대 경로]', 'array': array([ 0. , 0. , 0. , ..., -0.00131226,
-0.00366211, -0.01077271]), 'sampling_rate': 16000}, 'transcription': '안녕하세요.'}
{'audio': {'path': '[오디오파일 절대 경로]', 'array': array([0. , 0. , 0. , ..., 0.00045776, 0.00045776,
0.00027466]), 'sampling_rate': 16000}, 'transcription': '오늘 서울 날씨는?'}
===== ===== =====
참고 :
https://huggingface.co/docs/datasets/audio_load
Load audio data
huggingface.co
'ML' 카테고리의 다른 글
웨이브(.wav) 파일 헤더 분석 (0) | 2024.02.14 |
---|
댓글