[论文笔记]ColPali: Efficient Document Retrieval with Vision Language Models

news2024/10/27 12:24:05

引言

今天带来一篇多模态RAG的论文笔记:ColPali: Efficient Document Retrieval with Vision Language Models。

引入了一种利用视觉语言模型文档理解能力的检索模型架构ColPali,从文档页面图像上生成高质量的上下文嵌入,结合延迟交互匹配机制。开源在 https://huggingface.co/vidore 。

为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。

1. 总体介绍

文档检索将用户查询与给定语料库的相关文档进行匹配。

Refer to caption

图 1:对于用户查询中的每个词语,ColPali 会识别出最相关的文档图像块(突出显示区域),并计算查询到页面的匹配分数。然后,我们可以快速从大型预索引语料库中检索出最相关的文档。

本篇工作主要由两点贡献:

  1. ViDoRe 我们认为文档检索系统也要考虑检索文档的上下文和视觉元素,因此我们发布了ViDoRe,一个用于评估系统在页面级文档检索方面的性能,涵盖了视觉元素和语言。
  2. ColPali 提出了一种基于视觉语言模型(Vision Language Models, VLMs)的新型模型架构和训练策略,可以有效地从文档的视觉特征对其进行索引,允许随后使用后期交互机制进行快速查询匹配。

2. 问题陈述 & 相关工作

问题设定 检索系统对语料库 D \mathcal D D中的文档 d d d和查询 q q q的相关性进行平分。计算语料库 ∣ D ∣ |\mathcal D| D个文档中每个的相似度得分 s ( q , d ) ∈ R s(q,d) \in \R s(q,d)R,然后进行排名以提取最相关的文档。

我们专注于页面级检索: 给定一个查询,系统是否检索到正确的文档页面? 这里的文档指单个页面。同时对评分系统施加了延迟约束。目前多数检索系统可以分解为:(1) 离线索引节点,构建文档索引。 (2) 在线查询阶段, 查询与索引中的文档匹配,并且低延迟对用户体验至关重要。

高效的文档检索系统展现了高检索性能(R1)、低查询延迟(R2)和高索引吞吐量(R3)的联合特性。

2.1 文本检索方法

文本空间中的文档检索 基于词频的统计方法,如TF-IDF和BM25,简单和高效,仍被广泛使用。

神经网络检索器 在双编码器模型(bi-encoder)中,文档被独立离线地映射到一个密集的向量空间,查询在线嵌入,并通过快速余弦距离计算与文档匹配。一种速度较慢但性能略高的替代方案是交叉编码器(Cross-encoder)系统。

后期交互的多向量检索 每个文档词元被预先计算嵌入并索引。运行时可以计算单个查询词元嵌入的相似度。利用单个查询词元和文档词元之间的丰富交互,同时利用双编码器带来的离线计算和快速查询匹配优势。

检索评估 目前没有基准同时考虑文本和视觉文档特征数来评估文档检索方法。

2.2 整合视觉特征

对比视觉语言模型 通过对比损失对齐分离的视觉和文本编码器,已经实现了将文本内容隐藏的表示映射到相应视觉内容表示。虽然这些模型中存在一些OCR功能,但视觉组件通常没有针对文本理解进行优化。FLIP框架将后期交互机制扩展到跨模态视觉-语言模型,依赖于文本交际和图像块之间的最大相似度操作。

视觉丰富文档理解 为了超越文本,一些面向文档的模型联合编码文本标记以及视觉或文档布局特征。VLM在视觉问答、字幕生成和文档理解方面展现出强大的能力,但并未针对检索任务进行优化。

3. ViDoRe基准

ViDoRe旨在全面评估检索系统在页面级将查询与相关文档进行匹配的能力。包含多个子任务,重点关注各种模态——文本、图像、信息图表、表格。

image-20241023074331991

4. 基于后期交互的视觉检索

4.1 架构

Refer to caption

图 2:与标准检索方法相比,ColPali 简化了文档检索,同时在更低的延迟下取得了更强的性能。

视觉语言模型 将VLM用于检索,利用多模态微调过程中获得的文本和图像标记输出嵌入之间的对齐。我们引入了ColPali,能够生成文本和图像的ColBERT风格的多向量表示,基于Paligemma-3B的扩展。添加了一个投影层,将输出语言模型嵌入映射到一个降维的向量空间 D = 128 D=128 D=128

