评估检索器组件的性能非常重要,因为最终生成答案的质量在很大程度上取决于从您的知识库中获取信息的关联性和准确性。如果检索器向大型语言模型 (LLM) 提供不相关、过时或不正确的上下文文档(或文档块),生成器就很难产生有用的回复。这遵循了经典的“垃圾进,垃圾出”原则。我们需要回答的核心问题是:给定用户查询,检索器从已索引数据中识别和排序最相关信息的效果如何?建立基准数据为了定量衡量检索器性能,您通常需要一个基准或“参考”数据集。这通常包括:一组代表性查询 ($Q$)。对于每个查询 $q \in Q$,从您的知识库中获取的一组已知相关文档块 ($D_q$)。创建这种参考数据通常需要专业人员进行手动标注,他们会识别哪些特定文档块包含回答每个查询所需的信息。尽管耗时,但这一步对于计算客观的性能指标必不可少。没有它,评估将纯粹是定性的,或者依赖间接措施。常用检索指标假设您有一个参考数据集,几种标准的信息检索 (IR) 指标可以用于评估您的 RAG 检索器。这些指标通常评估给定查询返回文档的关联性和排序情况,通常侧重于前 $K$ 个结果,因为 RAG 系统由于上下文窗口限制,通常只使用排名最高的文档块。命中率命中率是最简单的指标之一。它衡量的是对于给定查询,在前 $K$ 个结果中是否检索到了任何相关文档块。对于单个查询,如果在前 $K$ 个检索到的文档块中找到了至少一个相关文档块,则命中率为 1,否则为 0。整体命中率是您测试集中所有查询的平均值。计算方法: 对于每个查询,检查 $D_{retrieved}@K \cap D_{q} \neq \emptyset$ 是否成立。然后对结果(1和0)求平均值。解读: 更高的命中率表示检索器通常能够找到一些相关信息。局限性: 它是每个查询的二元指标,不关心相关文档出现在前 $K$ 个结果中的位置。在排名 $K$ 处找到相关文档与在排名 1 处找到它的得分相同。平均倒数排名 (MRR)平均倒数排名 (MRR) 解决了命中率在排名方面的局限性。它侧重于检索到的第一个相关文档的排名。对于单个查询,倒数排名是 $\frac{1}{\text{排名}}$,其中“排名”是排名最高的相关文档的位置。如果在前 $K$ 个结果中没有找到相关文档,则该查询的倒数排名通常为 0。MRR 是所有查询的这些倒数排名的平均值。公式: $$ MRR = \frac{1}{|Q|} \sum_{i=1}^{|Q|} \frac{1}{\text{rank}_i} $$ 这里 $|Q|$ 是查询的总数,$\text{rank}_i$ 是第 $i$ 个查询的第一个相关文档的排名。解读: MRR 奖励那些将相关文档排在结果列表更高位置的检索器。完美得分 1 表示第一个相关文档总是排名第一。得分接近 0 表示相关文档排名较低或未找到。例子:查询 1:第一个相关文档排名为 2 -> 倒数排名 RR = 1/2查询 2:第一个相关文档排名为 1 -> 倒数排名 RR = 1/1查询 3:在前 K 个结果中没有相关文档 -> 倒数排名 RR = 0MRR = (1/2 + 1/1 + 0) / 3 = (0.5 + 1 + 0) / 3 = 1.5 / 3 = 0.5精确率@KK 值精确率 (Precision@K) 衡量在前 $K$ 个结果中检索到的文档中实际相关文档的比例。公式: $$ \text{精确率@K} = \frac{|{\text{相关文档}} \cap {\text{在前 K 个结果中检索到的文档}}|}{K} $$解读: 高精确率@K 意味着向 LLM 展示的文档中有很大一部分是相关的。这对于避免“上下文填充”问题非常重要,因为不相关的信息可能会分散 LLM 的注意力或占用宝贵的上下文窗口空间。例子: 如果 $K=5$,并且检索器在前 5 个结果中返回 3 个相关文档和 2 个不相关文档,则精确率@5 = 3/5 = 0.6。召回率@KK 值召回率 (Recall@K) 衡量的是在给定查询的参考数据中,所有相关文档中成功检索到前 $K$ 个结果的比例。公式: $$ \text{召回率@K} = \frac{|{\text{相关文档}} \cap {\text{在前 K 个结果中检索到的文档}}|}{|{\text{查询的总相关文档}}|} $$解读: 高召回率@K 表明检索器在找到查询所需的大部分信息方面是成功的,且这些信息在前 $K$ 个结果中。这对于 RAG 来说通常很重要,因为缺少一个重要信息片段可能导致不完整或不正确的答案。例子: 如果一个查询有 4 个参考相关文档,并且检索器在前 $K=5$ 个结果中找到了其中的 3 个,则召回率@5 = 3/4 = 0.75。{"layout": {"title": "检索器性能对比 (MRR)", "xaxis": {"title": "检索器配置"}, "yaxis": {"title": "平均倒数排名 (MRR)", "range": [0, 1]}, "bargap": 0.4}, "data": [{"type": "bar", "x": ["块大小:256<br>重叠:32", "块大小:512<br>重叠:64"], "y": [0.65, 0.78], "marker": {"color": ["#339af0", "#20c997"], "line": {"color": "#495057", "width": 1.5}}, "name": "MRR 分数"}]}两种不同检索器配置(基于分块策略)的 MRR 分数对比。配置 B 显示出更好的性能。定性分析尽管定量指标提供了有价值的分数,但它们并不能说明全部情况。进行定性分析也很重要:查看排名前列的结果: 对于一部分查询样本(特别是那些指标分数较低的),手动检查排名前 $K$ 的检索到的文档块。它们真的相关吗?它们重复吗?它们是否包含冲突信息?分析遗漏的相关性: 如果召回率@K 较低,请查明已知的相关文档块未被检索到或排名靠前的原因。这是嵌入模型理解、查询表述还是文档分块的问题?识别不相关结果: 如果精确率@K 较低,请查看正在检索到的不相关结果。它们在语义上相似,但在上下文上错误吗?这可能指向嵌入模型难以处理的歧义,或者表明源数据或分块策略需要改进。结合定量指标(如命中率、MRR、精确率@K、召回率@K)和定性分析来评估检索器组件,可以全面了解其优点和缺点。这使您能够就调整参数(如 $K$、文档块大小、嵌入模型)或优化数据准备过程做出明智的决定,以提高提供给生成器的上下文质量。