宣布 LlamaCloud 正式上线(及我们的 1900 万美元 A 轮融资)!
LlamaIndex

LlamaIndex 2023-11-16

评估多模态检索增强生成

几天前,我们发布了一篇关于多模态 RAG(检索增强生成)的博客,以及我们最新(仍在测试阶段)的抽象,以帮助实现和简化构建多模态 RAG 系统。在本文中,我们将探讨如何合理评估多模态 RAG 系统这一重要话题。

一个自然的起点是回顾传统纯文本 RAG 中的评估方法,然后思考如何修改这些方法以适应多模态场景(例如,在纯文本 RAG 中我们使用 LLM,而在多模态 RAG 中我们需要一个大型多模态模型,简称 LMM)。这正是我们接下来要做的事情,您会看到,总体评估框架与纯文本 RAG 中相同,只需做一些增补和修改,使其更适用于多模态场景。

入门:多模态 RAG vs 纯文本 RAG

纯文本 RAG 与多模态 RAG 的对比图示。在多模态 RAG 中,图像模态可以出现在用户查询、检索到的上下文以及最终答案中。

让我们看看多模态和纯文本 RAG 之间的主要区别。下面是两个表格,描述了构建 RAG 的考虑因素以及查询时管道,并对比了多模态和纯文本场景在这些方面的差异。

表 1:RAG 系统构建考虑因素及其在纯文本与多模态场景中的区别。
表 2:RAG 查询管道及其在纯文本与多模态场景中的区别。

纯文本 RAG 的评估

对于纯文本 RAG,标准方法是分别评估两个阶段:检索和生成。

检索器评估:检索到的文档与用户查询相关吗?

一些更流行的检索评估指标包括召回率、命中率平均倒数排名、平均精度和归一化折损累计增益。前两个指标(召回率和命中率)不考虑相关文档的位置(或排名),而其他所有指标都以各自的方式考虑。

生成器评估:响应是否充分使用了检索到的文档来回答用户查询?

在抽象式问答系统(如本文讨论的类型)中,衡量生成的响应会更加棘手,因为在书面语言中,充分回答一个查询的方式并非只有一种——而是有很多种!

因此,在这种情况下,我们的衡量依赖于主观判断,这可以由人类来完成,但这成本高昂且难以扩展。另一种方法是使用 LLM 评判器来衡量诸如相关性忠实度之类的指标。

  • 相关性:考虑文本上下文,评估生成的响应与查询的匹配程度。
  • 忠实度:评估生成的响应与检索到的文本上下文的匹配程度。

对于这两者,检索到的上下文、查询和生成的响应都会传递给 LLM 评判器。(空间中一些研究人员将这种使用 LLM 评判响应的模式称为 LLM 即评判器(Zheng 等人,2023)。)

目前,llama-index (v0.9.2) 库支持命中率和平均倒数排名用于检索评估,以及相关性、忠实度等指标用于生成器评估。(查看我们的文档中的评估指南!)

多模态 RAG 的评估

对于多模态情况,评估仍然可以(并且应该)针对检索和生成的不同阶段进行。

区分文本和图像模态的检索评估

既然检索到的文档可以有两种形式,那么最明智的做法似乎是分别计算图像和文本的常用检索评估指标。这样,您就可以更清楚地了解多模态检索器哪个方面表现良好,哪些方面表现不佳。然后可以应用所需的加权方案,为每个指标建立一个汇总的检索分数。

命中率 平均倒数排名 文本 0.95 0.88 图像 0.88 0.75

表 3:多模态场景下的检索评估。

使用多模态 LLM 进行生成器评估(LMM 即评判器)

多模态模型(即 LMMs),如 OpenAI 的 GPT-4V 或像 LLaVA 这样的开源替代品,能够接收输入和图像上下文来生成对用户查询的答案。与纯文本 RAG 一样,我们也关注这些生成答案的“相关性”和“忠实度”。但为了在多模态情况下计算这些指标,我们需要一个也能接收上下文图像和文本数据的评判模型。因此,在多模态情况下,我们采用 LMM 即评判器模式来计算相关性、忠实度以及其他相关指标!

  • 相关性(多模态):考虑文本和视觉上下文,评估生成的响应与查询的匹配程度。
  • 忠实度(多模态):评估生成的响应与检索到的文本和视觉上下文的匹配程度。

如果您想测试这些,那么您很幸运,因为我们最近发布了测试版的多模态评估器抽象!请参阅下面的代码片段,了解如何使用这些抽象对给定查询的生成响应执行各自的评估。

from llama_index.evaluation.multi_modal import (
	MultiModalRelevancyEvaluator,
	MultiModalFaithfulnessEvaluator
)
from llama_index.multi_modal_llm import OpenAIMultiModal

relevancy_judge = MultiModalRelevancyEvaluator(
    multi_modal_llm=OpenAIMultiModal(
        model="gpt-4-vision-preview",
        max_new_tokens=300,
    )
)

faithfulness_judge = MultiModalRelevancyEvaluator(
    multi_modal_llm=OpenAIMultiModal(
        model="gpt-4-vision-preview",
        max_new_tokens=300,
    )
)

# Generated response to a query and its retrieved context information
query = ...
response = ...
contexts = ...  # retrieved text contexts
image_paths = ...  # retrieved image contexts

# Evaluations
relevancy_eval = relevancy_judge.evaluate(
 query=query,
 response=response,
 contexts=contexts,
 image_paths=image_paths
)

faithfulness_eval = faithfulness_judge.evaluate(
 query=query,
 response=response,
 contexts=contexts,
 image_paths=image_paths
)

一些重要说明

首先,值得一提的是,使用 LLM 或 LMM 评判生成的响应有其缺点。这些评判器本身是生成模型,可能会出现幻觉和其他不一致。尽管研究表明强大的 LLM 可以在较高程度上与人类判断保持一致(Zheng 等人,2023),但在生产系统中使用它们应以更高的标准处理。截至撰写本文时,还没有研究表明强大的 LMM 也能很好地与人类判断保持一致。

其次,对生成器的评估主要涉及对其知识和推理能力的评估。评估 LLM 和 LMM 还有其他重要维度,包括对齐和安全性——更多信息请参阅评估 LMMs:一份综合调查

开始评估吧

在本文中,我们介绍了如何对多模态 RAG 系统进行评估。我们认为,按模态区分检索评估以提高可见性,以及采用 LMM 即评判器的方法,是纯文本 RAG 评估框架的一个合理扩展。我们鼓励您查看我们的实用笔记本指南和文档,了解如何不仅构建多模态 RAG,还能充分评估它们!