后期交互 给定查询 q q q和文档 d d d,分别用 E q ∈ R N q × D E_q \in \R^{N_q \times D} EqRNq×D E d ∈ R N d × D E_d \in \R^{N_d \times D} EdRNd×D表示它们在公共嵌入空间 R D \R^D RD中的多向量表示。后期交互算子 LI ( q , d ) \text{LI}(q,d) LI(q,d)是所有查询标记向量 E q ( j ) E_q^{(j)} Eq(j)与每个文档标记嵌入向量 E d ( 1 : N d ) E_{d(1:N_d)} Ed(1:Nd)的最大点积之和:
LI ( q , d ) = ∑ i ∈ [ ∣ 1 , N q ∣ ] max ⁡ j ∈ [ ∣ 1 , N d ∣ ] ⟨ E q ( i ) , E d ( j ) ⟩ (1) \text{LI}(q,d) = \sum_{i \in [|1,N_q|]} \max_{j \in [|1,N_d|]} \langle E_q^{(i)} , E_d^{(j)} \rangle \tag 1 LI(q,d)=i[∣1,Nq]j[∣1,Nd]maxEq(i),Ed(j)(1)
对比损失 后期交互操作是完全可微的,允许反向传播。令批次 { q k , d k } k ∈ [ ∣ 1 , b ∣ ] \{q_k,d_k\}_{k \in [|1,b|]} {qk,dk}k[∣1,b] b b b个查询-文档对组成,其中对于所有 k ∈ [ ∣ 1 , b ∣ ] k \in [|1,b|] k[∣1,b] d k d_k dk是与查询 q k q_k qk对应的文档。将批内对比损失 L \mathcal L L定义为正分数 s k + = LI ( q k , d k ) s_k^+ = \text{LI}(q_k,d_k) sk+=LI(qk,dk)相对于最大负分数 s k − = max ⁡ l , l = k LI ( q k , d l ) s^-_k = \max_{l,l=k} \text{LI}(q_k,d_l) sk=maxl,l=kLI(qk,dl)的softmax交叉熵。

4.2 模型训练

数据集 训练数据集包含127460个查询-文档对。

参数 所有模型都在训练集上训练1个epoch;使用bfloat16格式训练模型;LoRA:在Transformer层以及最终随机初始化的投影层上 α = 32 , r = 32 \alpha=32,r=32 α=32,r=32;使用paged_adamw_8bit优化器;学习率为5e-5;线性衰退;2.5%预热步长;批大小32。

查询增强 在查询标记后添加5个标记,作为一种软可微查询扩展或重新加权机制,如ColBERT的做法。

5. 结论

作者引入了 ColPali,这是一种新颖的检索模型,它利用最新的生成式视觉语言模型,仅从视觉文档特征创建高性能的多向量嵌入。

总结

⭐ 作者介绍了一种新的多模态检索框架ColPali,可以生成文本和图像的ColBERT类多向量表示,也引入后期交互计算每个查询标记和文档标记之间的交互,最终得到一个分数可用于检索排名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法刷题基础知识总结

文章目录 处理输入输出常用数据结构数学知识数论基础质数和合数因数/约数互为质数 阶乘排列与组合 排序字典序Comparator接口 处理输入输出 Scanner 类可以读取多种类型的数据,包括: nextInt():读取整数。nextDouble():读取双精…

vitepress一键push和发布到github部署网站脚本

文章目录 前言一、viteress基本结构二、脚本1、push2、dev 总结 前言 没啥可说的 脚本是bat文件,直接双击运行 提示:以下是本篇文章正文内容,下面案例可供参考 一、viteress基本结构 创建完你的文档,目录如下 ---bin ---docs …

