VisRAG:基于视觉的检索增强多模态文档生成
VisRAG Parsing-free RAG supported by VLMs 项目地址: https://gitcode.com/gh_mirrors/vis/VisRAG
在当今信息爆炸的时代,如何有效提取文档中的信息,特别是那些包含丰富视觉元素的文档,成为了一个挑战。VisRAG,一种基于视觉的检索增强生成模型,应运而生,旨在通过视觉语言模型的强大能力,实现对多模态文档的高效处理。
项目介绍
VisRAG是一个创新的视觉语言模型(VLM)基础的检索增强生成(RAG)流程。这一流程与传统文本为基础的RAG不同,它不是首先解析文档以获取文本,而是直接将文档作为图像使用VLM进行嵌入,进而通过检索来增强VLM的生成能力。这种方法最大限度地保留了原始文档中的数据信息,避免了在解析过程中引入的信息损失。
项目技术分析
VisRAG的核心是两个组件:VisRAG-Ret和VisRAG-Gen。VisRAG-Ret是一个文档嵌入模型,建立在MiniCPM-V 2.0的基础上,这是一个集成了SigLIP作为视觉编码器,以及MiniCPM-2B作为语言模型的视觉语言模型。而VisRAG-Gen则可以使用多种模型作为生成器,包括MiniCPM-V 2.0、MiniCPM-V 2.6和GPT-4o,用户甚至可以根据需要使用任何喜欢的VLM模型。
项目技术应用场景
VisRAG的应用场景广泛,尤其是在处理包含图表、图片、公式等复杂元素的学术文献、技术报告等多模态文档时,能够有效提升信息提取和内容生成的质量。例如,在学术研究中,研究者可以利用VisRAG来分析大规模的学术资料,快速定位相关内容,进而生成摘要或综述。
项目特点
VisRAG具有以下几个显著特点:
- 信息保留:通过直接对文档图像进行嵌入,避免了传统解析过程中可能的信息损失。
- 灵活性:生成部分可以灵活地使用不同的视觉语言模型,用户可以根据具体任务需求进行选择。
- 易于部署:项目提供了详细的设置和训练指南,使得用户可以较为容易地在自己的环境中部署和训练模型。
核心功能
- 文档嵌入:利用VLM直接对文档图像进行嵌入。
- 检索增强:通过检索过程增强文档生成。
在接下来的部分,我们将详细介绍VisRAG的安装、训练、评估和使用方法,帮助读者更好地理解和运用这个强大的工具。
安装与配置
安装VisRAG前,需要确保环境中已安装了必要的依赖库。项目使用conda进行环境管理,提供了清晰的环境配置脚本。用户只需按照以下步骤操作即可:
git clone https://github.com/OpenBMB/VisRAG.git
conda create --name VisRAG python==3.10.8
conda activate VisRAG
conda install nvidia/label/cuda-11.8.0::cuda-toolkit
cd VisRAG
pip install -r requirements.txt
pip install -e .
cd timm_modified
pip install -e .
cd ..
训练
VisRAG的训练分为两个部分,首先是训练检索器VisRAG-Ret,然后是生成器VisRAG-Gen。训练数据可以在Hugging Face的VisRAG集合中找到。训练过程中,用户需要根据自己的需求选择合适的数据集和模型参数。
评估
评估VisRAG的性能时,可以使用提供的脚本进行。用户需要确保测试数据集已经正确下载并放置在相应的路径下。评估脚本将输出模型在多个数据集上的表现,以帮助用户理解模型的性能。
使用
VisRAG的使用非常灵活,提供了Python API供用户调用。用户可以加载预训练的模型,对新的文档进行嵌入和生成。以下是一个简单的使用示例:
from transformers import AutoModel, AutoTokenizer
import torch
import torch.nn.functional as F
from PIL import Image
import os
# 加载预训练模型和分词器
model_name_or_path = "openbmb/VisRAG-Ret"
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_name_or_path, torch_dtype=torch.bfloat16, trust_remote_code=True)
model.eval()
# 编码查询和文档
queries = ["What does a dog look like?"]
passages = [
Image.open('test_image/cat.jpeg').convert('RGB'),
Image.open('test_image/dog.jpg').convert('RGB'),
]
embeddings_query = encode(queries)
embeddings_doc = encode(passages)
# 计算查询和文档间的相似度
scores = (embeddings_query @ embeddings_doc.T)
print(scores.tolist())
以上就是关于VisRAG项目的推荐文章。通过对项目核心功能、技术分析、应用场景和特点的介绍,相信读者已经对这个项目有了基本的了解。VisRAG作为一个强大的多模态文档处理工具,值得广大研究者和开发者关注和尝试。
VisRAG Parsing-free RAG supported by VLMs 项目地址: https://gitcode.com/gh_mirrors/vis/VisRAG
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考