【王树森搜索引擎技术】相关性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)


相关推荐
猫头虎2 小时前
百度搜索AI开放计划:助力开发者通过MCP Server连接用户和应用
搜索引擎·百度·mcp
二爷记3 小时前
QXQ3真i9级CPU是捡漏还是踩坑!i9-12900 ES版CPU值得入手吗?
大数据·elasticsearch·搜索引擎·全文检索
何双新4 小时前
L3-3、从单轮到链式任务:设计协作型 Prompt 系统
服务器·搜索引擎·prompt
技术项目引流13 小时前
elasticsearch查询中的特殊字符影响分析
大数据·elasticsearch·搜索引擎
盈达科技14 小时前
【盈达科技】GEO(生成式引擎优化)底层逻辑
搜索引擎
yangmf204019 小时前
使用 Logstash 迁移 MongoDB 数据到 Easysearch
java·elasticsearch·搜索引擎
Elastic 中国社区官方博客2 天前
Elasticsearch 堆内存使用情况和 JVM 垃圾回收
大数据·jvm·数据库·elasticsearch·搜索引擎·全文检索
TracyCoder1232 天前
ElasticSearch深入解析(二):核心概念
大数据·elasticsearch·搜索引擎
白雪讲堂2 天前
【白雪讲堂】GEO优化第7篇 -构建《推荐类》内容的结构化模板
大数据·人工智能·搜索引擎·geo
yangmf20402 天前
私有知识库 Coco AI 实战(三):摄入 Elasticsearch 官方文档
人工智能·elasticsearch·搜索引擎·全文检索·coco ai