Transformers documentation
Bộ xử lý
Bộ xử lý
Mô hình đa phương thức yêu cầu một bộ tiền xử lý có khả năng xử lý các đầu vào kết hợp nhiều hơn một phương thức. Tùy thuộc vào phương thức đầu vào, bộ xử lý cần chuyển đổi văn bản thành một mảng tensor, hình ảnh thành các giá trị pixel, và âm thanh thành một mảng tensor với tần số lấy mẫu chính xác.
Ví dụ, PaliGemma là một mô hình thị giác-ngôn ngữ sử dụng bộ xử lý ảnh SigLIP và bộ phân từ Llama. Lớp ProcessorMixin bao bọc cả hai loại tiền xử lý này, cung cấp một lớp bộ xử lý thống nhất cho mô hình đa phương thức.
Gọi from_pretrained() để nạp một processor. Truyền kiểu đầu vào vào processor để tạo ra các đầu vào mô hình, input ids và pixel values mong đợi.
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")
inputsHướng dẫn này mô tả lớp processor và cách tiền xử lý các đầu vào đa phương thức.
Các lớp Processor
Tất cả các bộ xử lý kế thừa từ lớp ProcessorMixin, cung cấp các phương thức như from_pretrained(), save_pretrained() và push_to_hub() để tải, lưu và chia sẻ bộ xử lý lên Hub.
Có hai cách để nạp một processor, đó là sử dụng AutoProcessor và sử dụng lớp processor cụ thể cho từng model.
API AutoClass cung cấp một giao diện đơn giản để nạp bộ xử lý mà không cần chỉ định trực tiếp lớp mô hình cụ thể mà nó thuộc về.
Sử dụng from_pretrained() để tải một bộ xử lý.
from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("google/paligemma-3b-pt-224")Processor cũng được liên kết với một lớp model đa phương thức được huấn luyện trước cụ thể. Bạn có thể tải trực tiếp một processor từ lớp model bằng from_pretrained().
from transformers import WhisperProcessor
processor = WhisperProcessor.from_pretrained("openai/whisper-tiny")Bạn cũng có thể tải riêng hai loại preprocessor, WhisperTokenizerFast và 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)Lưu và nạp một bộ xử lý
save_pretrained() ghi cấu hình của processor vào một tệp processor_config.json duy nhất. Tokenizer và chat template được lưu trong các tệp riêng.
from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf")
processor.save_pretrained("./llava-onevision")llava-onevision/ ├── chat_template.jinja ├── processor_config.json ├── tokenizer.json └── tokenizer_config.json
Mọi sub-processor ngoại trừ tokenizer đều được lồng bên trong processor_config.json dưới tên thuộc tính của nó, chẳng hạn như image_processor, video_processor, hoặc feature_extractor. Các cài đặt thuộc về chính processor, như image_token, nằm ở cấp trên cùng. Ví dụ bên dưới đã được rút gọn.
{
"image_processor": {
"image_processor_type": "LlavaOnevisionImageProcessor",
"do_resize": true,
"size": {"height": 384, "width": 384},
"image_mean": [0.5, 0.5, 0.5]
},
"image_token": "<image>",
"processor_class": "LlavaOnevisionProcessor",
"video_processor": {
"video_processor_type": "LlavaOnevisionVideoProcessor",
"do_resize": true,
"size": {"height": 384, "width": 384},
"image_mean": [0.5, 0.5, 0.5]
},
"video_token": "<video>"
}Các tệp khác được lưu riêng biệt.
- Tokenizer sẽ ghi các tệp thông thường của nó, chẳng hạn như
tokenizer.jsonvàtokenizer_config.json. Nếu một processor có tokenizer thứ hai, nó sẽ được lưu trong một thư mục con được đặt tên theo thuộc tính của nó, chẳng hạn nhưdecoder_tokenizer/. - Mẫu chat được lưu vào
chat_template.jinja. Nếu một processor có nhiều mẫu chat, mẫudefaultsẽ nằm trongchat_template.jinjavà các mẫu còn lại sẽ nằm trong thư mụcchat_templates/.
Khi bạn nạp một processor bằng from_pretrained(), mỗi sub-processor sẽ tìm key lồng nhau của nó trong processor_config.json trước. Nếu không có key đó, nó sẽ dùng một file độc lập. Image processors và feature extractors đọc preprocessor_config.json, còn video processors đọc video_preprocessor_config.json rồi đến preprocessor_config.json. Các checkpoint cũ lưu mỗi sub-processor trong file riêng vẫn được nạp theo cách này.
Cấu hình lồng nhau có độ ưu tiên cao hơn so với tệp độc lập. Nếu một checkpoint có cả hai, việc chỉnh sửa
preprocessor_config.jsonhoặcvideo_preprocessor_config.jsonsẽ không có hiệu lực. Thay vào đó, hãy chỉnh sửa mục lồng nhau trongprocessor_config.json.
Tiền xử lý
Processors tiền xử lý các đầu vào đa phương thức thành định dạng Transformers mong đợi. Có một số tổ hợp phương thức đầu vào mà một processor có thể xử lý, chẳng hạn như văn bản và âm thanh hoặc văn bản và hình ảnh.
Nhiệm vụ nhận dạng giọng nói tự động (ASR) yêu cầu một bộ xử lý có thể xử lý đầu vào văn bản và âm thanh. Hãy tải một bộ dữ liệu và xem các cột audio và text (bạn có thể xóa các cột khác không cần thiết).
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'Hãy nhớ lấy mẫu lại tần số lấy mẫu để khớp với tần số lấy mẫu yêu cầu của các mô hình được huấn luyện trước.
from datasets import Audio
dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))Tải một processor và truyền các cột array và text của audio vào nó.
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Áp dụng hàm prepare_dataset để tiền xử lý bộ dữ liệu. Bộ xử lý trả về input_features cho cột audio và labels cho cột văn bản.
prepare_dataset(dataset[0])