生成式人工智能/大语言模型

视频和音频多模态检索增强生成入门简介

构建多模态检索增强生成 (RAG) 系统极具挑战性 。困难在于捕获和索引来自多种模式的信息,包括文本、图像、表格、音频、视频等。在上一篇博文《 多模态检索增强型生成的简单介绍 》中,我们讨论了如何处理文本和图像。本文将对话扩展到音频和视频。具体来说,我们将探讨如何构建多模 odal RAG pipeline 来搜索视频中的信息。

为文本、图像和视频构建 RAG 

基于第一条原则,我们可以说,构建跨多个模式的 RAG 工作流有三种方法,详见下文和图 1。

使用通用嵌入空间

构建跨多个模态的 RAG 工作流的第一种方法是使用通用嵌入空间。这种方法依赖于单个模型来投射存储在同一嵌入空间中不同模式下的信息表示。使用具有图像和文本编码器的 CLIP 等模型属于此类别。使用这种方法的好处是降低架构复杂性。根据用于训练模型的数据的多样性,还可以考虑适用用例的灵活性。

这种方法的缺点是,如果模型能够处理两个以上的模态,或者甚至能够处理大量子模态,则很难对其进行调整。例如,CLIP 在处理自然图像并将其与文本描述相匹配时表现出色。然而,仅编码文本甚至合成图像并不可行。Fine-tuning 是提高模型性能的一个选项,但创建单个嵌入模型来编码所有形式的信息并非易事。

构建 N 个并行检索管道 (Brute Force)

第二种方法是使模态甚至子模态原生搜索和查询所有管道。这将生成分布在不同模态下的多组数据块。在这种情况下,会出现两个问题。首先,大语言模型(LLM)需要提取的 tokens 数量大幅增加,从而增加了运行 RAG 管道的成本。其次,需要能够跨多个模态吸收信息的 LLM。这种方法只是将问题从检索阶段转移到生成阶段并增加成本,但反过来又简化了提取流程和基础设施。

以通用模式接地 

最后,可以从所有模式中提取信息,并以一种常见模式 (例如文本) 为基础。这意味着,来自图像、PDF、视频、音频等的所有关键信息都需要转换为文本,以便设置工作流。这种方法会产生一些提取成本,并可能导致有损嵌入,但可用于有效地统一所有模式以进行检索和生成。

A diagram showing three approaches for building a multimodal retrieval pipeline. On the left are three areas of text that read, “Transform all modalities into a single vector space,” “Different modalities in different vector stores,” and “Grounding in a common modality.” On the right appear icons for videos, text, text embedding models, and vector stores.
图 1. 可采用三种不同的方法来构建多模态检索工作流

由于文本接地为处理多个子模态提供了灵活性,因此执行目标模型调优的能力只需产生一次性提取成本,即可简化搜索和答案生成。它是构建可靠的 RAG 工作流的出色架构支柱。

以下各节将探讨如何利用这一理念构建多模态 RAG 管道来搜索视频中的信息。

Graphic showing icons labeled PDF, Images, Videos, Text, Text Embedding Model, VectorStore, and a text box that reads, “Grounding in a common modality.”
图 2、文本接地涉及将信息从多个模式转换为一个模式。这种转换作为文件提取的一部分进行,使用特定于模态的提取算法和模型

视频检索的复杂性 

视频内容有各种形状和大小,包括社交媒体上的短片、长篇教程、教育系列、娱乐节目,甚至是监控录像。每种类型的内容都以其独特的方式保存信息,这使得视频检索有点平衡。

以频谱为例 (图 3)。从高度非结构化 (如真实视频) 到结构化 (如教程),沿横向轴查看视频内容。沿垂直轴查看信息的传输方式。一方面,视频包含丰富的动作序列,其中时间信息对于理解视频至关重要。相反,视频由帧组成,每个帧都可以独立存在,而无需依赖序列进行理解。

A diagram that illustrates the relationship between video frames and the information they convey, with unstructured frames on the left and structured frames on the right.
图 3、不同类型的视频需要不同的架构考虑

另一点需要注意的是,这些信息通过音频和视频格式传播。虽然我们讨论了以文本等通用模式接地是设置 RAG 管道的可靠方法,但我们还需要帮助确保跨这两种模式以’text’形式提取的信息适当对齐。

在音频中对信息进行编码基本上有两种不同的方法

  • 情感:此信息通常带有有关信息来源的基础上下文信息。例如,它可能是说话者的情绪激动的语气,也可能是用来唤起视频消费者情绪的背景评分。
  • 目标:任何语言信息都被视为客观信息,因为没有任何主观性的空间。

要处理视觉效果,需要考虑以下三个挑战:

  • 处理成本: 处理视频需要大量计算。视频的每秒通常包含 30 或 60 帧,具体取决于帧率,而帧率在存储和处理方面会迅速增加。例如,每秒 60 帧 (FPS) 的 10 分钟视频包含 18,000 帧,每个视频都需要某种程度的处理才能准确提取内容和检索。
  • 从帧中提取信息: 如之前文章所述,由于图像包含的信息密度较大,因此很难从图像中提取和表示信息。
  • 保留分布在多个帧中的 “actions”:连续帧还可以捕获包含重要信息的特定 actions 。很难在更大的上下文中识别 actions 并使用正确的权重表示该信息。

为视频构建 RAG 

为了提供示例用例,假设我们想在解释概念或演示方法的视频讲解员资源库中提问。这些视频类似于讲座录像、会议录像、主题演讲、教学方法和分步视频。由于此用例主要侧重于沟通和解释信息,因此我们不需要专注于来自音频的情感信息,也不需要保留视觉效果中的动作。

