快速候选召回

协同过滤

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

核心假设: 用户的兴趣具有连贯性,喜欢某个物品的用户往往会对相似的物品感兴趣

物品相似度计算

\[ w_{ij} = \frac{C[i][j]}{\sqrt{|N(i)\cdot |N(j)|}} \] 其中 \(N(i)\)表示与物品,\(C[i][j]\)有交互的用户总数,是两个物品的共现次数(同时对两个物品有过行为的用户数)。分母对共现次数进行标准化,防止热门商品占据绝对优势。 基于用户-物品倒排表可以大幅提速:为每个用户维护一个物品交互列表,遍历时将列表中的物品两两配对,累加共现矩阵\(C[i][j]\),再除以 \(\sqrt{|N(i)\cdot |N(j)|}\)得到余弦相似度,只需计算真正有共同用户的物品对。 ### 处理评分数据的相似度计算 前面的余弦相似度适用于隐式反馈场景(如点击、浏览),当有显式评分数据(如5星评分)时,皮尔逊相关系数更符合 [ w_{ij} = ]

基于相似物品,可以预测用户对未接触物品的评分:

[ {u,j} = {r_j} + ] #### 参数说明 - ( S_j ):与物品 (j) 相似的物品集合
- ( U
{ij} ):同时评价过物品 (i) 和 (j) 的用户集合
- ( r_{ui} ):用户 (u) 对物品 (i) 的评分
- ( {r_i} ):物品 (i) 的平均评分

Swing算法

核心假设:如果多个用户在其他共同购买行为较少的情况下,同时购买了同一对物品,那么这对物品之间的关联性就更可信。

相比于ItemCF的优势

传统ItemCF在处理这类细粒度的商品关系时往往力不从心——它将所有用户-物品交互一视同仁,无论是用户深思熟虑的购买,还是偶然的误点击、好奇心驱动的浏览,都被赋予相同的权重。这种做法不仅难以区分真正的兴趣关联和随机噪声,更无法有效捕捉物品间的替代性与互补性关系。 ### swing具体内容 Swing 首先将用户与物品的交互数据转化为二部图:

  • 用户和物品分别作为两类节点
  • 发生过交互则添加一条连接边

设:

  • ( U_i ) 和 ( U_j ):分别表示与物品 ( i ) 和 ( j ) 有过交互的用户集合
  • ( I_u ):用户 ( u ) 交互过的所有物品集合

对于同时购买(或交互)过物品 ( i ) 和 ( j ) 的每一对用户 ( (u, v) ),如果他们之间的其他共同购买行为越少

[ |I_u I_v| ]

则说明他们共同选择这对物品的行为越具有特异性,应贡献更高的相似度得分

Suprise 算法

UserCF

类似ItemCF

矩阵低秩分解

FreeSVD

BiasSVD

对于这个的公式 \[ \hat r_{ui} = \mu + b_u + b_i + p_u^T q_i \] 里面的bias没有和pq相乘的原因 很有意思。

I2I召回

这个的理论基础来自于Word2Vec。