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


相关推荐
SEO_juper13 小时前
AI 搜索时代:引领变革,重塑您的 SEO 战略
人工智能·搜索引擎·seo·数字营销·seo优化
Blossom.11815 小时前
把 AI 推理塞进「 8 位 MCU 」——0.5 KB RAM 跑通关键词唤醒的魔幻之旅
人工智能·笔记·单片机·嵌入式硬件·深度学习·机器学习·搜索引擎
澳鹏Appen1 天前
在多语言大模型中保留文化细微差别:超越翻译
搜索引擎
qqxhb1 天前
零基础数据结构与算法——第七章:算法实践与工程应用-搜索引擎
算法·搜索引擎·tf-idf·倒排索引·pagerank·算法库
SEO_juper2 天前
搜索引擎核心机制解析
搜索引擎·seo·数字营销·seo优化·谷歌seo
janthinasnail2 天前
使用Docker安装MeiliSearch搜索引擎
搜索引擎·docker
JJTX003 天前
入门基础人工智能理论
人工智能·搜索引擎
worxfr3 天前
轻量级开源全文搜索引擎:Manticore Search 入门介绍
搜索引擎·开源
Elastic 中国社区官方博客3 天前
Elasticsearch:如何使用 Qwen3 来做向量搜索
大数据·人工智能·elasticsearch·搜索引擎·全文检索
xiao-xiang3 天前
elasticsearch mapping和template解析(自动分词)!
大数据·elasticsearch·搜索引擎