推荐系统与推荐算法综述
一、时代背景
大数据时代产生了海量的数据,数据对企业来说是一种隐形的资产,里面蕴含了丰富的价值。但是,大数据体量之大、种类之繁以及产生速率之快,海量的数据并不都是有价值的,用户从海量的数据中提取有用的、针对性的信息需要花费很大的时间成本。比如,当你面对如此多的电影列表,你想找到一部最符合自己兴趣的电影,因为电影数量之多,你不可能把所有的电影简介都看一遍。那么怎么解决这个问题呢?电影平台搜集你过去看过的全部电影,分析了解你对什么类型电影感兴趣,然后针对性的把你感兴趣的电影主动的罗列给你,你不用花费太多的精力便可快速找到满足自己需求的电影。推荐系统便是为解决这类实际需求而诞生了。
推荐系统的兴起与互联网的发展息息相关。最早的自动化协同过滤系统可以追溯到 1994 年,明尼苏达大学双城分校计算机系的 GroupLens 研究组设计了名为 GroupLens 的新闻推荐系统。该工作 不仅首次提出了协同过滤的思想,并且为推荐问题建立了一个形式化的模型,为随后几十年推荐 系统的发展带来了巨大影响。该研究组后来创建了 MovieLens 推荐网站,一个推荐引擎的学术研 究平台,其包含的数据集是迄今为止推荐领域引用量最大的数据集。
历史上将推荐系统的研究推向高潮的事件非 Netflix 百万美金大赛莫属。2006 年,Netflix 宣布提供一百万美元奖金给第一个能将现有推荐算法的准确度提升 10%以上的参赛者。在 2006 年北京市商品住宅成交均价才 8 千元左右。重赏之下必有勇夫,这项百万美金大赛一经宣布,立即吸引了 186 个国家的 4 万多支参赛队伍鹿逐中原。随后几年,大量经典的推荐算法涌现出来。其中最有影响 力的当属 SVD++模型,这篇论文也在 2018 年的 SIGKDD 大会上被评选上了 Test of Time Award,实 至名归。Netflix 比赛对推荐系统的影响,可以类比到 ImageNet 挑战赛对图像识别技术发展的影响。
二、推荐系统的特点
作为一种信息过滤系统,推荐系统具有以下两个最显著的特性:
(1)主动化。从用户角度考虑,门户网站和搜索引擎都是解决信息过载的有效方式,但它们都需要用户提供明确需求,当用户无法准确描述自己的需求时,这两种方式就无法为用户提供精确的服务了。而推荐系统不需要用户提供明确的需求,而是通过分析用户和物品的数据,对用户和物品进行建模,从而主动为用户推荐他们感兴趣的信息。
(2)个性化。推荐系统能够更好的发掘长尾信息,即将冷门物品推荐给用户。热门物品通常代表绝大多数用户的兴趣,而冷门物品往往代表一小部分用户的个性化需求,在电商平台火热的时代,由冷门物品带来的营业额甚至超过热门物品,发掘长尾信息是推荐系统的重要研究方向。
长尾数据
互联网上的很多数据分布都属于长尾分布,即大部分数据的使用频率很低,只有少部分的数据被广泛使用,这小部分数据其实就是热门数据,但如果把热门数据和冷门数据的使用量作对比,会发现冷门数据的使用量远远大于热门数据的使用量,这也许和人们想象中相反,但这是经过长时间的统计分析得出的结论。用户的行为数据其实也符合这一规律,无论从物品角度的物品流行度,还是用户角度的用户流行度都符合长尾分布。
三、推荐系统的核心--推荐算法
1、独立推荐算法
(1)基于人口统计信息的推荐:这一类是最简单的推荐算法了,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后进行推荐,例如对一定收入和年龄的用户推荐购房广告。目前在大型系统中已经较少使用。
(2)基于规则的推荐:这类算法常见的比如基于最多用户点击,最多用户浏览等,属于大众型的推荐方法,在目前的大数据时代并不主流。
(3)基于协同过滤的推荐
协同过滤推荐是目前学术界研究得最广泛的方法。它不需要使用用户或者物品的档案 资料,只需要收集用户历史的行为记录,发掘其中用户和用户、物品与物品之间潜在的相似性, 并基于这种群组的相似性完成推荐。
协同过滤模型可以分为两类:基于邻域的方法和基于模型的 方法。
基于用户和物品的协同过滤是通过统计学方法对数据进行分析的,因此也称为基于内存的协同过滤或基于邻域的协同过滤;一般来说,基于用户的协同过滤适用于社交和群体类推荐,例如新闻、热点等;基于物品的协同过滤更适用于个性化推荐,例如个人电台、个人阅读等。
基于模型的协同过滤(用户和物品)是主流,该方法有:用关联规则做协同过滤、用聚类算法做协同过滤、用分类算法做协同过滤、用回归算法做协同过滤、用矩阵分解做协同过滤、用隐因子模型做协同过滤等。
(4)基于内容的推荐
基于内容的信息推荐方法的理论依据主要来自于信息检索和信息过滤,所谓的基于内容的推荐方法就是根据用户过去的浏览记录来向用户推荐用户没有接触过的推荐项。
需分别建立用户和物品的档案资料,从而计算用户和物品之间的相似度。
物品的档案通常由它的各种属性资料构成,以服装领域为例,可以为价格、品牌、类别、颜 色、风格、款式、尺寸等等。
用户的档案可以包括他们的人口统计学资料,也可以是从他们的历史交互过的物品档案中构建,例如,用户经常购买杰克琼斯的服装,说明她比较喜欢这个服装品牌。
建立了用户和物品的档案之后,可以直接计算相似度,也可以把它们当做特征放入机器学习的模型。
基于内容的推荐模型的优点是,只要得到了物品或者用户的档案,就可以处理冷启动的问题;其次,因为档案都是显式的特征,最终的模型有比较好的可解释性。
(5)基于知识的推荐
基于知识的推荐(Knowledge-based Recommendation)在某种程度是可以看成是一种推理(Inference)技术,它不是建立在用户需要和偏好基础上推荐的。基于知识的方法因它们所用的功能知识不同而有明显区别。效用知识(Functional Knowledge)是一种关于一个项目如何满足某一特定用户的知识,因此能解释需要和推荐的关系,所以用户资料可以是任何能支持推理的知识结构,它可以是用户已经规范化的查询,也可以是一个更详细的用户需要的表示。
推荐方法 | 优点 | 缺点 |
---|---|---|
基于规则推荐 | 能发现新兴趣点 不要领域知识 能考虑非产品特性 |
规则抽取难、耗时 产品名同义性问题 个性化程度低 |
协同过滤推荐 | 新异兴趣发现、不需要领域知识 随着时间推移性能提高 推荐个性化、自动化程度高 能处理复杂的非结构化对象 |
稀疏问题 可扩展性问题 新用户问题 质量取决于历史数据集 系统开始时推荐质量差 |
基于内容推荐 | 推荐结果直观,容易解释 不需要领域知识 |
新用户问题 复杂属性不好处理 要有足够数据构造分类器 |
基于知识推荐 | 能把用户需求映射到产品上 能考虑非产品属性 |
知识难获得 推荐是静态的 |
2、综合推荐算法
推荐算法虽然都可以为用户进行推荐,但每一种算法在应用中都有不同的效果。UserCF的推荐结果能够很好的在广泛的兴趣范围中推荐出热门的物品,但却缺少个性化;ItemCF能够在用户个人的兴趣领域发掘出长尾物品,但却缺乏多样性;基于内容推荐依赖于用户特征和物品特征,但能够很好的解决用户行为数据稀疏和新用户的冷启动问题;矩阵分解能够自动挖掘用户特征和物品特征,但却缺乏对推荐结果的解释,因此,每种推荐方法都各有利弊,相辅相成。
实际应用的推荐系统通常都会使用多种推荐算法,比如使用基于内容或标签的推荐算法来解决新用户的冷启动问题和行为数据稀疏问题,在拥有了一定的用户行为数据后,根据业务场景的需要综合使用UserCF、ItemCF、矩阵分解或其他推荐算法进行离线计算和模型训练,通过采集用户的社交网络数据、时间相关数据、地理数据等综合考虑进行推荐,保证推荐引擎的个性化,提高推荐引擎的健壮性、实时性、多样性和新颖性。
在推荐算法的组合方式上,有研究人员提出了七种组合思路
(1)加权(Weight):加权多种推荐技术结果。
(2)变换(Switch):根据问题背景和实际情况或要求决定变换采用不同的推荐技术。
(3)混合(Mixed):同时采用多种推荐技术给出多种推荐结果为用户提供参考。
(4)特征组合(Feature combination):组合来自不同推荐数据源的特征被另一种推荐算法所采用。
(5)层叠(Cascade):先用一种推荐技术产生一种粗糙的推荐结果,第二种推荐技术在此推荐结果的基础上进一步作出更精确的推荐。
(6)特征扩充(Feature augmentation):一种技术产生附加的特征信息嵌入到另一种推荐技术的特征输入中。
(7)元级别(Meta-level):用一种推荐方法产生的模型作为另一种推荐方法的输入。
四、推荐方式及其效果评估
推荐系统在为用户推荐物品时通常有两种方式:
1、评分预测
此方法一般通过学习用户对物品的历史评分,预测用户可能会为他没有进行评分的物品打多少分,通常用于在线视频、音乐等服务的推荐。
评分预测的效果评估一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算。对于测试集T中的一个用户u和物品i,令r(ui)是用户u对物品i的实际评分,而ȓ(ui)是推荐系统给出的预测评分,则有:
2、TopN推荐
此方法一般不考虑评分,而是为用户提供一个个性化推荐列表,通过预测用户对物品的兴趣度对列表进行排序,选取其中前N个物品推荐给用户,通常用于电子商务、社交网络、互联网广告推荐。
TopN推荐一般通过准确率(precision)、召回率(recall)和F1值(平衡分数)度量。令R(u)是为用户推荐的物品列表,T(u)是用户实际行为列表。
五、推荐系统的部署--架构设计
1、online部分架构
2、offline部分架构
六、各企业推荐系统示例
1、 淘宝的推荐系统
淘宝的推荐系统,描述了推荐引擎搭建的整体架构,包括离线的分布式计算和存储、监控、数据统计和分析、实验平台等。
整体流程大致这样:通过后台的分布式计算,将算法产生的算法结果数据存储进入一种介质中,首推hbase。然后,通过一种叫做云梯的机制将算法结果推入中间层介质中,供推荐系统在线部分调用。在线部分提供引擎和实验分流,用户的行为将存储进入hadoop中,数据统计分析平台由hive来搭建,主要用来分析和统计hadoop中的用户行为log。
2、Netflix的推荐系统
netflix的推荐系统,描述了推荐引擎搭建的整体架构,采用了三种计算方式的结合。整体流程:用户通过UI产生事件跟行为,然后分发给离线(我理解的是按天存储)、近线存储(不提供历史,存储当天用户实时行为。不知道理解是否有误),离线的计算利用离线的数据建好模型供实时调用,近线的计算利用用户的实时行为计算得出规则供实时调用,最后在线的计算通过前两种方式来得到最终的推荐结果.
3、优酷的推荐系统
传送门:详细信息