深度学习推荐系统——前深度学习时代
协同过滤
相似度
- 余弦相似度
sim ( i , j ) = cos ( i , j ) = i ⋅ j ∥ i ∥ ⋅ ∥ j ∥ \operatorname { sim } ( \boldsymbol { i } , \boldsymbol { j } ) = \cos ( \boldsymbol { i } , \boldsymbol { j } ) = \frac { \boldsymbol { i } \cdot \boldsymbol { j } } { \| \boldsymbol { i } \| \cdot \| \boldsymbol { j } \| } sim(i,j)=cos(i,j)=∥i∥⋅∥j∥i⋅j - 相关系数
sim ( i , j ) = ∑ p ϵ P ( R i , p − R ˉ i ) ( R j , p − R ˉ j ) ∑ p ϵ P ( R i , p − R ˉ i ) 2 ∑ p ϵ P ( R j , p − R ˉ j ) 2 \operatorname { sim } ( i , j ) = \frac { \sum _ { \mathrm { p } \epsilon P } \left( R _ { \mathrm { i } , \mathrm { p } } - \bar { R } _ { \mathrm { i } } \right) \left( R _ { \mathrm { j } , \mathrm { p } } - \bar { R } _ { \mathrm { j } } \right) } { \sqrt { \sum _ { \mathrm { p } \epsilon P } \left( R _ { \mathrm { i } , \mathrm { p } } - \bar { R } _ { \mathrm { i } } \right) ^ { 2 } } \sqrt { \sum _ { \mathrm { p } \epsilon P } \left( R _ { \mathrm { j } , \mathrm { p } } - \bar { R } _ { \mathrm { j } } \right) ^ { 2 } } } sim(i,j)=∑pϵP(Ri,p−Rˉi)2∑pϵP(Rj,p−Rˉj)2∑pϵP(Ri,p−Rˉi)(Rj,p−Rˉj)
R i , p R _ { \mathrm { i } , \mathrm { p } } Ri,p代表用户i对物品p的评分。 R ˉ i \bar { R } _ { \mathrm { i } } Rˉi代表用户i对所有物品的平均评分,P代表所有物品的集合。
UserCF
根据共现矩阵获得Top n相似用户,根据下式计算每个商品的相似度:
R
u
,
p
=
∑
s
∈
S
(
w
u
,
s
⋅
R
s
,
p
)
∑
s
ϵ
S
w
u
,
s
R _ { \mathrm { u } , \mathrm { p } } = \frac { \sum _ { \mathrm { s } \in S } \left( w _ { \mathrm { u } , \mathrm { s } } \cdot R _ { \mathrm { s } , \mathrm { p } } \right) } { \sum _ { \mathrm { s } \epsilon S } w _ { \mathrm { u } , \mathrm { s } } }
Ru,p=∑sϵSwu,s∑s∈S(wu,s⋅Rs,p)
其中,权重
w
u
,
s
w _ { \mathrm { u } , \mathrm { s } }
wu,s是用户U和用户S的相似度,
R
s
,
p
R _ { \mathrm { s } , \mathrm { p } }
Rs,p是用户S对物品P的评分。
缺点
1、用户数往往远大于物品数,而 UserCF 需要维护用户相似度矩阵以便快速找出 Top n相似用户。用户数的增长会导致用户相似度矩阵的空间复杂度以 n 2 n^2 n2的速度快速增长。
2、用户的历史数据向量往往非常稀疏,对于只有几次购买或者点击行为的用户来说,找到相似用户的准确度是非常低的,这导致 UserCF 不适用于那些正反馈获取较困难的应用场景( 如酒店预定、大件商品购买等低频应用)。
ItemCF
根据共现矩阵获得Top n相似物品,根据下式计算当前商品和用户历史正反馈商品的相似度:
R
u
,
p
=
∑
h
∈
H
(
w
p
,
h
⋅
R
u
,
h
)
R _ { \mathrm { u } , \mathrm { p } } = \sum _ { \mathrm { h } \in H } \left( w _ { \mathrm { p } , \mathrm { h } } \cdot R _ { \mathrm { u } , \mathrm { h } } \right)
Ru,p=h∈H∑(wp,h⋅Ru,h)
UserCF和ItemCF的应用场景
1、UserCF可以利用“朋友”来更新自己的推荐列表,适用于新闻推荐场景,发现热点,跟踪热点。
2、ItemCF更适用于兴趣变化较为稳定的应用。如影视推荐或者当前在寻找某一商品的电商场景,这时的兴趣点是比较稳定的。
矩阵分解
协同过滤泛化能力弱——无法将两个物品相似这一信息推广到其他物品相似性计算上,因此热门的物品具有很强的头部效应,容易跟大量物品产生相似性;而尾部的物品由于特征向量稀疏,很少与其他物品产生相似性,导致很少被推荐。
矩阵分解在协同过滤算法中“共现矩阵”的基础上,加人了隐向量的概念,加强了模型处理稀疏矩阵的能力。
用户和物品的隐向量是通过分解协同过滤生成的共现矩阵得到的,如下:
隐向量的维度k决定了隐向量的表达能力。k越小,隐向量包含的信息越少,模型的泛化程度越高;反之,k越大,隐向量的表达能力越强,泛化程度越低。同时,k的取值还与矩阵分解的求解复杂度直接相关。
基于用户矩阵U和物品矩阵V,用户u对物品i的预估评分如下式:
r
^
u
i
=
q
i
T
p
u
\hat { \boldsymbol { r } } _ { \mathrm { ui } } = \boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } } \boldsymbol { p } _ { \mathrm { u } }
r^ui=qiTpu
其中,
p
u
\boldsymbol { p } _ { \mathrm { u } }
pu是U的对应行向量,
q
i
T
\boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } }
qiT是V的对应列向量。
矩阵分解的求解过程
对矩阵分解的主要方法有三种:特征值分解、奇异值分解和梯度下降。
特征值分解只能作用于仿真,不适用。
奇异值分解可参考 知乎: 奇异值的物理意义 。但其存在两点缺陷:奇异值分解要求原始共现矩阵是稠密的;传统奇异值分解的计算复杂度达到了
O
(
m
n
2
)
O(mn^2)
O(mn2)的级别。
因此,梯度下降成为了矩阵分解的主要方法。损失函数如下:
min
q
∗
,
p
∗
∑
(
u
,
i
)
∈
K
(
r
u
i
−
q
i
T
p
u
)
2
\min _ { \boldsymbol { q } ^ { * } , \boldsymbol { p } ^ { * } } \sum _ { ( u , \mathrm { i } ) \in K } \left( \boldsymbol { r } _ { \mathrm { ui } } - \boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } } \boldsymbol { p } _ { \mathrm { u } } \right) ^ { 2 }
q∗,p∗min(u,i)∈K∑(rui−qiTpu)2
消除用户和物品打分的偏差
由于不同用户的打分体系不同,物品的衡量标准也有所区别,为了消除用户和物品打分的偏差,常用的做法是在矩阵分解时加入用户和物品的偏差向量:
r
u
i
=
μ
+
b
i
+
b
u
+
q
i
T
p
u
\boldsymbol { r } _ { \mathrm { ui } } = \mu + b _ { \mathrm { i } } + b _ { \mathrm { u } } + \boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } } \boldsymbol { p } _ { \mathrm { u } }
rui=μ+bi+bu+qiTpu
其中
μ
\mu
μ是全局偏差常数,
b
i
b_i
bi是物品偏差系数,可使用物品i收到的所有评分的均值,
b
u
b_u
bu是用户偏差系数,可使用用户u给出的所有评分的均值。
同时,梯度下降的损失函数加入正则化后更改成如下:
min
q
∗
,
p
∗
,
b
∗
∑
(
u
,
i
)
∈
K
(
r
u
i
−
μ
−
b
u
−
b
i
−
p
u
T
q
i
)
2
+
λ
(
∥
p
u
∥
2
+
∥
q
i
∥
2
+
b
u
2
+
b
i
2
)
\min _ { \boldsymbol { q } ^ { * } , \boldsymbol { p } ^ { * } , \boldsymbol { b } ^ { * } } \sum _ { ( \mathrm { u } , \mathrm { i } ) \in K } \left( \boldsymbol { r } _ { \mathrm { ui } } - \mu - b _ { \mathrm { u } } - b _ { \mathrm { i } } - \boldsymbol { p } _ { \mathrm { u } } ^ { \mathrm { T } } \boldsymbol { q } _ { \mathrm { i } } \right) ^ { 2 } + \lambda \left( \left\| \boldsymbol { p } _ { \mathrm { u } } \right\| ^ { 2 } + \left\| \boldsymbol { q } _ { \mathrm { i } } \right\| ^ { 2 } + b _ { \mathrm { u } } ^ { 2 } + b _ { \mathrm { i } } ^ { 2 } \right)
q∗,p∗,b∗min(u,i)∈K∑(rui−μ−bu−bi−puTqi)2+λ(∥pu∥2+∥qi∥2+bu2+bi2)
矩阵分解的优缺点
优点:
1、泛化能力强
2、空间复杂度低:空间复杂度由 n 2 n^2 n2降低到 ( n + m ) ∗ k (n+m)*k (n+m)∗k。
3、更好的扩展性和灵活性:和深度学习中的Embedding相似,便于与其他特征进行组合拼接,便于对接深度学习网络。
缺点:
1、不方便加入用户、物品和上下文相关的特征。
2、在缺乏用户历史行为时,无法进行有效的推荐。
逻辑回归
优点:
1、数学含以上的支撑:因变量服从伯努利分布,点击广告是一个经典的掷偏心硬币问题。因此,CTR模型的因变量显然应该服从伯努利分布。与之相比,线性回归因变量服从高斯分布。
2、可解释性强:特征加权和+sigmoid函数,表示不同特征对CTR的影响,通过sigmoid函数映射到0~1区间。
3、工程化的需要:易于并行化、模型简单、训练开销小。
缺点:
表达能力不强、无法进行特征交叉。
辛普森悖论:在分组比较重都占优势的一方,在总评中有时反而时失势的一方。
逻辑回归只对单一特征做简单加权,不具备进行特征交叉生成高维组合特征的能力,因此表达能力很弱,可能出现辛普森悖论的情况。
特征工程
POLY2模型
∅ POLY2 ( w , x ) = ∑ j 1 = 1 n ∑ j 2 = j 1 + 1 n w h ( j 1 , j 2 ) x j 1 x j 2 \emptyset \operatorname { POLY2 } ( \boldsymbol { w } , \boldsymbol { x } ) = \sum _ { j _ { 1 } = 1 } ^ { n } \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∑nj2=j1+1∑nwh(j1,j2)xj1xj2
缺点:
1、互联网数据经常采用one-hot编码,致使特征向量极度稀疏。
2、权重参数的数量由 n n n直接上升到 n 2 n^2 n2,极大地增加了训练复杂度。
FM模型
∅
F
M
(
w
,
x
)
=
∑
j
1
=
1
n
∑
j
2
=
j
1
+
1
n
(
w
j
1
⋅
w
j
2
)
x
j
1
x
j
2
\emptyset \mathrm { FM } ( \boldsymbol { w } , \boldsymbol { x } ) = \sum _ { j _ { 1 } = 1 } ^ { n } \sum _ { j _ { 2 } = j _ { 1 } + 1 } ^ { n } \left( \boldsymbol{w} _ { j _ { 1 } } \cdot \boldsymbol { w } _ { j _ { 2 } } \right) x _ { j _ { 1 } } x _ { j _ { 2 } }
∅FM(w,x)=j1=1∑nj2=j1+1∑n(wj1⋅wj2)xj1xj2
主要区别是用两个向量的内积
(
w
j
1
⋅
w
j
2
)
\left( \boldsymbol{w} _ { j _ { 1 } } \cdot \boldsymbol { w } _ { j _ { 2 } } \right)
(wj1⋅wj2)取代了单一的权重系数
w
h
(
j
1
,
j
2
)
w _ { h \left( j _ { 1 } , j _ { 2 } \right)}
wh(j1,j2)。FM为每个特征学习了一个隐权重特征向量。
优点:
1、权重参数为 n k nk nk(k为因向量维度),极大地降低了训练开销。
2、隐向量的引入使FM能更好地解决数据稀疏性问题(利用其他数据来学习)。虽然丢失了某些特征的精确记忆能力,但是泛化能力得到提高。
FFM模型
∅ FFM ( w , x ) = ∑ j 1 = 1 n ∑ j 2 = j 1 + 1 n ( w j 1 , f 2 ⋅ w j 2 , f 1 ) x j 1 x j 2 \emptyset \operatorname { FFM } ( \boldsymbol { w } , \boldsymbol { x } ) = \sum _ { j _ { 1 } = 1 } ^ { n } \sum _ { j _ { 2 } = j _ { 1 } + 1 } ^ { n } \left( \boldsymbol { w } _ { j _ { 1 } , f _ { 2 } } \cdot \boldsymbol { w } _ { j _ { 2 } , f _ { 1 } } \right) x _ { j _ { 1 } } x _ { j _ { 2 } } ∅FFM(w,x)=j1=1∑nj2=j1+1∑n(wj1,f2⋅wj2,f1)xj1xj2
优缺点:
需要学习 n n n个特征在 f f f个域上的 k k k维隐向量,参数数量共 n ⋅ k ⋅ f n·k·f n⋅k⋅f个。
引入特征域概念,模型表达能力更强。
GDBT+LR
用GDBT构建特征工程,用LR预估CTR,这两步是独立训练的。
优缺点:
决策树的深度决定了特征交叉的阶数,但GDBT容易产生过拟合,以及GBDT的特征转换方式实际上丢失了大量特征的数值信息。
不必在特征工程上投入过多的人工筛选和模型设计的精力,实现真正的端到端的训练。
LS-PLM(Large Scale Piece-wise Linear Mode)
又被称为MLR(Mixed Logistic Regression)模型。
在逻辑回归的基础上加人聚类的思想,其灵感来自对广告推荐领域样本特点的观察。举例来说,如果 CTR 模型要预估的是女性受众点击女装广告的 CTR。那么显然,我们不希望把男性用户点击数码类产品的样本数据也考虑进来,因为这样的样本不仅与女性购买女装的广告场景毫无相关性,甚至会在模型训练过程中扰乱相关特征的权重。为了让 CTR 模型对不同用户群体、不同使用场景更有针对性,其采用的方法是先对全量样本进行聚类,再对每个分类施以逻辑回归模型进行 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
首先用聚类函数
π
\pi
π对样本进行分类( 这 里 的 采 用 了 softmax 函数对样本进行多分类),再用 LR 模型计算样本在分片中具体的 CTR 然后将二者相乘后求和。