推荐系统之协同过滤

前言

在推荐领域的算法中,最经典的莫过于协同过滤算法,协同过滤算法的思想是相利用兴趣的相似性去推荐具有相似兴趣或内容的物品。协同过滤算法争对计算相似度对象的不同,主要可以分为基于用户,基于物品,基于内容,基于模型四种方法。

基于用户的协同过滤

基于用户的方法主要是利用用户的兴趣聚类形成兴趣群体,从兴趣群体中挑选出关于该用户的推荐候选集。当需要召回用户A的候选集时,先找到与该用户拥有相似兴趣的其他用户,挑选这些用户喜欢且用户A还没发掘的物品集合作为用户A的兴趣候选集。计算两个用户的形似度可以使用下式的杰卡德相似度去度量:

也可以使用余弦距离:

计算余弦距离时,是把每个用户对应的商品评价看作一个向量,每个维度表示对对应商品的评价,上式的评价是01值,0表示兴趣未知,1表示有兴趣。在使用余弦距离计算用户相似度时还存在一个问题,就是对用户所有喜欢的物品都一视同仁,显然如果两个用户同时喜欢一个物品,这个物品是冷门的比是热门的能够提供更多的相似度,所以可以修正余弦相似度的计算得到下式:

在上面的式子中,如果物品$i$很多人喜欢,那么能提供的相似度就小,反之则大。计算出用户相似度后,就可以选择top K相似的用户集合$S(u,K)$,从这些用户中选出共同喜欢的物品,得到兴趣候选集,再从兴趣候选集中使用下式计算出对各个物品的兴趣程度进行排序,得到最终的推荐结果:

其中$r_{v,i}$表示用户$v$对物品$i$的评价,不一定是01值,我们在计算用户相似度时使用了01值计算余弦距离,而在计算对物品的兴趣程度时使用用户对物品的评价,这个评价可以不是01值。计算相似度时的01值可以通过设置一个评价阈值或通过其他数据收集渠道得到。

基于用户的协同过滤方法是通过计算用户相似度进行推荐的,所以推荐的物品会呈现一定的社区性,得到的结果是一个人群热衷于一个物品集合,这种方法比较适合用于用户数量不怎么变化或物品数量经常变化的场景,也适合用于社区性热点的推荐场景,在新闻推荐场景中比较常见。

基于物品的协同过滤

基于物品的方法主要是利用物品的用户行为形似性聚类形成一个集合,将这个集合推荐给喜欢这个集合内部一件或多件物品的用户。当需要召回用户A的候选集时,先找到该用户喜欢的物品的相似集合,从这些集合中挑选出该用户还没发掘的物品作为用户A的兴趣候选集。在计算物品相似度时,主要用到了用户对该物品的行为信息,0表示用户对该物品兴趣未知,1表示用户对该物品感兴趣,有下式:

同样的,也可以使用余弦距离:

同样的,一个用户喜欢很多物品,另一个用户喜欢很少物品,如果后者同时喜欢这两个物品,那么所能提供的相似度会比前者更大,所以可以修正余弦距离:

最后对于用户$u$的兴趣候选集,使用下式计算兴趣程度:

基于物品的协同过滤是通过计算物品的用户行为相似度进行推荐的,所以推荐的物品更能反映用户的个性,不同用户喜欢不同物品,所以基于不同物品得到的推荐结果又是不同的,这种方法能够通过用户行为来为用户进行推荐。这种方法适用于物品数量不怎么变化或用户数量经常变化的场景,也适用于用户的个性推荐场景,在商品推荐场景中比较常见。

基于内容的协同过滤

基于内容的协同过滤,主要是挖掘用户信息或物品信息,从这些信息中去聚类用户和物品,然后从聚类中进行推荐。无论是基于用户还是基于物品,方法都是从用户行为中去挖掘的,但是用户画像和物品内容还有一些可以利用的信息,利用这些信息进行推荐,就是基于内容的协同过滤。

基于模型的协同过滤

基于模型的方法主要有矩阵分解,隐语义模型等等,这些模型通过对用户和物品参数化,使用学习算法去学习这些参数,利用模型参数对推荐结果进行预测。