图 4 显示了具有五个主要部分的管道的高级架构:

  • 音频提取
  • 视频提取
  • 融合音频和视频信息
  • 设置检索器
  • 生成答案
Diagram showing two halves of the video ingestion pipeline, audio and visuals. Audio is done through automatic speech recognition, and visuals through models and signal processing algorithms.
图 4、用于视频提取和检索的系统架构

音频提取 

无需编码任何情感含义,因此只需转录音频即可。为此,我们采用了使用 NVIDIA Parakeet-CTC-0.6B-ASR 模型 构建的 自动语音识别 (ASR) 流程。使用该模型,转录音频并创建临时文本块,以及词语的词级时间戳。虽然这种情况不需要情感含义,但语音情感识别模型或 音频语言模型 可用于提供基于文本的描述。

视频提取 

鉴于用例,我们将专注于降低处理视频和从帧中提取信息的成本。

大多数视频的录制和存储帧速率为 30 或 60 FPS。这意味着 1 分钟的视频可以包含多达 3,600 帧。虽然对于视觉消耗而言,这种高帧速率有助于提供更好的体验,但连续帧之间的信息差异通常很小。虽然 Brute Force 方法是处理每帧帧,但这是一项极其昂贵的任务。因此,我们需要减少要处理的候选帧数量。

简单的第一步是将视频采样率降至 4 FPS,将要处理的帧数大幅减少到 240 帧。视频帧之间通常只有细微差别,因为每个视频帧之间的时间差相对较小。这会导致大多数帧的信息重叠。

自然,下一步是识别关键帧,这些关键帧所携带的信息量是“局部最大值”,这包括三个步骤。

首先,通过识别镜头边界对视频进行分节。为此,我们可以使用经典的计算机视觉技术,利用不断变化的 色彩空间 中的图案,或利用 镜头检测模型 。需要进行章节化,以创建本地上下文来判断帧中存在的信息。

其次,识别每个章节中的“关键片段”。这需要识别视觉效果在感知上独特或捕捉某些独特活动的所有片段。这可以使用 image encoder 或 signal processing filter 来完成,后者可以在两个连续帧中捕获差异。

为简单起见,假设我们使用 Structural Similarity Index (SSIM) 计算跨帧差异 (图 5)。然后,我们使用差异大于场景均值标准差的起始帧,并将结束帧用作相似性指标的局部最大值,以此来识别这些片段。使用一个标准偏差差表示唯一差值,并等待再次达到局部最大值,从而在连续结构相似的帧开始最大化相似度得分时捕获大部分动作。

Structural Similarity Index (SSIM) calculated for successive frames.
图 5、在场景中绘制的结构相似性指数

最后,检测到这些片段后,我们会拒绝所有模糊滤镜和重复滤镜。然后选择所有具有高熵的帧,因为它们拥有更多信息。

所有讨论的步骤都有助于将帧数减少到 40 帧,远低于每分钟 3600 帧的处理速度。请注意,我们使用的是经典的计算机视觉算法。使用微调模型进行帧选择和重复数据删除将产生更少的选定帧,从而进一步减少要处理的帧数量。

现在我们已经提取了代表性帧,下一步是从中提取所有可能的信息。为此,我们使用 Llama-3-90B VLM NIM 。我们提示 VLM 为屏幕上的所有文本和信息生成转录,并生成语义描述。

融合音频和视频信息 

从音频和视频内容中提取的文本信息被捆绑在一起,以从视频中获得统一的提取。 NVIDIA Riva ASR 使用词级时间戳进行转录,从而轻松关联回选定的关键帧。

请记住,来自关键帧 (之前选择的) 的信息必须与围绕帧播放的音频对齐。这使得关键帧能够获取暂时发生的情况的上下文。一种简单的方法是使用先前生成的场景时间戳在场景级别混合信息。有了它,我们可以提取时间戳内的音频,并将从多个关键帧中提取的文本附加到音频块中,以便为场景创建文本块。

您可以尝试在时间级别(而非场景级别)将视频内容与音频内容完美融合。请注意,这些方法可能会出现重复信息,其中视频内容直接附加音频。例如,如果音频中的演讲者通过幻灯片讲话,音频和视频内容会有很大的重叠,从而生成额外的 tokens,添加到额外的延迟和成本。

或者,我们可以使用较小的 LLM 来帮助将提取的视觉环境附加到音频中。额外的 LLM 调用有助于在提取期间减少 token,这有助于节省对检索和答案生成进行实时推理的时间和成本。

设置检索器 

在发布基于文本的音视频混合后,我们现在对视频进行了连贯一致的文本描述。我们还保留词级句子和帧的时间戳以及文件级元数据,例如文件名。使用这些信息,我们创建由元数据增强的数据块,并使用嵌入模型生成嵌入。这些嵌入与作为元数据的块级时间戳一起存储在向量数据库中。

生成答案 

设置好 Vector Store 后,您现在可以与视频对话。对于传入用户查询,嵌入要检索的查询,然后重新排序以获取最相关的数据块。然后,这些数据块作为上下文提供给 LLM,以生成答案。附加到数据块的相应元数据有助于提供引用的视频和时间戳,这些视频和时间戳用于回答问题。

An example showcase of RAG; Question-Answer on CUDA Setup Tutorials along with Sources and Timestamps listed.
图 6、以 CUDA Setup Tutorials 为知识库的 RAG 工作流

开始使用 

准备好开始构建本博文中讨论的多模态 RAG 工作流了吗?使用 NVIDIA API Catalog 中的 NVIDIA NIM 微服务和 NVIDIA Blueprint 示例。

标签