基于协同过滤的i2i(item to item)算法在推荐系统中是最广泛使用的一种召回算法。通常作为启动阶段的base model作为后续算法迭代的基准,具有开发便捷,训练速度快等特点,并且一般效果都不会太差。
我们通常所说的i2i如非特别强调大多指CF系列的算法,CF算法在作为i2i召回使用时,通常不使用矩阵分解的思路,而是通过共现指标的统计量直接计算。这种计算方法通常有三种,下面逐一介绍。
item based CF
基于物品的协同过滤,指以item为中心,通过item和item之间有共同行为(一般指点击,购买等)的用户数量及这部分用户的行为统计量来计算item之间相似度的方法。可以认为是一种i2u2i的方法。有了item和item之间的相似度,通过一个用户的访问历史记录作为trigger,即可通过i2i召回新的item给源用户。
计算公式如下:
$$Sim(I_1,I_2)= \frac{\sum_{u \in I_1^u \cap I_2^u \frac {1}{\log{(1+N_u)}}}}{\sqrt{N_{I_1}N_{I_2}}}$$
$$Sim(I_1,I_2)= \frac{\sum_{u \in I_1^u \cap I_2^u \frac {w_{u_{i1}*w_{u_{i_2}}}}{\log{(1+N_u)}}}}{\sqrt{N_{I_1}N_{I_2}}}$$
上面公式中,$I_1和I_2$是任意两个item,其相似度由两个物品的统计量计算得出,其中$N_{I_i}$指物品$I_i$的总点击次数。分母部分的积起到归一化的作用,削弱热门物品的影响。分子部分是对这两个物品同时有行为的用户的点击次数的倒数和。
从这个公式中可以看出,共同访问两个物品的用户越多,相似度越大,且共同访问这两个item的用户本身的行为数量越少,即$N_u$越小,这个用户贡献的相似度越大。
user based CF
基于用户的CF算法和item based CF类似。只是变成以用户为中心,通过计算两个用户的共同访问的item的统计指标来计算两个用户之间的相似度。本质上计算的是两个用户的相似度,不能直接用来推荐item,但通过相似用户召回,再把召回的相似用户访问过的item推荐给源用户,即可实现u2i推荐。
user based cf的公式和item based cf基本一样,只是把分子中的物品的被访问次数换成用户的访问次数,分子换为两个用户共同访问过的物品的统计量即可。
swing
swing算法计算的也是i2i的相似度,理论上也可以计算u2u,但一般不这么干。
Swing本质上是基于图结构的一种CF,用户和物品的二部图中会存在很多这种(𝑢1,𝑢2,𝑖1)关系, 即用户 1 和 2 都购买过物品 𝑖,这实际上是 3 阶交互关系。传统的启发式近邻方法只关注用户和物品之间的二阶交互关系。Swing 会关注这种 3 阶关系。这种方法的一个直觉来源于,如果多个 user 在点击了 𝑖1 的同时,都只共同点了某一个其他的 𝑖2,那么 𝑖1 和 𝑖2 一定是强关联的,这种未知的强关联关系相当于是通过用户来传递的。另一方面,如果两个 user pair 对之间构成的 swing 结构越多,则每个结构越弱,在这个 pair 对上每个节点分到的权重越低。公式如下:
$$Sim(i,j) = \sum\limits_{u \in (U_i \cap U_j)}\sum\limits_{v \in (U_i \cap U_j)} \frac{1}{\alpha+|I_u\cap I_v|}$$
为了衡量物品 i 和 j 的相似性,考察都购买了物品 𝑖 和 𝑗 的用户 𝑢 和 𝑣, 如果这两个用户共同购买的物品越少,则物品 𝑖 和 𝑗 的相似性越高。极端情况下,两个用户都购买了某个物品,且两个用户所有购买的物品中,共同购买的物品只有这两个,说明这两个用户兴趣差异非常大,然而却同时购买了这两个物品,则说明这两个物品相似性非常大!
$$ y_{t+1}=wDist_1+(1-w)Dist_2\\ W_{t+1} = 1-Norm(Dist_3)\\ Loss= \sum\limits_{1<i<T}\sum\limits_{0<j<K}W_{i_j}[y_i^++\gamma-y_{i_j}^-] $$
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。