使用FiftyOne、LlamaIndex和Milvus构建更好的多模态RAG管道
引言
在Zilliz最近主办的非结构化数据 meetup 上,Voxel51的机器学习工程师和开发者布道者Jacob Marks讨论了使用FiftyOne、LlamaIndex和Milvus构建强大的多模态RAG管道的复杂性。
这次演讲重点讨论了我们如何利用数据构建更好的多模态RAG管道。它强调使用免费和开源工具,特别是利用FiftyOne进行数据管理和可视化,Milvus作为向量存储,以及LlamaIndex来协调大型语言模型(LLMs)。
在我们看多模态RAG之前,让我们先概述一下基于文本的RAG。
基于文本的RAG概述
Jacob首先解释了基于文本的检索增强生成(RAG)及其工作原理。我们会简要介绍,因为我们已经在这篇四部分系列RAG手册中详细涵盖了基于文本的RAG系统。
RAG通过用相关外部数据增强大型语言模型(LLMs)的知识,增强了它们的能力。尽管LLMs经过了大量数据集的训练,但它们通常有知识截止和幻觉等限制。RAG通过从Milvus或Zilliz Cloud等外部向量数据库检索并整合相关文档,来缓解这些问题,为用户提供更准确和上下文相关的响应。
基于文本的RAG系统的架构很简单。让我们看看RAG流程。
rag_3d94a263d8.png
图1:将LLM与向量数据库集成的RAG流程
在上图中,文档被分割成较小的文本段,然后转换成称为向量嵌入的数值表示。这些嵌入存储在像Milvus这样的向量数据库中。 当用户提供提示时,它也被转换成向量嵌入,并用于查询向量数据库中最为相关的文本段落。结合原始提示,这些相关段落形成了LLM的富上下文输入。最后,LLM处理这个输入,生成更准确和上下文相关的响应。
这种方法对于仅依赖文本的系统非常有效。然而,基于文本的RAG系统对于需要多种数据类型来做出明智决策的系统来说是不够的。以电子商务商店为例。我们不能仅依赖文本来向用户展示最相关的产品;我们需要产品图像、描述等等。这就是多模态RAG证明其价值的地方,利用现代多模态LLMs整合各种数据模态。
什么是多模态LLM及其应用
像GPT-4o和Qwen-VL这样的多模态LLM是能够处理和理解多种数据类型的人工智能系统,如文本、图像、音频和视频。它们整合并解释来自各种模态的信息,使它们能够为图像生成描述性标题,回答有关视频的问题,并创建结合文本和视觉元素的内容。这种能力使它们能够通过多样化的输入数据类型更好地理解和生成富上下文的响应。
它们在包括医疗服务、零售等多个领域都有应用。
在医疗服务行业,有视觉医学图像、基于文本的临床笔记和医疗报告。多模态LLM综合这些多模态信息,帮助医生工作。一个例子是Med-PaLM LLM,它利用文本和视觉数据来增强医疗决策并改善患者护理结果。
在零售业,多模态LLM创建定制广告并增强产品搜索能力。它们处理并整合各种类型的数据,如产品文本描述、产品图像和客户交互数据(例如,评论和搜索查询)。通过分析这些多模态信息,这些LLM可以生成针对个人偏好和浏览历史的个性化广告。 即使有了这些高级功能,多模态LLM也与基于文本的LLM有相同的限制。它们受到知识截止和幻觉的困扰。为了缓解这些问题,我们需要多模态RAG。
理解多模态RAG
多模态RAG是一种先进的AI技术,结合了信息检索和生成建模,以增强多模态LLM的能力。要了解多模态RAG的工作原理,让我们看看下面的多模态RAG检索管道。
Fig_2_Multimodal_RAG_retrieval_pipeline_e5d3e8f393.png
图2:多模态RAG检索管道
当用户提出问题时,嵌入模型首先将查询转换成嵌入。然后,这个嵌入用于查询像Milvus这样的多模态向量数据库,该数据库存储了相关文档的嵌入,包括文本和图像。向量数据库检索最接近的邻居,本质上是最相关的文档。检索到的文档与原始问题结合,形成一个包含文本和视觉上下文的多模态提示。然后,多模态LLM处理这个丰富的提示,整合多样化的数据类型,生成更准确和上下文相关的回答。
在下一节中,让我们实际操作一下,看看如何使用FiftyOne、LlamaIndex和Milvus实现多模态RAG管道。
使用FiftyOne、LlamaIndex和Milvus实现多模态RAG管道
有两种方法可以使用FiftyOne、LlamaIndex和Milvus实现多模态RAG管道。一种是编写自己的代码,这给了你更多的控制权,但需要更多的时间;另一种是使用插件,允许你向FiftyOne App添加功能。
这一节将探讨使用由Milvus向量数据库支持的fiftyone-multimodal-rag-plugin实现多模态RAG管道。如果你想从头开始编码,这里有一个关于如何使用Milvus和FiftyOne生成多模态向量嵌入的初学者指南。
设置环境
Jacob在演讲中使用已安装的多模态插件进行了演示。让我们放慢速度,因为安装步骤中没有明确提到一个关键的安装步骤,即Milvus的安装步骤。
要使用该插件,您必须已经在计算机上运行了Milvus实例。Fiftyone插件依赖于Milvus来存储和检索多模态嵌入。插件假设Milvus在http://localhost:19530上运行。如果您没有安装Milvus,请按照Milvus文档安装并运行它。
安装并运行Milvus后,按照这些安装指南安装并配置fiftyone-multimodal-rag-plugin。安装完成后,启动FiftyOne应用程序并浏览可用操作,查看插件提供的函数。
Fig_3_Fifty_One_available_operations_selection_page_8e948420ed.png
图3:FiftyOne可用操作选择页面
现在让我们创建RAG管道。
步骤1:从LlamaIndex文档创建数据集
这一步涉及从计算机中选择包含图像和文本文件的文件夹。您将嵌入这些多模态数据,并将多模态嵌入存储在Milvus中。要加载数据集的文件夹,请选择“从LlamaIndex文档创建数据集”操作。然后,命名您的数据集并选择其目录。
Fig_4_Creating_a_dataset_from_L_Lama_Index_documents_4b7a2cd2b2.png
图4:从LlamaIndex文档创建数据集
点击“执行”以加载和可视化您的数据集。
Fig_5_Visualization_of_a_multimodal_dataset_in_Fifty_One_3da9b3abcb.png
图5:在FiftyOne中多模态数据集的可视化
在可视化中,您可以看到数据集由图像和文本组成,使其成为多模态的。下一步是创建上述数据集的多模态RAG索引。
步骤2:将LlamaIndex与Milvus集成以创建多模态RAG索引
要使用LlamaIndex和Milvus创建多模态RAG索引,您必须将这两个库集成,以高效地管理和检索多模态数据。LlamaIndex处理多模态数据的摄取和嵌入到向量表示中。然后,这些嵌入存储在Milvus中,以便在查询期间检索。
在FiftyOne操作选择页面上,选择“创建多模态RAG索引”操作。然后,命名您的索引并点击执行。
Fig_6_Creation_of_a_Multimodal_RAG_index_using_L_Lama_Index_and_Milvus_43127e17ab.png
图6:使用LlamaIndex和Milvus创建多模态RAG索引
执行将需要一些时间,具体取决于您的数据集大小,因此请耐心等待。在此过程中,您的数据集将被转换成向量嵌入并存储在Milvus中。您的数据集越大,创建索引所需的时间就越长。创建RAG索引后,您可以继续查询它。
步骤3:查询多模态RAG索引
这个查询步骤在RAG管道中执行时间最长。众所周知,没有人喜欢慢的应用。这就是为什么被查询的向量数据库在检索过程中应该快速且准确。这正是Milvus,最广泛采用的开源向量数据库,胜出的地方。
Jacob在演讲中谈到了Milvus,但由于插件抽象了大部分底层操作,我们可能无法完全看到Milvus在多模态RAG管道中的好处。但让我们看看为什么大多数多模态RAG开发者,包括fiftyone-multimodal-rag-plugin的开发人员,选择使用Milvus:
- 十亿规模向量存储和检索:Milvus有效管理十亿规模的向量数据,确保毫秒级延迟的快速访问。
- 水平可扩展性:Milvus高度可扩展,能够适应业务增长的不断变化需求。
- 适合RAG:Milvus是构建各种GenAI应用,特别是检索增强生成(RAG)不可或缺的基础设施。
- 高速检索:凭借优化的搜索算法,Milvus能够快速准确地检索相关向量,这对于实时应用如交互式AI系统和推荐引擎至关重要。
- 多模态数据处理:Milvus支持各种数据类型,并可以执行混合搜索。这种能力允许结合多模态搜索、混合稀疏和密集搜索以及混合密集和全文搜索,提供多功能和灵活的搜索功能。
要查询您的多模态RAG索引,请转到“操作”选择页面并选择“查询多模态RAG索引”操作。然后,输入您的查询,选择要使用的索引,选择用于生成响应的LLM,文本结果的数量,最后,选择要包含的图像结果数量。
Fig_7_Querying_a_multimodal_RAG_Index_powered_by_Milvus_1cca223b17.png
图7:由Milvus支持的多模态RAG索引查询
插件然后使用Milvus执行向量相似性搜索,以检索基于您的查询最相关的嵌入。检索到的嵌入为使用选定的大型语言模型生成响应提供了上下文。以下是上述查询的结果:
Fig_8_Results_of_querying_a_multimodal_RAG_Index_7aafe45bc7.png
图8:查询多模态RAG索引的结果
结果显示了您执行查询时使用的索引和模型,以及大型语言模型生成的响应。
您已经完成了使用FiftyOne、LlamaIndex和Milvus创建多模态RAG管道的所有步骤。
结论
Jacob的演讲强调了整合FiftyOne、LlamaIndex和Milvus以构建功能强大的多模态RAG管道的潜力。这些工具通过有效利用文本和视觉数据,增强了多模态系统的检索能力和富上下文响应。通过遵循概述的步骤,您可以利用这些开源工具的优势,Milvus提供了强大的向量存储和高速检索,将您的项目提升到新的高度。
注:本文为AI翻译,查看原文
技术干货
理解神经网络中的正则化
正则化可以防止机器学习模型在训练过程中过拟合。我们将讨论其概念和关键的正则化技术。
2024-11-20技术干货
使用自部署的Milvus向量数据库和Snowpark容器服务构建RAG
Zilliz的生态系统和AI平台负责人Jiang Chen在最近的非结构化数据 meetup 上讨论了我们如何将Milvus与Snowflake无缝集成。具体来说,他探索了如何使用Milvus向量数据库和Snowpark容器服务(SPCS)与Snowflake生态系统集成来构建检索增强生成(RAG)系统。
2024-11-29技术干货
理解 DETR:使用变换器进行端到端目标检测
DETR(DEtection TRansformer)是使用变换器进行端到端目标检测的深度学习模型。
2024-11-20