【王树森搜索引擎技术】相关性02:评价指标(AUC、正逆序比、DCG)

相关性的评价指标

  • Pointwise评价指标:Area Under the Curve(AUC)
  • Pairwise评价指标:正逆序比(Positive to Negative Ratio, PNR)
  • Listwise评价指标:Discounted Cumulative Gain(DCG)
  • 用AUC和PNR作为离线评价指标,用DCG评价模型在线上排序的效果

Pointwise评价指标

二分类评价指标

  • 把测试集相关性档位转化为0/1
    • 高,中两档合并,作为标签 y=1
    • 低,无两档合并,作为标签 y=0
  • 相关性模型输出预测值 p ∈ 0 , 1 p ∈ 0, 1 p∈0,1
  • 用AUC评价模型的预测是否准确

ROC曲线与AUC值

  • 现在有一个分类问题,图中的坐标系横坐标表示预测的概率,纵坐标表示其真实的类别
  • 我们设定一个阈值,如果概率大于该阈值,那么就认为它是汉堡,比如图中大于了0.5,所以右侧的点都会被预测为汉堡,那么就说明三个预测准确,两个预测不准确
  • 可以在右上角画出一个混淆矩阵
  • 我们的阈值可以取 0 到 1 之间的任意数,所以我们可以得到很多个混淆矩阵
  • 有没有办法能把所有的混淆矩阵表示在同一个二维空间内呢?这就是 Receiver Operator Characteristic (ROC)曲线
  • 可以对混淆矩阵的值用公式算出来然后画到坐标轴上



  • TPR是与TP(正预测成功)和FN(负预测失败)计算得来,我们希望TP越大越好,所以对于FPR相等的值,TPR越大越好
  • 那么AUC值就能很好的反应出模型在ROC曲线上的效果,即AUC值越大,效果越好
  • 如果是多分类的话:宏观AUC就是对每一个类别都画一个ROC曲线,求出对应的AUC值,最后对AUC值取某种平均。微观AUC的话,就是化归为真实类别和其他类别

Piarwise 评价指标

  • 正逆序比 PNR


  • 用户看到前面文档的概率大,我们希望前面的排序是正确的,所以不能只看正逆序比

Listwise评价指标

  • 该指标会给前面的指标更大的权重
  • 有 n 篇候选文档,根据模型打分做降序排列,把文档记为 d 1 , ⋅ ⋅ ⋅ , d n d_1, ···, d_n d1,⋅⋅⋅,dn (此时不知道真实相关性分数)
  • d 1 , ⋅ ⋅ ⋅ , d n d_1,···,d_n d1,⋅⋅⋅,dn 的真是相关性分数为 y 1 , ⋅ ⋅ ⋅ , y n y_1, ···, y_n y1,⋅⋅⋅,yn 人工标注相关性档位,档位映射到 0,1 区间上的实数
  • 逆序对会导致 pairwise 和 listwise 指标减小
  • 逆序对出现的位置不影响 pairwise 指标
  • 逆序对越靠前,对 listwise 指标造成的损失越大

Cumulative Gain(CG)

  • 只关注排在前 k 的文档,它们最可能获得曝光,对用户的体验影响最大

  • 交换前面的并不会影响结果,这是不合理的

Discounted Cumulative Gain(DCG)

  • 多了降权的惩罚,越靠前的话分数就越大




相关性的评价指标

  • Pointwise:单独评价每一个 (q,d) 二元组,判断预测的相关性分数与真实标签的相似度。因为是单独,所以是 Pointwise
  • Pairwise:对比 ( q , d 1 ) (q,d_1) (q,d1) 和 ( q , d 2 ) (q,d_2) (q,d2) ,判断两者的序是否正确 (正序对或逆序对),以对为基准,所以是pairwise
  • Listwise:对比 ( q , d 1 ) , ( q , d 2 ) , ⋅ ⋅ ⋅ , ( q , d n ) (q,d_1), (q,d_2), ···, (q, d_n) (q,d1),(q,d2),⋅⋅⋅,(q,dn),判断整体的序关系的正确程度

离线评价指标

  • 实现准备人工标注的数据,划分为训练集和测试集
  • 完成训练后,计算测试集上的AUC和PNR
  • 相关性有 4 个档位,为什么不用多分类的评价指标呢?(Macro F1 和 Micro F1)
  • 相关性的标签存在序关系:高>中>低>无
  • 多分类问题把 4 中标签看作 4 个类别,忽略其中的序关系

线上评价指标

  • 一个搜索session:用户搜索 q,搜索结果页上按需展示文档 d 1 , ⋅ ⋅ ⋅ , d n d_1, ··· , d_n d1,⋅⋅⋅,dn
  • 从搜索日志中抽取一批session,覆盖高中低频查询词
  • 对于每个session,取排序最高的 k 篇文档 d 1 , ⋅ ⋅ ⋅ , d k d_1, ···, d_k d1,⋅⋅⋅,dk
  • k的设定取决于用户浏览深度,比如k=20
  • 高频查询词的前 20 篇文档几乎都是高相关,指标过高
  • 高频查询词的k设置的较大(比如k=40),低频查询词的k设置的较小(比如k=20)


相关推荐
LaughingZhu2 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
Elastic 中国社区官方博客2 天前
jina-ocr-v1:在低成本 GPU 上实现更快速的文档解析
大数据·数据库·elasticsearch·搜索引擎·全文检索·jina
LaughingZhu3 天前
Product Hunt 每日热榜 | 2026-09-20
人工智能·深度学习·神经网络·搜索引擎·百度
Y3815326623 天前
Ruby 调用谷歌搜索 API:net/http 与 json 标准库实战
搜索引擎·ruby
Elastic 中国社区官方博客3 天前
使用 Elasticsearch 和 Jina 进行 AI 视频搜索:精准找到你需要的视频片段秒数
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Y3815326624 天前
C# 调用谷歌搜索 API:HttpClient 与 System.Text.Json 实战
搜索引擎·.net
piikee4 天前
论坛帖子百度收录越来越慢?提高收录速度实测案例
搜索引擎·百度收录·必应快收·好用蜘蛛池·蜘蛛1号·收录慢
goujunwe4 天前
GEO 评估方法:如何自测你的内容,会不会被 AI 引用
搜索引擎·网络安全·游戏引擎·全文检索·中文分词
hi_ro_a6 天前
基于正倒排索引的boost搜索引擎
linux·c++·搜索引擎·项目
LaughingZhu6 天前
Product Hunt 每日热榜 | 2026-09-17
人工智能·深度学习·神经网络·搜索引擎·百度