MF
在推荐场景中, 我们可以把user
对item
的行为, 用评分矩阵
R
∈
R
∣
U
∣
×
∣
P
∣
R\in \mathbb R^{|U|\times|P|}
R∈R∣U∣×∣P∣表示.
U
=
{
u
s
e
r
}
U=\{user\}
U={user},为用户集合,
P
=
{
i
t
e
m
}
P=\{item\}
P={item}, 为item集合.
以商品为例,比如说用户u1对商品p1加购物车, 那就令
R
u
1
,
p
1
=
3
R_{u1,p1}=3
Ru1,p1=3, 用户u1对商品p2做出购买行为, 那就令
R
u
1
,
p
2
=
5
R_{u1,p2}=5
Ru1,p2=5.
问题描述
在真实场景中, 用户只会对部分item做出反馈, 所以矩阵是非常稀疏的.
推荐的task就是预测出用户可能感兴趣的未见商品.
我们假设用户喜欢某个商品是因为用户的特征偏好与该商品的特征能够吻合起来.
那这些特征是什么呢? 以音乐推荐为例, 见图1
figure 1 音乐推荐中, latent space 的一种假设
这些特征我们不必人为定义, 可以引入latent space
的假定, 有
k
k
k个潜在的特征.
用户对每个特征都有一个偏好程度, 用矩阵
Q
Q
Q表示, 每个物品都有一个特征的吻合程度, 用
P
P
P表示,所以我们的任务就是求出这两个矩阵, 然后对
R
R
R进行补全, 找出得分高的未见商品推荐给用户.
问题定义
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
figure 矩阵分解示意, 网络盗图,符号跟上面公式不一样
ALS求解方法
min
Q
,
P
∑
u
,
i
(
R
u
,
i
−
Q
u
P
i
T
)
2
+
λ
∣
∣
Q
u
∣
∣
2
+
λ
∣
∣
P
i
∣
∣
2
(1)
\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), 交替最小二乘法.
FM
FM, Factorization Machines, 因子机.
tf.api实现
改写提效.
import tensorflow as tf
class FM(tf.keras.layers.Layer):
"""Factorization Machine models pairwise (order-2) feature interactions
without linear term and bias.
Input shape
- 3D tensor with shape: ``(batch_size,field_size,embedding_size)``.
Output shape
- 2D tensor with shape: ``(batch_size, 1)``.
References
- [Factorization Machines](https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf)
"""
def call(self, inputs, **kwargs):
concated_embeds_value = inputs # [N,T,d]
square_of_sum = tf.square(tf.reduce_sum(
concated_embeds_value, axis=1, keep_dims=True)) # [N,1,d], T个特征逐位求和
sum_of_square = tf.reduce_sum(
concated_embeds_value * concated_embeds_value, axis=1, keep_dims=True) # [N,1,d]
cross_term = square_of_sum - sum_of_square
cross_term = 0.5 * tf.reduce_sum(cross_term, axis=2, keep_dims=False) # [N,1]
return cross_term
推倒过程见参考[5].
召回中使用.
放弃U与I特征组内部的二阶交互, 即没有了user_ageuser_gender, item_iditem_ctr 这样的交互.
参考
- 网易云音乐的歌单推荐算法是怎样的? - nick lee的回答 - 知乎
- cnblog,初识交替最小二乘ALS
- FM paper, Rendle2010FM
- 他人blog,因子机深入解析
- 知乎FM文章