许可证: mit
库名称: colpali
基础模型: google/paligemma-3b-mix-448
语言:
- 英文
标签:
- colpali
- vidore
新版本: vidore/colpali-v1.1
数据集:
- vidore/colpali_train_set
管道标签: visual-document-retrieval
ColPali: 基于PaliGemma-3B与ColBERT策略的视觉检索模型
ColPali是一种基于新型模型架构和训练策略的视觉语言模型(VLM),用于高效地从视觉特征索引文档。
该模型是PaliGemma-3B的扩展版本,能够生成ColBERT风格的多向量文本和图像表示。
该模型在论文ColPali: 基于视觉语言模型的高效文档检索中首次提出,并在此代码库中首次发布。

模型描述
本模型从现成的SigLIP模型开始迭代构建。
我们对其进行微调创建了BiSigLIP,并将SigLIP输出的图像块嵌入输入到大型语言模型PaliGemma-3B中,最终创建了BiPali。
通过语言模型输入图像块嵌入的一个优势是,它们会自然地映射到与文本输入(查询)相似的潜在空间。
这使得我们可以利用ColBERT策略来计算文本标记与图像块之间的交互作用,相比BiPali实现了性能的阶跃式提升。
模型训练
数据集
我们的训练数据集包含127,460个查询-页面对,由公开可用的学术数据集训练集(63%)和合成数据集(37%)组成。合成数据集由网络爬取的PDF文档页面组成,并通过VLM生成(Claude-3 Sonnet)的伪问题进行增强。
我们的训练集在设计上是纯英文的,这使得我们可以研究对非英语语言的零样本泛化能力。我们明确验证了没有多页PDF文档同时出现在ViDoRe和训练集中,以防止评估污染。
使用2%的样本创建验证集以调整超参数。
注:多语言数据存在于语言模型(Gemma-2B)的预训练语料库中,并可能在PaliGemma-3B的多模态训练期间出现。
参数
所有模型在训练集上训练1个epoch。除非另有说明,我们以bfloat16
格式训练模型,使用低秩适配器(LoRA),在语言模型的transformer层以及最终随机初始化的投影层上设置alpha=32
和r=32
,并使用paged_adamw_8bit
优化器。
我们在8个GPU上使用数据并行进行训练,学习率为5e-5,带有2.5%预热步长的线性衰减,批量大小为32。
使用方式
为获得最佳性能,请使用新版模型(vidore/colpali-v1.2)
pip install colpali_engine==0.1.1
import torch
import typer
from torch.utils.data import DataLoader
from tqdm import tqdm
from transformers import AutoProcessor
from PIL import Image
from colpali_engine.models.paligemma_colbert_architecture import ColPali
from colpali_engine.trainer.retrieval_evaluator import CustomEvaluator
from colpali_engine.utils.colpali_processing_utils import process_images, process_queries
from colpali_engine.utils.image_from_page_utils import load_from_dataset
def main() -> None:
"""使用ColPali运行推理的示例脚本"""
model_name = "vidore/colpali"
model = ColPali.from_pretrained("vidore/colpaligemma-3b-mix-448-base", torch_dtype=torch.bfloat16, device_map="cuda").eval()
model.load_adapter(model_name)
processor = AutoProcessor.from_pretrained(model_name)
images = load_from_dataset("vidore/docvqa_test_subsampled")
queries = ["詹姆斯·V·菲奥卡来自哪所大学?", "日本首相是谁?"]
dataloader = DataLoader(
images,
batch_size=4,
shuffle=False,
collate_fn=lambda x: process_images(processor, x),
)
ds = []
for batch_doc in tqdm(dataloader):
with torch.no_grad():
batch_doc = {k: v.to(model.device) for k, v in batch_doc.items()}
embeddings_doc = model(**batch_doc)
ds.extend(list(torch.unbind(embeddings_doc.to("cpu"))))
dataloader = DataLoader(
queries,
batch_size=4,
shuffle=False,
collate_fn=lambda x: process_queries(processor, x, Image.new("RGB", (448, 448), (255, 255, 255))),
)
qs = []
for batch_query in dataloader:
with torch.no_grad():
batch_query = {k: v.to(model.device) for k, v in batch_query.items()}
embeddings_query = model(**batch_query)
qs.extend(list(torch.unbind(embeddings_query.to("cpu"))))
retriever_evaluator = CustomEvaluator(is_multi_vector=True)
scores = retriever_evaluator.evaluate(qs, ds)
print(scores.argmax(axis=1))
if __name__ == "__main__":
typer.run(main)
局限性
- 专注领域: 该模型主要针对PDF类文档和高资源语言,可能限制其对其他文档类型或较少代表语言的泛化能力。
- 支持: 该模型依赖于源自ColBERT延迟交互机制的多向量检索,可能需要工程努力来适应缺乏原生多向量支持的广泛使用的向量检索框架。
许可证
ColPali的视觉语言骨干模型(PaliGemma)遵循其模型卡片中指定的gemma
许可证。附加到模型的适配器遵循MIT许可证。
联系方式
- 曼努埃尔·费斯: manuel.faysse@illuin.tech
- 雨果·西比尔: hugues.sibille@illuin.tech
- 托尼·吴: tony.wu@illuin.tech
引用
如果您在研究中使用了本组织的任何数据集或模型,请按以下方式引用原始数据集:
@misc{faysse2024colpaliefficientdocumentretrieval,
title={ColPali: 基于视觉语言模型的高效文档检索},
author={曼努埃尔·费斯 and 雨果·西比尔 and 托尼·吴 and 比莱尔·奥姆拉尼 and 高蒂尔·维亚德 and 塞琳·于德洛 and 皮埃尔·科伦坡},
year={2024},
eprint={2407.01449},
archivePrefix={arXiv},
primaryClass={cs.IR},
url={https://arxiv.org/abs/2407.01449},
}