协同过滤算法
从物品相似度和用户相似度角度出发,衍生出物品协同过滤(ItemCF)和用户协同过滤(UserCF),又衍生出矩阵分解模型(Matrix Factorization,MF)。
亚马逊协同过滤论文:Amazon.com recommendations: item-to-item collaborative filtering
UserCF
1)基于用户对其它商品的历史评价数据,和其他用户对这些商品的历史评价数据,组成共现矩阵(用户为行,商品为列,值为1、0、-1);
2)找到与用户兴趣最相似的 Top n 用户,综合他们的评价得出对指定商品的评价,决定某商品是否推荐,以及最终推荐的排序结果。
向量常用相似度计算方法:余弦相似度和皮尔逊相关系数
推荐结果排序:用户相似度和对应用户的评价的加权平均。
缺点:用户数远大于物品数,导致相似度矩阵存储开销巨大;用户历史数据稀疏,找到相似用户的准确率低。
ItemCF
1)基于历史数据构建“用户×物品”的 m×n 维共现矩阵;
2)计算列向量间的两两相似度,构建 n×n 维物品相似度矩阵;
3)针对目标用户历史行为中的正反馈物品,利用物品相似度矩阵找出相似的 Top k 个物品,并由相似度分值进行排序,生成推荐列表。(物品的相似度是与各个正反馈物品相似度的累加)
应用场景:UserCF 具备更强的社交特性,适用于新闻推荐;ItemCF 适用于兴趣变化较为稳定的应用。
矩阵分解算法
Matrix Factorization Techniques for Recommender Systems
协同过滤的缺点在于,泛化能力弱;热门物品具有头部效应,而特征向量稀疏的尾部物品很少能与其它物品产生相似性;无法有效引入用户特征、物品特征和上下文特征。
矩阵分解在共现矩阵的基础上加入了隐向量,增强了模型处理稀疏矩阵的能力。矩阵分解算法为每个用户和物品生成一个隐向量,将用户和物品定位到隐向量的表示空间上,距离相近则表示兴趣特点接近,隐向量通过分解协同过滤生成的共现矩阵得到。
矩阵分解方法有特征值分解、奇异值分解(SVD)和梯度下降,其中前两者不适用于分解用户-物品矩阵。
R
m
×
n
=
U
m
×
k
×
V
k
×
n
R^{m × n}=U^{m × k}×V^{k × n}
Rm×n=Um×k×Vk×n,共现矩阵分解为用户矩阵和物品矩阵的乘积。 用户
u
u
u 对物品
i
i
i 的预估评分
r
^
u
i
=
q
i
T
p
u
\hat{r}_{ui}=q_{i}^{T}p_{u}
r^ui=qiTpu,
q
i
q_{i}
qi 和
p
u
p_{u}
pu 分别为
U
U
U 和
V
V
V 的对应行、列向量。求解的目标函数为
m
i
n
q
∗
,
p
∗
∑
(
u
,
i
)
∈
K
(
r
u
i
−
q
i
T
p
u
)
2
\underset{q*,p*}{min}\sum_{(u,i)\in K}(r_{ui}-q_{i}^{T}p_{u})^{2}
q∗,p∗min∑(u,i)∈K(rui−qiTpu)2,
K
K
K 是用户评分样本集合。加入正则化项后所得目标函数可由梯度下降法求解:
m
i
n
q
∗
,
p
∗
,
b
∗
∑
(
u
,
i
)
∈
K
(
r
u
i
−
q
i
T
p
u
)
2
+
λ
(
∥
q
i
∥
2
+
∥
p
u
∥
2
)
\underset{q*,p*,b*}{min}\sum_{(u,i)\in K}(r_{ui}-q_{i}^{T}p_{u})^{2}+\lambda(\left \| q_{i} \right \|^{2}+\left \| p_{u} \right \|^{2})
q∗,p∗,b∗min(u,i)∈K∑(rui−qiTpu)2+λ(∥qi∥2+∥pu∥2)
为了消除用户和和物品得打分偏差,加入物品和用户的偏差向量,
r
^
u
i
=
q
i
T
p
u
+
μ
+
b
i
+
b
u
\hat{r}_{ui}=q_{i}^{T}p_{u}+\mu + b_{i}+b_{u}
r^ui=qiTpu+μ+bi+bu,目标函数变为:
m
i
n
q
∗
,
p
∗
∑
(
u
,
i
)
∈
K
(
r
u
i
−
q
i
T
p
u
−
μ
−
b
i
−
b
u
)
2
+
λ
(
∥
q
i
∥
2
+
∥
p
u
∥
2
+
b
i
2
+
b
u
2
)
\underset{q*,p*}{min}\sum_{(u,i)\in K}(r_{ui}-q_{i}^{T}p_{u}-\mu - b_{i}-b_{u})^{2}+\lambda(\left \| q_{i} \right \|^{2}+\left \| p_{u} \right \|^{2}+b_{i}^{2}+b_{u}^{2})
q∗,p∗min(u,i)∈K∑(rui−qiTpu−μ−bi−bu)2+λ(∥qi∥2+∥pu∥2+bi2+bu2)
优缺点:泛化能力强,一定程度上解决了数据稀疏问题;空间复杂度低;更好的扩展性和灵活性。但与协同过滤一样,不方便加入用户、物品和上下文相关特征。
逻辑回归
将用户年龄、性别等特征转化为数值型特征向量,确定优化目标(如点击率),训练模型;在模型服务阶段输入特征值得到点击率排序,确定推荐列表。数学形式如下:
f
(
x
)
=
1
1
+
e
w
x
+
b
f(x)=\frac{1}{1+e^{wx+b}}
f(x)=1+ewx+b1。
优缺点:数学原理,可解释性强,易于工程化;表达能力弱,无法进行高级操作。
特征交叉
POLY2
对所有特征进行两两交叉并赋予权重,训练方式同逻辑回归:
P
O
L
Y
2
(
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
POLY2(w,x)=\sum_{j_{1}=1}^{n-1}\sum_{j_{2}=j_{1}+1}^{n}w_{h}(j_{1},j_{2})x_{j1}x_{j2}
POLY2(w,x)=∑j1=1n−1∑j2=j1+1nwh(j1,j2)xj1xj2
缺点:使特征向量更加稀疏,权重参数复杂度高。
FM(Factorization Machines)
用两个向量的内积取代单一权重,极大降低开销:
F
M
(
w
,
x
)
=
∑
j
1
=
1
n
−
1
∑
j
2
=
j
1
+
1
n
(
w
j
1
⋅
w
j
2
)
x
j
1
x
j
2
FM(w,x)=\sum_{j_{1}=1}^{n-1}\sum_{j_{2}=j_{1}+1}^{n}(w_{j_{1}}\cdot w_{j_{2}})x_{j1}x_{j2}
FM(w,x)=∑j1=1n−1∑j2=j1+1n(wj1⋅wj2)xj1xj2
FFM(Field-aware Factorization Machines)
引入特征域感知(field-aware)增强模型表达能力,每个特征对应一组隐向量,每次从域
f
f
f 中挑出一个对应的隐向量进行交叉:
F
M
(
w
,
x
)
=
∑
j
1
=
1
n
−
1
∑
j
2
=
j
1
+
1
n
(
w
j
1
,
f
2
⋅
w
j
2
,
f
1
)
x
j
1
x
j
2
FM(w,x)=\sum_{j_{1}=1}^{n-1}\sum_{j_{2}=j_{1}+1}^{n}(w_{j_{1},f_{2}}\cdot w_{j_{2},f_{1}})x_{j1}x_{j2}
FM(w,x)=∑j1=1n−1∑j2=j1+1n(wj1,f2⋅wj2,f1)xj1xj2
GBDT+LR
Google GBDT+LR 论文:Practical lessons from predicting clicks on Ads at Facebook
利用 GBDT 进行自动特征筛选与组合,生成新的离散特征向量,再输入 LR,两部分是独立的不需要梯度回传。GBDT 生成离散特征的方法是,每颗树通过样本最终落入的类别得到 one-hot 向量,再将这些向量相连得到最终特征。
优缺点:推进了特征工程模型化;容易过拟合,丢失大量数值特征信息。
LS-PLM(Large Scale Piece-wise Linear Model)
先用聚类函数对样本进行
m
m
m 分片,再在样本分片中应用逻辑回归进行 CTR 预估,两者相乘求和。(经验值
m
=
12
m=12
m=12)
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{e^{\mu_{i}\cdot x}}{\sum_{j=1}^{m}e^{\mu_{j}\cdot x}}\cdot\frac{1}{1+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
优点:端到端;非线性能力;模型稀疏性强。