推荐系统协同过滤召回算法概述

协同召回算法

协同过滤召回算法是召回算法的一个早期的经典研究方向。主要是应用在推荐环节的早期阶段,大致可以分为基于用户、基于物品的,两者各有优劣。
UCF和ICF的优点是具有较好的可解释性,缺点是对于稀疏的交互矩阵,效果较差。无法挖掘用户和物品的深层关联。
Swing算法虽然挖掘了用户和物品的关联网络,但是仍然是浅层的分析。基于矩阵分解SVD的算法一定程度解决了这个问题,通过将整个矩阵分解为用户和物品各自的向量,不仅解决了挖掘深度的问题,还可以融入属性信息

下面两个算法最终的目的都是去给用户u推荐物品。通常的实现方式是预测用户u对物品i的评分,将给分高的物品排在前面。但是这样做有一些弊端,只能看到用户对物品的绝对喜好程度,物品之间的先后次序并没有考虑在内。因为推荐的往往是一系列物品,物品之间的次序也会影响到用户的选择。

在这里插入图片描述

UserCF

  1. 表示用户向量:用户评分的0-1向量
  2. 计算物品之间的相似性
  3. 找到与用户u的兴趣相近的其他用户
  4. 筛选出前TopN的用户
  5. 基于其他用户对物品i的评分,预测用户u对物品i的评分

预测公式1
r u i ^ = ∑ j = 1 N s i m u j ∗ ( r j i ) ∑ j = 1 N s i m u j \hat{{r_{ui}}} = \frac{\sum\limits_{j=1}^{N} sim_{uj} * (r_{ji} )}{\sum\limits_{j=1}^{N} sim_{uj}} rui^=j=1Nsimujj=1Nsimuj(rji)

预测公式2: 相比公式1,好处在于考虑到不同用户评分的差异,例如用户1认为4分为平均水平,用户2认为3分为平均水平。

r u i ^ = r u ‾ + ∑ j = 1 N s i m u j ∗ ( r j i − r j ‾ ) ∑ j = 1 N s i m u j \hat{{r_{ui}}} = \overline{r_{u}} + \frac{\sum\limits_{j=1}^{N} sim_{uj} * (r_{ji} - \overline{r_j})}{\sum\limits_{j=1}^{N} sim_{uj}} rui^=ru+j=1Nsimujj=1Nsimuj(rjirj)

优劣

优点:良好的可解释性;适合用户少、物品多的场景,例如新闻推荐。
缺点:热门物品具有很强的头部效应,与其他物品之间的相似度较大。越热门的物品也容易被推荐;物品的其他特征没有被使用

ItemCF

  1. 表示物品向量:物品评分的0-1向量
  2. 计算物品之间的相似性
  3. 找到与物品i的相似的其他物品
  4. 筛选出前TopN的物品
  5. 基于其他物品与物品i的相似性,预测用户u对物品i的评分

预测公式1
r u i ^ = r i ‾ + ∑ j = 1 N s i m j i ∗ ( r u j − r j ‾ ) ∑ j = 1 N s i m j i \hat{{r_{ui}}} = \overline{r_{i}} + \frac{\sum\limits_{j=1}^{N} sim_{ji} * (r_{uj} - \overline{r_j})}{\sum\limits_{j=1}^{N} sim_{ji}} rui^=ri+j=1Nsimjij=1Nsimji(rujrj)

优劣

优点:良好的可解释性;适合用户少、物品多的场景,例如新闻推荐。
缺点:对于用户的交互记录较少的场景,例如大宗商品,家电、房屋等。计算用户之间的相似度效果较差

UCF和ICF的一般流程

  1. 表示用户/物品向量
  2. 相似性计算
  3. 评分预测公式

Swing

矩阵分解(matrix factorization)

视角一 组合特征的处理

为了发掘复杂关系之间的关联,需要提高模型对高维组合特征的拟合能力。例如下图所示。用户对物品是否点击的反馈记录中,电影有两个特征,分别是语言和类型(这里我们忽略用户和物品ID)。但是仅仅依靠一阶特征很难深入挖掘用户的偏好。
在这里插入图片描述
在下图中,将特征按照各自的离散值两两组合,形成了二阶特征。

在这里插入图片描述
但是当引入ID类型的特征时,特别是在实际场景中,用户和物品的ID是千万级别的,学习的参数规模为 m × n m \times n m×n.不可能完全组合。这种情况下,可以将用户和物品分别用K维的低维向量表示。且K远小于用户和物品的个数。此时需要学习的参数规模变为 m × k + n × k m \times k + n \times k m×k+n×k。此时用户ID和物品ID的某个组合特征对应的系数就等于各自的embedding相乘。

视角二 分解合并

思想:先分解,再合并
将用户物品的评分矩阵分解为两个部分,用户矩阵 U U U和物品矩阵 V V V

预测值
r u i = ∑ k = 1 d U u k V i k r_ui = \sum\limits_{k=1}^{d}U_{uk}V_{ik} rui=k=1dUukVik

BiasSVD

预测值
r u i = μ + b u + b i + ∑ k = 1 d U u k V i k r_ui = \mu + b_u + b_i + \sum\limits_{k=1}^{d}U_{uk}V_{ik} rui=μ+bu+bi+k=1dUukVik
其中, μ \mu μ表示全局的平均评分, b u b_u bu b i b_i bi分别表示用户u的偏置和物品i的偏置

