dot Redis 8 已发布——并且它是开源的

了解更多

使用 NDCG@K 与 Redis 评估信息检索(IR)系统

完整的 Colab NoteBook 位于 Github。

评估信息检索(IR)系统对于做出明智的设计决策和理解系统性能至关重要。亚马逊和谷歌等成功公司严重依赖 IR 系统,亚马逊将超过 35% 的销售额归因于其推荐系统,谷歌则将其 70% 的 YouTube 观看量归因于推荐系统。有效的评估指标是构建和改进这些系统的关键。

在这里,我们将使用归一化折损累积增益(Normalized Discounted Cumulative Gain,简称 NDCG@K)来评估基础模型和微调模型的性能,并评估微调模型是否优于基础模型。

Redis 矢量数据库将用作嵌入的持久存储,而 RedisVL将用作 Python 客户端库。

什么是归一化折损累积增益? 

归一化折损累积增益(NDCG)通过根据相关性为数据库元素分配真实排名来评估检索质量。例如,高度相关的结果可能排名为 5,部分相关的为 2-4,不相关的为 1。NDCG 对检索到的项目的排名进行求和,但引入了一个基于对数的惩罚因子来考虑结果的顺序。排名靠前的无关项目会受到更大的惩罚,这确保系统奖励将相关项目置于结果的前面。

NDCG 通过考虑排名位置的重要性(因为用户优先查看顶部结果)来改进累积增益(CG)。它使用一个折损因子,为排名靠前的项目赋予更高的权重。

如何计算 NDCG

  • DCG(折损累积增益):使用基于对数的折损对排名较低的项目进行相关性评分求和。

– rel i:位置 i 处文档的相关性评分。

– i:文档的排名位置(从 1 开始计数)。

– log2(i+1):降低排名较低项目影响的折损因子。

  • IDCG(理想折损累积增益):计算理想排名(相关性最高者优先)的 DCG。
  • NDCG:通过将 DCG 除以 IDCG 进行归一化,确保评分在 0 到 1 之间,其中 1 表示完美排名。如果 IDCG 为 0,则 NDCG 设置为 0。

如何定义相关性评分

相关性评分量化了检索到的项目对于给定查询的有用程度。评分可以根据结果的重要性来定义

  1. 分级相关性(这可以根据您的问题进行定制)
  • 第 1 名:评分 = 3(高度相关)。
  • 第 2 或 3 名:评分 = 2(中度相关)。
  • 第 4 或 5 名:评分 = 1(勉强相关)。
  • 前 5 名以外:评分 = 0(不相关)。

为什么使用分级相关性?

分级相关性捕捉了不同程度的相关性,为评估排名提供了更丰富的反馈。它反映了某些结果可能有用但不完美,而其他结果则完全不相关。

让我们回到计算 NDCG 的步骤。

NDCG 计算的步骤

为什么使用 NDCG?

  • 位置敏感性:强调排名靠前的项目,与用户行为一致。
  • 分级相关性:支持不同的相关性级别,增强了通用性。
  • 可比性:归一化使得跨查询或数据集进行比较成为可能。

NDCG 的局限性

  • 复杂性:依赖于主观且难以获取的分级相关性判断。
  • 对较长列表的偏差:在归一化过程中对排名列表的长度敏感。

Redis 矢量数据库与 NDCG@10 计算

目标是使用基础和微调的嵌入模型计算所有答案的嵌入,并将它们存储在两个独立的矢量索引中。这些嵌入将用于根据相应的问题检索答案。检索后,将为这两组嵌入计算 NDCG@K 评分,以评估其性能。

在 Colab 中使用 udocker 设置 Redis 矢量数据库

计算 BGE 基础模型的 NDCG

从 Huggingface 下载 BGE 基础模型 (BAAI/bge-base-en-v1.5)

以下代码定义了一个包含两个字段的索引 schema:“标签”字段(qa)和“矢量”字段(embedding),配置用于高维数据搜索,具有指定的属性,如算法、数据类型、维度和距离度量。

以下脚本创建一个 Redis 索引,通过为答案生成矢量嵌入来处理问答对(QA),并将数据加载到索引中进行搜索和检索。

以下脚本对问答(QA)数据集中的每个问题执行矢量搜索,计算 NDCG 评分和匹配排名等指标,并跟踪正确答案在结果中每个位置出现的频率。最终输出包括评估模型性能的关键指标。

以下是结果摘要

  • 总 NDCG 评分:87.30
  • 处理的总问题数:178
  • 按排名分布的匹配项

排名 1:132 个匹配项

排名 2:8 个匹配项

排名 3:5 个匹配项

排名 4:8 个匹配项

排名 5:3 个匹配项

排名 6-10:每个排名 0 个匹配项

  • 总匹配项:156
  • 平均每次查询的 NDCG:0.49

这表明模型表现相对较好,正确答案经常获得高排名(例如,132 次排在首位),但在较低排名中性能显著下降。平均 NDCG 评分为 0.49,表明仍有改进空间。

计算 BGE 微调模型的 NDCG

从 Huggingface 下载 BGE 微调模型 (rezarahim/bge-finetuned-detail)。

这部分代码的详细信息可在笔记本中找到。

以下是微调模型的结果摘要

以下是更新后的结果摘要

  • 总 NDCG 评分:107.30
  • 处理的总问题数:178
  • 按排名分布的匹配项

排名 1:166 个匹配项

排名 2:8 个匹配项

排名 3:2 个匹配项

排名 4:2 个匹配项

排名 5-10:每个排名 0 个匹配项

  • 总匹配项:178(匹配所有问题,100%准确率)
  • 平均每次查询的 NDCG:0.60

这标志着相对于之前结果的明显改进。微调模型经常将正确答案置于首位(166 次),并获得了 0.60 的平均 NDCG 评分,显示出更好的排名性能和整体准确率。