基于协同过滤的推荐算法

前言

之前写来基于内容的推荐方法,现在想要分析一下基于协同过滤的推荐方法,网上与很多文章介绍来,但是站在不同的角度思考同一个问题,或许让你更加理解。

基于协同过滤的推荐:概念

协同过滤(Collaborative Filtering)技术,是推荐系统中应用最为广泛的技术之一,它基于一组兴趣相同的用户进行推荐。协同过滤基于这样的假设:为用户找到他真正感兴趣的内容的好方法是,首先找他与他兴趣相似的用户,然后将这些用户感兴趣的内容推荐给此用户。类似朋友们推荐,毕竟生活场景下大家都会向朋友咨询,而得到朋友的推荐,协同过滤就是朋友,它来帮你推荐。

wiki上的定义则是:协同过滤(英语:Collaborative Filtering),简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐使用者感兴趣的资讯,个人透过合作的机制给予资讯相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选资讯,回应不一定局限于特别感兴趣的,特别不感兴趣资讯的纪录也相当重要。

协同过滤技术可以分为三类:基于用户(User-based)的协同过滤;基于项目(Item-based)的协同过滤;基于模型(Model- based)的协同过滤。

不同点

如果你要问我跟基于内容有什么区别?我可能就会想到是角度不一样,一个是基于商品来推荐,协同是基于用户来推荐。

  • 基于内容的推荐,主要构建内容特征,不需要用户特征,需要一个关联关系:用户与内容的关联,包括用户浏览、购买内容的关联关系。一个商品被用户购买、收藏、浏览等行为,会让我们推荐该商品相似的其他商品给用户。
  • 协同过滤:利用用户人口统计特征、商品特征一起构建特征,这个特征可以是放到用户侧或者内容侧,然后计算相似度,把一个用户购买、浏览的商品推荐给他相似的用户。如果是单纯的基于用户推荐可能不会关注商品特征,直接拿人口统计特征来构建用户特征。这里的协同应该是共同的意思,用户、内容共同起作用。

协同过滤有那些方法

参考很多博客种,大家都提到的协同过滤有3种:

  • 基于用户的协同过滤
    基于用户其实就是构建用户特征,内容特征也要融入用户特征,计算用户与用户之间的相似度,得到用户的相邻用户,从而开始推荐其他用户有兴趣的内容。

  • 基于项目的协同过滤
    基于项目其实就是构建内容特征,这里的项目就是内容,用户特征要融入内容特征,计算内容与内容之间的相似度,得到内容的相似内容,从而开始推荐把用户推荐给内容,哈哈,反过来了,但是呈现的用户端效果还是把商品推荐给用户。

  • 基于模型的协同过滤
    说的直白一点,这就是用机器学习、深度学习等模型来做推荐,好吧,上面两种方法可能不能算机器学习模型吧,主要解决的问题:稀疏数据如何来推荐?商品很多,用户很多,但是两者关联起来的数据就比较少,大部分都是两者没有关联的,用模型来预测它们的关联关系,把关联关系最强的内容推荐给用户,从而完成推荐,这也是当前主流的推荐算法, 主流方法有:用关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型来解决。这个下面会持续详解。

基于模型的协同过滤:聚类算法

基于聚类算法其实跟基于内容、基于用户的协同过滤是差不多的,聚类主要分从用户角度、内容角度两方面做聚类:

  • 基于用户聚类
    基于用户聚类考虑用户,以一定的距离度量方式来对用户聚类,这里就可以采用相似度度量方式,然后把同一个类簇中的用户的商品推荐给其他用户,可以把这些用户的商品聚集,然后取TOP n 做用户推荐,如果一个用户从来没有购买,但是同一个类簇中其他用户购买的商品会被推荐给该用户,适合做新用户的推荐。
  • 基于内容聚类
    基于内容聚类同基于用户类似,只不过把用户推荐给商品,商品类簇中的所有用户共享这些商品,虽然有些商品从来没有被购买,但是这种方式可以帮助找到目标人群,适合新商品的推荐。

相应的聚类算法都可以用上,思想都是上述这样的。
缺点:一个类簇都是新内容、新用户,这些用户、内容就永远不会有推荐,比如新用户是一个类簇群体,这些新用户没有购买过商品,也就无法为他们推荐,不过在后期的购买过程中可能会购买商品,只要用户有所行为,后期可以为用户推荐。

基于模型的协同过滤:分类算法

