目前在评分预测方面,Matrix factorization模型是performance最好的一个模型。但它的缺点是整个模型训练完后是静态的。所谓静态是指模型无法对更新做出灵活的改变。而更新在现实情境下十分常见的,比如用户新评价了一个物品,一个新用户注册了,一个新物品被添加了。这就要求模型能较好地反映出这些变化。那为什么即使用SGD训练模型,也不能直接在评分r_ij对应的用户i特征向量和物品j特征向量更新呢?因为对SGD来说,顺序很重要。它训练的过程是:
使用物品 j 更新模型
end
for i in 1:总共要迭代的次数
for j in 1:物品个数使用物品 j 更新模型
end
end
因此,拿新来的评分直接更新原有的模型会产生不同的更新序列。[1]指出,对于现有的评分集合R和新来的评分r,分别使用R和R∪r更新模型,产生的模型整体上差别应该不大;而且若该评分对应的用户(物品)已给出(获得)很多的评分,那么该用户(物品)对应的特征向量也不需要更新。结合上述两点,要依据新评分更新模型时,只用更新对应用户(物品)的参数,而保持其他参数不变即可。
但是如何判断要不要依据新评分更新模型呢?作者提出了两点:①更新的概率随用户评论增多而减少②看现有评分能不能足够好地预测该新评分。若可以则忽略该新评分,否则更新。个人觉得第二种方法十分reasonable,因为就算用户评论的物品再多,没有代表性的话,对用户特征贡献度也是不大的。作者在Netflix和Moivelen上的实验显示,这样的更新策略能很好地近似使用所有评分训练得到的模型。
最后,值得指出的是作者在MF中引入了kernel函数。Kernel函数本身可以是线性的,多项式的,或者是RBF等等。从论文的数据看,logistic kernel在文中获得了最好的性能。
参考文献:
[1]Online-Updating Regularized Kernel Matrix Factorization Models for Large-Scale Recommender Systems