在这里插入图片描述

SVD++(MF-OPC)

传统的矩阵分解对于用户u对物品i的评分,认为只与用户u和物品i有关,即 P { r u i ∣ ( u , i ) } P\{r_{ui}|(u,i)\} P{rui(u,i)}
但是SVD++从两个不同角度考虑评分矩阵,既考虑用户对物品的具体评分、又把用户对哪些物品有过评分当作用户的一种虚拟属性。 P { r u i ∣ ( u , 1 ) ; ( u , 2 ) , . . , ( u , i ) , ( u , i + 1 ) } P\{r_{ui}|(u,1);(u,2),..,(u,i),(u,i+1)\} P{rui(u,1);(u,2),..,(u,i),(u,i+1)}
预测值
r u i = μ + b u + b i + ∑ k = 1 d U u k V i k + ∑ k = 1 d U u k − i ~ V i k r_ui = \mu + b_u + b_i + \sum\limits_{k=1}^{d}U_{uk}V_{ik} + \sum\limits_{k=1}^{d}\widetilde{U_{uk}^{-i}}V_{ik} rui=μ+bu+bi+k=1dUukVik+k=1dUuki Vik
∑ k = 1 d U u k − i ~ V i k \sum\limits_{k=1}^{d}\widetilde{U_{uk}^{-i}}V_{ik} k=1dUuki Vik是对单类反馈矩阵进行分解的结果,单类反馈矩阵指的是用户和物品是否交互的0-1矩阵。 所以SVD++也被归于MF-OPC(One class Preference Context)
其中, U u ~ \widetilde{{U_u}} Uu 表示用户u的一种上下文偏好
U u ~ = ∑ i ′ ∈ J u − { i } W i ′ ∣ J u − { i } ∣ \widetilde{{U_u}} = \frac{\sum\limits_{i' \in {J_u} - \{i\}}W_{i'}}{\sqrt{|J_u -\{i\}|}} Uu =Ju{i} iJu{i}Wi
可以理解为是对用户u交互过的物品(除带预测的物品i外)的潜在特征求平均得到结果.

MF-MPC(multiclass preference context)

结合多类偏好上下文的矩阵分解,该方法是在SVD++的基础上改进的。SVD++仅考虑到用户对不同物品的评分,但是没有区分评分值。所以这里为 P { r u i ∣ ( u , 1 , 3 ) ; ( u , 2 , 4 ) , . . , ( u , i ) , ( u , i + 1 , 3.5 ) } P\{r_{ui}|(u,1,3);(u,2,4),..,(u,i),(u,i+1,3.5)\} P{rui(u,1,3);(u,2,4),..,(u,i),(u,i+1,3.5)}
预测值
r u i = μ + b u + b i + ∑ k = 1 d U u k V i k + ∑ k = 1 d U u k M P C ~ V i k r_ui = \mu + b_u + b_i + \sum\limits_{k=1}^{d}U_{uk}V_{ik} + \sum\limits_{k=1}^{d}\widetilde{U_{uk}^{MPC}}V_{ik} rui=μ+bu+bi+k=1dUukVik+k=1dUukMPC Vik
其中, U u M P C ~ \widetilde{{U_u}^{MPC}} UuMPC 表示用户u的一种多类上下文偏好
U u M P C ~ = ∑ r ∈ M ∑ i ′ ∈ J u r − { i } M i ′ r ∣ J u r − { i } ∣ \widetilde{{U_u}^{MPC}} = \sum\limits_{r \in M}\frac{\sum\limits_{i' \in {J_u^r} - \{i\}}M_{i'}^{r}}{\sqrt{|J_u^{r} -\{i\}|}} UuMPC =rMJur{i} iJur{i}Mir
J u r J_u^{r} Jur是用户交互过的评分为r的数据集;M是评分的集合,{1,2,3,4,5}; M i ′ r M_{i'}^{r} Mir 是一种与类别(评分) r ∈ M r \in M rM相关的物品i’的潜在特征向量

求解

将其转换为一个最优化问题,加入正则化项后变为RSVD(regularized)
目标函数
min ⁡ U u , V i , b u , b i ∑ ( u , i ) ∈ R ( r u i − ( μ + b u + b i + p u T q i ) ) 2 + λ ( ∥ U u ∥ 2 + ∥ V i ∥ 2 + b u 2 + b i 2 ) \min_{U_u, V_i, b_u, b_i} \sum_{(u, i) \in R} (r_{ui} - (\mu + b_u + b_i + p_u^T q_i))^2 + \lambda ( \| U_u \|^2 + \| V_i \|^2 + b_u^2 + b_i^2 ) Uu,Vi,bu,bimin(u,i)R(rui(μ+bu+bi+puTqi))2+λ(Uu2+Vi2+bu2+bi2)

注意:

  1. 这里只对有评分记录的数据进行处理,对于缺失值不做处理。
  2. 用户和物品矩阵 U , V U,V U,V以及物品的潜在特征向量 W W W初始化为 ( r − 0.5 ) × 0.01 (r-0.5) \times 0.01 (r0.5)×0.01

参考文献

1.datawhale组队学习 https://datawhalechina.github.io/fun-rec/#/ch02/ch2.1/ch2.1.1/mf
2.《智能推荐技术》潘微科、林晶、明仲 著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值