LFM通过如下公式计算用户u
对物品i
的兴趣:

累加式子中的p
代表用户u
的兴趣和第k
个隐类之间的关系,q
代表第k
个隐类和物品i
之间的关系。对所有隐类求和的结果就是总的兴趣程度。
这其实是种机器学习方法,模型就是这个模型,然后我们可以用平方误差来做损失函数,就是给定训练集下,度量用户感兴趣与否的实际情况与预测结果是否相符,再用梯度下降最小化损失函数,减小模型预测结果与实际情况的误差,最终收敛就可以了。我们还可以在损失函数中添加正则项来防止过拟合。这些都是《浅谈机器学习基础》里面反复讲过的东西。
而且为了应对隐性反馈数据集只有正样本的情况,我们倾向于从用户没有行为的热门物品中选取适量(与正样本数平衡)的负样本。适量就不用说了,选择热门物品的原因在于,物品热门而用户对其无正面反馈,比冷门物品更能说明用户对其不感兴趣,而不是因为也许根本就没有发现。
LFM还有个问题,就是它很难实现实时的推荐,因为经典的LFM模型每次训练时都要扫描所有的用户行为记录,不是分分钟就能训练好就能更新用户隐类向量p
和物品隐类向量q
的。如果要将LFM应用在新闻网站这种内容实时更新的系统中,那是肯定无法满足需求的。
雅虎为了解决传统LFM不能实时化的问题,提出了一个解决方案,公式如下:
后面那部分就是原先的用户隐类向量和物品隐类向量,几个小时更新一次。实时性体现在前面的式子上,x
是根据用户历史行为特别训练的用户向量,y
是根据物品的内容(关键词、属性、种类)去生成的物品内容特征向量。这样两者的乘积就能实时的估计出用户对该物品的兴趣,几小时后,通过传统的LFM就能得到更精确的数据。
就像上面说的,LFM与基于邻域的这两种方法UserCF和ItemCF相比,LFM不能在线实时推荐,需要提前训练好模型,而ItemCF可以,至于UserCF,只要和他相似的用户喜欢了新的物品,也可以做到实时推荐。
基于图的方法较麻烦,而且效果也比不上LFM,这里就不详细说了。
推荐系统冷启动问题
前面我们讲过如何使用用户行为数据去设计一个推荐系统,但是推荐系统该如何完成冷启动?
冷启动问题主要分为三种,一种是用户冷启动,对于一个新用户,我们没有他的历史行为数据,该怎么为其做个性化推荐;第二种是物品冷启动,就是如何将新的物品推荐给可能对它感兴趣的人;第三种是系统冷启动,也就是整个系统没有用户,只有一些物品的信息,该怎么办。
利用专家做初始标注
我们可以利用专家在若干个维度上对物品完成初始标记,后面再利用机器学习算法去计算相似度。这里不详细说了。
利用用户注册信息
比如我们可以利用用户的人口统计学信息、用户兴趣描述(很少)、从其他网站导入的用户站外行为数据。
我们可以计算拥有每种特征的人对各个物品的喜好程度,比如可以简单的定义为喜欢某种物品的人在拥有这种特征的人中所占的比例,而且我们还要注意要对热门物品降权,免得给所有特征的人都推荐热门物品。