推荐系统

推荐系统属性:

系统角色

系统角色抽象来看,推荐系统中一般有四个重要的角色:
用户:用户是系统的使用者
物品:物品就是将要被推荐的候选对象
情景:情景是推荐时所处的环境
匹配引擎:而引擎就是用于匹配用户和物品的核心技术。例如,亚马逊网站的顾客就是用户,网站所销售的商品就是物品,浏览的地理位置和时间就是情景,而研发团队提供的关键算法就是匹配引擎。

相似度

推荐里没有用户的主动输入,而是通过研究物品和物品之间、用户和用户之间存在多少相似的特征,来达到建议的目的。相比较的对象都是对等的,因此业界称之为相似度。从技术实现的角度来理解,相似度和相关性是互通的,因此相似度同样可以利用向量空间模型VSM、概率模型等来刻画。

相似度传播框架

现实生活中的推荐,常常来源于“口口相传”,上述的两个假设体现了这点同样适用于线上。而且我们可以利用相似度的传播性,帮助用户进一步发现更多潜在的兴趣。例如,如果物品a和b相似,b和c相似,那么a和c也可能存在一定的相似度。

推荐系统分类

依据的属性来划分:
基于内容:

基于知识:这种方式和基于内容的推荐比较相近,不过多了一些通过人类知识定义的逻辑规则,因此需要人为地提供大量专业领域的知识,构建成体系的知识库,并和用户产生交互。根据用户交互的形式,又可以细分为基于约束的和基于实例的。两者的形式比较类似,都是让用户指定需求,然后推荐系统给出答案。如果找不到合理的,那么用户就需要再次修改需求。这个方式和搜索更为接近,需要用户较多的精力,可惜在互联网时代,用户都是偷懒的,很少有人愿意这么做。综合建立知识体系和用户参与的成本,这个方法一般仅限于学术研究。当然,它也有更为精准的优势。

基于用户行为:

相似度传播 的方式来划分:
无传播:通常是基于内容和知识的推荐,都没有考虑用户对物品的访问行为。

协同过滤(Collaborative Filtering):协同过滤是基于最直观的“口口相传”来传播的,假设我们愿意接受他人的建议,尤其是很多人都向你建议的时候。其主要思路就是利用已有用户群过去的行为或意见,预测当前用户最可能喜欢哪些东西。根据推荐依据和传播的路径,又可以进一步细分为基于用户的过滤和基于物品的过滤。

image.png

各种分类推荐系统的评价标准

准确性:推荐系统的准确性在很大程度上依赖于系统中用户数和物品数之间的比例。通常情况下,一小部分相似度高的用户,其价值远远高于一大部分相似度较低的近邻。同理,对于物品数量远远大于用户数量的系统(例如内部文献系统)而言,采用基于用户的协同过滤则更为精准。

高效性:虽然数据挖掘的部分是离线计算,并不要求实时返回结果,但我们也不希望其消耗的时间过于离谱,更何况,目前有些应用已经需要实时性的挖掘结果了。当用户数量远远大于物品数量时,物品的相似度计算所消耗的资源要远远小于用户的相似度计算,因此基于物品的协同过滤效率更高。反之,基于用户的协同过滤会更高效。

稳定性:物品和用户总是在不断变化。变化就意味着用户和物品之间的关系需要更新,协同过滤的结果也需要做出相应的改变。如果系统中物品的集合比用户的集合更稳定,那么基于物品的方法会避免频繁地数据计算和更新,因此更实用一些。反之,基于用户的方法更适用于用户集合相对稳定的系统。

混合模型

混合的方式大体上可以分为微观混合和宏观混合。
微观混合:将不同的特征混合起来使用,例如将基于内容和基于用户行为的相似度计算结合起来,这样基于内容的方式也可以加入协同过滤的传播框架,解决其面临的冷启动问题。或者是将用户的社交信息加入用户近邻的选择,提高协同过滤推荐的可信任度。
宏观混合:相对于微观混合,宏观的方式不关心特征的合并,而是注重将不同推荐系统的结果有机地结合起来。只要是能推送结果的系统,都可以加入进来,因此更为灵活。例如,我们可以让基于用户、基于物品和基于情景的三个系统同时工作,然后根据合并、加权、轮播等方式进行混合。

推荐系统架构

image.png

用户建模:根据用户的人口统计学信息和用户行为数据,建立用户画像等模型,刻画其短期和中长期的兴趣。

物品建模:根据物品的领域属性,以及用户访问这些物品的数据,建立物品画像模型,刻画其本质特征。

推荐算法:根据用户和物品的建模,通过不同的推荐方式进行演算,最终找到能与用户或物品输入所匹配的推荐物品。

混合模块:根据不同的混合策略,将多种方式的推荐结果进行合并。因为考虑到实时性,一般都被放入离线处理。当然,如果系统足够轻量级,混合逻辑并不复杂,数据量也足够小,是可以放入在线部分来处理的。

结果存储:将推荐算法的挖掘结果保存下来,以便于在线的实时访问,倒排索引同样是不错的选择。当这些结果数据达到一定的规模,或者是包含了比较复杂的商业逻辑时,就可以考虑直接使用搜索引擎来协助了。在线部分涉及如下内容。

数据收集:因为用户的行为会作为很多推荐算法的数据来源,因此需要通过Flume之类的框架来收集用户访问的日志。当然,用户使用搜索和推荐引擎本身的数据也会被记录,并以此来对之后的算法做进一步的优化。

开源搜索系统

最近几年开源的推荐引擎或算法项目开始逐步崭露头角,这里介绍一个有代表性的项目——Apache的Mahout(http://mahout.apache.org)。Mahout这个单词本身的意思是大象的饲养者和驱赶者。Mahout的分布式挖掘中会使用Apache Hadoop作为数据的存储,来实现更高的可伸缩性和容错性,而Hadoop的徽标上有一头黄色的大象,Mahout希望能让这头大象发挥更好的作用,这大概就是“Mahout”这个名字的由来。

你可能感兴趣的:(推荐系统)