LTR 和 CTR 和 所谓的pointwise, pairwise, listwise的关系

本文深入解析LTR(学习排序)在搜索推荐场景中的应用,探讨CTR(点击率预估)、pointwise、pairwise及listwise的训练模式。通过实例说明各种方法如何构建损失函数进行模型训练,特别强调lamdamart在大规模应用中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基本概念解释

1.1 LTR (learning to rank) 意思是 ‘学习排序’,就是排序的机器学习技术

1.2 CTR (click through rate) 意思是‘点击率(预估)’,这个很常见的二分类问题(点击概率0-1)

1.3 pointwise 含义是单点(单文档)角度  pairwise 含义是文档对角度  listwise 含义是(推荐)文档列表角度

 

2.具体关系讲述

LTR是排序技术,常用语搜索推荐场景,具体如何进行排序的学习,样本如何提取,方案和思路就是上述三个角度。

具体例子,比如query为 ‘1岁男宝奶瓶’,出现各个商家的奶瓶商品信息列表

用户可能会进行后续操作,比如滑动浏览了多少个条目,有哪些点击进入详情页面了,有哪些进入详情页时间较长,有哪些加车,有哪些购买了,诸如此类的后续行为日志。

有了这些可以利用的标注数据,如何进行排序模型的学习?

先不考虑不同动作含义权重不一样,简单点,一个很直观的思路就是直接利用点击进入详情代表用户点击了,曝光未点击为负样本,曝光点击为正样本,然后构建  (query特征 | 商品信息特征 | query-商品匹配(交叉)特征, label)  这样的(x,y)对进行训练,预测得到的yhat代表了点击概率,这就是典型的CTR思路。一言以蔽之,CTR是LTR pointwise的运用。

为何还要有pairwise呢?有些网上的博客文章也没讲特别透彻,个人理解是这样的。对于不同位置的的点击与否,权重是不一样的,比如越高的理论上有所谓的位置偏向,理论上没有点击应该惩罚多一些,相反,位置靠下的点击了鼓励应该多一些,所以可以根据不同位置是否点击进行不同级别的标记,比如 优(位置不好点击了)/良(正常点击)/中(非差情况未点击)/差(位置好没有点击)几个等级的匹配,理论上可以进行不同分值的标记,比如1.0,0.8, 0.2,0等标记让模型去分类(回归)。但是有个问题是人为的标记量化了各个指标的差异,而且难免有误差。另一个更科学的思路是,我不知道良比中好多少,但是我知道良一定是要比中好的,所以,对于各个文档比较是否正确构建损失函数的来进行模型的训练和学习是更加合理科学的选择。

那listwise呢?上面的pairwise一个显著的缺点是复杂度高,理论上C(n,2) = O(n^2)时间复杂度。所以考虑直接以整个文档来构建损失,而不是两两比较各个样本。那如何考虑整个list呢?也是ctr的思路,就是有一个评分函数,但是我不是让它预测概率,我是让它预测各个(query,doc)的分数,这样可以得到这个list的分布,以上面的日志数据标注的list作为参照,可以比较两个list的分布差异,这样来进行模型的训练,直到模型收敛,预测得到排序列表接近于理想的list分布。

 

据笔者了解和认识,现在大规模的应用中,用于搜索推荐的场景,listwise的lamdamart应用的比较多,其他非query的推荐场景,pointwise的ctr用的更多些。从本质上来讲,三种训练模式都是为了训练一个评估点击概率的函数,只不过训练阶段的损失构建方式不一样而已,而到了线上应用,他们的使用方法是一样的,都是根据评分来排序即可。

 

另 lamdamart思路比较牛逼的地方在于,它不是传统的优化问题算法思路,即先构建损失函数,求(偏)导梯度下降求最小值。因为梯度下降也是利用梯度(偏导)来进行真正的计算,所谓损失函数不事先定义也可以。它更关注了梯度本身的含义,直接构造了梯度,而且再构造的梯度上加入了不平滑没法直接求梯度的评价指标部分,更加直接的朝着优化方向前进,这个思路值得借鉴学习。

附学习博客链接:

LTR学习排序 Learning to Rank 小结

Learning To Rank之LambdaMART的前世今生

 

### Listwise 方法定义 Listwise 方法是一种用于排序学习(Learning to Rank, LTR)的方法,在信息检索机器学习领域广泛应用。不同于逐点法(pointwise)只考虑单个文档的相关性分数,以及成对法(pairwise)关注文档之间的相对顺序,Listwise 方法直接优化整个文档列表的整体排列质量[^1]。 具体来说,Listwise 方法试图最小化预测排名列表与真实排名列表之间的差异。这种方法能够更好地捕捉文档间的全局关系,并且更贴近实际应用中的评估指标,比如 DCG 或 NDCG 等。 ```python import numpy as np def compute_ranking_loss(predicted_scores, true_ranks): """ 计算基于listwise方法的损失函数 参数: predicted_scores (np.array): 预测得分向量 true_ranks (np.array): 实际等级向量 返回: float: 排序损失值 """ sorted_indices = np.argsort(-predicted_scores) ranked_true_ranks = true_ranks[sorted_indices] # 假设采用NDCG作为评价标准来构建loss function ideal_dcg = sum((2 ** x - 1) / np.log2(i + 2) for i, x in enumerate(sorted(true_ranks)[::-1])) actual_dcg = sum((2 ** x - 1) / np.log2(i + 2) for i, x in enumerate(ranked_true_ranks)) ndcg_score = actual_dcg / ideal_dcg if ideal_dcg != 0 else 0. return 1 - ndcg_score ``` 这段代码展示了如何计算基于 Listwise 的损失函数,这里选择了 NDCG 来衡量模型性能并据此调整参数以提高最终得到的结果的质量。 ### 应用场景 在 Web 搜索引擎中,Listwise 方法被用来改进查询结果页面上的文档展示顺序。通过训练模型使得返回给用户的搜索结果尽可能按照相关性的高低正确排序,从而提升用户体验。此外,在推荐系统里也经常运用此类算法来进行个性化商品或内容推荐[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值