AI个人学习
和实操指南

Vision is All You Need:使用视觉语言模型构建智能文档检索系统(Vision RAG)

综合介绍

Vision-is-all-you-need 是一个创新的视觉RAG(检索增强生成)系统演示项目,它突破性地将视觉语言模型(VLM)应用于文档处理领域。不同于传统的文本分块方法,该系统直接使用视觉语言模型处理PDF文件的页面图像,将其转换为向量形式存储。系统采用ColPali作为核心视觉语言模型,配合 QDrant 向量数据库实现高效检索,并集成GPT4或GPT4-mini模型进行智能问答。该项目完整实现了从PDF文档导入、图像转换、向量存储到智能检索的全流程,并提供了便捷的API接口和用户友好的前端界面,为文档智能处理领域提供了一种全新的解决方案。

Vision is All You Need:使用视觉语言模型构建智能文档检索系统(Vision RAG)-1

演示地址:https://softlandia-ltd-prod--vision-is-all-you-need-web.modal.run/


 

功能列表

  • PDF 页面嵌入:将 PDF 文件的页面转换为图像,并通过视觉语言模型嵌入为向量。
  • 向量数据库存储:使用 Qdrant 作为向量数据库,存储嵌入的图像向量。
  • 查询检索:用户可以通过查询获取与嵌入图像相似的向量,并生成响应。
  • API 接口:提供 RESTful API 接口,方便用户进行文件上传、查询和检索操作。
  • 前端交互:通过 React 前端界面与 API 进行交互,提供友好的用户体验。

 

使用帮助

安装流程

  1. 安装 Python 3.11 或更高版本
   pip install modal
modal setup
  1. 配置环境变量: 在项目根目录下创建一个 .env 文件,并添加以下内容:
   OPENAI_API_KEY=your_openai_api_key
HF_TOKEN=your_huggingface_token
  1. 运行示例
   modal serve main.py

使用示例

  1. 上传 PDF 文件: 打开浏览器,访问 Modal 提供的 URL,并在 URL 后添加 /docs。 点击 POST /collections 端点,选择 Try it out 按钮,上传 PDF 文件并执行。
  2. 查询相似页面: 使用 POST /search 端点,发送页面图像和查询到 OpenAI API,并返回响应。

前端开发

  1. 安装 Node.js
   cd frontend
npm install
npm run dev
  1. 配置前端环境: 修改 .env.development 文件,添加后端 URL:
   VITE_BACKEND_URL=your_backend_url
  1. 启动前端
   npm run dev

详细操作流程

  1. PDF 页面嵌入
    • 使用 pypdfium 将 PDF 页面转换为图像。
    • 将图像传递给视觉语言模型(如 ColPali)以获取嵌入向量。
    • 将嵌入向量存储在 Qdrant 向量数据库中。
  2. 查询检索
    • 用户输入查询,通过视觉语言模型获取查询嵌入向量。
    • 在向量数据库中搜索相似嵌入向量。
    • 将查询和最佳匹配的图像传递给模型(如 GPT4o),生成响应。
  3. API 使用
    • 上传 PDF 文件:通过 POST /collections 端点上传文件。
    • 查询相似页面:通过 POST /search 端点发送查询并获取响应。
  4. 前端交互
    • 使用 React 前端界面与 API 进行交互。
    • 提供文件上传、查询输入和结果展示功能。

 

参考文章:构建 RAG?厌倦了分块?也许视觉就是你需要的一切!

Vision is All You Need:使用视觉语言模型构建智能文档检索系统(Vision RAG)-2

 

在大多数现代生成式 AI (GenAI) 解决方案的核心,有一种称为 RAG (Retrieval-Augmented Generation,检索增强生成) 的方法。应用 AI 领域的软件工程师通常将其称为“RAG”。通过 RAG,语言模型可以基于企业的专有数据回答问题。

RAG 中的第一个字母 R 代表检索 (retrieval),指的是搜索过程。当用户向 GenAI 机器人提问时,后台的搜索引擎应准确找到与问题相关的材料,以生成完美、无幻觉的回答。A 和 G 分别指将检索到的数据输入到语言模型中并生成最终答案。

