Hugging Face datasets : map() 함수

Ann Jongmin·2025년 8월 26일
0

Data Processing

목록 보기
9/9

map() 함수

머신러닝에서 가장 시간이 많이 소요되는 작업 중 데이터 전처리 과정에서 사용된다.

오디오나 이미지와 같은 대용량 데이터를 다룰 때 데이터의 전처리 과정에 많은 시간이 소요된다.
Hugging Face의 datasets 라이브러리에서는 이 과정을 효과적으로 처리할 수 있는 map() 함수를 제공하고 있다.

map() 함수는 단순한 반복문을 넘어 효과적으로 처리할 수 있는 기능을 가지고 있다.

# 일반적인 for 반복문 방식
new_dataset = []
for data in train_dataset:
    processed_data = prepare_dataset(data, processor)
    if processed_data["input_features"] is not None:
        new_dataset.append(processed_data)

기본적인 반복문은 이렇게 데이터셋에서 데이터를 하나하나 순차적으로 불러와 처리된다. 이렇게 순차적으로만 처리한다면 이미지나 오디오와 같은 고용량 데이터이면서 CPU작업이 많이 필요한 데이터의 경우 많은 시간이 소요되게 된다.

map() 함수를 사용하면 이런 문제점을 해결해준다.

map() 함수를 사용하면 모든 데이터에 필요한 전처리를 일괄적으로 적용해주면서 병렬 처리하여 시간 소요를 줄여준다.
num_proc인자를 통해 cpu코어를 여러개 사용하여 병렬 처리가 가능하도록 지원한다.


# map() 함수의 사용 예시

# 데이터 전처리 함수
def prepare_dataset(batch, processor):
    audio_file_path = batch["path"]
    
    try:
        audio, sampling_rate = sf.read(audio_file_path)
        
        if sampling_rate != 16000:
            audio = librosa.resample(audio, orig_sr=sampling_rate, target_sr=16000)
            sampling_rate = 16000
        batch["input_features"] = processor.feature_extractor(audio, sampling_rate=sampling_rate).input_features[0]
        batch["labels"] = processor.tokenizer(batch["transcription"]).input_ids
        return batch

    except Exception as e:
        print(f"오디오 파일 로딩 오류: {audio_file_path} - {e}")
        return {"input_features": None, "labels": None}

...

# map() 메서드 사용하여 전처리 실행
if run_training:
        print("\n훈련 데이터 전처리 중입니다...")
        train_dataset = train_dataset.map(
            prepare_dataset,
            remove_columns=train_dataset.column_names,
            num_proc=os.cpu_count(),
            fn_kwargs={"processor": processor}
        ).filter(
            lambda x: x["input_features"] is not None
        )
        print(f"필터링 후 훈련 데이터셋 크기: {len(train_dataset)}")
        print("훈련 데이터 전처리 완료.")

parameters

  • prepare_dataset : 모든 데이터에 적용할 전처리 함수
  • remove_columns : 변환 후 제거할 컬럼 설정
  • num_proc : 병렬 처리 설정 (시스템의 CPU 코어 수 사용)
  • fn_kwargs : prepare_dataset 함수에 전달할 추가 인자

prepare_dataset(batch, processor)에서 batchmap() 함수가 데이터셋의 item을 순회하면서 prepare_dataset()의 첫번째 인자에 반환해주는 값이다.

예를들어, 데이터셋이 "path": "오디오_파일_경로", "transcription": "전사_텍스트"형태의 딕셔너리 데이터라면, "path": "오디오_파일_경로", "transcription": "전사_텍스트" 한쌍씩 반복하여 prepare_dataset()에 인자로 들어온다.

batch라는 이름 때문에 여러 개의 항목이 한꺼번에 전달될 것이라 생각할 수 있지만, 기본적으로 .map()은 한 번에 한 항목씩 처리한다. 그래서 batch라는 이름은 데이터셋의 '하나의 행'을 의미하는 것으로 생각하면 된다.


결론적으로, Hugging Face datasets의 map() 메서드는 단순한 반복문을 넘어서 데이터 전처리 과정을 효율적으로, 그리고 병렬 처리까지 지원하는 강력한 데이터 파이프라인으로 만들어준다.

profile
AI Study

0개의 댓글