相关性的评价指标
- 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)