CTR(click through rate),点击率。是用户点击链接的数量和该链接的展现量之比,通常用来衡量网站广告活动是否有效的依据。
CTR起源于计算广告,因为关系到真金白银的定价问题,因此要求预估出来的CTR必须“绝对准确”。这是因为,假如给一个用户准备了A/B/C三个广告,那么无论预测CTR是0.9、0.8、0.6,还是0.5、0.4、0.3都不影响三个广告的展现顺序,但是向客户的收费却有天壤之别。但是推荐系统只要求“相对准确”。(/一般在推荐系统中,2%以上的CTR就算效果不错了)
假如ABC换成了三篇文章,只要能够将用户最喜欢的A排在第1位,次喜欢的B排在第2位,无论我们预测的CTR是0.9、0.8、0.6,还是0.5、0.4、0.3,用户都能接受。看似要求“绝对准确”性,要比“相对准确”,难度更大一些:如果我们能够将用户对每个候选item的CTR都预测准确,那么排序的“相对准确性”自然能够得到保证。但是实际上,“预估CTR”和“排序准确”两个目标存在gap。
相比协同过滤模型仅利用用户与物品的相互行为信息进行推荐, 逻辑回归模型能够综合利用用户、物品、上下文等多种不同的特征, 生成较为 “全面” 的推荐结果。
通过对推荐问题转换成一个分类问题,预测正样本的概率进行对物品排序,这里正样本可以看作是用户点击物品的概率。
基于逻辑回归的推荐过程如下。
基于逻辑回归的推荐过程的重点在于, 利用样本的特征向量进行模型训练和在线推断。下面着重介绍逻辑回归模型的数学形式、推断过程和训练方法。
关于LR总结
通过Logistic分布的密度函数,一般选用sigmoid函数,将输出映射到(0,1)区间。
f ( z ) = 1 1 + e − z f(z)=\frac{1}{1+\mathrm{e}^{-z}} f(z)=1+e−z1
通过确定参数w,b就可以得到LR模型:
f ( x ) = 1 1 + e − ( w ⋅ x + b ) f(\boldsymbol{x})=\frac{1}{1+\mathrm{e}^{-(\boldsymbol{w} \cdot \boldsymbol{x}+b)}} f(x)=1+e−(w⋅x+b)1
LR模型的训练一般选用梯度下降,牛顿法和拟牛顿法。详细可以上面那个博客链接。
{ P ( y = 1 ∣ x ; w ) = f w ( x ) P ( y = 0 ∣ x ; w ) = 1 − f w ( x ) \left\{\begin{array}{l} P(y=1 \mid x ; w)=f_{w}(x) \\ P(y=0 \mid x ; w)=1-f_{w}(x) \end{array}\right. {P(y=1∣x;w)=fw(x)P(y=0∣x;w)=1−fw(x)
将 (式 2-14) 综合起来, 可以写成 (式 2-15) 的形式:
P ( y ∣ x ; w ) = ( f w ( x ) ) y ( 1 − f w ( x ) ) 1 − y P(y \mid x ; w)=\left(f_{w}(x)\right)^{y}\left(1-f_{w}(x)\right)^{1-y} P(y∣x;w)=(fw(x))y(1−fw(x))1−y
由极大似然估计的原理可写出逻辑回驲的目标函数, 如 (式 2-16) 所示。
L ( w ) = ∏ i = 1 m P ( y ∣ x ; w ) L(\boldsymbol{w})=\prod_{i=1}^{m} P(y \mid \boldsymbol{x} ; \boldsymbol{w}) L(w)=i=1∏mP(y∣x;w)
由于目标函数连乘的形式不便于求导, 故在 (式 2-16) 两侧取 log \log log, 并乘以 系数-(1/m), 将求最大值的问題转换成求极小值的问题, 最终的目标函数形式如 (式 2-17) 所示。
J ( w ) = − 1 m l ( w ) = − 1 m log L ( w ) = − 1 m ( ∑ i = 1 m ( y i log f w ( x i ) + ( 1 − y i ) log ( 1 − f w ( x i ) ) ) \begin{gathered} J(w)=-\frac{1}{m} l(w)=-\frac{1}{m} \log L(w) \\ =-\frac{1}{m}\left(\sum_{i=1}^{m}\left(y^{i} \log f_{w}\left(x^{i}\right)+\left(1-y^{i}\right) \log \left(1-f_{w}\left(x^{i}\right)\right)\right)\right. \end{gathered} J(w)=−m1l(w)=−m1logL(w)=−m1(i=1∑m(yilogfw(xi)+(1−yi)log(1−fw(xi)))
在得到逻辑回归的目标函数后, 需对每个参数求偏导, 得到梯度方向, 对 J ( w ) J(\boldsymbol{w}) J(w) 中的参数 w j w_{j} wj 求偏导的结果如 (式 2-18) 所示。
∂ ∂ w j J ( w ) = 1 m ∑ i = 1 m ( f w ( x i ) − y i ) x j i \frac{\partial}{\partial w_{j}} J(w)=\frac{1}{m} \sum_{i=1}^{m}\left(f_{w}\left(x^{i}\right)-y^{i}\right) x_{j}^{i} ∂wj∂J(w)=m1i=1∑m(fw(xi)−yi)xji
在得到梯度之后, 即可得到模型参数的更新公式, 如 (式 2-19) 所示。
w j ← w j − γ 1 m ∑ i = 1 m ( f w ( x i ) − y i ) x j i w_{j} \leftarrow w_{j}-\gamma \frac{1}{m} \sum_{i=1}^{m}\left(f_{w}\left(x^{i}\right)-y^{i}\right) x_{j}^{i} wj←wj−γm1i=1∑m(fw(xi)−yi)xji
至此, 完成了逻辑回归模型的更新推导。
在深度模型兴起之前,逻辑回归模型曾是很长一段时间推荐系统和计算广告的主要选择之一。
1 优势
2 局限
正如其固有的缺陷一般,在推荐上,也具有以下局限
为了解决这一问题,模型往复杂的方向进行衍生,诞生了因子分解机模型(FM),在深度学习时代之后,多层神经网络凭借其强大的表达能力也逐渐替代了LR。
通过特征交叉来面对LR信息丢失的情况,首先通过辛普森悖论来看为什么需要特征交叉组合。
辛普森悖论:对样本分组研究时,分组中占据优势的一方总在总评是失势,这就是辛普森悖论。
举例说明:
在A,B两个视频中,统计如下。
以上可以看出,无论男性还是女性,B的点击率都更高,所以男性女性都应该推荐B。但是如果忽略性别特征,统计如下:
发现汇总后的A视频的总点击率更高,如果根据这个进行推荐,就应该推荐A。这就是辛普森悖论的现象。
第一次计算采用了 性别+视频Id 两个特征计算,第二次采用了 视频id 单一特征计算,所以损失了很多信息,表达能力弱。
而在LR模型中,仅能通过对单一特征进行线性加权,而不能通过交叉组合为高维特征,所以需要特征组合。
为了实现特征交叉,在早期,算法工程师使用人工特征交叉,在进行筛选,效率低下,因此便出现了“暴力”的特征交叉,对特征进行两两组合,即PLOLY2.
∅ POLY2 ( w , x ) = ∑ j 1 = 1 n − 1 ∑ j 2 = j 1 + 1 n w h ( j 1 , j 2 ) x j 1 x j 2 \emptyset \operatorname{POLY2}(w, x)=\sum_{j_{1}=1}^{n-1} \sum_{j_{2}=j_{1}+1}^{n} w_{h\left(j_{1}, j_{2}\right)} x_{j_{1}} x_{j_{2}} ∅POLY2(w,x)=j1=1∑n−1j2=j1+1∑nwh(j1,j2)xj1xj2
在一定程度上解决了特征交叉的问题,本质上依然是线性模型,有两个明显的缺陷:
为了解决POLY2的问题,在2010年,Rendle提出了FM模型
FM(Factorization Mechine),因子分解机,提出于2010年,但真正的应用于大厂的推荐系统CTR预估问题也就是近几年的事情。
首先我们回顾下隐语义LFM模型,用户u对物品i的喜好程度可以表示为:
R ( u , i ) = p u T q i = ∑ k = 1 K p u , k q i , k R(u, i)=p_{u}^{T} q_{i}=\sum_{k=1}^{K} p_{u, k} q_{i, k} R(u,i)=puTqi=k=1∑Kpu,kqi,k
如果对用户 u u u 的表征为
X u = [ p u 1 p u 2 ⋯ p u k ] = [ x u 1 x u 2 ⋯ x u k ] X_{u}=\left[\begin{array}{ll}p_{u 1} & p_{u 2} \cdots p_{u k}\end{array}\right]=\left[\begin{array}{ll}x_{u 1} & x_{u 2} \cdots x_{u k}\end{array}\right] Xu=[pu1pu2⋯puk]=[xu1xu2⋯xuk]
那么:
y u , i = R ( u , i ) = ∑ k = 1 K w k x u k . y_{u, i}=R(u, i)=\sum_{k=1}^{K} w_{k} x_{u k} . yu,i=R(u,i)=k=1∑Kwkxuk.
如果加入截距 w 0 ∈ R w_{0} \in \mathbb{R} w0∈R ,则有 y u , i = R ( u , i ) = w 0 + ∑ k = 1 K w k x u k . y_{u, i}=R(u, i)=w_{0}+\sum_{k=1}^{K} w_{k} x_{u k} . yu,i=R(u,i)=w0+k=1∑Kwkxuk.
可见,本质上LFM是一个线性回归模型 ( w 0 = 0 ) \left(w_{0}=0\right) (w0=0). 与逻辑回归有些相似,不过不是使用可解释的语义描述参数。
通过将交叉特征加入到线性模型中,就构成了FM模型的基本形式:
y ^ ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n w i j x i x j ⏟ Feature Crosses . \hat{y}(x)=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\underbrace{\sum_{i=1}^{n} \sum_{j=i+1}^{n} w_{i j} x_{i} x_{j}}_{\text {Feature Crosses }} . y^(x)=w0+i=1∑nwixi+Feature Crosses i=1∑nj=i+1∑nwijxixj.
在POLY2中,我们解释了交叉特征的权重复杂度提升导致训练复杂,而且交叉特征过于稀疏导致交叉不充分。所以结合隐语义模型的思想,将权重分解为两个隐向量的内积形式:
w i j = ⟨ V i , V j ⟩ : = ∑ f = 1 k v i , f ⋅ v j , f w_{i j}=\left\langle\mathbf{V}_{i}, \mathbf{V}_{j}\right\rangle:=\sum_{f=1}^{k} v_{i, f} \cdot v_{j, f} wij=⟨Vi,Vj⟩:=f=1∑kvi,f⋅vj,f
这样就把 n × ( n − 1 ) n \times(n-1) n×(n−1) 个 w i j w_{i j} wij 参数的估计转换成 n n n 个长度为 k k k 个隐向量 V i = ( v i , 1 , v i , 2 , ⋯ , v i , k ) \mathbf{V}_{\mathbf{i}}=\left(v_{i, 1}, v_{i, 2}, \cdots, v_{i, k}\right) Vi=(vi,1,vi,2,⋯,vi,k) 的估计。这个k维隐向量也就是对应特征的隐向量表示。当然,这里 k < < n k<
这种思想来自张量分解:
经过以上分解,得到FM的二阶表达式:
y ^ ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n ⟨ V i , V j ⟩ x i x j \hat{y}(x)=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{V}_{i}, \mathbf{V}_{j}\right\rangle x_{i} x_{j} y^(x)=w0+i=1∑nwixi+i=1∑nj=i+1∑n⟨Vi,Vj⟩xixj
计算可以进一步化简:
∑ i = 1 n ∑ j = i + 1 n ⟨ V i , V j ⟩ x i x j R T = 1 2 ∑ i = 1 n ∑ j = 1 n ⟨ V i , V j ⟩ x i x j − 1 2 ∑ i = 1 n ⟨ V i , V i ⟩ x i x i = 1 2 ( ∑ i = 1 n ∑ j = 1 n ∑ f = 1 k v i , f , v j , f x i x j − ∑ i = 1 n ∑ f = 1 k v i , f , v i , f x i x i ) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i , f x i ) ( ∑ j = 1 n v j , f x j ) − ∑ i = 1 n v i , f 2 x i 2 ) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i , f x i ) 2 − ∑ i = 1 n v i , f 2 x i 2 ) \begin{aligned} & \sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{V}_{i}, \mathbf{V}_{j}\right\rangle x_{i} x_{j} \\RT =& \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n}\left\langle\mathbf{V}_{i}, \mathbf{V}_{j}\right\rangle x_{i} x_{j}-\frac{1}{2} \sum_{i=1}^{n}\left\langle\mathbf{V}_{i}, \mathbf{V}_{i}\right\rangle x_{i} x_{i} \\ =& \frac{1}{2}\left(\sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{f=1}^{k} v_{i, f}, v_{j, f} x_{i} x_{j}-\sum_{i=1}^{n} \sum_{f=1}^{k} v_{i, f}, v_{i, f} x_{i} x_{i}\right) \\ =& \frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)\left(\sum_{j=1}^{n} v_{j, f} x_{j}\right)-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right) \\ =& \frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)^{2}-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right) \end{aligned} RT====i=1∑nj=i+1∑n⟨Vi,Vj⟩xixj21i=1∑nj=1∑n⟨Vi,Vj⟩xixj−21i=1∑n⟨Vi,Vi⟩xixi21⎝⎛i=1∑nj=1∑nf=1∑kvi,f,vj,fxixj−i=1∑nf=1∑kvi,f,vi,fxixi⎠⎞21f=1∑k((i=1∑nvi,fxi)(j=1∑nvj,fxj)−i=1∑nvi,f2xi2)21f=1∑k⎝⎛(i=1∑nvi,fxi)2−i=1∑nvi,f2xi2⎠⎞
上式第一行到第二行:对称阵中的上三角元素 与下三角元素相等,减去对角线元素;
隐向量的引人使 FM 能更好地解决数据稀疏性的问题。举例来说, 在某商品 推荐的场景下, 样本有两个特征, 分别是频道 (channel) 和品牌 (brand), 某训练样本的特征组合是(ESPN, Adidas)。
在 POLY2 中, 只有当 ESPN 和 Adidas 同时 出现在一个训练样本中时, 模型才能学到这个组合特征对应的权重; 而在 FM 中, ESPN 的隐向量也可以通过(ESPN, Gucci)样本进行更新, Adidas 的隐向量也可以通过(NBC, Adidas)样本进行更新, 这大幅降低了模型对数据稀疏性的要求。甚至 对于一个从末出现过的特征组合(NBC, Gucci), 由于模型之前已经分别学习过 N B C \mathrm{NBC} NBC 和 Gucci 的隐向量, 具备了计算该特征组合权重的能力, 这是 POLY2 无法 实现的。相比 POLY2, FM 虽然丢失了某些具体特征组合的精确记忆能力, 但是 泛化能力大大提高。
在工程方面, FM 同样可以用梯度下降法进行学习, 使其不失实时性和灵活 性。相比之后深度学习模型复杂的网络结构导致难以部署和线上服务, FM 较容 易实现的模型结构使其线上推断的过程相对简单, 也更容易进行线上部署和服 务。因此, FM 在 2012-2014 年前后, 成为业界主流的推荐模型之一。
上述是一个通用的拟合方程,可以采用不同的损失函数用于解决回归、二元分类等问题,
比如可以采用MSE (Mean Square Error) 损失函数来求解回归问题,也可以采用Hinge/Cross-Entropy 损失来求解分类问题。当然,在进行二元分类时,FM的输出需要经过sigmoid变换,这与Logistic回归是一样的。
采用随机梯度下降法SGD求解参数
∂ y ^ ( x ) ∂ θ = { 1 , θ = w 0 x i , θ = w i x i ∑ j = 1 n v i , f x j − v i , f x i 2 , θ = v i , f \frac{\partial \hat{y}(x)}{\partial \theta}=\left\{\begin{array}{c} 1, \theta=w_{0} \\ x_{i}, \theta=w_{i} \\ x_{i} \sum_{j=1}^{n} v_{i, f} x_{j}-v_{i, f} x_{i}^{2}, \theta=v_{i, f} \end{array}\right. ∂θ∂y^(x)=⎩⎨⎧1,θ=w0xi,θ=wixi∑j=1nvi,fxj−vi,fxi2,θ=vi,f
在FM模型中,特征xi只对应唯一一个隐向量vi,这样在进行计算交叉特征权重时,只使用vi与其他特征的隐向量进行内积。这样导致了一部分信息的丢失,原因在于,假设x1:天气,x2:地点,x3:时间。x1,x2和x1,x3的程度是不同的,只是用同样的v1进行内积导致明显的信息丢失。所以就引出了FFM(Field Factorization Machine)。
简单理解就是对特征进行分组,每个组就是一个特征域。
例如图1中的例子,这是一个人工的ctr数据集, + 表示展示点击次数, - 表示展示未点击次数,特征值ESPN,Vogue,NBC属于名为Publisher的field,特征值Nike,Gucci,Adidas属于名为Advertiser的filed。为了说明FFM是如何有效work的,我们考虑下面的例子:
在FM中,特征交叉部分的隐向量内积为:
在FFM中,上面公式表达为:
FFM每个特征隐含量都变成一个多维的,与不同域的特征交叉时选择不同的隐含量。
结合特征域的概念,隐含量进一步表示为:
∑ i = 1 n ∑ j = i + 1 n ⟨ V i , V j ⟩ x i x j → ∑ i = 1 n ∑ j = i + 1 n ⟨ V i , f j , V j , f i ⟩ x i x j \sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{V}_{i}, \mathbf{V}_{j}\right\rangle x_{i} x_{j}\to \sum_{i=1}^{n} \sum_{j=i+1}^{n} \langle V_{i, f_{j}}, V_{j, f_{i}}\rangle x_{i} x_{j} i=1∑nj=i+1∑n⟨Vi,Vj⟩xixj→i=1∑nj=i+1∑n⟨Vi,fj,Vj,fi⟩xixj
FFM总体表达式就是:
y ^ ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n ⟨ V i , f j , V j , f i ⟩ x i x j \hat{y}(x)=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n} \langle V_{i, f_{j}}, V_{j, f_{i}}\rangle x_{i} x_{j} y^(x)=w0+i=1∑nwixi+i=1∑nj=i+1∑n⟨Vi,fj,Vj,fi⟩xixj
FFM优点
增加field的概念,同一特征针对不同field使用不同隐向量,模型建模更加准确
FFM缺点:
计算复杂度比较高,参数个数为 n f k nfk nfk ,计算复杂度为 k n 2 kn^2 kn2
首先复习一下GBDT:决策树DT \quad GBDT
在上面的FM模型中,理论上可以进行更高维度的特征交叉,比如引申到3阶,但是继续交叉带来的权重数量和模型的复杂度都过大,繁重的计算。所以如何突破二阶特征交叉组合就成了下一步的方向。
2014年,facebook提出了GBDT+LR模型,简而言之就是通过GBDT进行自动特征筛选和交叉组合,进而生成离散的特征向量,再把该特征向量作为LR模型的输入,选型原因在于:
GBDT适合处理连续值特征,而LR,FM,FFM更加适合处理离散化特征,所以通过串联实现混合模型。
首先基于训练数据训练得到一个GBDT模型,再利用该模型完成原始特征向量到高阶组合特征向量的转化。流程如下
对于训练样本x,经过GBDT第一个子树后,会根据节点分裂的规则最终落入到某一个叶子节点,将该节点设置为1,该子树的其他节点设为0,得到向量(0,0,1,0),然后依次将数据x输入到其他子树中,得到更多的01向量,将每个子树的输出进行拼接,就得到最终的高阶特征向量(0,0,1,0,1,0,0,0,0,0,0,1),为离散形式。
对于原始特征,由于决策树的特点,每经过一个节点分裂,就进行了一次特征交叉,所以上图中,最终得到的时三阶特征交叉的结果。
为什么每次节点分裂就带来一次特征组合?
我的理解是:分裂一次节点,就要引入一个新的特征,比如节点x1>10,分裂一个子结点X2<5,就是这两个节点特征的组合。
GBDT+LR组合模型对于推荐系统领域的重要性在于,它大大推进了特征工程模型化这一重要趋势。
在GBDT+LR组合模型出现之前,特征工程的主要解决方法有两个:一是进行人工的或半人工的特征组合和特征筛选;二是通过改造目标函数,改进模型结构,增加特征交叉项的方式增强特征组合能力。但这两种方法都有弊端,第一种方法对算法工程师的经验和精力投入要求较高;第二种方法则要求从根本上改变模型结构,对模型设计能力的要求较高。
GBDT+LR组合模型的提出,意味着特征工程可以完全交由一个独立的模型来完成,模型的输入可以是原始的特征向量,不必在特征工程上投入过多的人工筛选和模型设计的精力,实现真正的端到端( End to End)训练。
LS-PLM(large Scale Piece-wise Linear Model)大规模分段线性模型,这是阿里曾经的主流模型,12年就开始大幅应用于淘宝的推荐和广告系统,直到2017年才公布该模型。其结构特点类似于三层神经网络模型,所以也可以看作是推荐系统深度学习时代的衔接点。
也被称为MLR(Mixed Logistic Regression,混合逻辑回归),可以看作是逻辑回归的推广,在LR的基础上,采用分治的思想,首先对样本进行切片,在样本分片中应用LR进行CTR预估。
逻辑回归的基础上加人聚类的思想, 其灵感来自对广告推荐领域样本特点的观察。举例来说, 如果 CTR 模型要预估的是女性受众点击女装广告的 CTR, 那么显然, 我们不希望把男性用户点击数码类产品的样本数据也考虑进来, 因为 这样的样本不仅与女性购买女装的广告场景毫无相关性, 甚至会在模型训练过程中扰乱相关特征的权重。
为了让 CTR 模型对不同用户群体、不同使用场景更有 针对性, 其采用的方法是先对全量样本进行聚类, 再对每个分类施以逻辑回归模型进行 CTR 预估。
LS-PLM 的实现思路就是由该灵感产生的。LS-PLM 的数学形式如下所示, 首先用聚类函数 π \pi π 对样本进行分类 (这里的 π \pi π 采用了 softmax 函数对样本进行多分类), 再用 L R \mathrm{LR} LR 模型计算样本在分片中具体的 CTR, 然后将二者相乘后求和$
f ( x ) = ∑ i = 1 m π i ( x ) ⋅ η i ( x ) = ∑ i = 1 m e μ i ⋅ x ∑ j = 1 m e μ j ⋅ x ⋅ 1 1 + e − w i ⋅ x f(x)=\sum_{i=1}^{m} \pi_{i}(x) \cdot \eta_{i}(x)=\sum_{i=1}^{m} \frac{\mathrm{e}^{\mu_{i} \cdot x}}{\sum_{j=1}^{m} \mathrm{e}^{\mu_{j} \cdot x}} \cdot \frac{1}{1+\mathrm{e}^{-w_{i} \cdot x}} f(x)=i=1∑mπi(x)⋅ηi(x)=i=1∑m∑j=1meμj⋅xeμi⋅x⋅1+e−wi⋅x1
当分片为1时,模型就退化为普通的LR模型,m越大模型的拟合效果越好,与此同时模型的参数也越来越多。ali给出的m经验值为12最宜。
下图中,可以看到,对于MLR模型,使用4个分片即可以解决模型的分类问题。
优点:
以后介绍深度学习时代的推荐算法模型,未完待续!!!
上一篇:推荐系统(4)——推荐算法1(基于内容和协同过滤)
下一篇:推荐系统(6)——推荐算法3(深度学习时代的来临)