工业界的推荐系统, 数据量在 ∣ 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预估等推荐相关任务, 要区分 {实时服务, 离线计算} 这些不同的场合. 前者是工业界中的实时服务, 如淘宝的推荐系统; 后者是竞赛与离线数据集, 几天内产出一份排序结果即可.
collaborative filtering.
用户与被推荐物品的 user-item interaction 行为日志分两种: 评分矩阵
与曝光点击
.
后者可以用图 G = ( V , E ) G=(V, E) G=(V,E) 表示, 推荐系统的任务其实就是预测图中尚未存在的边, 叫link prediction。
基本思想:先算用户相似度,找到与用户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)=∑p∈P(ra,p−raˉ)2∑p∈P(rb,p−rbˉ)2∑p∈P(ra,p−raˉ)(rb,p−rbˉ)(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ˉ+∑b∈Nsim(a,b)∑b∈Nsim(a,b)∗(rb,p−rbˉ)(1.1-2)
N为与用户a打分行为最相似的n个用户的集合。大多数情况下,n取值为20~50比较合理。
简称i2i, 目的是找 item 的k近邻.
基本思想:在购买了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)={x∣topnsim(p,x),x∈P}(2.2)
P为物品全集。
与 memory-based 相对的是 model-based. 前者只用id之间的共现等做简单统计类运算. 后者会借助model计算.
如 MF, FM, FFM 等.
我们假设用户喜欢某个商品是因为用户的特征偏好与该商品的特征能够吻合起来.
那这些特征是什么呢? 以音乐推荐为例, 见图1
figure 1 音乐推荐中, latent space 的一种假设
这些特征我们不必人为定义, 可以引入latent space
的假定, 有 k k k个潜在的特征(latent factor).
用户对每个特征都有一个偏好程度, 用矩阵 Q Q Q表示, 每个物品都有一个特征的吻合程度, 用 P P P表示,所以我们的任务就是求出这两个矩阵, 然后对 R R R进行补全, 找出得分高的未见商品推荐给用户.
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.Q∈R∣U∣×k,W∈R∣P∣×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,i−QuPiT)2+λ∣∣Qu∣∣2+λ∣∣Pi∣∣2(1)
式1 为目标函数. 求解方法通常为 alternating least squares (ALS), 交替最小二乘法.
对于商品推荐来说,Item-based Collaborative Filtering 由于其高效的性能和在大规模数据集上不错的效果, 在工业界得到了广泛的应用(eTrec, WBN-I2I等)。但传统的召回方式也有其局限性,主要包括:
不使用交互日志数据. 靠特征来找相似.
如一个item有很多属性 {叶子类目, 一级类目, 卖家, 品牌} 等. 用户所点击item的属性当作用户兴趣, 再找出具有同样属性的其他items.