illuin-tech/colpali

The code used to train and run inference with the ColVision models, e.g. ColPali, ColQwen2, and ColSmol.

ColPali – 使用視覺語言模型的視覺文件檢索

是什麼 – ColPali 是一個研究級的程式庫,可將文件頁面影像(PDF 頁面轉為 PNG/JPEG、截圖等)透過視覺語言模型(VLM)轉換為 多向量 嵌入。這些嵌入可透過類似 ColBERT 的延遲互動方法與查詢嵌入進行相似度評分,從而實現快速、準確地檢索包含使用者所需資訊的文件——即使答案隱藏在表格、圖表或版面線索中。

為何重要 – 傳統文件搜尋流程首先執行 OCR,提取版面,然後索引純文字。ColPali 跳過了此脆弱的 OCR 步驟:單一 VLM(如 PaliGemma‑3B、Qwen‑VL 或 Qwen3‑VL)處理原始影像區塊,同時保留視覺與文字線索。結果是每個影像區塊產生一組向量,可高效地與查詢向量進行比較。

核心元件

  • 模型系列 – 包含 vidore/colpali‑v1.3vidore/colqwen2‑v1.0vidore/colqwen2.5‑v0.2 等預訓練檢查點,以及社群貢獻的變體(如 Tomoro‑colqwen3‑embed‑4b)。它們基於 ColBERT 架構與 VLM 主幹(PaliGemma、Qwen2‑VL、Qwen3‑VL 等)建構。
  • colpali-engine 套件 – 提供模型類(ColPaliColQwen2 等)、影像與文字處理器,以及評分、令牌池化與可解釋性工具。可透過 PyPI 安裝(pip install colpali-engine)或直接從原始碼安裝。
  • 延遲互動內核 – 可選的 Triton 基 late-interaction-kernels 擴充(colpali-engine[lik])可大幅減少計算 [B, B, Lq, Ld] 相似度張量時的記憶體使用量,使現代 GPU 支援更大的批次大小。
  • 快速 Plaid 索引 – 使用 plaid 附加元件可建立緊湊索引(processor.create_plaid_index),支援在大型語料庫上快速進行 top-k 檢索。
  • 可解釋性interpretability 附加元件可視化相似度圖,突出顯示對每個查詢令牌貢獻最大的影像區塊,有助於除錯與研究。
  • 令牌池化HierarchicalTokenPooler 透過合併冗餘區塊(如白色背景)壓縮多向量表示,將向量數量減少約 2/3,同時保持 >97% 的檢索效能。

典型工作流程

from colpali_engine.models import ColQwen2
from colpali_engine import ColQwen2Processor
import torch, PIL.Image as Image

model = ColQwen2.from_pretrained(
    "vidore/colqwen2-v1.0",
    torch_dtype=torch.bfloat16,
    device_map="cuda:0",
    attn_implementation="flash_attention_2",
).eval()

processor = ColQwen2Processor.from_pretrained("vidore/colqwen2-v1.0")

# 文件(影像)與查詢(文字)
images = [Image.open(p) for p in ["page1.png", "page2.png"]]
queries = ["What is the y‑axis variable?", "Which year had the highest outlay?"]

# 預處理
batch_imgs = processor.process_images(images).to(model.device)
batch_qs   = processor.process_queries(queries).to(model.device)

# 編碼
with torch.no_grad():
    doc_emb = model(**batch_imgs)
    qry_emb = model(**batch_qs)

# 評分(延遲互動)
scores = processor.score_multi_vector(qry_emb, doc_emb)
print(scores)

相同模式也適用於新的 Sentence‑Transformers v6 API(MultiVectorEncoder),ColPali 團隊現已推薦用於生產環境。

目前狀態 – 原始的 colpali-engine 套件已 棄用,建議改用 Sentence‑Transformers(v6+)中整合的支援。倉儲保留用於可重現性、研究與遷移指引。所有模型檢查點仍托管於 Hugging Face,公開排行榜(ViDoRe)持續追蹤其檢索效能。

下一步去向

  • 生產環境 – 使用 sentence-transformers[image]MultiVectorEncoder 類別;提供相同 API 但擁有更好的生態系支援。
  • 基準測試vidore-benchmark 倉儲可讓你在 ViDoRe 資料集上進行評估。
  • 社群資源 – 書籤(github.com/tonywu71/colpali-cookbooks)包含訓練、索引與可視化相似度圖的筆記本。
  • 進一步研究 – 論文(arXiv:2407.01449)與令牌池化研究(arXiv:2409.14683)提供了對模型設計的更深入洞察。

TL;DR – ColPali 是一個將文件影像轉換為多向量嵌入的程式庫,使用視覺語言模型,透過類似 ColBERT 的延遲互動實現快速、無需 OCR 的檢索。原始引擎已棄用,但模型與概念透過 Sentence‑Transformers 的多向量支援得以延續。

相關

  • 專案
  • 專案
  • Dispatch
  • 專案
  • Dispatch