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.3、vidore/colqwen2‑v1.0、vidore/colqwen2.5‑v0.2等預訓練檢查點,以及社群貢獻的變體(如 Tomoro‑colqwen3‑embed‑4b)。它們基於 ColBERT 架構與 VLM 主幹(PaliGemma、Qwen2‑VL、Qwen3‑VL 等)建構。 colpali-engine套件 – 提供模型類(ColPali、ColQwen2等)、影像與文字處理器,以及評分、令牌池化與可解釋性工具。可透過 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