推荐参考资料
- 官方文档
- 仓库地址
- 论文地址
- LightFM推荐系统框架学习笔记
- LightFM推荐模型库
- (利于入门)how-i-would-explain-building-lightfm-hybrid-recommenders-to-a-5-year-old
- (用处不大)协同推荐 + lightfm + 根据用户已读诗词推荐
- (可能有用)Recommendation System in Python: LightFM
- (进阶调参有用)针对推荐系统隐式和显式反馈的混合模型——lightFM(下:python场景实例)
上面的引用资料都很有用!
矩阵分解
日常业务中可以得到用户的行为数据(交互),如点赞/评分等,如三元组{userID,itemID,rate},但是复杂业务中矩阵会很大,且矩阵十分稀疏(可能1w个物品,用户A只点赞了5个,我们在lightfm中使用的就是scipy
的coo_matrix
和csr_matrix
)。我们的推荐,实际上就是预测这些空白项的值。因此我们引入矩阵分解,将这个大矩阵分解为两个较小的矩阵以实现降维,如M x N
分解为M x k
和k x N
,即把他们投射到k维(这个k无法解释,此时就成为隐向量了)。此时两个小矩阵重新一乘,原来有的项会近似相等,原来的空白项此时也有值,那么这些值就是预测值了。
而对于这个分解过程,就有一些算法和目标函数了,我暂时还没搞懂
按照论文的说法,至少比MF模型
和CB
要好
混合模型
由于协同过滤需要历史交互数据,存在冷启动问题;同时由于基于内容的推荐没有使用交互,用户之间是孤立的,所以实际效果不如协同过滤。所以提出了混合模型,结合了基于内容的推荐(CB
)和协同过滤的基于模型推荐(CF协同过滤,MF矩阵分解
)两种方式,训练者可以传入用户/物品的特征信息(如地理位置/年龄)等,同时也传入交互信息{userID,itemID,rate},那么在数据少时仍可以基于用户物品的特征进行适当的推荐
所以,如果没有传入用户物品的特征信息,那么模型只是一个单纯的MF模型,基于内容是通过embedding实现的
而embedding是通过矩阵分解得到的,事实上M x k
的矩阵都是embedding
论文解读
模型的需求:1. 如果物品A和B经常同时被推荐,那么应该学到A和B非常相似 2. 模型能即时根据新数据进行更新
对于需求一,使用latent representation,根据交互信息确定两个物体的embedding的距离。
对于需求二,将用户和物体表示为内容特征的线性组合
至于线性组合,大概就是
对用户/物品的特征矩阵进行矩阵分解,然后把这两个相乘,再加上偏置,得到一个值
r
^
u
i
\hat r_{ui}
r^ui
r
^
u
i
=
f
(
q
u
⋅
p
i
+
b
u
+
b
i
)
\hat r_{ui} = f (q_u · p_i + b_u + b_i)
r^ui=f(qu⋅pi+bu+bi)
再对于交互信息(有正向和负向的交互),和
r
^
u
i
\hat r_{ui}
r^ui进行线性组合,得到
论文中提及的模型结构如下