推荐系统 | 朴素协同过滤算法


一、协同过滤的中心思想

  • 把用户/物品基于向量化的表示
  • 使用向量空间模型(VSM)计算基础相关性
  • 利用基础相关性+用户原始行为,计算最终推荐结果

二、基于用户的协同过滤算法

在这里插入图片描述

基于用户的协同过滤算法, 即将用户基于向量化表示,如u=[1,2,0,3,1,5],

 向量中的每一个维度对应一种物品,其数值则代表该用户对此物品的行为打分。

解释起来,比如用户u对第1个物品打分为1,对第3个物品打分为0(即不感兴趣),对第6个物品打分为5(较感兴趣)

设想这样一种场景,系统需要将长尾商品物品j来推荐给用户i,由于用户i是没有直接和物品j发生行为,但另一个用户k存在与物品j的行为。

那么是否可以通过用户i和k之间的相关性,间接反映用户i和物品j的相关性 r e l ( u i , i t e m j ) rel(u_i,item_j) rel(ui,itemj)呢?答案是肯定的。

-使用向量空间模型(VSM)计算基础相关性,

    无论是基于用户还是基于产品的协同过滤算法,其本质都是寻找数据之间的相似度。本节就来介绍计算相似度的3种常用方法——欧氏距离、余弦值和皮尔逊相关系数。

    计算基础相关性常见三种方式:

  • 欧氏距离(KNN常用)
  • 余弦相似度
  • 皮尔逊系数

这里我们先讨论余弦相似度,用户i和用户j的基础相关性如下所示:
在这里插入图片描述

-利用基础相关性+用户原始行为,计算最终推荐结果

可以看出,在VSM模型中是利用余弦值来反映两个向量的基础相关性。
c o s θ > 0 cos\theta>0 cosθ>0,则认为两个向量具备正相关性;
c o s θ < = 0 cos\theta<=0 cosθ<=0,则认为两个向量没有相关性或呈负相关性。

这样,两个用户之间的相关性就可以利用余弦值就可以反映出来。

接下来,就需要通过用户k与物品j之间的行为,来间接的建立用户i与物品j之间的关联。

在这里插入图片描述

在这里插入图片描述

Q1:是否需要每两个用户计算其之间的相关性?不需要。

    因为大量用户之间的相关性可预判为0。由于此算法基于用户,每个用户基于向量化表示,如商品库有3个商品, u s e r i = [ 1 , 0 , 3 ] user_i=[1,0,3] useri=[1,0,3] u s e r k = [ 0 , 1 , 0 ] user_k=[0,1,0] userk=[0,1,0],则 s i m ( u s e r i , u s e r k ) sim(user_i,user_k) sim(useri,userk)必然为0,这种情况非常常见。因此后续会有方法来先做判断,只计算有相关性的用户。这里留作后话。

Q2:是否需要计算一个用户和其他所有用户的相关性?不需要

    算法本质上是利用除本用户之外的所有相关用户 u s e r k user_k userk i t e m j item_j itemj的评价来计算本用户对 i t e m j item_j itemj的相关性,但相关性衰减非常快,实际上也仅有前几名相关用户对本用户有着较大影响力,后续用户影响力趋近于无,因此在计算时,仅取TopK即可(仅关注与本用户 u s e r i user_i useri相关性排行榜前几的相关用户)

Q3:没有rate打分怎么办?
    当下的场景中,已很少会出现类似”打分/评价系统“,用户大多也不愿意去帮助完成打分。因此,当下获得rate的方法往往是通过”是否点击,浏览时长“等因素建立起的rate系统。

三、基于物品的协同过滤算法

在这里插入图片描述

    与基于用户的系统过滤算法相似,基于物品的系统过滤则是将物品进行向量化表示,如 i t e m = [ 1 , 2 , 0 , 1 , . . . ] item=[1,2,0,1,...] item=[1,2,0,1,...],每一个维度代表各个用户对其自身的评分。

    类似的,同样使用向量空间模型(VSM)计算基础相关性,
在这里插入图片描述
    利用基础相关性+用户原始行为计算最终推荐结果
与基于用户的协同过滤不同,基础相关性是基于物品的,用来获得物品与待推荐物品之间的相关性。再用已知存在的用户与物品的打分,间接获得用户与待推荐物品的相关性。
在这里插入图片描述
在这里插入图片描述

四、协同过滤算法对比

在这里插入图片描述

五、协同过滤算法数据的应用

由上文可以了解,基于物品的协同过滤算法(item-cf)具有更广泛的普适性,适用于以下场景进行召回:

  1. 首页推荐模块
  2. feed流形式
  3. 详情页推荐
  4. 购物车/订单完成页推荐

现阶段,item-cf算法主要用于”召回“,排序大多采用机器学习模型。

六、物品基础相关性的实现

上文已提及item-cf算法是由两部分计算任务构成,一是计算物品之间的基础相关性,二是将用户对物品的行为评价与此相关性进行乘积,并累加。
在这里插入图片描述
而基础相关性的实现则是计算两个向量的余弦值:
在这里插入图片描述
由于原式设计大量向量点乘运算,使得计算速度较慢,且占用内存较多。在实现过程中,常常将向量运算改为集合运算,如:

[1,1,0]*[0,1,0] => {1,2} & {2} == 1
即第一个向量中,第一个成员和第二个成员有效,转变为集合{1,2};
第二个向量中,第二个成员有效,转变为集合{2};
两个集合取&得到{1},即第一个成员(在这里代表第一个用户)有效

经过优化可将向量运算->集合运算:

在这里插入图片描述
//TODO:

七、朴素协同过滤算法的局限性

  1. 无时间概念:
    对用户行为的发送时间点,时间间隔等信息没有感知。如用户在短时间内多次浏览同一类物品,这其实是一个重要参考因素。

  2. 只考虑了直接相关性
    不论是基于物品还是用户的朴素协同过滤,都只是计算了 r e l ( u s e r i , i t e m j ) rel(user_i,item_j) rel(useri,itemj)之间的关系,并没有间接计算 r e l ( u s e r i , i t e m o t h e r ) rel(user_i,item_{other}) rel(useri,itemother)的关系,这也间接的加剧了物品之间的稀疏性。

  3. 没有引进权重的概念
    所有的用户都表现为同等权重,应当区分开来,毕竟有些用户的目的性更强,这类用户应当赋予更高的权重。

  4. 哈利波特效应
    由于爆品基本和所有物品有着联系,永远都会被优先推荐,这与推荐系统的长尾挖掘背道而驰。

那么如何优化朴素协同过滤算法呢?请听下回分解!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值