基于Spark实现推荐算法-1:推荐算法简介

个性化推荐系统简介

个性化推荐系统的定义在 1997 年由 Resnick 和 Varian 提出:利用互联网向用户提供信 息和建议,帮助用户选择产品,或模拟售货员帮助用户完成购买行为的系统 。通常推荐 由三个要素组成:推荐算法、用户、候选推荐项目。简单来说,一次推荐过程就是推荐算 法从候选推荐项目中挑出某些项目给用户。

目前个性化推荐系统已经在电子商务、视频、音乐、新闻、博客等领域得到了广泛应 用。通常这些领域的网站和应用会推荐若干商品或者作品给用户,这些推荐项目通常以“猜 你喜欢”、“购买此商品的顾客也同时购买”、“相似的商品”等形式出现,所推荐的物品便 是推荐系统通过推荐算法从海量物品中挑选出的。由于推荐系统会根据用户的历史行为数 据给出因人而异的推荐结果,所以称之为个性化推荐。

一套完整的个性化推荐系统通常包括用户信息收集、推荐模型计算、推荐结果展示三 个部分。个性化推荐系统首先收集用户的网络操作行为——如浏览、评分、购买等,将这 些行为数据存储到数据仓库中。然后通过机器学习、数据挖掘等相关技术来对这些数据进 行分析,更进一步可以从这些历史数据中学习用户的兴趣爱好,运行推荐算法生成推荐模 型。有了推荐模型,便可以为用户提供个性化的推荐服务,实现主动推荐的目的。个性化 推荐技术可以充分提高信息系统或者站点的服务质量和使用效率,从而吸引更多的用户 。

个性化推荐系统的输入数据可以有多种来源途径,通常分为显示输入和隐式输入两种 类型。显示输入是指用户明确表达喜好的行为,例如给电影评分、给微博点赞、购物后给 予好评或差评等。隐式输入则一般是非特意的行为,如浏览商品详情页面、查看电影评价、 搜索关键词等,这些行为并不代表用户喜欢或讨厌某个物品,但是推荐系统能够从中挖掘 出用户的兴趣信息。

个性化推荐系统的输出也是多样化的,有各种各样的形式。最常见的是推荐列表形式,
如亚马逊等电子商务网站的推荐商品列表、YouTube 等视频网站的推荐影片列表、微博等 社交网站的推荐关注用户等。这类是最直接的推荐形式,明确告诉了用户这些是推荐结果, 属于显示的推荐。另一类形式是比较隐式的推荐:购物网站在关键词搜索结果列表中加入 推荐的结果;新闻网站根据推荐算法优化文章的排序;网络问答社区把用户可能感兴趣的 话题优先展示。这些推荐系统融入到了传统的系统模块中,起到提升原有系统功能的效果。

推荐算法分类

推荐算法是推荐系统的核心,直接决定着推荐系统的性能和效果。依据推荐方法的不 同,通常推荐算法可以分为如下几大类:基于内容的推荐(Content-Based Recommendation), 协同过滤推荐 (Collaborative Filtering Recommendation) , 混 合 型 推 荐 (Hybrid Recommendation) 。

推荐算法分类

基于内容的推荐

基于内容的推荐是用项目内容或特征来定义所要推荐的项目或对象,然后系统基于用户评价对象的特征学习用户的兴趣,依据用户资料与待预测项目的匹配程度进行推荐。项目或对象的特征通常是文本内容,比如标题、名称、标签及该物品的其他元数据。基于内容的推荐系统不可避免地受到有限的特征信息获取技术的约束,根据推荐对象的不同,可能会要用到文本挖掘技术、图片识别技术、视频挖掘技术等。特别是自动提取多媒体数据内容特征的相关技术还不是很成熟,导致基于内容的推荐算法在这方面的相关应用受到了很大限制。

协同过滤推荐

协同过滤(Collaborative Filtering,CF)是一种根据用户对各种产品的交互与评分来推荐 新产品的推荐系统技术。协同过滤最突出的优点就在于它的鲁棒性,适用于多种输入数据: 无论是“显式”的输入数据(例如在电影网站上进行评分)还是“隐式”的(例如用户访 问了一个产品的页面但是没有对产品评分)都可以用来做协同过滤。仅仅根据这些交互, 协同过滤算法就能够知道哪些产品之间比较相似以及哪些用户之间比较相似,然后就可以 做出新的推荐 。相比与基于内容的推荐算法,协同过滤推荐算法不需要分析项目的内 容和特征,所以可以不依赖于特征信息获取技术,从而适用于各种类别的项目。

