Transformers documentation

ColPali

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

نُشر هذا النموذج في أوراق HF في 27 يونيو 2024، وأُضيف إلى Hugging Face Transformers في 17 ديسمبر 2024.

ColPali

ColPali هو نموذج مصمم لاسترجاع المستندات من خلال تحليل خصائصها البصرية. وعلى عكس الأنظمة التقليدية التي تعتمد بشكل كبير على استخراج النص وتقنية التعرف الضوئي على الحروف (OCR)، يعامل هذا النموذج كل صفحة كصورة. فهو يستخدم Paligemma-3B لالتقاط النص، ولكن أيضاً التخطيط والجداول والمخططات وعناصر بصرية أخرى، لإنشاء تمثيلات متجهية متعددة مفصّلة يمكن استخدامها للاسترجاع من خلال حساب درجات التشابه التفاعلي المتأخر بين الأزواج. وهذا يوفر فهماً أكثر شمولاً للمستندات، ويمكّن من استرجاع أكثر كفاءة ودقة.

تمت مساهمة هذا النموذج من قِبَل @tonywu71 (ILLUIN Technology) و @yonigozlan (HuggingFace).

يمكنك العثور على جميع نقاط التفتيش الأصلية لـ ColPali ضمن مجموعة Hf-native ColVision Models الخاصة بـ Vidore.

انقر على نماذج ColPali في الشريط الجانبي الأيمن لمزيد من الأمثلة حول كيفية استخدام ColPali لاسترجاع الصور.

استرجاع الصور
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، يمكنك استخدام الكود التالي لإنشاء صور وهمية:

images = [
    Image.new("RGB", (128, 128), color="white"),
    Image.new("RGB", (64, 32), color="black"),
]

تقلل عملية التكميم العبء على الذاكرة في النماذج الكبيرة من خلال تمثيل الأوزان بدقة أقل. راجع نظرة عامة على التكميم للاطلاع على المزيد من واجهات التكميم المتاحة.

يستخدم المثال أدناه bitsandbytes لتكميم الأوزان إلى int4.

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)

ملاحظات

  • يعيد score_retrieval() مصفوفة ثنائية الأبعاد، حيث يمثل البُعد الأول عدد الاستعلامات، ويمثل البُعد الثاني عدد الصور. تشير الدرجة الأعلى إلى تشابه أكبر بين الاستعلام والصورة.

ColPaliConfig

فئة transformers.ColPaliConfig

< >

( 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 )

المعاملات

  • vlm_config (Union[dict, ~configuration_utils.PreTrainedConfig], اختياري) — كائن الإعداد أو قاموس العمود الفقري لنموذج الرؤية واللغة.
  • embedding_dim (int، اختياري، القيمة الافتراضية 128) — أبعاد التضمينات والحالات المخفية.

هذه فئة الإعدادات المخزنة لإعدادات نموذج ColpaliModel. تُستخدم لاستحداث نموذج Colpali وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ vidore/colpali-v1.2

ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.

مثال:

from transformers.models.colpali import ColPaliConfig, ColPaliForRetrieval

config = ColPaliConfig()
model = ColPaliForRetrieval(config)

ColPaliProcessor

فئة transformers.ColPaliProcessor

< >

( image_processor = Nonetokenizer = Nonechat_template = Nonevisual_prompt_prefix: str = 'Describe the image.'query_prefix: str = 'Question: ' )

المعاملات

  • image_processor (SiglipImageProcessor) — معالج الصور هو مدخل إلزامي.
  • tokenizer (tokenizer_class) — مُجزِّئ النص (tokenizer) هو مدخل إلزامي.
  • chat_template (str) — قالب Jinja لتحويل قوائم الرسائل في المحادثة إلى نص قابل للتجزئة.
  • visual_prompt_prefix (str، اختياري، القيمة الافتراضية "Describe the image.") — نص يُحوَّل إلى رموز (tokens) ويُضاف قبل رموز الصورة.
  • query_prefix (str، اختياري، القيمة الافتراضية "Question -- "): بادئة تُستخدم للاستعلام.

ينشئ معالج ColPaliProcessor يجمع بين معالج الصور ومجزّئ الرموز في معالج واحد.

يوفر ColPaliProcessor جميع وظائف SiglipImageProcessor وtokenizer_class. راجع ~SiglipImageProcessor و~tokenizer_class لمزيد من المعلومات.

__call__

< >

( 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

المعاملات

  • images (Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], اختياري) — الصورة التي سيتم معالجتها مسبقًا. يتوقع صورة واحدة أو دفعة من الصور بقيم بكسل تتراوح بين 0 و255. إذا كنت تمرر صورًا بقيم بكسل بين 0 و1، فاضبط do_rescale=False.
  • text (Union[str, list[str], list[list[str]]]، اختياري) — التسلسل أو الدفعة من التسلسلات المراد ترميزها. يمكن أن يكون كل تسلسل نصاً أو قائمة من النصوص (نص مُقسَّم مسبقاً إلى رموز). إذا مرّرت مدخلاً مُقسَّماً مسبقاً إلى رموز، فعيّن is_split_into_words=True لتجنّب الغموض مع المدخلات المُجمَّعة في دفعات.
  • return_tensors (str أو TensorType, اختياري) — إذا تم تعيينه، فسيُعاد تينسورات من إطار عمل محدد. القيم المقبولة هي:
    • 'pt': إرجاع كائنات torch.Tensor من PyTorch.
    • 'np': إرجاع كائنات np.ndarray من NumPy.
  • **kwargs (ProcessingKwargs، اختياري) — خيارات معالجة إضافية لكل نمط (نص، صور، مقاطع فيديو، صوت). تُدرج المعلمات الخاصة بالنموذج أعلاه؛ راجع فئة TypedDict للحصول على القائمة الكاملة للحجج المدعومة.

