인공지능/자연어 처리

허깅페이스 3 기초 - Audio Feature Extractors

이게될까 2025. 11. 15. 23:02
728x90
728x90

https://huggingface.co/docs/transformers/v4.57.1/en/feature_extractors

 

Feature extractors

 

huggingface.co

 

이제 모델에 오디오 입력을 넣을 수 있도록 Audio Feature extractors를 사용해본다.

from transformers import AutoFeatureExtractor

# Wav2Vec2 모델용 특징 추출기를 불러옴
feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")

# 영어 음성 데이터셋을 train split으로 불러옴 (load_dataset은 datasets 라이브러리 함수임)
dataset = load_dataset("PolyAI/minds14", name="en-US", split="train")

# 특징 추출기로 첫 번째 샘플의 오디오 배열을 처리 (sampling_rate는 1초당 오디오 샘플 개수, 즉 16000Hz에 맞춰 처리)
# → sample_rate(샘플링 레이트)는 오디오를 디지털화할 때 1초에 몇 번 값을 측정하는지 나타내며,
#    대부분의 음성 모델·음성 데이터셋은 16000Hz(16kHz)를 표준으로 사용함
processed_sample = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=16000)

# 특징 추출 결과 확인 (입력값 텐서가 'input_values' 키로 반환됨)
processed_sample
# {'input_values': [array([...], dtype=float32)]}

여기서 sampling_rate를 학습한 값으로 추출하는 것이 중요함 

 

대부분 아래와 같은 방식으로 Feature Extractor를 불러올 수 있다.

from transformers import AutoFeatureExtractor

feature_extractor = AutoFeatureExtractor.from_pretrained("openai/whisper-tiny")

사용하는 법은 위와 같다.

dataset[0]["audio"]["array"]
array([ 0.        ,  0.00024414, -0.00024414, ..., -0.00024414,
        0.        ,  0.        ])
        
        
processed_dataset = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=16000)
processed_dataset
{'input_values': [array([ 9.4472744e-05,  3.0777880e-03, -2.8888427e-03, ...,
       -2.8888427e-03,  9.4472744e-05,  9.4472744e-05], dtype=float32)]}

 

시퀸스가 다른 경우 Transformer 모델에서 처리할 수 없는 오류가 발생한다.

ex)

dataset[0]["audio"]["array"].shape
(86699,)

dataset[1]["audio"]["array"].shape
(53248,)

여기서 패딩 토큰 추가를 통해 한꺼번에 배치를 사용해서 넣을 수 있다.

def preprocess_function(examples):
    audio_arrays = [x["array"] for x in examples["audio"]]
    inputs = feature_extractor(
        audio_arrays,
        sampling_rate=16000,
        padding=True,
    )
    return inputs

processed_dataset = preprocess_function(dataset[:5])
processed_dataset["input_values"][0].shape
(86699,)

processed_dataset["input_values"][1].shape
(86699,)

 

자르기도 가능

def preprocess_function(examples):
    audio_arrays = [x["array"] for x in examples["audio"]]
    inputs = feature_extractor(
        audio_arrays,
        sampling_rate=16000,
        max_length=50000,
        truncation=True,
    )
    return inputs

processed_dataset = preprocess_function(dataset[:5])
processed_dataset["input_values"][0].shape
(50000,)

processed_dataset["input_values"][1].shape
(50000,)

 

cast_column을 통해서 sampling rate를 자동으로 맞춰줄 수 있다.

dataset[0]["audio"]
{'path': '/root/.cache/huggingface/datasets/downloads/extracted/f507fdca7f475d961f5bb7093bcc9d544f16f8cab8608e772a2ed4fbeb4d6f50/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav',
 'array': array([ 0.        ,  0.00024414, -0.00024414, ..., -0.00024414,
         0.        ,  0.        ]),
 'sampling_rate': 8000}

sampling rate가 8000이다.

dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))

dataset[0]["audio"]
{'path': '/root/.cache/huggingface/datasets/downloads/extracted/f507fdca7f475d961f5bb7093bcc9d544f16f8cab8608e772a2ed4fbeb4d6f50/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav',
 'array': array([ 1.70562416e-05,  2.18727451e-04,  2.28099874e-04, ...,
         3.43842403e-05, -5.96364771e-06, -1.76846661e-05]),
 'sampling_rate': 16000}

16000으로 맞추는 모습을 보여준다.

더보기

Hugging Face Transformers 특징 추출기(Feature Extractor) 및 프로세서(Processors) 요약[1]

특징 추출기(Feature Extractor) 정의

  • 오디오 데이터를 각 모델에 맞는 텐서 형태로 전처리하는 도구
  • 원시 오디오를 받아서 모델 입력으로 쓰이는 텐서(input_values 등)로 변환
  • 주요 기능: 패딩(padding), 잘림(truncation), 리샘플링(resampling) 등 기본 전처리 기능 내장

사용법 예시

  • 사전학습된 모델 ID에 맞춰 특징 추출기 불러오기:
    from transformers import AutoFeatureExtractor
    feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")
  • 오디오 데이터셋을 불러와서 특징 추출기 적용:
    processed_sample = feature_extractor(audio_array, sampling_rate=16000)
  • 반환값: 모델별 입력값(input_values)을 포함한 dict

대표 클래스

  • FeatureExtractionMixin과 SequenceFeatureExtractor의 구조 상속
  • AutoClass API로 모델별 적합한 특징 추출기 자동 로딩 가능

입력 형태/모델별 차이

  • Whisper: (batch_size, feature_size, sequence_length)  input_features
  • Wav2Vec2: (batch_size, sequence_length)  input_values
  • 특징 추출기가 입력 형태를 자동 맞춰줌

전처리 주요 기능

  • 패딩: 다른 길이의 오디오 시퀀스는 0으로 패딩해서 batch 처리 가능하게 맞춤.
  • 잘림: 지정한 최대 길이에 맞춰 시퀀스를 뒷부분 잘라냄 (truncation=True, max_length=...).
  • 리샘플링: 오디오 데이터 샘플링 속도가 모델에 맞지 않을 때 자동 업샘플링/다운샘플링 지원.

전처리 파이프라인 예시

  1. 오디오 데이터셋 불러오기 (load_dataset)
  2. 각 샘플의 오디오 배열을 특징 추출기와 함께 처리 (feature_extractor(array, sampling_rate=...))
  3. 패딩/잘림/리샘플링 등 필요 옵션 적용해 일괄 텐서 만드는 배치화 가능

Processor 요약

  • Processor는 텍스트/이미지/오디오 등 멀티모달 입력의 통합 전처리에 사용
  • 여러 특징 추출기/토크나이저/이미지 프로세서 등 조합해 복합 입력 파이프라인 구성 지원

정리

  • Hugging Face의 특징 추출기는 오디오 데이터 등 비정형 입력을 각각 모델별 요구에 맞춰 배치/전처리하는 핵심 도구
  • 기본적으로 사전학습 모델에 적합한 형태 자동 적용, 다양한 샘플링·패딩·잘림 전략 내장
  • Processor를 활용하면 멀티모달 모델 입력에도 일관적인 전처리 파이프라인을 손쉽게 구축 가능
  • 실제 응용 시에는 모델 카드나 예시 코드 참고, 필요한 옵션(JSON config) 직접 조정해 사용하면 됨.
728x90