检索都找到了相关段落,怎样比较重要段落是否排在前面
比较检索排序时,先让人定义相关等级,再按位置折扣计算DCG并用理想排序归一化。本例固定使用线性gain,也就是直接使用相关等级;不能一边计算等级值,一边把公式写成2的等级次方减一。
先给段落分级而不是让模型自评
附件为四个合成文档分配3、2、1、0四档相关等级。高等级表示对同一个问题更有用,不代表文档普遍质量更高。判断应基于既定问题与人工证据,不让检索系统自己给自己生成“真值”。真实任务还要覆盖检索不到相关内容的查询,否则只在有答案问题上比较名次,结果容易过于乐观。
逐位置展开折扣贡献
第i位采用log2(i+1)作分母,前三名的贡献分别是相关等级、等级除以log2(3)、等级除以2。X把3、2、1顺次排在前三,Y则排成1、2、3。工作表保存前三个位置的文档id、线性gain、折扣与贡献值,可以逐行手算,不需要只相信汇总函数。程序拒绝同一排名重复doc,以及非正、重复或缺号position。分子和理想分母都只计前三;第四名即使相关也不进入NDCG@3。
用同一个理想排序作参照
理想前三是3、2、1,IDCG约4.76186。X的NDCG为1,Y约0.79000,说明同样找到三条相关段落,重要材料的位置仍不同。这里的k固定为3;实际报告应写成NDCG@3,避免与更长截断位置的分数直接比较。按多个查询汇总时保留每问结果、样本数与缺失情况,不让一个平均值掩盖困难问题上的退化。
零相关与并列需要提前定政策
如果一问所有等级都是零,理想分母为零,本例选择未定义,不自动当成满分。负等级不属于这组线性gain约定,失败命令会拒绝。检索分数相同时应说明排序是否确定、如何处理并列,不能把库函数的默认行为当成唯一标准。NDCG检查的是既有人工分级下的位置质量,不证明引用内容真实,也不证明后续模型会正确使用材料;这些仍要在问答环节单独验证。
建立相关等级时,为每档准备几条人工示例,记录为什么某段是核心证据而另一段只是背景。若更换等级含义,旧分数不宜直接作趋势线;应保存旧版评分表,必要时对相同查询重新标注,保证排序比较仍在相同标尺下进行。
下载与复现
下载完整样例包,解压到一个新文件夹;也可查看全部文件清单和主脚本。使用Python 3.10或更新版本,在解压目录运行。此脚本只使用标准库,无需安装额外包。
python -B run.py
python -B run.py --negative
先查看主要结果,再修改输入重跑;已有输入会保留,结果写回同目录。边界命令可能故意非零退出,也可能输出明确的不适用状态,按正文说明判断,不把所有非零退出都当成安装故障。
依据与延伸阅读
资料核对日期为2026年10月24日。一手资料1:NDCG以位置折扣与理想排序归一;sklearn实现采用相关等级本身的线性gain。
继续阅读:RAG 怎么评估?凭感觉调是调不出来的;不调模型也能先测检索:怎样给中文小语料做一个字符 TF-IDF 基线;检索前五条都在重复同一段,怎样用 MMR 留出互补材料的位置。
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。