本文主要关注检索过程,因为它是实现 RAG 架构中最关键、最耗时且最具挑战性的部分。我们将首先探讨检索的一般概念,然后介绍传统的基于分块的 RAG 检索机制。文章的后半部分则重点介绍一种依赖图像数据进行检索和生成的新 RAG 方法。

信息检索的简史

谷歌和其他主要搜索引擎公司几十年来一直试图解决信息检索问题——“试图”是关键词。信息检索仍然不如预期那么简单。原因之一是人类处理信息的方式与机器不同。将自然语言转换为跨越多样化数据群的合理搜索查询并不容易。谷歌的高级用户可能熟悉操纵搜索引擎的所有可能技巧。但这一过程仍然繁琐,搜索结果也可能相当不理想。

随着语言模型的进步,信息检索突然具备了自然语言界面。然而,语言模型在提供基于事实的信息方面表现不佳,因为其训练数据反映了训练时的世界快照。此外,知识被压缩在模型中,众所周知的幻觉问题不可避免。毕竟,语言模型不是搜索引擎,而是推理机器。

语言模型的优势在于可以为其提供数据样本和指令,并要求其根据这些输入作出回应。这是 ChatGPT 和类似对话式 AI 接口的典型用例。但人们是懒惰的,用同样的努力你可能自己完成了任务。这就是为什么我们需要 RAG:我们可以简单地向应用 AI 解决方案提出问题,并根据精确的信息得到答案。至少,在一个搜索完美的世界中,这是理想情况。

传统 RAG 中的检索如何工作?

RAG 检索方法多种多样,正如 RAG 实现本身一样。搜索始终是一个优化问题,没有通用的解决方案可以适用于所有场景:AI 架构必须为每个具体解决方案量身定制,无论是搜索还是其他功能。

尽管如此,典型的基线解决方案是所谓的分块技术。在这种方法中,存储在数据库中的信息(通常是文档)被拆分为小块,大约是一个段落的大小。然后,每个分块通过与语言模型相关的嵌入模型转换为数值向量。生成的数值向量存储在一个专用的向量数据库中。

一个简单的向量数据库搜索实现如下:

  1. 用户提出一个问题。
  2. 从问题中生成一个嵌入向量。
  3. 在向量数据库中执行语义搜索。
    1. 在语义搜索中,问题向量与数据库中向量之间的接近程度从数学上进行测量,考虑文本块的上下文和含义。
  4. 向量搜索返回例如最匹配的 10 个文本块。

检索到的文本块随后被插入到语言模型的上下文(提示)中,并要求模型生成原始问题的答案。检索之后的这两步即为 RAG 的 A 和 G 阶段。

分块技术和索引前的其他预处理对搜索质量有显著影响。此类预处理方法有几十种,信息也可以在搜索后进行组织或过滤(称为重排序)。除了向量搜索,传统的关键词搜索或任何其他用于检索结构化信息的编程接口也可以使用。例如基于用户问题生成新的 SQL 或 API 查询的文本到 SQL 或文本到 API 技术。对于非结构化数据,分块和向量搜索是最常用的检索技术。

分块并非没有问题。处理不同的文件和数据格式十分繁琐,并且必须为每种格式编写单独的分块代码。虽然有现成的软件库可以使用,但它们并不完美。此外,还必须考虑分块的大小和重叠区域。接着,你会遇到图像、图表、表格等数据的挑战,其中理解视觉信息及其周围上下文(如标题、字体大小及其他微妙的视觉线索)至关重要。而这些在线索在分块技术中完全丢失。

如果这种分块完全不必要,搜索就像人类浏览整个文档页面一样,该怎么办?

图像保留视觉信息

由于先进的多模态模型的发展,基于图像的搜索方法已成为可能。一个基于图像数据的 AI 解决方案的典范是 Tesla 的自动驾驶解决方案,它完全依赖摄像头。该方法背后的理念是,人类主要通过视觉感知周围环境。