采用分类的思想,对商品构建训练集,每个商品有一个标签:推荐或不推荐,这样可以来训练一个模型,对其他商品做一个分类,电商平台这种算法比较适用,商品训练集比较容易构成,好评数高于一定的数量就是推荐,短期销量高于阈值的就是推荐。一般采用来逻辑回归、朴素贝叶斯分类做这个操作。为啥是逻辑回归而不是看起来更加高大上的比如支持向量机呢?因为逻辑回归的解释性比较强,每个物品是否推荐我们都有一个明确的概率放在这,同时可以对数据的特征做工程化,得到调优的目的。目前逻辑回归做协同过滤在BAT等大厂已经非常成熟了。我再想,能不能把推荐的商品再跟用户进行关联,再过滤一次,将相关性高的商品推荐过来。

优点:

  • 算法简单、分类快速
  • 可解释强

缺点:

  • 似乎不考虑用户特征,完全构建商品相关特征,当然也可以把用户特征作为商品特征,考虑进去。

基于模型的协同过滤:回归算法

用回归算法做协同过滤比分类算法看起来更加的自然。我们的评分可以是一个连续的值而不是离散的值,通过回归模型我们可以得到目标用户对某商品的预测打分。推荐或不推荐,比较常见的例如:线性回归、回归树、支持向量回归、GBDT等。

优点:

  • 更加灵活,打分只是评估,可以依据分数进行一个筛选
  • 可解释性强

缺点:

  • 似乎不考虑用户特征,完全构建商品相关特征,当然也可以把用户特征作为商品特征,考虑进去。

其他模型

  • 基于深度学习的推荐,比如比较主流的用两层神经网络来做推荐算法的是限制玻尔兹曼机(RBM),这里其实用深度学习做分类或者回归模型
  • 图模型,这里可以做用户的图模型,也可以做商品的图模型,SimRank系列算法等,
  • 目前主流的矩阵分解推荐算法主要是SVD的一些变种,比如FunkSVD,BiasSVD和SVD++。这些算法和传统SVD的最大区别是不再要求将矩阵分解为 U ∑ V T U\sum V^T UVT的形式,而变是两个低秩矩阵 P T Q P^TQ PTQ的乘积形式。

问题解答

  • 协同过滤的特征只关注用户或者只关注内容嘛?
    其实不是这样的,只关于某个领域不是协同过滤,协同过滤算法要把两者集合起来,可以侧重用户或内容,基于你的业务需求可以做选择,两者的优点、缺点上面都有。

  • 参考的博客是17年写的,如今推荐技术有大的突破嘛?
    17年初的这篇文章是参考了一篇国外的会议文章结合我的学习与项目总结的。这几年荐技术无大的突破,唯一就是能说深度学习用于推荐越来越普及,强化学习用于推荐也开始出现了。用户画像特征、商品画像也越来越精细。

  • 业务问题:如果品牌商新商品硬推,如何实现推荐算法与运营的结合?
    这个问题是非常具有意义的,品牌商的新商品需要推广,传统的推广手段是广告、优惠促销、宣传等,如何利用推荐等技术使得商品曝光度加大,甚至成为爆品,这也是平台所需要研究的,这一快如果粗略做法就是在精排系统中强行植入,直接算商品相似度,把新商品植入到排序中。

推荐模型的流程

  • 离线:召回,得到千级别的商品
  • 近线:粗排,得到百级别的商品
  • 在线:精排,得到十级别的商品

推荐的未来及总结

由于集成学习的成熟,在推荐算法上也有较好的表现,未来这一块的发展也比较多,深度学习也会是推荐领域有比较大的发展。协同过滤也有一些问题:

  • 冷启动的问题,针对新用户、新商品没有比较好的推荐策略,但是我觉得可以利用混合推荐的方法来解决该问题,基于用户、内容的推荐算法可以解决该问题。
  • 用户场景的问题
    用户的独特喜好比较难挖掘,某些小众对需求,或者因为用户可能受文化影响,突然对某类感兴趣,这个难以挖掘。

社招、校招内推时刻

本人在阿里巴巴工作,业余时间做了社招、校招的公众号,可以内推大家,免筛选直接面试,公众号的一些文章也帮助大学、研究生的一些同学了解校招、了解名企,工作几年的同学想换工作也可以找我走社招内推,同时大家对文章有问题,也可以公众号找我,扫码关注哦!

参考博客

协同过滤推荐算法总结
个性化推荐系统实践应用

你可能感兴趣的:(机器学习,协同过滤,算法,机器学习,人工智能)