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