推荐系统中的召回阶段

文章目录

  • 什么是召回
  • CF, 协同过滤
    • memory-based
      • user-based
      • item-based
        • Jaccard Coefficient
    • model-based
      • Matrix Factorization
      • 神经网络类
    • 小结
  • content-based
  • 参考

什么是召回

工业界的推荐系统, 数据量在 ∣ U ∣ = 1 0 8 , ∣ I ∣ = 1 0 7 |U|=10^8, |I|=10^7 U=108,I=107 这个级别. 召回又称 recall 或 match, 指根据用户兴趣找出与之相应的一批内容, 靠事先建立的索引, 找出 ∣ R ∣ = 1 0 4 |R|=10^4 R=104 这样一个候选集.

CTR预估等推荐相关任务, 要区分 {实时服务, 离线计算} 这些不同的场合. 前者是工业界中的实时服务, 如淘宝的推荐系统; 后者是竞赛与离线数据集, 几天内产出一份排序结果即可.

CF, 协同过滤

collaborative filtering.
用户与被推荐物品的 user-item interaction 行为日志分两种: 评分矩阵曝光点击.
后者可以用图 G = ( V , E ) G=(V, E) G=(V,E) 表示, 推荐系统的任务其实就是预测图中尚未存在的边, 叫link prediction

memory-based

user-based

基本思想:先算用户相似度,找到与用户u最邻近的n个用户。然后根据这些用户对物品p的评分,预测出u对p的评分。

用户相似度,即历史评分行为相似。这也可以说明爱好相似。
使用Pearson相关系数(可译为培生,皮尔逊等),计算a,b两个用户的相似度公式
(1.1-1) s i m ( a , b ) = ∑ p ∈ P ( r a , p − r a ˉ ) ( r b , p − r b ˉ ) ∑ p ∈ P ( r a , p − r a ˉ ) 2 ∑ p ∈ P ( r b , p − r b ˉ ) 2 sim(a,b)= \frac {\sum_{p\in P}(r_{a,p}-\bar{r_a})(r_{b,p}-\bar{r_b})} {\sqrt{\sum_{p\in P}(r_{a,p}-\bar{r_a})^2}\sqrt{\sum_{p\in P}(r_{b,p}-\bar{r_b})^2}}\tag{1.1-1} sim(a,b)=pP(ra,praˉ)2 pP(rb,prbˉ)2 pP(ra,praˉ)(rb,prbˉ)(1.1-1)
P为物品集合。 r u ˉ \bar{r_u} ruˉ为用户u的平均评分。
Person相关系数的值从-1(强负相关)到1(强正相关)。
Person相关系数的计算考虑到了不同用户评分标准不尽相同这一情况——有些用户习惯性给高分,有些习惯性差评。
式1.1-2表示用户a对物品p的评分预测值
(1.1-2) p r e d ( a , p ) = r a ˉ + ∑ b ∈ N s i m ( a , b ) ∗ ( r b , p − r b ˉ ) ∑ b ∈ N s i m ( a , b ) pred(a,p)=\bar{r_a}+ \frac {\sum_{b\in N}sim(a,b)*(r_{b,p}-\bar{r_b})} {\sum_{b\in N}sim(a,b)} \tag{1.1-2} pred(a,p)=raˉ+bNsim(a,b)bNsim(a,b)(rb,prbˉ)(1.1-2)

N为与用户a打分行为最相似的n个用户的集合。大多数情况下,n取值为20~50比较合理。

item-based

简称i2i, 目的是找 item 的k近邻.

Jaccard Coefficient

基本思想:在购买了p1物品的用户集合U(p1)中,很多人U(p1,p2)也买了p2,那么p1,p2就有较强的相关关系, 其他p1的购买者 U ( p 1 ) − U ( p 2 ) U(p1)-U(p2) U(p1)U(p2)这部分人也是p2的潜在购买者。

