推荐系统:排序算法(pointwise,pairwise,Listwise)

1. 概念

排序学习是机器学习在信息检索系统里的应用,其目标是构建一个排序模型用于对列表进行排序。
在这里插入图片描述

2. 排序方法

2.1 Pointwise 方法

Pointwise方法是通过近似为回归问题解决排序问题,将每个查询-文档对的相关性得分作为实数分数或者序数分数,训练排序模型。预测时候对于指定输入,给出查询-文档对的相关性得分。

模型在参数训练阶段只考虑对每个<用户,物品>独立的打分,目标是使得所有正样本的打分高于负样本的打分。

优点
Pointwise算法实现简单,易于理解,但是它只对给定Query单个文档的相关度进行建模,仅仅考虑了单个文档的相关度,Pointwise值学习到文档和 Query 的全局相关性,对排序先后顺序有一定的影响。在某一些场景下,排在最前面的几个文档对排序结果的影响非常重要,如搜索引擎的第一页的内容非常重要,而 Pointwise 没有考虑这方面的影响,不对排序的先后顺序优劣做惩罚。

缺陷

  • ranking 追求的是排序结果,并不要求精确打分,只要有相对打分即可。Pointwise方法没有考虑对同一个用户而言物品与物品之间的排序关系。
  • pointwise 类方法并没有考虑同一个 query 对应的 docs 间的内部依赖性。一方面,导致输入空间内的样本不是 IID 的,违反了 ML 的基本假设,另一方面,没有充分利用这种样本间的结构性。其次,当不同 query 对应不同数量的 docs 时,整体 loss 将会被对应 docs 数量大的 query 组所支配,前面说过应该每组 query 都是等价的。
  • 损失函数也没有 model 到预测排序中的位置信息。因此,损失函数可能无意的过多强调那些不重要的 docs,即那些排序在后面对用户体验影响小的 doc。

2.2 Pairwise方法

Pairwise方法是通过近似为分类问题解决排序问题,组合任意两个文档形成文档对作为输入样本,即学习一个二分类器,对输入的一对文档对AB(Pairwise的由来),根据A相关性是否比B好,二分类器给出分类标签1或0。

对所有文档对进行分类,就可以得到一组偏序关系,从而构造文档全集的排序关系。该类方法的原理是对给定的文档全集S,降低排序中的逆序文档对的个数来降低排序错误,从而达到优化排序结果的目的。

训练样本由<用户,物品1,物品2>三元组构成,其中物品1为此用户点击了的物品,物品2为此用户未点击的物品。Pairwise方法侧重于判断物品对<物品1,物品2>是否满足顺序关系 (即<用户,物品1>的打分是否高于<用户,物品2>)。

对每个用户可以构造许多物品对<物品1,物品2>从而得到<用户,物品1,物品2>的样本实例。如果考虑所有的样本实例,会导致样本过大无法训练,为此我们采取的策略是: 对每个用户随机选取100个物品对。

对一个文档对 <Doc1, Doc2> 做二分类,一类是 Doc1 排序前于 Doc2,另一类则相反,通过两两比较,模型可以学习到不同文档之间的先后顺序。

优点
Pairwise 方法通过考虑两两文档之间的相关度来进行排序,有一定进步。但 Pairwise 使用的是两文档之间相关相关度的损失函数,而它和真正衡量排序效果的指标之间存在很大不同,甚至可能是负相关的,如可能出现 Pairwise Loss 越来越低,但 NDCG 分数也越来越低的现象。另外此方法只考虑了两个文档的先后顺序,且没有考虑文档在搜索列表中出现的位置,导致最终排序效果并不理想。

缺陷:

  • doc pair 的数量将是 doc 数量的二次,从而 pointwise 类方法就存在的 query 间 doc 数量的不平衡性将在 pairwise 类方法中进一步放大。
  • pairwise 类方法相对 pointwise 类方法对噪声标注更敏感,即一个错误标注会引起多个 doc pair 标注错误。
  • pairwise 类方法仅考虑了 doc pair 的相对位置,损失函数还是没有 model 到预测排序中的位置信息。
  • pairwise 类方法也没有考虑同一个 query 对应的 doc pair 间的内部依赖性,即输入空间内的样本并不是 IID 的,违反了 ML 的基本假设,并且也没有充分利用这种样本间的结构性。

2.3 Listwise方法

Listwise方法是直接优化排序列表,输入为一个文档排列。通过构造合适的度量函数衡量当前文档排序和最优排序差值,优化度量函数得到排序模型。由于度量函数很多具有非连续性的性质,优化困难。


参考:

  1. 腾讯云 基于Pairwise和Listwise的排序学习
  2. 从 pointwise 和 pairwise 到 listwise,经典模型与优缺点;
  3. 鹅厂是如何分析你喜欢什么的?
  4. learn to rank;
协同过滤算法音乐可视化推荐系统是一种基于用户行为数据的推荐系统,它可以根据用户的历史行为数据,如听歌记录、评分等,来预测用户的兴趣,从而向用户推荐他们可能感兴趣的音乐。下面是一个简单的实现步骤: 1. 数据收集:收集用户的历史行为数据,如听歌记录、评分等。 2. 数据预处理:对收集到的数据进行清洗、去重、归一化等处理,以便后续的分析和建模。 3. 特征提取:从处理后的数据中提取有用的特征,如歌曲的流派、歌手、时长等。 4. 相似度计算:根据用户的历史行为数据和歌曲的特征,计算歌曲之间的相似度,以便后续的推荐。 5. 推荐生成:根据用户的历史行为数据和歌曲的相似度,生成推荐列表,并将其展示在可视化界面上。 下面是一个简单的Python实现示例: ```python # 导入必要的库 import pandas as pd from sklearn.metrics.pairwise import cosine_similarity # 加载数据 data = pd.read_csv('user_music.csv') # 计算用户-歌曲矩阵 user_music_matrix = data.pivot_table(index='user_id', columns='music_id', values='rating') # 计算歌曲之间的相似度 music_similarity = cosine_similarity(user_music_matrix.T) # 生成推荐列表 def get_recommendations(user_id, top_n): # 获取用户听歌记录 user_music = user_music_matrix.loc[user_id].dropna() # 计算用户听歌记录中每首歌曲与其他歌曲的相似度 music_similarities = pd.Series() for music_id, rating in user_music.items(): similar_music = music_similarity[music_id] similar_music = pd.Series(similar_music, index=user_music_matrix.columns) similar_music = similar_music.drop(music_id) music_similarities = music_similarities.append(similar_music) # 按相似度排序,获取前top_n个推荐歌曲 music_similarities = music_similarities.groupby(music_similarities.index).mean() music_similarities = music_similarities.sort_values(ascending=False)[:top_n] return music_similarities.index.tolist() # 展示推荐列表 print(get_recommendations(1, 5)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rosefunR

你的赞赏是我创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值