프로세서

프로세서 (Processors)

멀티모달(multimodal) 모델은 하나 이상의 모달리티를 결합한 입력을 처리할 수 있는 전처리기를 필요로 해요. 입력 모달리티에 따라 프로세서는 텍스트를 텐서 배열로, 이미지를 픽셀 값으로, 오디오를 올바른 샘플링 레이트를 가진 텐서 배열로 변환해야 합니다.

출처: 문서

본문

예를 들어 PaliGemma는 SigLIP 이미지 프로세서와 Llama 토크나이저를 사용하는 비전-언어 모델입니다. ProcessorMixin 클래스가 이 두 전처리기 유형을 모두 감싸서, 멀티모달 모델에 단일하고 통일된 프로세서 클래스를 제공해요.

from_pretrained()를 호출하면 프로세서를 불러옵니다. 프로세서에 입력 유형을 넘기면 모델 입력으로 기대되는 input ids와 픽셀 값을 생성합니다.

from transformers import AutoProcessor, PaliGemmaForConditionalGeneration
from PIL import Image
import requests

processor = AutoProcessor.from_pretrained("google/paligemma-3b-pt-224")

prompt = "answer en Where is the cat standing?"
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
image = Image.open(requests.get(url, stream=True).raw)

inputs = processor(text=prompt, images=image, return_tensors="pt")
inputs

이 가이드는 프로세서 클래스와 멀티모달 입력을 전처리하는 방법을 설명합니다.

프로세서 클래스 (Processor classes)

모든 프로세서는 ProcessorMixin 클래스를 상속하며, 이 클래스는 프로세서를 로드·저장·공유하게 해주는 from_pretrained(), save_pretrained(), push_to_hub() 같은 메서드를 제공합니다.

프로세서를 로드하는 방법은 두 가지입니다: AutoProcessor로 로드하거나, 모델별 프로세서 클래스로 로드할 수 있어요.

AutoClass API는 속한 특정 모델 클래스를 직접 지정하지 않고도 프로세서를 로드하는 간단한 인터페이스를 제공합니다.

from_pretrained()를 사용해 프로세서를 불러옵니다.

from transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("google/paligemma-3b-pt-224")

프로세서는 특정 사전 훈련 멀티모달 모델 클래스와도 연결되어 있어요. from_pretrained()로 모델 클래스에서 직접 프로세서를 로드할 수 있습니다.

from transformers import WhisperProcessor

processor = WhisperProcessor.from_pretrained("openai/whisper-tiny")

두 전처리기 유형인 WhisperTokenizerFast와 WhisperFeatureExtractor를 별도로 로드할 수도 있어요.

from transformers import WhisperTokenizerFast, WhisperFeatureExtractor, WhisperProcessor

tokenizer = WhisperTokenizerFast.from_pretrained("openai/whisper-tiny")
feature_extractor = WhisperFeatureExtractor.from_pretrained("openai/whisper-tiny")
processor = WhisperProcessor(feature_extractor=feature_extractor, tokenizer=tokenizer)

전처리 (Preprocess)

프로세서는 멀티모달 입력을 기대하는 Transformers 형식으로 전처리합니다. 프로세서가 처리할 수 있는 입력 모달리티 조합은 텍스트와 오디오, 텍스트와 이미지처럼 몇 가지가 있습니다.

자동 음성 인식(ASR) 작업은 텍스트와 오디오 입력을 처리할 수 있는 프로세서가 필요해요. 데이터셋을 로드하고 audio와 text 컬럼을 살펴봅니다(필요 없는 다른 컬럼은 제거할 수 있어요).

from datasets import load_dataset

dataset = load_dataset("keithito/lj_speech", split="train")
dataset = dataset.map(remove_columns=["file", "id", "normalized_text"])
dataset[0]["audio"]
{'array': array([-7.3242188e-04, -7.6293945e-04, -6.4086914e-04, ...,
         7.3242188e-04,  2.1362305e-04,  6.1035156e-05], dtype=float32),
 'path': '/root/.cache/huggingface/datasets/downloads/extracted/917ece08c95cf0c4115e45294e3cd0dee724a1165b7fc11798369308a465bd26/LJSpeech-1.1/wavs/LJ001-0001.wav',
 'sampling_rate': 22050}

dataset[0]["text"]
'Printing, in the only sense with which we are at present concerned, differs from most if not from all the arts and crafts represented in the Exhibition'

샘플링 레이트를 사전 훈련 모델이 요구하는 값에 맞게 다시 샘플링(resample)하는 것을 잊지 마세요.

from datasets import Audio

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

프로세서를 로드하고 오디오 array와 text 컬럼을 넘겨 줍니다.

from transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("openai/whisper-tiny")

def prepare_dataset(example):
    audio = example["audio"]
    example.update(processor(audio=audio["array"], text=example["text"], sampling_rate=16000))
    return example

prepare_dataset 함수를 적용해 데이터셋을 전처리합니다. 프로세서는 audio 컬럼에 input_features를, 텍스트 컬럼에 labels를 반환해요.

prepare_dataset(dataset[0])

더 알아보기 (Learn more)