检索都找到了相关段落,怎样比较重要段落是否排在前面

2026-10-24

比较检索排序时,先让人定义相关等级,再按位置折扣计算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 留出互补材料的位置。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。

加微信,把这一页存到手机上

扫码加站长企业微信,会自动把这一页的链接发给你,方便在手机上接着看。AI 落地卡住了,也可以直接问。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。