يعيد

BatchFeature

BatchFeature يحتوي على الحقول التالية:

  • input_ids — قائمة معرّفات الرموز (token ids) التي تُمرَّر إلى النموذج. تُعاد هذه القائمة عندما لا تكون text بقيمة None. وإذا تم توفير suffix، فستتضمن input_ids أيضاً معرّفات مدخلات اللاحقة.
  • attention_mask — قائمة بالفهارس تحدد الرموز التي يجب على النموذج الانتباه إليها (عندما يكون return_attention_mask=True أو إذا كان “attention_mask” ضمن self.model_input_names وإذا لم يكن text None).
  • pixel_values — قيم البكسلات التي تُمرَّر إلى النموذج. تُعاد عندما لا تكون images بقيمة None.
  • labels — تسميات متوافقة مع التدريب إذا لم يكن suffix قيمة فارغة

ColPaliForRetrieval

فئة transformers.ColPaliForRetrieval

< >

( config: ColPaliConfig )

المعاملات

  • config (ColPaliConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

تعتمد بنية ColPali على نماذج اللغة البصرية (VLMs) لبناء تمثيلات متعددة المتجهات بكفاءة مباشرةً من صور المستندات ("لقطات الشاشة") لأغراض استرجاع المستندات. يتم تدريب النموذج على تعظيم التشابه بين هذه التمثيلات المستندية وتمثيلات الاستعلامات المقابلة، باستخدام طريقة التفاعل المتأخر (late interaction) المقدمة في ColBERT.

يُزيل استخدام ColPali الحاجة إلى خطوط معالجة معقدة وهشة محتملاً للتعرف على التخطيط والنص الضوئي، من خلال نموذج واحد قادر على مراعاة المحتوى النصي والبصري (التخطيط، الرسوم البيانية، إلخ) للمستند.

يُعدّ ColPali جزءًا من عائلة نماذج ColVision، التي تم تقديمها لأول مرة في الورقة البحثية التالية: ColPali: Efficient Document Retrieval with Vision Language Models.

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → ColPaliForRetrievalOutput or tuple(torch.Tensor)

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا.

    يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • pixel_values (torch.Tensor من الشكل (batch_size, num_channels, image_size, image_size)، اختياري) — المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسل باستخدام image_processor_class. راجع image_processor_class.__call__ للتفاصيل (processor_class يستخدم image_processor_class لمعالجة الصور).
  • attention_mask (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.

    ما هي أقنعة الانتباه؟

يعيد

ColPaliForRetrievalOutput أو tuple(torch.Tensor)

ColPaliForRetrievalOutput أو مجموعة مرتبة من torch.Tensor (إذا تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على الإعداد (None) والمدخلات.

تتجاوز طريقة ColPaliForRetrieval الخاصة بالتقديم (forward) الطريقة الخاصة __call__.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن Module بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

  • loss (torch.Tensor of shape (1,), اختياري, يُعاد عند توفير labels) — خسارة نمذجة اللغة (لتوقع الرمز التالي).

  • التمثيلات (torch.Tensor من الشكل (batch_size, sequence_length, hidden_size)) — التمثيلات الخاصة بالنموذج.

  • past_key_values (Cache، اختياري، يُعاد عند تمرير use_cache=True أو عند تعيين config.use_cache=True) — إنه كائن من نوع Cache. لمزيد من التفاصيل، راجع دليل ذاكرة kv.

    تحتوي على حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي) يمكن استخدامها (انظر مدخل past_key_values) لتسريع فك الترميز التسلسلي.

  • hidden_states (tuple[torch.Tensor]، اختياري، يُعاد عند تمرير output_hidden_states=True أو عند تعيين config.output_hidden_states=True) — مجموعة من torch.Tensor (واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل (batch_size, sequence_length, hidden_size).

    حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.

  • attentions (tuple[torch.Tensor]، اختياري، يُعاد عند تمرير output_attentions=True أو عند تعيين config.output_attentions=True) — مجموعة من torch.Tensor (واحدة لكل طبقة) بأبعاد (batch_size, num_heads, sequence_length, sequence_length).

    أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

  • image_hidden_states (torch.Tensor، اختياري) — torch.Tensor بحجم (batch_size, num_images, sequence_length, hidden_size). قيم image_hidden_states التي ينتجها النموذج عبر مُشفِّر الرؤية بعد إسقاط الحالة المخفية الأخيرة.

Update on GitHub