评估信息检索(IR)系统对于做出明智的设计决策和理解系统性能至关重要。亚马逊和谷歌等成功公司严重依赖 IR 系统,亚马逊将超过 35% 的销售额归因于其推荐系统,谷歌则将其 70% 的 YouTube 观看量归因于推荐系统。有效的评估指标是构建和改进这些系统的关键。
在这里,我们将使用归一化折损累积增益(Normalized Discounted Cumulative Gain,简称 NDCG@K)来评估基础模型和微调模型的性能,并评估微调模型是否优于基础模型。
Redis 矢量数据库将用作嵌入的持久存储,而 RedisVL将用作 Python 客户端库。
归一化折损累积增益(NDCG)通过根据相关性为数据库元素分配真实排名来评估检索质量。例如,高度相关的结果可能排名为 5,部分相关的为 2-4,不相关的为 1。NDCG 对检索到的项目的排名进行求和,但引入了一个基于对数的惩罚因子来考虑结果的顺序。排名靠前的无关项目会受到更大的惩罚,这确保系统奖励将相关项目置于结果的前面。
NDCG 通过考虑排名位置的重要性(因为用户优先查看顶部结果)来改进累积增益(CG)。它使用一个折损因子,为排名靠前的项目赋予更高的权重。
如何计算 NDCG
– rel i:位置 i 处文档的相关性评分。
– i:文档的排名位置(从 1 开始计数)。
– log2(i+1):降低排名较低项目影响的折损因子。
相关性评分量化了检索到的项目对于给定查询的有用程度。评分可以根据结果的重要性来定义
分级相关性捕捉了不同程度的相关性,为评估排名提供了更丰富的反馈。它反映了某些结果可能有用但不完美,而其他结果则完全不相关。
让我们回到计算 NDCG 的步骤。
NDCG 的局限性
目标是使用基础和微调的嵌入模型计算所有答案的嵌入,并将它们存储在两个独立的矢量索引中。这些嵌入将用于根据相应的问题检索答案。检索后,将为这两组嵌入计算 NDCG@K 评分,以评估其性能。
从 Huggingface 下载 BGE 基础模型 (BAAI/bge-base-en-v1.5)
以下代码定义了一个包含两个字段的索引 schema:“标签”字段(qa)和“矢量”字段(embedding),配置用于高维数据搜索,具有指定的属性,如算法、数据类型、维度和距离度量。
以下脚本创建一个 Redis 索引,通过为答案生成矢量嵌入来处理问答对(QA),并将数据加载到索引中进行搜索和检索。
以下脚本对问答(QA)数据集中的每个问题执行矢量搜索,计算 NDCG 评分和匹配排名等指标,并跟踪正确答案在结果中每个位置出现的频率。最终输出包括评估模型性能的关键指标。
以下是结果摘要
排名 1:132 个匹配项
排名 2:8 个匹配项
排名 3:5 个匹配项
排名 4:8 个匹配项
排名 5:3 个匹配项
排名 6-10:每个排名 0 个匹配项
这表明模型表现相对较好,正确答案经常获得高排名(例如,132 次排在首位),但在较低排名中性能显著下降。平均 NDCG 评分为 0.49,表明仍有改进空间。
从 Huggingface 下载 BGE 微调模型 (rezarahim/bge-finetuned-detail)。
这部分代码的详细信息可在笔记本中找到。
以下是微调模型的结果摘要
以下是更新后的结果摘要
排名 1:166 个匹配项
排名 2:8 个匹配项
排名 3:2 个匹配项
排名 4:2 个匹配项
排名 5-10:每个排名 0 个匹配项
这标志着相对于之前结果的明显改进。微调模型经常将正确答案置于首位(166 次),并获得了 0.60 的平均 NDCG 评分,显示出更好的排名性能和整体准确率。