Transformers documentation
ColPali
Bu model 2024-06-27 tarihinde HF papers'ta yayımlandı ve 2024-12-17 tarihinde Hugging Face Transformers'a katkıda bulunuldu.
ColPali
ColPali, görsel özelliklerini analiz ederek belge geri getirme amacıyla tasarlanmış bir modeldir. Metin çıkarımına ve OCR'a büyük ölçüde dayanan geleneksel sistemlerin aksine ColPali, her sayfayı bir görüntü olarak ele alır. Paligemma-3B kullanarak yalnızca metni değil, aynı zamanda yerleşimi, tabloları, grafikleri ve diğer görsel öğeleri de yakalar; böylece çiftli geç etkileşim benzerlik puanları hesaplanarak geri getirme için kullanılabilen ayrıntılı çok vektörlü gömme (embedding) oluşturur. Bu yaklaşım, belgelerin daha kapsamlı bir şekilde anlaşılmasını sağlar ve daha verimli, daha doğru geri getirme imkânı sunar.
Bu model, @tonywu71 (ILLUIN Technology) ve @yonigozlan (HuggingFace) tarafından katkıda bulunmuştur.
Tüm orijinal ColPali checkpoint'lerini Vidore'un Hf-native ColVision Models koleksiyonunda bulabilirsiniz.
ColPali'nin görüntü geri getirme için nasıl kullanılacağına dair daha fazla örnek için sağ kenar çubuğundaki ColPali modellerine tıklayın.
import requests
import torch
from PIL import Image
from transformers import ColPaliForRetrieval, ColPaliProcessor
# Load the model and the processor
model_name = "vidore/colpali-v1.3-hf"
model = ColPaliForRetrieval.from_pretrained(
model_name,
device_map="auto", # "cpu", "cuda", "xpu", or "mps" for Apple Silicon
)
processor = ColPaliProcessor.from_pretrained(model_name)
# The document page screenshots from your corpus
url1 = "https://upload.wikimedia.org/wikipedia/commons/8/89/US-original-Declaration-1776.jpg"
url2 = "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Romeoandjuliet1597.jpg/500px-Romeoandjuliet1597.jpg"
images = [
Image.open(requests.get(url1, stream=True).raw),
Image.open(requests.get(url2, stream=True).raw),
]
# The queries you want to retrieve documents for
queries = [
"When was the United States Declaration of Independence proclaimed?",
"Who printed the edition of Romeo and Juliet?",
]
# Process the inputs
inputs_images = processor(images=images).to(model.device)
inputs_text = processor(text=queries).to(model.device)
# Forward pass
with torch.no_grad():
image_embeddings = model(**inputs_images).embeddings
query_embeddings = model(**inputs_text).embeddings
# Score the queries against the images
scores = processor.score_retrieval(query_embeddings, image_embeddings)
print("Retrieval scores (query x image):")
print(scores)PIL ile görüntüleri yüklerken sorun yaşıyorsanız, sahte görüntüler oluşturmak için aşağıdaki kodu kullanabilirsiniz:
images = [
Image.new("RGB", (128, 128), color="white"),
Image.new("RGB", (64, 32), color="black"),
]Quantization, ağırlıkları daha düşük bir hassasiyetle temsil ederek büyük modellerin bellek yükünü azaltır. Daha fazla kullanılabilir quantization backend'i için Quantization genel bakışına başvurun.
Aşağıdaki örnek, ağırlıkları int4'e kuantize etmek için bitsandbytes kullanır.
import requests
import torch
from PIL import Image
from transformers import BitsAndBytesConfig, ColPaliForRetrieval, ColPaliProcessor
model_name = "vidore/colpali-v1.3-hf"
# 4-bit quantization configuration
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16,
)
model = ColPaliForRetrieval.from_pretrained(
model_name,
quantization_config=bnb_config,
device_map="auto",
)
processor = ColPaliProcessor.from_pretrained(model_name)
url1 = "https://upload.wikimedia.org/wikipedia/commons/8/89/US-original-Declaration-1776.jpg"
url2 = "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Romeoandjuliet1597.jpg/500px-Romeoandjuliet1597.jpg"
images = [
Image.open(requests.get(url1, stream=True).raw),
Image.open(requests.get(url2, stream=True).raw),
]
queries = [
"When was the United States Declaration of Independence proclaimed?",
"Who printed the edition of Romeo and Juliet?",
]
# Process the inputs
inputs_images = processor(images=images, return_tensors="pt").to(model.device)
inputs_text = processor(text=queries, return_tensors="pt").to(model.device)
# Forward pass
with torch.no_grad():
image_embeddings = model(**inputs_images).embeddings
query_embeddings = model(**inputs_text).embeddings
# Score the queries against the images
scores = processor.score_retrieval(query_embeddings, image_embeddings)
print("Retrieval scores (query x image):")
print(scores)Notlar
score_retrieval(), ilk boyutu sorgu sayısını, ikinci boyutu ise görüntü sayısını temsil eden 2B bir tensör döndürür. Daha yüksek bir puan, sorgu ile görüntü arasındaki benzerliğin daha yüksek olduğunu gösterir.
ColPaliConfig
sınıf transformers.ColPaliConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevlm_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneembedding_dim: int = 128 )
Bu, bir ColpaliModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Belirtilen argümanlara göre bir Colpali modelini örneklemek ve model mimarisini tanımlamak için kullanılır. Varsayılanlarla bir yapılandırma örneği oluşturmak, vidore/colpali-v1.2 ile benzer bir yapılandırmaya yol açar.
Yapılandırma nesneleri PreTrainedConfig sınıfından devralır ve model çıktılarını kontrol etmek için kullanılabilir. Daha fazla bilgi için PreTrainedConfig belgesini okuyun.
ColPaliProcessor
sınıf transformers.ColPaliProcessor
< source >( image_processor = Nonetokenizer = Nonechat_template = Nonevisual_prompt_prefix: str = 'Describe the image.'query_prefix: str = 'Question: ' )
Parametreler
- image_processor (
SiglipImageProcessor) — Görüntü işleyici zorunlu bir girdidir. - tokenizer (
tokenizer_class) — Tokenizer zorunlu bir girdidir. - chat_template (
str) — Bir sohbet içindeki mesaj listelerini tokenize edilebilir bir dizeye dönüştürmek için kullanılan bir Jinja şablonu. - visual_prompt_prefix (
str, isteğe bağlı, varsayılan"Describe the image.") — Görsel jetonlarının başına eklenmek için tokenize edilen bir dize. - query_prefix (
str, isteğe bağlı, varsayılan"Question -- "): Sorgu için kullanılacak bir önek.
Bir görüntü işleyiciyi ve bir belirteçleyiciyi tek bir işleyicide birleştiren bir ColPaliProcessor oluşturur.
ColPaliProcessor, SiglipImageProcessor ve tokenizer_class işlevselliğinin tamamını sunar. Daha fazla bilgi için ~SiglipImageProcessor ve ~tokenizer_class belgelerine bakın.
__call__
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Nonetext: str | list[str] | list[list[str]] = None**kwargs: *<class 'transformers.models.colpali.processing_colpali.ColPaliProcessorKwargs'> ) → BatchFeature
Parametreler
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], isteğe bağlı) — Ön işleme yapılacak görüntü. Piksel değerleri 0 ile 255 arasında değişen tek bir görüntü veya görüntü grubu beklenir. Piksel değerleri 0 ile 1 arasında olan görüntüler geçiriliyorsado_rescale=Falseolarak ayarlayın. - text (
Union[str, list[str], list[list[str]]], isteğe bağlı) — Kodlanacak dizi veya dizi grubu. Her dizi bir metin veya metin listesi (önceden tokenize edilmiş metin) olabilir. Önceden tokenize edilmiş bir girdi geçirirseniz, gruplu girdilerle karışıklığı önlemek içinis_split_into_words=Truedeğerini ayarlayın. - return_tensors (
strveya TensorType, isteğe bağlı) — Belirlenirse, belirli bir çerçeveye ait tensörler döndürülür. Kabul edilen değerler şunlardır:'pt': PyTorchtorch.Tensornesnelerini döndürür.'np': NumPynp.ndarraynesnelerini döndürür.
- **kwargs (ProcessingKwargs, isteğe bağlı) — Her modalite (metin, görüntüler, videolar, ses) için ek işleme seçenekleri. Modelle ilgili parametreler yukarıda listelenmiştir; desteklenen argümanların tam listesi için TypedDict sınıfına bakın.
Dönüş değeri
Aşağıdaki alanlara sahip bir BatchFeature:
- input_ids — Bir modele verilecek token kimliklerinin listesi.
textNoneolmadığında döndürülür.suffixsağlanırsa,input_idsek (suffix) girdi kimliklerini de içerir. - attention_mask — Modelin hangi token'lara dikkat etmesi gerektiğini belirleyen indeks listesi (
return_attention_mask=Trueolduğunda veya “attention_mask”self.model_input_namesiçindeyse vetextNonedeğilse). - pixel_values — Bir modele verilecek piksel değerleri.
imagesNoneolmadığında döndürülür. - labels —
suffixNone değilse eğitimle uyumlu etiketler
ColPaliForRetrieval
sınıf transformers.ColPaliForRetrieval
< source >( config: ColPaliConfig )
Parametreler
- config (ColPaliConfig) — Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için from_pretrained() yöntemine bakın.
ColPali mimarisi, belge görüntülerinden (“ekran görüntülerinden”) doğrudan belge geri getirme için verimli çoklu vektör gömlemleri oluşturmak üzere VLM’leri kullanır. Model, ColBERT’te tanıtılan geç etkileşim yöntemini kullanarak bu belge gömlemleri ile ilgili sorgu gömlemleri arasındaki benzerliği en üst düzeye çıkarmak üzere eğitilir.
ColPali kullanımı, bir belgenin hem metinsel hem de görsel içeriğini (yerleşim, grafikler vb.) dikkate alabilen tek bir model sayesinde, potansiyel olarak karmaşık ve kırılgan yerleşim tanıma ve OCR iş akışlarına duyulan ihtiyacı ortadan kaldırır.
ColPali, ilk olarak şu makalede tanıtılan ColVision model ailesinin bir parçasıdır: ColPali: Efficient Document Retrieval with Vision Language Models.
Bu model PreTrainedModel sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden boyutlandırma, başları budama vb.) için üst sınıf belgelendirmesine bakın.
Bu model aynı zamanda bir PyTorch torch.nn.Module alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.FloatTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → ColPaliForRetrievalOutput or tuple(torch.FloatTensor)
Parametreler
- input_ids (
torch.LongTensorşeklinde(batch_size, sequence_length), isteğe bağlı) — Sözlükteki girdi dizisi belirteçlerinin (token) indeksleri. Varsayılan olarak dolgu (padding) yok sayılır.Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.
- pixel_values (
torch.FloatTensorof shape(batch_size, num_channels, image_size, image_size), isteğe bağlı) — Girdi görüntülerine karşılık gelen tensörler. Piksel değerleriimage_processor_classkullanılarak elde edilebilir. Ayrıntılar içinimage_processor_class.__call__bölümüne bakın (processor_class, görüntüleri işlemek içinimage_processor_classkullanır). - attention_mask (
torch.Tensorşeklinde(batch_size, sequence_length), isteğe bağlı) — Doldurma (padding) token indekslerinde dikkat (attention) işlemi yapmaktan kaçınmak için kullanılan maske. Seçilen maske değerleri[0, 1]:- 1, maskelenmemiş jetonlar için,
- maskelenmiş jetonlar için 0.
Dönüş değeri
ColPaliForRetrievalOutput veya tuple(torch.FloatTensor)
ColPaliForRetrievalOutput veya bir torch.FloatTensor demeti (eğer return_dict=False geçirildiyse veya config.return_dict=False ise), yapılandırmaya (None) ve girdilere bağlı olarak çeşitli öğelerden oluşur.
ColPaliForRetrieval forward metodu, __call__ özel metodunu geçersiz kılar.
İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine
Moduleörneğini çağırmak gerekir; çünkü önceki, ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.
loss (
torch.FloatTensor, şekli(1,), opsiyonel,labelssağlandığında döndürülür) — Dil modelleme kaybı (sonraki token tahmini için).embeddings (
torch.FloatTensor, şekli(batch_size, sequence_length, hidden_size)) — Modelin gömme değerleri.past_key_values (
Cache, isteğe bağlı,use_cache=Truegeçirildiğinde veyaconfig.use_cache=Trueolduğunda döndürülür) — Bir Cache örneğidir. Daha fazla ayrıntı için kv cache kılavuzumuza bakın.Sıralı çözümlemeyi hızlandırmak için (bkz.
past_key_valuesgirdisi) kullanılabilen, önceden hesaplanmış gizli durumları (self-attention bloklarındaki anahtar ve değerler) içerir.hidden_states (
tuple[torch.FloatTensor], isteğe bağlı,output_hidden_states=Truegeçirildiğinde veyaconfig.output_hidden_states=Trueolduğunda döndürülür) —torch.FloatTensor(modelin bir gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için birer tane) içeren,(batch_size, sequence_length, hidden_size)biçiminde bir demet.Her katmanın çıktısında modelin gizli durumları ve isteğe bağlı başlangıç gömme çıktıları.
attentions (
tuple[torch.FloatTensor], isteğe bağlı,output_attentions=Truegeçirildiğinde veyaconfig.output_attentions=Trueolduğunda döndürülür) —torch.FloatTensor(katman başına bir tane) içeren bir tuple, şekli(batch_size, num_heads, sequence_length, sequence_length).Dikkat softmax'ı sonrası dikkat ağırlıkları, öz-dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.
image_hidden_states (
torch.FloatTensor, isteğe bağlı) — Boyutu(batch_size, num_images, sequence_length, hidden_size)olan birtorch.FloatTensor. Görüntü kodlayıcısının son gizli durumu projekte ettikten sonra modelin ürettiği image_hidden_states.