这一理念同样适用于 RAG 的实现。与分块处理不同,整个页面会直接作为图像进行索引,即以人类查看的相同格式。例如,每页 PDF 文档会以图像形式输入到专用 AI 模型中(如 ColPali),该模型根据视觉内容和文本创建向量表示。这些向量随后被添加到向量数据库中。我们可以将这种新的 RAG 架构称为 视觉检索增强生成(Vision Retrieval-Augmented Generation,简称 V-RAG)。

这种方法的优势可能是比传统方法更高的检索准确性,因为多模态模型生成的向量表示同时考虑了文本和视觉元素。搜索结果将是文档的整个页面,然后这些页面会以图像形式输入到如 GPT-4 的强大多模态模型中。该模型可以直接引用图表或表格中的信息。

V-RAG 无需先将复杂结构(如图表或表格)提取为文本,再将这些文本重构为新格式,存储到向量数据库中,检索后重新排序形成连贯的提示,最终生成答案。这在处理旧手册、大量表格的文档以及任何以人类为中心的文档格式(内容不仅仅是纯文本)时具有显著优势。索引速度也比传统的布局检测和 OCR 过程快得多。

Vision is All You Need:使用视觉语言模型构建智能文档检索系统(Vision RAG)-3

ColPali 论文中的索引速度统计

尽管如此,从文档中提取文本仍然有价值,并可在图像搜索的同时提供辅助。然而,分块技术作为一种实现 AI 搜索系统的方法,很快将成为众多选择之一。

实践中的 Vision-RAG:Paligemma、ColPali 和向量数据库

与传统的基于文本的 RAG 不同,V-RAG 的实现仍需访问专用模型和 GPU 计算。最佳的 V-RAG 实现方法是使用专为此目的开发的模型 ColPali

ColPali 基于 ColBERT 模型引入的多向量搜索方法以及 Google 的多模态 Paligemma 语言模型。ColPali 是一种多模态搜索模型,这意味着它不仅理解文本内容,还理解文档的视觉元素。实际上,ColPali 的开发者扩展了 ColBERT 的基于文本的搜索方法,使其涵盖视觉领域,利用了 Paligemma。

在创建嵌入时,ColPali 将每幅图像分为 32 x 32 的网格,每幅图像约有 1024 个小块,每个小块用一个 128 维向量表示。总小块数为 1030,因为每幅图像还会附加“描述图像”这一指令 Token。

用户的基于文本的查询会转换到相同的嵌入空间,以便在搜索过程中将小块与查询部分进行比较。搜索过程本身基于所谓的 MaxSim 方法,在 这篇文章 中有详细说明。这种搜索方法已在许多支持多向量检索的向量数据库中实现。

Vision is All You Need – V-RAG 演示及代码

我们创建了 V-RAG 演示,代码可在 Softlandia 的 GitHub 仓库 vision-is-all-you-need 中找到。你还可以在我们账号下找到其他应用 AI 的演示!

运行 ColPali 需要一台具有大量内存的 GPU。因此,最简单的运行方式是在允许使用 GPU 的云平台上。为此,我们选择了卓越的 Modal 平台,该平台使无服务器使用 GPU 既简单又经济。

与大多数在线学术 Jupyter Notebook 演示不同,我们的 Vision is All You Need 演示提供了独特的实际操作体验。你可以克隆该仓库,自行部署并在云端 GPU 上运行完整管道,几分钟内即可免费完成。这一端到端的应用 AI 工程示例,通过提供大多数其他演示无法比拟的真实体验,脱颖而出。

在该演示中,我们还使用了 Qdrant 的内存版本。请注意,运行演示时,已索引的数据会在底层容器停止存在后消失。Qdrant 自 1.10.0 版本起支持多向量搜索。演示仅支持 PDF 文件,这些文件的页面通过 pypdfium2 库转换为图像。此外,我们还使用了 transformers 库以及 ColPali 开发者创建的 colpali-engine 来运行 ColPali 模型。其他库,如 opencv-python-headless(顺便说一句,这是我的工作),也在使用中。

