RAG实战 7 - 使用llama_index实现多模态RAG

这篇具有很好参考价值的文章主要介绍了RAG实战 7 - 使用llama_index实现多模态RAG。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


转载自:LLM之RAG实战(七)| 使用llama_index实现多模态RAG
https://mp.weixin.qq.com/s/FVF09cEO5nUipcL9R8ydXQ


RAG实战 7 - 使用llama_index实现多模态RAG,LLM,llama,语言模型,自动化


一、多模态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 OpenAIMultiModal
from llama_index import SimpleDirectoryReader

image_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 store
client = 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 index
index = 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 response
retrieval_results = retriever_engine.retrieve(query_str)

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

RAG实战 7 - 使用llama_index实现多模态RAG,LLM,llama,语言模型,自动化


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

RAG实战 7 - 使用llama_index实现多模态RAG,LLM,llama,语言模型,自动化


示例2:多模态RAG查询

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

from llama_index.query_engine import SimpleMultiModalQueryEngine

query_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)

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

RAG实战 7 - 使用llama_index实现多模态RAG,LLM,llama,语言模型,自动化


RAG实战 7 - 使用llama_index实现多模态RAG,LLM,llama,语言模型,自动化


参考文献:

[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文章来源地址https://www.toymoban.com/news/detail-799357.html

到了这里,关于RAG实战 7 - 使用llama_index实现多模态RAG的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LLM之RAG实战(八)| 使用Neo4j和LlamaIndex实现多模态RAG

           人工智能和大型语言模型领域正在迅速发展。一年前,没有人使用LLM来提高生产力。时至今日,很难想象我们大多数人或多或少都在使用LLM提供服务,从个人助手到文生图场景。由于大量的研究和兴趣,LLM每天都在变得越来越好、越来越聪明。不仅如此,他们的理解

    2024年02月02日
    浏览(37)
  • llama_index中query_engine的response_mode详解

    0. 前言 在使用llama_index进行内容提炼、文章总结时,我们可以通过设置不同的ResponseMode来控制生成响应的结果。 在上篇“使用langchain及llama_index实现基于文档(长文本)的相似查询与询问”博客中,我们给出了如下代码(部分): 其中列举了6种response_mode: 我们也可以通过导

    2024年02月09日
    浏览(26)
  • LLM之RAG实战(十六)| 使用Llama-2、PgVector和LlamaIndex构建LLM Rag Pipeline

           近年来,大型语言模型(LLM)取得了显著的进步,然而大模型缺点之一是幻觉问题,即“一本正经的胡说八道”。其中RAG(Retrieval Augmented Generation,检索增强生成)是解决幻觉比较有效的方法。本文,我们将深入研究使用 transformer库 、 Llama-2模型 、 PgVector数据库 和

    2024年01月21日
    浏览(35)
  • 使用CLIP和LLM构建多模态RAG系统

    在本文中我们将探讨使用开源大型语言多模态模型(Large Language Multi-Modal)构建检索增强生成(RAG)系统。本文的重点是在不依赖LangChain或LLlama index的情况下实现这一目标,这样可以避免更多的框架依赖。 在人工智能领域,检索增强生成(retrieve - augmented Generation, RAG)作为一种变革性

    2024年02月02日
    浏览(35)
  • [NLP] 使用Llama.cpp和LangChain在CPU上使用大模型-RAG

    下面是构建这个应用程序时将使用的软件工具: 1.Llama-cpp-python  下载llama-cpp, llama-cpp-python [NLP] Llama2模型运行在Mac机器-CSDN博客 2、LangChain LangChain是一个提供了一组广泛的集成和数据连接器,允许我们链接和编排不同的模块。可以常见聊天机器人、数据分析和文档问答等应用。

    2024年02月04日
    浏览(36)
  • 通过Llama Index实现大模型的SQL生成的三种方法详解

    文中使用了chatglm的llm和embedding modle,利用的智谱的免费token Text2SQL其实就是从文本到SQL,也是NLP中的一种实践,这可以降低用户和数据库交互的门槛,无需懂SQL就可以拿到数据库数据。Text2SQL实现了从自然语言到SQL语言的生成,更加进一步的是直接给出数据中的结果。在开始

    2024年04月14日
    浏览(36)
  • 探索检索增强生成(RAG)技术的无限可能:Vector+KG RAG、Self-RAG、多向量检索器多模态RAG集成

    由于 RAG 的整体思路是首先将文本切分成不同的组块,然后存储到向量数据库中。在实际使用时,将计算用户的问题和文本块的相似度,并召回 top k 的组块,然后将 top k 的组块和问题拼接生成提示词输入到大模型中,最终得到回答。 优化点: 优化文本切分的方式,组块大小

    2024年02月02日
    浏览(26)
  • RAG实战2-如何使用LlamaIndex存储和读取向量

    本文是检索增强生成(Retrieval-augmented Generation,RAG)实战1-基于LlamaIndex构建第一个RAG应用的续集,在阅读本文之前请先阅读前篇。 在前篇中,我们介绍了如何使用LlamaIndex构建一个非常简单的RAG应用,初步了解了LlamaIndex构建RAG应用的大体流程。在运行前篇的程序时,我们会发现两

    2024年03月09日
    浏览(39)
  • RAG实战6-如何在LlamaIndex中使用自己搭建的API

    在搭建一个大模型API服务中,我们介绍了如何使用SWIFT框架搭建一个大模型API服务。在RAG实战1-5中,我们一直使用的是本地加载大模型的方式来调用大模型,本文将介绍如何在LlamaIndex中使用自己搭建的大模型API。 LlamaIndex支持部分厂商的API配置,如OpenAI,但我们想使用的是自

    2024年03月14日
    浏览(47)
  • LLM之RAG实战(一):使用Mistral-7b, LangChain, ChromaDB搭建自己的WEB聊天界面

          如何使用没有被LLM训练过的数据来提高LLM性能?检索增强生成(RAG)是未来的发展方向,下面将解释一下它的含义和实际工作原理。 ​       假设您有自己的数据集,例如来自公司的文本文档。如何让ChatGPT和其他LLM了解它并回答问题?         这可以通过四个步骤

    2024年01月18日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包