写点什么

ColPali: 基于 PaliGemma-3B 和 ColBERT 策略的视觉检索器

作者:吴脑的键客
  • 2024-11-08
    上海
  • 本文字数:1632 字

    阅读完需:约 5 分钟

ColPali 是一种基于视觉语言模型(VLMs)的新颖模型架构和训练策略,可有效地从视觉特征为文档编制索引。 它是 PaliGemma-3B 的扩展,可生成 ColBERT 风格的文本和图像多向量表示。 它在论文《ColPali: 利用视觉语言模型进行高效文档检索》一文中介绍了它,并首次在该资源库中发布。



版本专用性

该版本在使用 colpali-engine==0.2.0 时进行了培训,但也可在>=0.2.0 的任何版本中加载。


与 vidore/colpali 相比,该版本在训练查询时使用了右填充,以修复查询编码中不需要的标记。 该版本还采用了固定的 vidore/colpaligemma-3b-pt-448 基数,以保证投影层初始化的确定性。 对它进行了 5 个历时的训练,其中包括批内否定和硬挖掘否定,以及 1000 步的热身(10 倍时间),以帮助减少非英语语言的崩溃。


数据与论文中描述的 ColPali 数据相同。

模型描述

该模型从现成的 SigLIP 模型开始迭代建立。 我们对其进行了微调,创建了 BiSigLIP,并将 SigLIP 输出的补丁嵌入输入到 LLM PaliGemma-3B 中,创建了 BiPali。


通过语言模型输入图像补丁嵌入的一个好处是,图像补丁嵌入可以原生映射到与文本输入(查询)类似的潜在空间。 这样就可以利用 ColBERT 策略来计算文本标记和图像补丁之间的交互,从而使性能比 BiPali 有了质的飞跃。

模型训练

数据集

我们的训练数据集由 127,460 个查询页面对组成,其中包括公开学术数据集训练集(63%)和由网络抓取的 PDF 文档页面组成的合成数据集,并添加了 VLM 生成的(Claude-3 Sonnet)伪问题(37%)。 我们的训练集是全英文设计的,这使我们能够研究对非英语语言的零点泛化。 我们明确验证了在 ViDoRe 和训练集中都没有使用多页 PDF 文档,以防止评估污染。 我们使用 2% 的样本创建了验证集,用于调整超参数。


注:多语言数据存在于语言模型(Gemma-2B)的预训练语料库中,并可能出现在 PaliGemma-3B 的多模态训练中。

参数

所有模型均在训练集上训练 1 个历元。 除非另有说明,我们以 bfloat16 格式训练模型,在语言模型的转换层和最终随机初始化的投影层上使用 alpha=32 和 r=32 的低秩适配器(Lowrank adapters,LoRA),并使用 paged_adamw_8bit 优化器。 我们在具有数据并行性的 8 个 GPU 设置上进行训练,学习率为 5e-5,线性衰减,热身步骤为 2.5%,批量大小为 32。

代码

pip install colpali-engine>=0.3.0,<0.4.0
复制代码


from typing import cast
import torchfrom PIL import Image
from colpali_engine.models import ColPali, ColPaliProcessor
model_name = "vidore/colpali-v1.2"
model = ColPali.from_pretrained( model_name, torch_dtype=torch.bfloat16, device_map="cuda:0", # or "mps" if on Apple Silicon).eval()
processor = ColPaliProcessor.from_pretrained(model_name)
# Your inputsimages = [ Image.new("RGB", (32, 32), color="white"), Image.new("RGB", (16, 16), color="black"),]queries = [ "Is attention really all you need?", "Are Benjamin, Antoine, Merve, and Jo best friends?",]
# Process the inputsbatch_images = processor.process_images(images).to(model.device)batch_queries = processor.process_queries(queries).to(model.device)
# Forward passwith torch.no_grad(): image_embeddings = model(**batch_images) querry_embeddings = model(**batch_queries)
scores = processor.score_multi_vector(querry_embeddings, image_embeddings)
复制代码


# scorestensor([[6.0625, 6.4375],    [9.7500, 9.5625]])
复制代码

局限性

  • 重点:该模型主要侧重于 PDF 类型的文档和高资源语言,可能会限制其推广到其他文档类型或代表性较弱的语言。

  • 支持: 该模型依赖于从 ColBERT 后期交互机制中衍生出来的多向量检索,这可能需要工程上的努力才能适应缺乏本地多向量支持的广泛使用的向量检索框架。


感谢大家花时间阅读我的文章,你们的支持是我不断前进的动力。点赞并关注,获取最新科技动态,不落伍!🤗🤗🤗

发布于: 刚刚阅读数: 3
用户头像

怀揣一个武侠梦的男孩 2020-07-29 加入

还未添加个人简介

评论

发布
暂无评论
ColPali: 基于 PaliGemma-3B 和 ColBERT 策略的视觉检索器_人工智能_吴脑的键客_InfoQ写作社区