演示提供了用于索引和提问的 HTTP 接口。在此基础上,我们使用 React 构建了一个简单的用户界面。该用户界面还可视化了每个 Token 的注意力图,方便你轻松查看 ColPali 模型认为重要的图像部分。

Vision is All You Need:使用视觉语言模型构建智能文档检索系统(Vision RAG)-4

Vision is All You Need 演示的截图

视觉真的是你所需要的吗?

尽管演示的标题如此,像 ColPali 这样的搜索模型尚未足够优秀,特别是在多语言数据方面。这些模型通常基于有限数量的示例进行训练,这些示例几乎总是某些特定类型的 PDF 文件。因此,该演示也仅支持 PDF 文件。

另一个问题是图像数据的大小以及从中计算的嵌入。这些数据占用相当大的空间,并且在大型数据集上的搜索消耗的计算能力远超过传统的单维向量搜索。通过将嵌入量化为更小的形式(甚至缩小到二进制)可以部分解决这个问题。然而,这会导致信息的丢失,搜索准确性略有下降。在我们的演示中,尚未实施量化,因为对于演示来说优化并不重要。此外,需要注意的是 Qdrant 尚不直接支持二进制向量,但可以 在 Qdrant 中启用量化,Qdrant 会在内部优化向量。然而,基于汉明距离的 MaxSim 尚未得到支持。

因此,仍然建议在使用 ColPali 进行最终页面检索前,结合传统的基于关键词的搜索进行初步过滤。

多模态搜索模型将继续发展,就像传统生成文本嵌入的嵌入模型一样。我相信,OpenAI 或类似的组织很快会发布类似 ColPali 的嵌入模型,将搜索准确性推向一个新高度。然而,这将颠覆所有依赖分块和传统向量搜索方法构建的当前系统。

没有灵活的 AI 架构,你将落后于人

在 AI 领域,语言模型、搜索方法和其他创新正在以加速的速度发布。比这些创新本身更重要的是快速采用它们的能力,这为比竞争对手更快的公司提供了显著的竞争优势。

因此,您的软件(包括搜索功能)的 AI 架构必须具备灵活性和可扩展性,以便能够快速适应最新的技术创新。随着开发速度的加快,系统的核心架构至关重要,它不应仅限于单一解决方案,而是应支持多样化的搜索方法——无论是传统的文本搜索、多模态图像搜索,甚至是全新的搜索模型。

ColPali 只是未来的冰山一角。未来的 RAG 解决方案将结合多种数据源和搜索技术,只有敏捷且可定制的架构才能实现它们的无缝集成。

为了解决这一问题,我们提供以下服务:

  • 评估您现有 AI 架构的状态
    • 与您的技术负责人和开发人员深入探讨 AI 技术,包括代码级别的细节
    • 我们会检查搜索方法、可扩展性、架构灵活性、安全性,以及是否按照最佳实践使用了 (生成式) AI
    • 提出改进建议并列出具体的下一步开发计划
  • 作为您的团队的一部分,实施 AI 功能或 AI 平台
    • 专职的应用 AI 工程师确保您的 AI 项目不会落后于其他开发任务
  • 作为外包产品开发团队,开发 AI 产品
    • 我们从头到尾交付完整的基于 AI 的解决方案

我们帮助客户通过加速 AI 的采用并确保其无缝集成来获得显著的竞争优势。如果您有兴趣了解更多,请与我们联系,一起讨论如何帮助您的公司保持在 AI 开发的前沿。

未经允许不得转载:首席AI分享圈 » Vision is All You Need:使用视觉语言模型构建智能文档检索系统(Vision RAG)

首席AI分享圈

首席AI分享圈专注于人工智能学习,提供全面的AI学习内容、AI工具和实操指导。我们的目标是通过高质量的内容和实践经验分享,帮助用户掌握AI技术,一起挖掘AI的无限潜能。无论您是AI初学者还是资深专家,这里都是您获取知识、提升技能、实现创新的理想之地。

联系我们
zh_CN简体中文