java计算机毕设课设—写字板程序(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式再最下方 java计算机毕设课设—写字板程序(附源码、文章、相关截图、部署视频) 一、项目简介 本毕设旨在开发一个高效、易用的基于Java的写字板程序,通过利用Java的Swing库构建用户界面,实现基本的文本编辑功能…

Ubuntu 22.04系统启动时自动运行ROS2节点

在 Ubuntu 启动时自动运行 ROS2 节点的方法 环境:Ubuntu 系统,ROS2 Humble,使用系统自带的 启动应用程序 目标:在系统启动时自动运行指定的 ROS2 节点 效果展示 系统启动后,自动运行小乌龟节点和键盘控制节点。 实践…

直接删除Github上的文件

直接删除Github上的文件 说明:此操作只删除Github上的文件,本地仓库文件不受影响 1.确定要删除哪个分支文件,以删除main为例, 1.找到本地仓库位置以StudyNote为例,右键 bash here 2.打开命令窗口,将Github的StudyN…

个体能量的勇气层级是否容易达到?

没有勇气面对现实,没有勇气改变自我,没有勇气改变环境,没有勇气创新创造。 这是常态。 如何找寻高质量免费机器人工程资源自学提升-CSDN博客 个人能力的提升,也包括个体能量的提升。 个体能量是个人能力的一个非常重要的衡量指…

微信好友智能管理神器:微动RPA,重塑私域流量构建新纪元 批量自动添加好友

在这个信息爆炸的时代,微信作为私域流量的重要阵地,其好友管理的高效与否直接关乎着个人品牌影响力与商业价值的挖掘。然而,面对海量潜在客户,手动添加好友不仅耗时费力,更可能因频繁操作触发微信风控机制,…

(linux驱动学习 - 12). IIC 驱动实验

目录 一.IIC 总线驱动相关结构体与函数 1.i2c_adapter 结构体 2.i2c_algorithm 结构体 3.向系统注册设置好的 i2c_adapter 结构体 - i2c_add_adapter 4.向系统注册设置好的 i2c_adapter 结构体 - i2c_add_numbered_adapter 5.删除 I2C 适配器 - i2c_del_adapter 二.IIC 设…

影刀RPA实战:验证码识别功能指令

1.影刀官方验证码识别 1.1 介绍 功能:基于AI引擎提供的验证码识别服务,使用影刀内置的AI引擎来识别验证码,使用第三图鉴账号来识别验证码,选填写用户名及密码, 可识别的验证码类型: 纯数字:适…

python学习-第一个小游戏(vscode环境)

学习小甲鱼的视频,写了一个小游戏,vscode环境 运行结果 源码地址: python小游戏-猜数字源码

Visual Studio2022 Profile 工具使用

本篇研究下Visual Studio自带的性能分析工具,针对C代码,基于Visual Studio2022 文章目录 CPU使用率检测并发可视化工具使用率视图线程视图内核视图并发可视化工具SDK 参考资料 CPU使用率 对于CPU密集型程序,我们可以通过分析程序的CPU使用率…

系统架构设计师教程 第2章 2.5 计算机网络 笔记

2.5计算机网络 ★☆☆☆☆ 2.5.1网络的基本概念 1.计算机网络的发展 计算机网络发展,其大致经历了诞生、形成、互联互通和高速发展等4个阶段。 2.计算机网络的功能 1)数据通信 数据通信是依照一定的通信协议,利用数据传 输技术在两个通信结点之间传…

【Spring Boot】元注解

元注解 1.元注解1.1 Target1.2 Retention1.3 Inherited1.4 Documented1.5 interface 2.自定义注解2.1 创建自定义注解类2.2 实现业务逻辑2.3 使用自定义注解 1.元注解 元注解就是定义注解的注解,是 Java 提供的用于定义注解的基本注解。 注解 说明 Retention是注解…

linux中级(NFS服务器)

NFS:用于在NNIX/Linux主机之间进行文件共享的协议 流程:首先服务端开启RPC服务,并开启111端口,服务器端启动NFS服务,并向RPC注册端口信息,客户端启动RPC,向服务器RPC服务请求NFS端口&#xff0…

Matlab数字信号处理——基于改进小波变换的图像去噪方法(7种去噪算法)

1.基于小波变换的阈值收缩法去噪 该方法利用小波变换分离出信号中的噪声成分,并通过设置合适的阈值对小波系数进行收缩,保留主要信息的同时,去除噪声。 %基于小波变换的阈值收缩法去噪算法 clear clc Iimread(nana.png); X im2double(I); …

深入理解C语言中的静态库与动态库 —— 原理与实践

引言 在 C 语言编程中,库是预编译的代码集合,用于实现特定功能,以供其他程序使用。库可以分为静态库和动态库两种主要类型。静态库在编译阶段被链接到目标程序中,而动态库则是在运行时被加载。本文旨在深入探讨这两种库的工作原理…

渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下

day8-渗透测试sql注入篇&时间注入&绕过&HTTP数据编码绕过 一、时间注入 SQL注入时间注入(也称为延时注入)是SQL注入攻击的一种特殊形式,它属于盲注(Blind SQL Injection)的一种。在盲注中,攻击…

Android 在github网站下载项目:各种很慢怎么办?比如gradle下载慢;访问github慢;依赖下载慢

目录 访问github慢gradle下载慢依赖下载慢 前言 大家好,我是前期后期,在网上冲浪的一名程序员。 为什么要看这篇文章呢?问题是什么? 我们在Github上面看到一些好的项目的时候,想下载下来研究学习一下。但经常遇到各…

外面卖几百的Ai数字人软件 说123456生成视频 去授权版本

下载:https://pan.quark.cn/s/27a0cff98eae 可以无限制使用。

网络拓扑视角下的IP地址管理优化

前言 对IP地址进行有效管理,好处是能 提升网络运行效率,还可以保障网络安全和稳定。网络拓扑结构本身作为网络描述中各节点联系的主要角色,为IP地址管理提供了一些优化策略。 网络拓扑和IP地址管理的关系 网络拓扑结构描述了网络中各节点&a…