推荐系统一般可以分成两个模块,检索和排序。比如对于电影推荐,检索模块会针对用户生成一个推荐电影列表,而排序模块则负责对这个电影列表根据用户的兴趣做排序。当把FFM算法应用到推荐系统中时,具体地是应用在排序模块。
FFM算法,全称是Field-aware Factorization Machines,是FM(Factorization Machines)的改进版。这个改进原理上比较简单,所以我想先把FM讲清楚。
我们知道推荐算法中,最广为人知的是协同过滤算法,协同过滤一般分为基于用户的协同过滤和基于物品的协同过滤,而除此之外,还有基于隐语义的协同过滤。我们来考虑一个电影评分的问题,用户对于电影的评分,可以构成一个评分矩阵 M ,这个矩阵是稀疏的,因为每个用户看过的电影都是有限的,这个矩阵里面会有很多缺失项,我们要做的便是将这个稀疏矩阵填满,我们可以怎么做呢?想象一个兴趣空间,这个空间里面有多个维度,维度一表示悬疑类型,维度二表示言情类型,等等。那么用户的兴趣可以表达为这个空间里的一个向量
M=UT⋅V
其中 U 是用户在隐语义空间对应的向量组成的矩阵,而
minU,V∑ru,v∈R(ru,v−u⋅v)2
其中R是用户对电影的评分的集合, ru.v 即表示用户 u 对电影