【学习笔记】推荐系统

推荐系统组成

推荐系统的任务是根据用户和物品的特征,使用某种或某些推荐算法预测任意用户 u u u对任意物品 i i i的偏好或评分,并按照预测的偏好顺序,将排在前列的物品展示给用户。

  1. 召回算法:负责从整个物品集中抽取当此推荐查询的候选集。大部分召回策略都基于内容过滤、协同过滤或它们的混合方法。协同过滤是基于已知用户对部分物品的偏好或评分,预测缺失偏好或评分的方法。
    召回可以视为一个粗排序的过程,主要目的是排除大部分无关物品,在有限的资源条件下提供尽可能准确的一个小候选集,从而减轻排序阶段的计算负担和耗时。在召回阶段,推荐系统一般更侧重于大量物品的筛选效率,可以接受一些牺牲一定准确性的优化算法。
  2. 排序算法:负责对召回算法提供的候选集中的物品按照用户偏好进行排序,排好序后通常会再进行一次前 K K K个物品的截取。
    排序阶段的算法会更多地使用当前上下文特征、用户行为相关特征、时序相关特征等,对特征的处理比召回阶段更加精细。

推荐系统评估

曲线线下面积AUC(Area Under the Curve),是机器学习中常用的评价二分类模型的指标。与准确率、召回率等指标相比,AUC关心的是样本间相对顺序,与模型为每一个样本输出的绝对分值没有关系,并且不易受正负样本数量变化的影响,是点击率预估模型中最重要的离线指标之一。AUC在任取一正一负两个样本时,模型对正样本的评分高于负样本的概率。

线下AUC的提高并不是总是意味着线上点击率的提高。线下的AUC评估往往是将所有样本混杂在一起进行的,这就破坏了原始数据中天然存在的一些模型无法改变的维度信息,包括用户维度、时间维度、设备维度等。对于用户维度,线下AUC的提高可能是将一部分用户的正样本排到了另一部分用户的负样本之前导致的。对于时间维度,线下AUC的提高可能是将一部分上午的正样本排到了下午的负样本。解决方法是按各个维度对样本做聚合,在聚合的各组结果上分别计算AUC,然后再按样本量做加权平均,可以消除各个维度之间样本交叉的可能。

矩阵分解算法

矩阵分解算法是一种经典的协同过滤算法,其基本思想是将用户和物品的评分矩阵分解为低维稠密的向量,而分解过程的优化目标是使用户和物品对应向量的内积逼近实际评分。
r u , i ≈ r ^ u , i = μ + b u + b i + v u T w i r_{u, i} \approx \hat{r}_{u, i}=\mu+b_{u}+b_{i}+\boldsymbol{v}_{u}^{\mathrm{T}} \boldsymbol{w}_{i} ru,ir^u,i=μ+bu+bi+vuTwi。其中, r u , i r_{u, i} ru,i r ^ u , i \hat{r}_{u, i} r^u,i分别表示用户 u u u对物品 i i i的实际评分和预测评分, μ \mu μ为系统的全局偏差, b u b_{u} bu b i b_{i} bi分别为用户 u u u和物品 i i i的特有偏差, v u \boldsymbol{v}_{u} vu w i \boldsymbol{w}_{i} wi则为表示用户 u u u和物品 i i i的低维稠密向量。

在这里插入图片描述
矩阵分解通常采用均方根误差作为损失函数。通常会加入 L 2 L_2 L2正则以防止过拟合。从神经网络的角度来看,矩阵分解是一种内部没有非线性单元的相对简单的模型。可以通过增加多层感知单元等方法,将矩阵分解扩展为一个更一般的用于协同过滤任务的神经网络模型。

基于物品相似度的协同过滤算法

基于物品相似度的协同过滤算法适用于用户明显多于物品的情况。基于物品的协同过滤算法的原始想法是:给用户推荐用户喜欢的物品相似的物品。在基于物品的协同过滤之前,最常用的是基于用户的协同过滤。基于用户的协同过滤首先按计算相似用户,然后再根据相似用户的喜好推荐物品,但是基于用户的协同过滤存在以下问题:

  • 用户的数量往往很多,用户之间相似度计算起来工作量大;
  • 用户的兴趣爱好变化较快,所以这个动态变化的过程很难被跟踪和记录。

基于物品的协同过滤可以较好的解决上面的问题。物品的数量远远少于用户的数量,而且物品之间的相似度不易改变,物品对应的消费者数量大,所以计算出来的物品相似度比较可靠。

基于会话的推荐系统

基于会话的推荐系统的输入是用户的动作序列,输出是用户的下一个动作。传统的推荐系统适用于已经登录、有历史行为的用户,而基于会话的推荐系统更加注重用户的动作序列,适用于没有登录信息、只有短期行为的用户。

基于会话的推荐系统主要包含四大类:

  • 基于频繁模式挖掘的方法:找到动作A的后续动作;
  • 基于马尔科夫的方法:通过构建状态转移矩阵来预测从动作A到动作B的跳转概率;
  • 基于马尔可夫决策过程的方法:通过对问题的状态空间和动作空间进行建模,利用强化学习进行求解;
  • 基于循环神经网络的方法:将动作序列看成是时序数据,预测下一时刻最可能发生的动作。

最近邻问题

推荐系统通常将用户和物品转换成向量表示,使用用户向量查询与之最相近的物品向量。当数据规模比较大时,精确最近邻算法往往无法在可接受的响应时间里完成,因此在推荐场景中,关注的通常是针对向量化表示的实体的快速最近邻算法。

  • 基于空间划分的算法:如KD- 树、区间树、度量树等。它们往往是通过预处理,把整个高维空间做某种划分;当进行查找时,只需搜索一部分被划分之后的空间。该类方法的缺点是当维度比较大时会导致计算量过大,适用于数据维度低、对精确度要求高的场景。
  • 局部敏感哈希类算法:核心思想是通过设计一个哈希函数,将原来高维空间里的向量哈希映射到各个不同的桶里。查询阶段只需要检查待查询向量所属桶里的所有向量即可。该类算法往往内存占用不高,查询时间和精确度与桶内元素多少有关,缺点是需要设计一个好的哈希函数。
  • 积量化类算法:思想是对于数据集做一定程度的划分,对每一个划分,找到一个表示向量代表这个划分。在搜索阶段先找到离查询向量最近的表示向量,进而只在该表示向量所在划分内进行搜索。
  • 基于最近邻图的算法:思想是在数据预处理阶段构建一个图,一般是对每一个向量记录若干个离它比较近的向量,查询时利用预处理阶段构建的图做有效的剪枝。优点是对于所有数据的细节刻画更加细致,往往能够得到更精确的结果,缺点是内存消耗大,数据预处理时间长。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值