物品a,b的相似度计算:
(2.1) s i m ( a , b ) = ∣ U ( a ) ∩ U ( b ) ∣ ∣ U ( a ) ∣ ∪ ∣ U ( b ) ∣ sim(a,b)=\frac {|U(a)\cap U(b)|} {|U(a)| \cup |U(b)|} \tag{2.1} sim(a,b)=U(a)U(b)U(a)U(b)(2.1)
where U(p)表示购买了物品p的用户集合。
这个公式就是 Jaccard Coefficient.
因此协同过滤中的物品间相似并不一定是同类目的物品相似(如小米8与小米8 SE), 还可以是跨类目的物品相关(比如手机与手机壳).
可以得到与物品p最相似的n个邻近物品集合S(p,n)为:
(2.2) S ( p , n ) = { x ∣ s i m ( p , x ) t o p   n , x ∈ P } S(p,n)= \{ x| \underset {top \, n}{sim(p,x)},x \in P \} \tag{2.2} S(p,n)={xtopnsim(p,x),xP}(2.2)
P为物品全集。

model-based

与 memory-based 相对的是 model-based. 前者只用id之间的共现等做简单统计类运算. 后者会借助model计算.
如 MF, FM, FFM 等.

Matrix Factorization

我们假设用户喜欢某个商品是因为用户的特征偏好与该商品的特征能够吻合起来.
那这些特征是什么呢? 以音乐推荐为例, 见图1
推荐系统中的召回阶段_第1张图片
figure 1 音乐推荐中, latent space 的一种假设

这些特征我们不必人为定义, 可以引入latent space的假定, 有 k k k个潜在的特征(latent factor).
用户对每个特征都有一个偏好程度, 用矩阵 Q Q Q表示, 每个物品都有一个特征的吻合程度, 用 P P P表示,所以我们的任务就是求出这两个矩阵, 然后对 R R R进行补全, 找出得分高的未见商品推荐给用户.
推荐系统中的召回阶段_第2张图片
figure 矩阵分解示意, 网络盗图,符号跟上面公式不一样

R ^ = Q W T s . t . Q ∈ R ∣ U ∣ × k , W ∈ R ∣ P ∣ × k \hat R=QW^T \\ s.t. Q\in \mathbb R^{|U|\times k}, W\in \mathbb R^{|P|\times k} R^=QWTs.t.QRU×k,WRP×k
接下来用交替最小二乘求解.
(1) min ⁡ Q , P ∑ u , i ( R u , i − Q u P i T ) 2 + λ ∣ ∣ Q u ∣ ∣ 2 + λ ∣ ∣ P i ∣ ∣ 2 \min _{Q,P}\sum_{u,i}(R_{u,i}-Q_uP_i^T)^2+\lambda ||Q_u||^2+\lambda||P_i||^2 \tag 1 Q,Pminu,i(Ru,iQuPiT)2+λQu2+λPi2(1)
式1 为目标函数. 求解方法通常为 alternating least squares (ALS), 交替最小二乘法.

神经网络类

  • item2vec, 类word2vec
    item类比为word, 一个用户的点击序列类比为doc, 就可以借用word2vec的套路得到item的向量表达. 进而基于向量近邻求得 item->item_list 的相似列表.
  • node2vec
    也是一种 embedding 方法.
    用户, item, 和点击关系构成了二部图. 通过随机游走(random walk) 得到item序列. 进而算隐式向量.

小结

对于商品推荐来说,Item-based Collaborative Filtering 由于其高效的性能和在大规模数据集上不错的效果, 在工业界得到了广泛的应用(eTrec, WBN-I2I等)。但传统的召回方式也有其局限性,主要包括:

  1. 基于用户行为的推荐和基于内容的推荐都只用到了用户的行为,用户和商品的属性中的局部信息,没有将这些信息统一的利用起来。
  2. 在推荐用户行为较少的商品(e.g. 新商品)或为行为较少的用户(e.g. 新用户)推荐时会遇到冷启动的问题。
  3. 只能够学习到简单的共现关系,不能够深层次的挖掘商品或用户之间的关联,丢失了很多内在的关联信息。
  4. 迭代周期很长(一般需要7-8个小时),时效性较差,针对很多时效性要求较高的情景实时性不够。

content-based

不使用交互日志数据. 靠特征来找相似.
如一个item有很多属性 {叶子类目, 一级类目, 卖家, 品牌} 等. 用户所点击item的属性当作用户兴趣, 再找出具有同样属性的其他items.

参考

  1. 网易云音乐的歌单推荐算法是怎样的? - nick lee的回答 - 知乎
  2. cnblog,初识交替最小二乘ALS
  3. 一些ctr预估方法, 知乎, Models List

你可能感兴趣的:(推荐系统)