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