矩阵分解模型是把用户偏好和item属性投影到同一个隐因子空间(latent factor space),以用户偏好和item属性的匹配程度来预测评分。通常推荐系统可以用于模型训练的信息主要有用户的显式反馈、隐式反馈和时间信息等。显式反馈(explicit feedback):用户直接表明对item的兴趣,例如评分[1,2,3,4,5]. 隐式反馈(implicit feedback):通过观察用户行为得到的信息,例如浏览历史、搜索记录等。
评价推荐系统时最重要的两个问题是评分准确率和Top-N推荐问题。评分准确率问题常用的度量标准有Root Mean Squared Error (RMSE),Precision,Recall等。Top-N推荐常用的度量标准有NDCG,Average Reciprocal Hit-Rank(ARHR)等。
矩阵分解模型是把用户偏好和item属性投影到同一个隐因子空间(latent factor space),以用户偏好和item属性的匹配程度来预测评分。但是,仅仅这样是不够的,例如A和B两个用户的偏好类似,但是A比较容易满足,倾向于给item打高分;而B倾向于给item打低分(Item上也有类似的情况)。为了解决这个问题,需要为每个用户和item增加一个偏置项。评分 rui 的偏置部分定义为:
其中 μ 是评分集合R中所有评分的均值, bu 是用户u的偏置, bi 是item i上的偏置。可以通过梯度下降算法最优化下面这个式子来求解 bu,bi :
另外还有一种简单的偏置项计算方法,如下所示:
在推荐系统矩阵分解的发展历程中,有研究员提出先对评分矩阵进行补全,从而可以对一个dense矩阵进行分解。但是这样做有两个缺点:一是补全数据和dense 矩阵分解大大增加了计算量;二是不精确的评分补全会导致结果有较大的偏差。所以目前的研究工作都建议使用原始的稀疏评分矩阵,并且使用正则化项来避免过拟合。
假设用户u投影到f维隐空间后的向量表示为 pu∈Rf ,item i的隐空间表示为 qi∈Rf 。隐空间的每一维都表示一个偏好因子,则用户u和item i的匹配程度可以用他们的内积 q⊤ipu 来衡量。计算预测评分:
模型参数 bi,bu,qi,pu 通过最优化下面这个目标函数获得:
可以用梯度下降方法或迭代的最小二乘算法求解。在迭代最小二乘算法中,首先固定 pu 优化 qi ,然后固定 qi 优化 pu ,交替更新。梯度下降方法中参数的更新式子如下(为了简便,把目标函数中的 μ+bi+bu+q⊤ipu 整体替换为 r^ui ):
其中 α 是更新步长。
用户的隐式反馈可以提供额外的偏好信息,能在一定程度上提高预测准确性。例如SVD++把用户是否对item打分作为一种隐式反馈。
模型参数 bi,bu,qi,pu,yj 通过最优化下面这个目标函数获得:
如果要加入多种隐式反馈信息,如收藏、租借等,则在用户偏好属性中加入多个隐式反馈项即可:
时间信息在推荐中有很重要的地位。一个用户对某个item的评价可能在一年后会发生很大的变化。时间信息可以告诉我们用户在某个时间点对item的喜好程度以及随着时间推移用户偏好的改变。
在SVD模型中,容易随时间发生变化的参数有: bu 如用户打分的严格程度发生改变; bi 如item的流行度发生改变; pu 用户的喜好发生改变。由于item的属性往往是固定不变的,所以可以认为 qi 是恒定的。下面介绍 bu,bi,pu 各项常用的时间函数表示。
首先构建用户评分偏置的线性渐变模型(例如用户u的平均评分可能越来越高):定义用户u评分的平均时间为 tu ,那么在 t 时刻:
随着时间的改变,用户的喜好也在发生变化,所以把用户的偏好 pu 作为一个时间函数会比较合适。 pu 的时间函数和用户的偏置项 bu 类似,例如:
有了前面三项的时间函数,timeSVD++的预测函数如下:
最后有个问题,预测函数中如何设定未来某一天的参数,如 bu,t , pu,t ?事实上,在训练模型中加入局部时间项主要是为了获得更好的稳定项(如 bu , αu⋅devu(t) ),所以在预测过程中可以忽略局部时间项(同时这个也无法计算得到),用稳定项来预测评分。
Recommender Systems Handbook