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=...).
- 리샘플링: 오디오 데이터 샘플링 속도가 모델에 맞지 않을 때 자동 업샘플링/다운샘플링 지원.
전처리 파이프라인 예시
- 오디오 데이터셋 불러오기 (load_dataset)
- 각 샘플의 오디오 배열을 특징 추출기와 함께 처리 (feature_extractor(array, sampling_rate=...))
- 패딩/잘림/리샘플링 등 필요 옵션 적용해 일괄 텐서 만드는 배치화 가능
Processor 요약
- Processor는 텍스트/이미지/오디오 등 멀티모달 입력의 통합 전처리에 사용
- 여러 특징 추출기/토크나이저/이미지 프로세서 등 조합해 복합 입력 파이프라인 구성 지원
정리
- Hugging Face의 특징 추출기는 오디오 데이터 등 비정형 입력을 각각 모델별 요구에 맞춰 배치/전처리하는 핵심 도구
- 기본적으로 사전학습 모델에 적합한 형태 자동 적용, 다양한 샘플링·패딩·잘림 전략 내장
- Processor를 활용하면 멀티모달 모델 입력에도 일관적인 전처리 파이프라인을 손쉽게 구축 가능
- 실제 응용 시에는 모델 카드나 예시 코드 참고, 필요한 옵션(JSON config) 직접 조정해 사용하면 됨.
728x90
'인공지능 > 자연어 처리' 카테고리의 다른 글
| QA, SFT 데이터 셋 조사 (0) | 2025.11.27 |
|---|---|
| 허깅페이스 4 기초 - Trainer (2) | 2025.11.16 |
| 허깅페이스 1 기초 - 모델 부르기, 모델 공유하기, 모델 구성 요소 변경하기 (0) | 2025.11.12 |
| Embedding 모델 학습하기 - Sentence Transformer Trainer (0) | 2025.09.07 |
| LLM Pruning to Encoder - Large Language Models Are Overparameterized Text Encoders (2) | 2025.07.17 |