1. 基准

i2i召回只需要考虑两个点

  1. 如何表示一个商品item
  2. 相似度量函数是什么

1. 常规的Item-CF

  1. 所有点击的用户拼接成一个向量,以此来表示一个item。假如我们有100个用户,每个用户是否点击过这个商品可以编码为一个向量
user-itemu1u2u3u100
i110001
i210101
i300101
  1. 度量函数使用cosin函数,一个优点是分母部分可以抑制热度商品,缓解哈利波特问题。
    sim(I1,I2)=∑u∈I1∩I21NI1NI2=重合用户数点击I1用户数∗点击I2用户数sim(I_1,I_2)=\frac{\sum_{ u \in I_1 \cap I_2} 1}{\sqrt{N_{I_1}N_{I_2}}}=\frac{重合用户数}{点击I_1用户数*点击I_2用户数} sim(I1,I2)=NI1NI2uI1I21=I1I2

2. IUF(Inverse User Frequence)

  1. 可以继续做一点改进,如果一个用户越活跃,交互的商品也就会越多,这样的用户兴趣就非常的广泛,他们的权重就应该小一点,之前只要有两个用户重合,那么就+1,现在是,如果这个用户非常活跃,就很容易与其他用户重合,我们分数就加的小一点
    score=1log (1+Nu)score = \frac{1}{\text{log}\ (1+N_{u})}score=log (1+Nu)1
    其中NuN_uNu表示用户交互过的商品,交互的商品越多,这个用户的权重就会降低,新的度量函数为
    sim(I1,I2)=∑u∈I1∩I21log (1+Nu)NI1NI2sim(I_1,I_2)=\frac{\sum_{ u \in I_1 \cap I_2} \frac{1}{\text{log}\ (1+N_{u})}}{\sqrt{N_{I_1}N_{I_2}}}sim(I1,I2)=NI1NI2uI1I2log (1+Nu)1

3. Swing

  1. 反正就是好
    sim(i,j)=∑u∈Ui∩Uj∑v∈Ui∩Uj1α+∣Iu∩Iv∣sim(i,j)=\sum_{u \in U_i \cap U_j } \sum_{v \in U_i \cap U_j}\frac{1}{\alpha + |I_{u} \cap I_v|}sim(i,j)=uUiUjvUiUjα+IuIv1

看了好久这个式子,总算是明白了一点。首先就是Ui,UjU_i,U_jUi,Uj表示的是,商品i,ji,ji,j重合的用户集合,Iu,IvI_u,I_vIu,Iv表示的是用户u,vu,vu,v的交互商品集合。
a. 首先找到商品i,ji,ji,j重合的两个用户u,vu,vu,v
b. 然后得到用户u,vu,vu,v的交互过的商品结合Iu,IvI_u,I_vIu,Iv
c.最后计算交互的商品中重合的商品数,重合的越多说明这两个用户越相似,那么他们共同购买的商品i,ji,ji,j就很难说明相似度了。
例如有两个用户u,vu,vu,v,他们都喜欢看手机,电脑,女装和旅行箱,这两个用户非常的相似,他们购买的两个商品手机和电脑就很难说是相似的。
此时有一个用户www,他喜欢看手机,电脑,椅子,加湿器,恒温箱,可以发现用户www和用户u,vu,vu,v有很大的差别,但是他们都购买了两个商品,手机和电脑,说明即使差异很大的人也会同时交互这两个商品,因此这两个商品是非常相似的。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