实现多模态 RAG 系统

Implementing Multi-Modal RAG Systems

实现多模态 RAG 系统
作者 | Ideogram 提供图片

大型语言模型(LLM)的演变以及它们渗透到我们生活中的速度之快,以至于在各种场景下,我们都越来越依赖它们。当人们意识到像 ChatGPT 这样的文本生成产品如此有帮助时,很少有人能避免依赖它们。然而,有时答案是不准确的,这促使需要像检索增强生成(RAG)这样的输出增强技术。

RAG 是一个框架,通过整合外部知识的实时检索来增强 LLM 的输出。多模态 RAG 系统更进一步,能够跨越文本和图像数据等多种数据格式进行信息检索和处理。

在本文中,我们将使用文本、音频和图像数据来实现多模态 RAG。

多模态 RAG 系统

多模态 RAG 系统通过访问我们的知识库,利用多种数据集类型来实现更好的输出。实现它们的方式有很多种,但重要的是创建一个在生产环境中表现良好的系统,而不是一个花哨的系统。

在本教程中,我们将通过构建包含图像和音频数据的知识库来增强 RAG 系统。您可以在以下 GitHub 仓库 中找到完整的代码库。

工作流程可以用下图总结。

Multi-modal RAG system workflow implementation summary (click to enlarge)

多模态 RAG 系统工作流程实现摘要(点击放大

它现在有点小,看不清楚,所以请点击放大或按需保存并放大。工作流程可总结为七个步骤,即

  1. 提取图像
  2. 嵌入图像
  3. 存储图像嵌入
  4. 处理音频
  5. 存储音频嵌入
  6. 检索数据
  7. 生成并输出响应

由于这需要高资源,我们将使用 Google Colab 并访问 GPU。更具体地说,我们将使用 A100 GPU,因为本教程的 RAM 要求相对较高。

让我们开始安装我们教程中所有重要的库。

您可以访问 PyTorch 网站,了解哪一个适合您的系统和环境。

另外,有时从 PDF 提取图像可能无法正常工作。如果发生这种情况,您应该安装以下工具。

准备好环境和工具后,我们将导入所有必要的库。

在本教程中,我们将使用 PDF 中的图像数据以及之前准备好的音频文件(.mp3)。我们将使用 联合利华的简短烹饪食谱 作为 PDF 文件,以及 戈登·拉姆齐烹饪音频 文件来自 YouTube。您可以在 GitHub 仓库的 dataset 文件夹中找到这两个文件。

将所有文件放入 dataset 文件夹,我们就可以开始了。

我们将首先处理 PDF 文件中的图像数据。为此,我们将使用以下代码将 PDF 的每一页提取为图像。

从 PDF 文件中提取所有图像后,我们将使用 CLIP 模型 生成图像嵌入。CLIP 是 OpenAI 开发的多模态模型,旨在理解图像和文本数据之间的关系。

在我们的流程中,我们使用 CLIP 生成图像嵌入,稍后将其存储在 ChromaDB 向量数据库中,并根据文本查询检索相关图像。

要生成图像嵌入,我们将使用以下代码。

接下来,我们将使用 Whisper 模型 处理音频数据以生成文本转录。Whisper 是一个 OpenAI 模型,它使用基于 Transformer 的架构从音频输入生成文本。

我们在流程中不使用 Whisper 进行嵌入。相反,它将仅负责音频转录。我们将分块转录音频,然后使用 sentence transformers 为转录块生成嵌入。

为了处理音频转录,我们将使用以下代码。

一切就绪后,我们将把嵌入存储在 ChromaDB 向量数据库中。我们将分离图像和音频转录数据,因为它们的嵌入特征不同。我们还将初始化图像和音频转录数据的嵌入函数。

我们的RAG系统几乎准备就绪!唯一剩下要做的就是从ChromaDB向量数据库设置检索系统。

例如,让我们尝试使用文本查询从图像和音频文件中检索前两个结果。

检索结果如下面的输出所示。

对于图像检索,它将返回我们在向量数据库中存储的元数据图像路径。对于音频检索,它返回与文本查询最相关的转录块。

通过数据检索,我们将使用 Qwen-VL 模型 设置生成模型。该模型是一个多模态 LLM,可以处理文本和图像数据,并从我们传入的多模态数据生成文本响应。

我们使用 Qwen-VL 模型,它通过同时接受检索到的图像和音频转录块来生成多模态文本响应。

让我们用以下代码设置模型。

然后,我们设置模型以接受输入数据、处理它们并生成文本输出。

结果如下面的输出所示。

正如你所见,结果同时考虑了图像和音频数据。

这就是构建多模态 RAG 系统所需的所有内容。您可以根据需要更改文件和代码。

结论

检索增强生成(Retrieval-Augmented Generation,RAG)是一种利用外部知识来增强 LLM 输出的框架。在多模态 RAG 系统中,我们利用文本以外的数据,例如图像和音频数据。

在本文中,我们使用文本、音频和图像数据实现了多模态 RAG。我们使用 CLIP 进行图像嵌入,使用 Whisper 进行音频转录,使用 SentenceTransformer 进行文本嵌入,使用 ChromaDB 进行向量存储,以及使用 Qwen-VL 进行多模态文本生成。

希望这对您有所帮助!

暂无评论。

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。