总体上来说,协同过滤是一种利用集体智慧的方法,使用部分或所有用户的行为数据来进行推荐,不同用户通过推荐系统间接地相互协作,来获取各自感兴趣的信息。协同过 滤的核心是找出用户或项目的邻居,即相似的用户或项目,然后取若干个最近邻居推荐给 用户。根据具体的实现,协同过滤又可以被分为多个子类别,分别是基于记忆的协同过滤 (Memory-Based Collaborative Filtering),基于模型的协同过滤(Model-Based Collaborative Filtering),基于社交网络关系的协同过滤(Social-Based Collaborative Filtering)等。

基于记忆的协同过滤

基于记忆的协同过滤算法使用全部或大部分用户—项目数据来生成预测。基于记忆的 协同过滤常用的有两种 :基于物品的协同过滤(Item-Based Collaborative Filtering, Item-Based CF) 和基于用户的协同过滤 (User-Based Collaborative Filtering,User-Based CF)。

对于类似微博、新闻、论坛、社交和知识问答等内容极多、候选推荐项目庞大的系统, User-Based CF 方法通常优于 Item-Based CF。因为这种情况下,物品相似度的计算量巨大, 而且需要频繁更新,而使用 User-Based CF 能够避免计算物品间的相似度。相反,对于一 个用户数量远超过物品数量的应用来说,此时 Item-Based CF 的性能可能比 User-Based CF 更优,这是由于此种情况的物品间相似度要比用户间相似度更容易计算。由此可见,推荐 系统的设计者必须根据应用的特点来选择合适的算法 ,不能一概而论。

与基于内容的推荐算法相比,Item-Based CF 和 User-Based CF 有下列优点:

    1. 能够过滤难以进行内容分析的信息,如艺术品、音乐、文本、视频;
    1. 可以基于一些复杂的,难以描述的概念进行过滤,如品质、风格、流行度等。

然而,Item-Based CF 和 User-Based CF 也存在着以下的缺点:

    1. 稀疏性问题。如果用户对物品的评价非常稀疏,没有充足的数据用于计算相似性,
      那么基于评价所得到的用户或物品间的相似性可能不准确;
    1. 可扩展性问题。随着用户和物品的增多,数据量将会剧增,系统的性能会越来越
      低;
    1. 冷启动问题。如果某一物品从来没有被评价过,则该物品不会被列为相似物品,
      那么这个物品就不可能被推荐。类似的,对于一个从未评价过物品的用户,无法 获得推荐。

基于模型的协同过滤

Model-Based CF 简单来说是先用历史数据训练得到推荐模型,再用此模型进行预测的推荐算法。常见的模型算法包括基于概率的朴素贝叶斯算法、聚类算法和基于矩阵分解的算法等 。

常用的矩阵分解算法有:正则化矩阵分解(Regularized Matrix Factorization),带偏置 的矩阵分解(Biased Matrix Factorization),交替最小二乘法(Alternating Least Squares,ALS) 和奇异值分解(Singular Value Decomposition,SVD)。这些算法的基本思想都是将稀疏且 高维的用户—物品评分矩阵分解为两个低维矩阵,分别表示用户的特征和物品的特征。用 户的特征矩阵可以代表用户的兴趣,同样的,物品的特征矩阵暗含了物品的特点,这两个 矩阵的乘积能反应出用户对物品的喜好程度 。所以该类方法的主要工作就是计算出用户 的特征矩阵和物品的特征矩阵。

基于社交网络关系的协同过滤

简单来说,是一种使用用户的社交关系数据、用户好友的喜好数据等社交类数据来进行推荐的算法。该类算法适合于微博、微信等拥有用户社交关系数据的系统。

混合型推荐

混合推荐是指将多种推荐技术综合,取长补短,以此来获得更好的推荐效果。常用的
方案是将协同过滤技术与另一种算法结合,然后将不同方法得出的推荐结果进行筛选和融
合,从而提高推荐效果。