本文以问题为导向介绍推荐算法。
问题定义:假设 U = { u 1 , u 2 , . . . , u n } U=\{u_1, u_2, ..., u_n\} U={u1,u2,...,un}表示用户集合, P = { p 1 , p 2 , . . . , p m } P=\{p_1, p_2, ..., p_m\} P={p1,p2,...,pm}表示物品集合, S ∈ R n × m S\in R^{n\times m} S∈Rn×m表示用户对物品的评分组成的矩阵,例如 s i j s_{ij} sij表示用户 u i u_i ui对物品 p j p_j pj的评分,如果用户 u i u_i ui没有对物品 p j p_j pj没有评过分数,则对应的矩阵项为空。我们的目标是为用户生成个性化的TopN推荐列表。
按照基于用户的协同过滤算法,我们需要找到目标用户的相似用户,首先可以用用户各自的评分组成的向量表示用户,比如要计算两个用户的 u a , u b u_a, u_b ua,ub的相似度,则 u a = [ s a 1 , s a 2 , . . . , s a m ] , u b = [ s b 1 , s b 2 , . . . , s b m ] u_a=[s_{a1},s_{a2},...,s_{am}],u_b=[s_{b1},s_{b2},...,s_{bm}] ua=[sa1,sa2,...,sam],ub=[sb1,sb2,...,sbm],然后计算用户向量间的相似度。向量相似度的计算方式有很多,比如欧式距离、协方差、余弦相似、Pearson相关系数、Jaccard系数等。
d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x,y)=\sqrt{\sum_{i=1}^n(x_i-y_i)^2} d(x,y)=i=1∑n(xi−yi)2
欧式距离的取值范围是0到正无穷,取值越小表示相似度越高,取值为零表示两个向量完全相等。
协方差的计算公式为:
C o n ( x , y ) = E [ ( x − E [ x ] ) ( y − E [ y ] ) ] = E [ x y ] − E [ x ] E [ y ] Con(x,y)=E[(x-E[x])(y-E[y])]=E[xy]-E[x]E[y] Con(x,y)=E[(x−E[x])(y−E[y])]=E[xy]−E[x]E[y]
Pearson相似度的计算公式为:
ρ ( x , y ) = C o n ( x , y ) σ x σ y = E [ x − E [ x ] ] ) ( y − E [ y ] σ x σ y \rho(x,y)=\frac{Con(x,y)}{\sigma_x\sigma_y}=\frac{E[x-E[x]])(y-E[y]}{\sigma_x\sigma_y} ρ(x,y)=σxσyCon(x,y)=σxσyE[x−E[x]])(y−E[y]
其中 σ x , σ y \sigma_x,\sigma_y σx,σy分别表示x,y的标准差。
c o s ( x , y ) = ∑ x i y i ∣ x ∣ ∣ y ∣ = ∑ x i y i ∑ i x i 2 ∑ i y i 2 cos(x,y)=\frac{\sum x_iy_i}{|x||y|}=\frac{\sum x_iy_i}{\sqrt{\sum_ix_i^2}\sqrt{\sum_iy_i^2}} cos(x,y)=∣x∣∣y∣∑xiyi=∑ixi2∑iyi2∑xiyi
那么如何选择相似度的计算方法呢?这些相似度计算方法之间满足下面的关系
定理一:数据标准化之后(均值为0,标准差为1),Pearson相关系数等于余弦相似度
证明如下:
ρ ( x , y ) = C o n ( x , y ) σ x σ y \rho(x,y)=\frac{Con(x,y)}{\sigma_x\sigma_y} ρ(x,y)=σxσyCon(x,y)
= E [ ( x − E [ x ] ] ) ( y − E ( y ) ) σ x σ y =\frac{E[(x-E[x]])(y-E(y))}{\sigma_x\sigma_y} =σxσyE[(x−E[x]])(y−E(y))
E [ x ] = 0 , E [ y ] = 0 , σ x = 1 , σ y = 1 E[x]=0,E[y]=0,\sigma_x=1,\sigma_y=1 E[x]=0,E[y]=0,σx=1,σy=1带入以上公式得到;
ρ ( x , y ) = E ( x y ) = ∑ i x i y i N \rho(x,y)=E(xy)=\frac{\sum_i x_iy_i}{N} ρ(x,y)=E(xy)=N∑ixiyi
又因为:
c o s ( x , y ) = ∑ i x i y i ∑ i x i 2 ∑ i y i 2 cos(x,y)=\frac{\sum_i x_iy_i}{\sqrt{\sum_i x_i^2}\sqrt{\sum_i y_i^2}} cos(x,y)=∑ixi2∑iyi2∑ixiyi
= ∑ i x i y i N ∗ ∑ i x i 2 / N ∑ i y i 2 / N =\frac{\sum_i x_i y_i}{N * \sqrt{\sum_i x_i^2/N}\sqrt{\sum_i y_i^2/N}} =N∗∑ixi2/N∑iyi2/N∑ixiyi
= ∑ i x i y i N =\frac{\sum_i x_i y_i}{N} =N∑ixiyi
= ρ ( x , y ) =\rho(x,y) =ρ(x,y)
定理二:数据标准化之后(均值为0,标准差为1),Pearson相关系数有欧式距离的平方满足线性关系
证明如下:
d ( x , y ) 2 = ∑ i n ( x i − y i ) 2 d(x,y)^2=\sum_i^n(x_i-y_i)^2 d(x,y)2=i∑n(xi−yi)2
= ∑ i n ( x i 2 − 2 x i y i + y i 2 ) =\sum_i^n(x_i^2-2x_iy_i+y_i^2) =i∑n(xi2−2xiyi+yi2)
= ∑ i n x i 2 + ∑ i n y i 2 − 2 ∑ i n x i y i =\sum_i^n x_i^2 + \sum_i^n y_i^2 - 2\sum_i^n x_iy_i =i∑nxi2+i∑nyi2−2i∑nxiyi
= n ∑ i n x i 2 n + n ∑ i n y i 2 n − 2 ∑ i n x i y i =n\sum_i^n \frac{x_i^2}{n} + n\sum_i^n \frac{y_i^2}{n} - 2\sum_i^n x_iy_i =ni∑nnxi2+ni∑nnyi2−2i∑nxiyi
= n σ x 2 + n σ y 2 − 2 ∑ i n x i y i =n\sigma_x^2 + n\sigma_y^2 - 2\sum_i^n x_iy_i =nσx2+nσy2−2i∑nxiyi
= n + n − 2 n ρ ( x , y ) =n + n - 2 n \rho(x,y) =n+n−2nρ(x,y)
= 2 n ( 1 − ρ ( x , y ) ) =2n(1-\rho(x,y)) =2n(1−ρ(x,y))
定理三:数据标准化之后(均值为0,标准差为1),预选相似度与欧式距离平方满足线性关系
回到推荐算法,我们以Pearson相似度计算为例,用户 u a , u b u_a,u_b ua,ub之间的相似度计算公式为;
s i m ( a , b ) = ∑ i ∈ P ( a , b ) ( s a i − μ a ) ( s b i − μ b ) ∑ i ∈ P ( a , b ) ( s a i − μ a ) 2 ∑ i ∈ P ( a , b ) ( s b i − μ b ) 2 sim(a,b)=\frac{\sum_{i\in P(a,b)}(s_{ai}-\mu_a)(s_{bi}-\mu_b)}{\sqrt{\sum_{i\in P(a,b)}(s_{ai}-\mu_a)^2}\sqrt{\sum_{i\in P(a,b)}(s_{bi}-\mu_b)^2}} sim(a,b)=∑i∈P(a,b)(sai−μa)2∑i∈P(a,b)(sbi−μb)2∑i∈P(a,b)(sai−μa)(sbi−μb)
其中 P ( a , b ) P(a,b) P(a,b)表示a,b用户共同评过分的物品集合, μ a , μ b \mu_a,\mu_b μa,μb分为表示用户a,b评分的均值。
有了用户相似度计算方法之后,就可以利用相似用户的评分,预测目标用户的评分,比如a用户对物品p的评分可以通过下面公式预测:
P r e d ( a , p ) = μ a + ∑ b ∈ U ( a , K ) s i m ( a , b ) ( s b p − μ b ) ∑ b ∈ U ( a , K ) s i m ( a , b ) Pred(a, p)=\mu_a + \frac{\sum_{b\in U(a, K)}sim(a, b)(s_{bp}-\mu_b)}{\sum_{b\in U(a, K)}sim(a, b)} Pred(a,p)=μa+∑b∈U(a,K)sim(a,b)∑b∈U(a,K)sim(a,b)(sbp−μb)
其中 U ( a , K ) U(a, K) U(a,K)表示与用户相似度最高的TopK个用户组成的集合。
以上是最基本的基于相似用户的推荐算法,实践中可以有几个方向的改进:
改进算法就不在这里展开了,可以通过设计一些加权算法赋予不同的物品以不同的权重来改进基本版本的算法。
类似的,有了评分矩阵后,物品a,b的评分表示为 p a = [ s 1 a , s 2 a , . . . , s n a ] , p b = [ s 1 b , s 2 b , . . . , s n b ] p_a=[s_{1a},s_{2a},...,s_{na}], p_b=[s_{1b},s_{2b},...,s_{nb}] pa=[s1a,s2a,...,sna],pb=[s1b,s2b,...,snb]。我们可以直接通过相似度计算方法计算两个物品的相似度,比如余弦相似度为:
s i m ( a , b ) = ∑ i ∈ U ( a , b ) s i a s i b ∑ i ∈ U ( a , b ) s i a 2 ∑ i ∈ U ( a , b ) s i b 2 sim(a,b)=\frac{\sum_{i\in U(a, b)}s_{ia}s_{ib}}{\sqrt{\sum_{i\in U(a,b)}s_{ia}^2}\sqrt{\sum_{i\in U(a, b)}s_{ib}^2}} sim(a,b)=∑i∈U(a,b)sia2∑i∈U(a,b)sib2∑i∈U(a,b)siasib
其中 U ( a , b ) U(a, b) U(a,b)表示对物品a,b都评过分的用户的集合。
有了物品的相似度后,可以预测某个用户对某个物品的评分值:
P r e d ( u , p ) = ∑ i ∈ P ( u , p ) s i m ( i , p ) s u i s i m ( i , p ) Pred(u, p)=\frac{\sum_{i\in P(u, p)} sim(i, p)s_{ui}}{sim(i,p)} Pred(u,p)=sim(i,p)∑i∈P(u,p)sim(i,p)sui
其中 P ( u , p ) P(u,p) P(u,p)表示用户u评过分的与物品p相似的物品集合。
以上的相似度计算方法,在实践中与几个方向的改进:
奇异值分解的原理是将原始的评分矩阵分解为3个矩阵乘积的形式:
S = U Σ V T S=U\Sigma V^T S=UΣVT
其中 U , V U,V U,V称为左右奇异向量, Σ \Sigma Σ对角线墒的值称为奇异值。
分解矩阵之后,如何对目标用户进行推荐呢?
拿到目标用户的评分向量 u v u_v uv,首先计算目标用户在低位空间的位置:
u v ′ = u v U Σ − 1 u_v' = u_v U\Sigma^{-1} uv′=uvUΣ−1
有了目标用户子低维空间的位置,可以有不同的策略为她推荐物品,比如可以在低维空间寻找相似用户,用相似用户的物品评分预测目标用户的物品评分。
对以上的基本算法可以有几个方向的改进:
首先基础的LFM通过下面的公式计算用户对物品的评分:
s u i = p u q i T = ∑ k = 1 K p u , k q i , k s_{ui}=p_uq_i^T=\sum_{k=1}^Kp_{u,k}q_{i,k} sui=puqiT=k=1∑Kpu,kqi,k
其中 p u , k , q i , k p_{u,k},q_{i,k} pu,k,qi,k称为模型的参数。那么如何得到模型的参数呢?可以通过最小化下面的损失函数来计算模型的参数:
C = ∑ ( s u i − s ^ u i ) 2 C=\sum (s_{ui}-\widehat{s}_{ui})^2 C=∑(sui−s ui)2
一般为了防止过拟合,我们会在损失函数上加上正则化:
C = ∑ ( ( s u i − s ^ u i ) 2 + λ ∣ p u ∣ 2 + λ ∣ q i ∣ 2 ) C=\sum ((s_{ui}-\widehat{s}_{ui})^2+\lambda |p_u|^2 + \lambda |q_i|^2) C=∑((sui−s ui)2+λ∣pu∣2+λ∣qi∣2)
关于机器学习的内容我们在其他文章里有详细的介绍,这里就不展开了。
我们来对基础的LFM做一些改进:
s u i = p u q i T + b u + b i + μ s_{ui}=p_uq_i^T + b_u + b_i + \mu sui=puqiT+bu+bi+μ
其中 b u , b i , μ b_u, b_i, \mu bu,bi,μ分别表示用户评分的偏置,物品评分的偏执,全局平均分。
如此则损失函数变成:
C = ∑ ( ( p u q i T + b u + b i + μ − s ^ u i ) 2 + λ ( ∣ p u ∣ 2 + ∣ q i ∣ 2 + ∣ b u ∣ 2 + ∣ b i ∣ 2 ) ) C=\sum((p_uq_i^T + b_u + b_i + \mu - \widehat{s}_{ui})^2 + \lambda(|p_u|^2 + |q_i|^2 + |b_u|^2 + |b_i|^2)) C=∑((puqiT+bu+bi+μ−s ui)2+λ(∣pu∣2+∣qi∣2+∣bu∣2+∣bi∣2))
s u i = ( p u + ∑ a u ) q i T + b u + b i + μ s_{ui}=(p_u+\sum a_u)q_i^T + b_u + b_i + \mu sui=(pu+∑au)qiT+bu+bi+μ
s u i = ( p u + ∑ a u + ∣ N ( u ) − 0.5 ∣ ∑ k ∈ N ( u ) y k ) q i T + b u + b i + μ s_{ui}=(p_u + \sum a_u + |N(u)^{-0.5}|\sum_{k\in N(u)} y_k)q_i^T + b_u + b_i + \mu sui=(pu+∑au+∣N(u)−0.5∣k∈N(u)∑yk)qiT+bu+bi+μ
有了这些隐因子之后,如何对目标用户进行推荐呢?很简单,有了隐因子之后,我们可以直接估算用户对某个物品的评分了,按评分的高低生成TopN推荐列表。
问题定义:假设 U = { u 1 , u 2 , . . . , u n } U=\{u_1, u_2, ..., u_n\} U={u1,u2,...,un}表示用户的集合, P = { p 1 , p 2 , . . . , p m } P=\{p_1, p_2, ..., p_m\} P={p1,p2,...,pm}表示物品的集合, P ( u i ) , u i ∈ U P(u_i),u_i\in U P(ui),ui∈U表示用户i的所以有正反馈的物品组成的集合。这里的正反馈可以是隐式反馈。目标是为用户生成TopN推荐列表。
Jaccard相似度计算:
s i m ( u , v ) = J ( u , v ) = ∣ P ( u u ) ∩ P ( u v ) ∣ ∣ P ( u u ) ∪ P ( u v ) ∣ sim(u, v) = J(u, v)=\frac{|P(u_u)\cap P(u_v)|}{|P(u_u)\cup P(u_v)|} sim(u,v)=J(u,v)=∣P(uu)∪P(uv)∣∣P(uu)∩P(uv)∣
余弦相似度计算:
s i m ( u , v ) = C o s ( u , v ) = ∣ P ( u u ) ∩ P ( u v ) ∣ ∣ P ( u u ) ∣ ∣ P ( u v ) ∣ sim(u, v) = Cos(u, v)=\frac{|P(u_u)\cap P(u_v)|}{\sqrt{|P(u_u)|}\sqrt{|P(u_v)|}} sim(u,v)=Cos(u,v)=∣P(uu)∣∣P(uv)∣∣P(uu)∩P(uv)∣
有了相似用户之后,就可以预测目标用户对目标物品的兴趣程度:
P r e d ( u , p ) = ∑ v ∈ U ( u , K ) ∩ U ( p ) s i m ( u , v ) r v p ∑ v ∈ U ( u , K ) ∩ U ( p ) s i m ( u , v ) Pred(u, p) = \frac{\sum_{v\in U(u, K)\cap U(p)}sim(u,v)r_{vp}}{\sum_{v\in U(u, K)\cap U(p)}sim(u, v)} Pred(u,p)=∑v∈U(u,K)∩U(p)sim(u,v)∑v∈U(u,K)∩U(p)sim(u,v)rvp
其中 U ( u , k ) U(u, k) U(u,k)表示与用户u最相似的K个用户组成的集合, U ( p ) U(p) U(p)表示对物品p有个正反馈的用户集合。
我们对以上的基本算法做一下改进:
所以我们改进用户相似度的计算方法:
s i m ( u , v ) = I m p r o v e d C o s ( u , v ) sim(u,v) = ImprovedCos(u,v) sim(u,v)=ImprovedCos(u,v)
= ∑ p ∈ P ( u u , u v ) 1 l o g ( 1 + ∣ U ( p ) ∣ ) ∣ P ( u u ) ∣ ∣ P ( u v ) ∣ =\frac{\sum_{p\in P(u_u, u_v)}\frac{1}{log(1 + |U(p)|)}}{\sqrt{|P(u_u)|}\sqrt{|P(u_v)|}} =∣P(uu)∣∣P(uv)∣∑p∈P(uu,uv)log(1+∣U(p)∣)1
其中 U ( p ) U(p) U(p)表示对物品p有过正反馈的用户集合。
物品的余弦相似度计算法公式为:
s i m ( i , j ) = ∣ U ( i ) ∩ U ( j ) ∣ ∣ U ( i ) ∣ ∣ U ( j ) ∣ sim(i,j) = \frac{|U(i)\cap U(j)|}{\sqrt{|U(i)|}\sqrt{|U(j)|}} sim(i,j)=∣U(i)∣∣U(j)∣∣U(i)∩U(j)∣
有了物品相似度之后可以预测用户对物品的兴趣程度:
P r e d ( u , p ) = ∑ i ∈ P ( p , K ) ∩ P ( u ) s i m ( p , i ) r u i ∑ i ∈ P ( p , K ) ∩ P ( u ) s i m ( p , i ) Pred(u, p)=\frac{\sum_{i\in P(p, K)\cap P(u)}sim(p, i)r_{ui}}{\sum_{i\in P(p, K)\cap P(u)}sim(p, i)} Pred(u,p)=∑i∈P(p,K)∩P(u)sim(p,i)∑i∈P(p,K)∩P(u)sim(p,i)rui
其中 P ( p , K ) P(p, K) P(p,K)表示物品p最相似的K个物品的集合, P ( u ) P(u) P(u)表示用户u正反馈过的物品集合。
下面我们对上面的基本算法做个改进:
改进后的相似度计算方式为:
s i m ( i , j ) = I m p r o v e d C o s ( i , j ) = ∑ u ∈ U ( i ) ∩ U ( j ) 1 l o g ( 1 + ∣ P ( u ) ∣ ) ∣ U ( i ) ∣ ∣ U ( j ) ∣ sim(i,j) = ImprovedCos(i,j)=\frac{\sum_{u\in U(i)\cap U(j)}\frac{1}{log(1 + |P(u)|)}}{\sqrt{|U(i)|}\sqrt{|U(j)|}} sim(i,j)=ImprovedCos(i,j)=∣U(i)∣∣U(j)∣∑u∈U(i)∩U(j)log(1+∣P(u)∣)1
LFM模型在评分预测类的任务中表现很好,同样在行为预测类的任务中也可以使用:
s u i = ( p u + ∑ a u + ∣ N ( u ) − 0.5 ∣ ∑ k ∈ N ( u ) y k ) q i T + b u + b i + μ s_{ui}=(p_u + \sum a_u + |N(u)^{-0.5}|\sum_{k\in N(u)} y_k)q_i^T + b_u + b_i + \mu sui=(pu+∑au+∣N(u)−0.5∣k∈N(u)∑yk)qiT+bu+bi+μ
正样本总取 s u i = 1 s_{ui} = 1 sui=1,负样本则取 s u i = 0 s_{ui}=0 sui=0. 在这类任务中,训练数据只有正样本,而没有负样本。所以首先需要解决的问题是如何为用户生成负样本数据。
负样本的采样策略可以是简单的,随机的从用户没有过行为的数据中选取。但是也有一些改进的方法,比如偏重热门物品,因为热门的物品用户大概率看到过,但是没有正反馈,这表示是一个负样本。
基于图的推荐算法中,我们首先需要将用户的行为数据表示成图的形式。
定义:我们将用户的行为表示为图 G = ( V u , V I , E ) G=(V_u, V_I, E) G=(Vu,VI,E),其中 V u V_u Vu表示用户顶点集合,每一个顶点表示一个用户, V I V_I VI表示物品顶点集合,每一个顶点表示一个物品。用户的历史行为可以表示为[用户,物品]二元组的形式,对于每一个这样的二元组,图G中都存在一条连接对应用户和物品的边,构成集合 E E E.
例如有用户 u 1 , u 2 , u 3 , u 4 u_1, u_2, u_3, u_4 u1,u2,u3,u4,分别有各自的历史行为,他们的历史行为表示为图的形式如下:
用户的行为表示为图的形式之后,推荐过程就是在图中寻找与目标用户顶点具有相关性的物品顶点。那么首先需要解决的是如何衡量图中顶点间的相关性。
实践中研究人员设计了很多计算图中顶点相关性的算法。这里介绍一种基于随机游走的PersonalRank算法。对于每一个目标用户 v u v_u vu,我们通过下面的公式计算顶点的权重:
R a n k ( v ) = α ∑ v ′ ∈ i n ( v ) R a n k ( v ′ ) ∣ o u t ( v ) ∣ i f ( v ≠ v u ) Rank(v) = \alpha \sum_{v'\in in(v)}\frac{Rank(v')}{|out(v)|}\space if (v \neq v_u) Rank(v)=αv′∈in(v)∑∣out(v)∣Rank(v′) if(v=vu)
R a n k ( v ) = ( 1 − α ) + α ∑ v ′ ∈ i n ( v ) R a n k ( v ′ ) o u t ( v ) i f ( v = v u ) Rank(v) = (1 - \alpha) + \alpha \sum_{v'\in in(v)}\frac{Rank(v')}{out(v)} \space if (v = v_u) Rank(v)=(1−α)+αv′∈in(v)∑out(v)Rank(v′) if(v=vu)
经过若干次的迭代后顶点的权重会收敛,此时的权重值可以作为物品推荐的分数。
基于内容的推荐算法的基本思想是给目标用户推荐他喜欢的物品的相似物品,但与基于物品的协同的过滤算法不同,物品间的相似度由物品的属性(物品类别、标签等等)决定,而不是由物品上积累的用户行为决定。由于不需要物品上积累的用户行为,基于内容的推荐算法在物品冷启动阶段非常有用。
基于内容的推荐可以分成三个阶段:
第一阶段我在其他的文章中有详细介绍过,涉及的算法根据物品的不同,可能会涉及文本处理、图像处理、人工生成标签等等,这里不展开,重点介绍一下二三阶段。
首先遇到的问题是什么是兴趣点?前面已经提到了,物品画像的维度定义了用户的兴趣点。
第二个问题是如何提取用户的兴趣点?基本是方式是通过用户与物品的交互行为历史(浏览、点击、收藏、购买、分享、屏蔽等)生成用户的兴趣点。
一般来说,兴趣点的提取可以从考虑以下的量化指标:
我们来对兴趣点的提取做一些改进:
在第三个阶段,有了用户的兴趣点之后,如何为用户生成推荐内容呢?这里可以有不同的推荐策略,比如简单的可以将兴趣点作为检索关键词直接检索出相关的物品。也可以加入一些实时兴趣点筛选逻辑,根据用户当时的状态实时决定用哪些兴趣点。
排行榜可能是最容易被忽视的非个性化的推荐策略,但在很多情况下不失为一种很好的推荐策略。
常见的排行榜有:
我们在基本的排行榜策略里,加入用户的人口统计学特征,比如性别、年龄、 地域、职业等特征,可以生成半个性化的排行榜。
社会化推荐是指利用用户的社交关系进行推荐的策略。有了用户的社交关系,最简单的推荐策略就是给目标用户推荐其好友喜欢的物品集合:
s u i = ∑ v ∈ R e l a t e d ( u ) w u v s v i s_{ui}=\sum_{v\in Related(u)}w_{uv}s_{vi} sui=v∈Related(u)∑wuvsvi
其中 R e l a t e d ( u ) Related(u) Related(u)表示用户u的好友集合。 s v i s_vi svi表示用户v对物品i的兴趣程度。 w u v w_{uv} wuv表示用户u,v间的熟悉程度的权重。
还有一些社会化推荐算法,将用户间的好友关系以及用户与物品间的兴趣关系通过图的形式表示,然后采用基于图的推荐算法。
深度学习在建模和表示用户的兴趣上有很多卓有成效的实践。大规模的推荐系统中,推荐过程一般分为两个阶段:召回阶段和排序阶段。召回阶段负责从海量的物品集合中选择并生成一个推荐物品候选集合,候选集合规模相对较小;排序阶段负责基于一定的目标(点击、消费等等,或则是多目标)对候选集合内的物品进行排序,并生成最终的推荐列表。深度学习在两个阶段都有应用。
召回阶段:
排序阶段;
还有一些推荐算法,感兴趣的可以搜索相关的paper阅读了解,以后有时间在做详细展开:
问题定义:假设待推荐的物品集合为 P = { p 1 , p 2 , . . . , p n } P=\{p_1, p_2, ..., p_n\} P={p1,p2,...,pn},用户的整体集合为 U = { u 1 , u 2 , . . . , u m } U=\{u_1, u_2, ..., u_m\} U={u1,u2,...,um}。 我们的目标是为每个待推荐的物品 p i ∈ P p_i\in P pi∈P生成一个用户列表,将物品推送给用户。
这是一个典型的推送问题,属于推荐问题范畴,但与通常的推荐问题不同点在于:
以上的算法进过简单的变化即可以用在推送问题上,这里不再展开。
从实现层面来说,推送系统的结构与通常的推荐系统的结构比较相似,通常分为两个阶段:召回阶段和排序阶段。召回阶段负责从海量的用户集合中挑选可能对物品感兴趣的用户并生成备选用户候选集合。排序阶段负责以特定指标为目标(点击、消费、够买等)对候选集中的用户进行排序。