본문 바로가기
ML

허깅페이스에 오디오 데이터셋 업로드하기

by nijex 2024. 1. 5.

 

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

댓글