LLM之RAG实战(七)| 使用llama_index实现多模态RAG

一、多模态RAG

       OpenAI开发日上最令人兴奋的发布之一是GPT-4V API(https://platform.openai.com/docs/guides/vision)的发布。GPT-4V是一个多模态模型,可以接收文本/图像,并可以输出文本响应。最近还有一些其他的多模态模型:LLaVa和Fuyu-8B。

​      在过去的一年里,大部分应用程序开发都是围绕文本输入/文本输出范式。最典型的例子之一是检索增强生成(RAG)——将LLM与外部文本语料库相结合,对模型未经训练的数据进行推理。通过处理任意文档(比如PDF、网页),将其切分为块并存储到向量数据库中,然后通过检索到相关的块输入给LLM,让LLM给出用户期待的回复。

       与标准RAG pipeline对比,我们看一下多模态RAG的所有步骤:

输入:输入可以是文本或图像。

检索:检索到的上下文可以是文本或图像。

合成:答案可以在文本和图像上合成。

响应:返回的结果可以是文本和/或图像。

       也可以在图像和文本之间采用链式/顺序调用,例如检索增强图像字幕或在多模态代理进行循环。

二、多模态LLM

   OpenAIMultiModal类可以直接支持GPT-4V模型,ReplicateMultiModal类可以支持开源多模式模型(目前处于测试版,因此名称可能会更改)。SimpleDirectoryReader能够接收音频、图像和视频,现在可以直接将它们传递给GPT-4V并进行问答,如下所示:

from llama_index.multi_modal_llms import OpenAIMultiModalfrom llama_index import SimpleDirectoryReaderimage_documents = SimpleDirectoryReader(local_directory).load_data()openai_mm_llm = OpenAIMultiModal(    model="gpt-4-vision-preview", api_key=OPENAI_API_TOKEN, max_new_tokens=300)response = openai_mm_llm.complete(    prompt="what is in the image?", image_documents=image_documents)

       与默认具有标准的完成/聊天端点的LLM类不同,多模态模型(MultiModalLLM)可以接受图像和文本作为输入。

三、多模态嵌入

      我们介绍一个新的MultiModalEmbedding基类,它既可以embedding文本也可以embedding图像。它包含了我们现有嵌入模型的所有方法(子类BaseEmbedding),但也公开了get_image_embedding。我们在这里的主要实现是使用CLIP模型的ClipEmbedding。

四、多模态索引与检索

      MultiModalVectorIndex可以从向量数据库中索引文本和图像。与我们现有的(最流行的)索引VectorStoreIndex不同,这个新索引可以存储文本和图像文档。索引文本与之前是一样的——使用文本嵌入模型嵌入的,并存储在矢量数据库中。图像索引是一个单独的过程,如下所示:、

  • 使用CLIP嵌入图像;
  • 使用base64编码或路径表示图像节点,并将其与嵌入一起存储在矢量数据库中(与文本分离)。

       我们将图像和文本分开存储,因为我们可能希望对文本使用纯文本嵌入模型,而不是CLIP嵌入(例如ada或sbert)。

在检索期间,我们执行以下操作:

  • 通过在文本嵌入上进行矢量搜索来检索文本;
  • 通过在图像嵌入上进行矢量搜索来检索图像

文本和图像作为节点返回到结果列表中,然后再汇总这些结果。

五、多模态RAG实战

       下面我们以查询特斯拉为例展示llama_index实现多模态RAG,根据给出特斯拉的网站或车辆、SEC填充物和维基百科页面的截图来查询特斯拉。

加载文本和图像混合文本:

documents = SimpleDirectoryReader("./mixed_wiki/").load_data()

       然后,我们在Qdrant中定义两个独立的矢量数据库:一个用于存储文本文档,一个用于存储图像。然后我们定义一个MultiModalVectorStoreIndex。

# Create a local Qdrant vector storeclient = qdrant_client.QdrantClient(path="qdrant_mm_db")text_store = QdrantVectorStore(    client=client, collection_name="text_collection")image_store = QdrantVectorStore(    client=client, collection_name="image_collection")storage_context = StorageContext.from_defaults(vector_store=text_store)# Create the MultiModal indexindex = MultiModalVectorStoreIndex.from_documents(    documents, storage_context=storage_context, image_vector_store=image_store)

       最后,我们可以通过我们的多模态语料库进行提问。

示例1:检索增强字幕

       我们复制/粘贴初始图像标题作为输入,以获得检索增强输出:

retriever_engine = index.as_retriever(    similarity_top_k=3, image_similarity_top_k=3)# retrieve more information from the GPT4V responseretrieval_results = retriever_engine.retrieve(query_str)

检索到的结果包含图像和文本:

我们可以将其提供给GPT-4V,以提出后续问题或综合一致的回答:

示例2:多模态RAG查询

      我们提出了一个问题,并从整个多模态RAG pipeline中得到回应。SimpleMultiModalQueryEngine首先检索相关图像/文本集,并将其输入给视觉模型,以便合成响应。

from llama_index.query_engine import SimpleMultiModalQueryEnginequery_engine = index.as_query_engine(    multi_modal_llm=openai_mm_llm,    text_qa_template=qa_tmpl)query_str = "Tell me more about the Porsche"response = query_engine.query(query_str)

         生成的结果+来源如下所示:

参考文献:

[1] https://blog.llamaindex.ai/multi-modal-rag-621de7525fea

[2] https://github.com/run-llama/llama_index/blob/main/docs/examples/multi_modal/llava_multi_modal_tesla_10q.ipynb

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大数据存储与处理】实验二 HBase 过滤器操作

实验二 HBase 过滤器操作 【实验目的】: 1.掌握使用 HBase 过滤器进行全表扫描。 【实验内容与要求】: 在 HBase 中,Get 和 Scan 操作都可以使用过滤器来设置输出的范围,类似于 SQL 里面 的 Where 查询条件。使用 show_filte…

中国自动驾驶行业:迈向无限可能

中国自动驾驶行业正在经历蓬勃发展,取得了令人瞩目的成果。这一行业在技术创新、政策支持和市场需求等方面展现出巨大潜力。本文将从技术创新、产业生态和前景发展等角度,探讨中国自动驾驶行业的现状和未来前景。 中国自动驾驶行业正处于一个令人瞩目的快…

Codeforces Round 638 (Div. 2)B. Phoenix and Beauty(思维构造)

B. Phoenix and Beauty 这道题目学到的东西: 从给出的数据范围观察,得到一些有用信息(峰哥教的)考虑无解的情况‘ 其实这题考虑怎么操作是比较难的,如果能想出来满足条件的结果就比较好了(我在说什么我自…

ASP.NET Core基础之定时任务(二)-Quartz.NET入门

阅读本文你的收获 了解任务调度框架QuartZ.NET的核心构成学会在ASP.NET Core 中使用QuartZ.NET 在项目的开发过程中,难免会遇见需要后台处理的任务,例如定时发送邮件通知、后台处理耗时的数据处理等,上次分享了ASP.NET Core中实现定时任务的…

vitepress项目使用github的action自动部署到github-pages中,理论上可以通用所有

使用github的action自动部署到github-pages中 创建部署的deploy.yml文件,在项目的根目录下面 .github\workflows\deploy.yml 完整的代码:使用的是pnpm进行依赖安装。 name: 部署VitePresson:push:branches:- docs # 这段是在推送到 docs 分支时触发该…

EfficientDet:Scalable and Efficient Object Detection中文版 (BiFPN)

EfficientDet: Scalable and Efficient Object Detection EfficientDet:可扩展和高效的目标检测 摘要 模型效率在计算机视觉中变得越来越重要。本文系统地研究了用于目标检测的神经网络架构设计选择,并提出了几个关键的优化方法来提高效率。首先&…

[node]Node.js 中REPL简单介绍

[node]Node.js 中REPL简单介绍 什么是REPL为什么使用REPL如何使用REPL 命令REPL模式node的全局内容展示node全局所有模块查看全局模块具体内容其它命令 实践 什么是REPL Node.js REPL(Read Eval Print Loop:交互式解释器) 表示电脑的环境,类似 Windows 系统的终端或…

【大数据存储与处理】第一次作业

hbase 启动步骤 1、启动 hadoop,master 虚拟机,切换 root 用户,输入终端命令:start-all.sh 2、启动 zookeeper,分别在 master、slave1、slave2 虚拟机终端命令执行:zkServer.sh start 3、启动 hbase&#x…

ToB还是ToC?工业级与消费级AR眼镜都能干什么?

来源:虹科数字化与AR 虹科分享 | ToB还是ToC?工业级与消费级AR眼镜都能干什么? 原文链接:https://mp.weixin.qq.com/s/lyTASoKm29woIbfcKBtMvQ 欢迎关注虹科,为您提供最新资讯! 随着科技的飞速发展&#…

vue element plus 管理系统路由菜单简要设计(后端获取菜单)

1 需求 管理系统“菜单”由后端接口返回,前端需要根据后端返回的“菜单”数组,构造路由,渲染侧栏菜单有些菜单是子菜单,有对应的路由,但是不在侧栏显示(比如一些详情页面) 注:这里的…

HTML美化网页

使用CSS3美化的原因 用css美化页面文本,使页面漂亮、美观、吸引用户 可以更好的突出页面的主题内容,使用户第一眼可以看到页面主要内容 具有良好的用户体验 <span>标签 作用 能让某几个文字或者某个词语凸显出来 有效的传递页面信息用css美化页面文本&#xff0c;使页面漂…

四、Spring IoC实践和应用(基于注解方式管理 Bean)

本章概要 基于注解方式管理 Bean 实验一&#xff1a; Bean注解标记和扫描 (IoC)实验二&#xff1a; 组件&#xff08;Bean&#xff09;作用域和周期方法注解实验三&#xff1a; Bean属性赋值&#xff1a;引用类型自动装配 (DI)实验四&#xff1a; Bean属性赋值&#xff1a;基本…

如何用docke启动redis?(解决双击docker服务闪退问题)

要使用Docker启动Redis服务&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装Docker&#xff1a; 如果您还没有安装Docker&#xff0c;请先在您的系统上安装Docker。您可以从Docker官方网站获取安装说明。 https://www.docker.com/get-started/ 2.在Docker Hub上查找R…

论文中公式怎么降重 papergpt

大家好&#xff0c;今天来聊聊论文中公式怎么降重&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 论文中公式怎么降重 一、引言 在论文撰写过程中&#xff0c;公式是表达学…

声音克隆:让你的声音变得无所不能

什么是声音克隆&#xff1f; 声音克隆是一种利用人工智能技术&#xff0c;根据一段声音样本&#xff0c;生成与之相似或完全相同的声音的过程。声音克隆可以用于多种场景。 声音克隆的原理是利用深度学习模型&#xff0c;从声音样本中提取声音特征&#xff0c;然后根据目标文…

华为OD机试 - 发广播 - 并查集(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、并查集Java 实现并查集 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&…

机器学习算法(12) — 集成技术(Boosting — Xgboost 分类)

一、说明 时间这是集成技术下的第 4 篇文章&#xff0c;如果您想了解有关集成技术的更多信息&#xff0c;您可以参考我的第 1 篇集成技术文章。 机器学习算法&#xff08;9&#xff09; - 集成技术&#xff08;装袋 - 随机森林分类器和...... 在这篇文章中&#xff0c;我将解释…

​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化

2022年亚马逊云科技re:Invent盛会于近日在拉斯维加斯成功召开&#xff0c;吸引了众多业界精英和创新者。亚马逊云科技边缘服务副总裁Jan Hofmeyr在演讲中分享了关于亚马逊云科技海外服务器边缘计算的最新发展和创新成果&#xff0c;引发与会者热烈关注。 re:Invent的核心主题是…

057:vue组件方法中加载匿名函数

第057个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

激光打标机:快速、精确、耐用的标记解决方案

随着科技的不断进步&#xff0c;激光打标机已经成为现代工业生产中不可或缺的一部分。作为一种高效、精确、耐用的标记解决方案&#xff0c;激光打标机在各个领域都发挥着重要的作用。 一、快速、精确的标记技术 激光打标机采用激光束作为标记工具&#xff0c;通过精确控制激光…