基于协同过滤的 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}}}$$
下面公式中,$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 的相似性,考查都购买了物品 ???? 和 ???? 的用户 ???? 和 ????,如果这两个用户独特购买的物品越少,则物品 ???? 和 ???? 的相似性越高。极其状况下,两个用户都购买了某个物品,且两个用户所有购买的物品中,独特购买的物品只有这两个,阐明这两个用户趣味差别十分大,然而却同时购买了这两个物品,则阐明这两个物品相似性十分大!