精华内容
下载资源
问答
  • 推荐引擎的发展让选择不明确的用户更加了解她们的需求和喜好。下面以内容产品和电商产品为例,谈谈推荐引擎在产品中发挥的巨大作用。 一、推荐引擎的分类 1.根据大众行为的推荐引擎(对每个用户给出相同的推荐) ...

    在信息时代的今天,大数据为用户获取方方面面的信息提高了效率,更可以智能的帮助用户从海量内容中快速找到想要阅读的信息,或者从海量商品中快速找到想要购买的商品。推荐引擎的发展让选择不明确的用户更加了解她们的需求和喜好。下面以内容产品和电商产品为例,谈谈推荐引擎在产品中发挥的巨大作用。

    一、推荐引擎的分类

    1.根据大众行为的推荐引擎(对每个用户给出相同的推荐)

    内容产品和电商产品设计中,主要采用引导用户选择为目的来进行功能规划。以淘宝产品为例来说明这类产品设计

    搜索:用户针对性对想购买的商品名称进行搜索,同时根据辅助关键词特性标签来缩小搜索范围来展现最符合用户喜好的商品。

    分类:根据业务需求进行大分类帮助用户寻找有趣的商品,或者根据商品分类来挑选活动商品。例如:淘抢购中按照时间和分类进行特价秒杀(12个整点秒杀时间段);聚划算中按照商品主题进行个性分类(非常大牌、每日必抢、全球精选等)

    热门:手淘中按照生活中热门场景进行主题分类。展示用户普遍感兴趣的商品主题,如热门市场(女王范儿、腔调、星范、网红集合等)。基于用户感兴趣的话题进行商品分类增强了用户身份认知,将人的兴趣爱好和商品联系起来赋予人格化。

    关注:微淘中关注的店铺动态,淘宝达人动态等主动关注内容。

    推荐:微淘中“微淘发现”动态栏目组合了大量不同主题故事的淘宝达人内容,通过推荐热门的主题事件,将商品故事化帮助用户更好选择高品质商品。其中推荐内容涵盖关注店铺、精选店铺、红人店铺。另外还有热门话题榜和买家秀内容推荐。

    二.个性化引擎推荐

    1.根据用户的口味和喜好给出更加精准的推荐,帮助用户快速精准的找到想要购买的商品。

    往往个性化推荐算法基于用户的静态信息和动态行为信息来全方位推荐。

    静态信息:性别、年龄、收入、购物时间、价格等

    动态信息:搜索历史、浏览记录、购买记录、物品评价记录等

    这些详细的数据源形成有价值的用户消费行为大数据,大数据基础上建模应用提升了推荐效率,更加为平台增加了粘性。

    2.三类推荐机制

    人口统计推荐:根据用户基本信息发现用户相关度(用户画像的模型)

    简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户。淘宝目前有海量的用户消费喜好数据,用户群体的划分比较容易推荐相似商品。但是淘宝推荐没有融入社交朋友元素,往往只能复制商品链接到其他社交平台进行商品共享从而形成口碑传播,无法本平台上社交朋友间传播。

    基于内容的推荐:根据推荐物品或者内容的元数据发现物品或者内容相关性(内容元数据建模)

    根据推荐物品或内容的元数据,发现物品或者内容的相关性,然后基于用户以往的喜好记录,推荐给用户相似的物品。

    基于协同过滤的推荐

    根据用户对物品或者信息的偏好,发现内容或者物品本身相关性、发现用户的相关性

    用户协同过滤算法

    基于物品的过滤算法

    淘宝的混合推荐机制:采用多种推荐机制将结果分不同的区显示给用户

    越来越多的朋友反映淘宝猜你喜欢推荐越来越精准了,实际上可以从以下几个方面来分析:

    1.打开手淘首页时,手指下滑页面时底部会自动提醒“猜猜你喜欢的宝贝”。猜你喜欢区域中,第一行基于人口统计的推荐,组织用户喜欢的内容专题进行推荐,并且可以实时更新,为用户推荐四个不同的商品专题刺激用户点击。每个内容专题使用俏皮时髦的短语和商品图片来吸引眼球。

    2.后面是两列的单个宝贝推荐,基于物品协同过滤算法,根据用户最近浏览的商品推荐相类似的商品,相关商品按照用户历史浏览购买时间向下推荐,非常容易找到大量浏览喜好的商品,节约了商品寻找时间,帮助用户选择喜欢的商品。

    3.同时大量的商品按照用户喜好的商品分类,从下到下进行精准交错推荐,减少了用户审美疲劳。
      
      人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
    1.数据时代,影响推荐系统效果5个因素
    2.个性化推荐产品的核心指标有哪些?
    3.大数据教程视频推荐系统的常用算法概述
    多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台
    展开全文
  • 推荐引擎算法学习导论:协同过滤、聚类、分类 作者:July 出处:结构之法算法之道 引言 昨日看到几个关键词:语义分析,协同过滤,智能推荐,想着想着便兴奋了。于是昨天下午开始到今天凌晨3点,便研究了...

                推荐引擎算法学习导论:协同过滤、聚类、分类

     

    作者:July
    出处:结构之法算法之道

     

    引言

        昨日看到几个关键词:语义分析,协同过滤,智能推荐,想着想着便兴奋了。于是昨天下午开始到今天凌晨3点,便研究了一下推荐引擎,做了初步了解。日后,自会慢慢深入仔细研究(日后的工作亦与此相关)。当然,此文也会慢慢补充完善。

        本文作为对推荐引擎的初步介绍的一篇导论性的文章,将略去大部分的具体细节,侧重用最简单的语言简要介绍推荐引擎的工作原理以及其相关算法思想,且为了着重浅显易懂有些援引自本人1月7日在微博上发表的文字(特地整理下,方便日后随时翻阅),尽量保证本文的短小。不过,事与愿违的是,文章后续补充完善,越写越长了。

        同时,本文所有相关的算法都会在日后的文章一一陆续具体阐述。本文但求微言导论,日后但求具体而论。若有任何问题,欢迎随时不吝赐教或批评指正。谢谢。

     

    1、推荐引擎原理

        推荐引擎尽最大努力的收集尽可能多的用户信息及行为,所谓广撒网,勤捕鱼,然后“特别的爱给特别的你”,最后基于相似性的基础之上持续“给力”,原理如下图所示(图引自本文的参考资料之一:探索推荐引擎内部的秘密):

     

    2、推荐引擎的分类

         推荐引擎根据不同依据如下分类:

    1. 根据其是不是为不同的用户推荐不同的数据,分为基于大众行为(网站管理员自行推荐,或者基于系统所有用户的反馈统计计算出的当下比较流行的物品)、及个性化推荐引擎(帮你找志同道合,趣味相投的朋友,然后在此基础上实行推荐);
    2. 根据其数据源,分为基于人口统计学的(用户年龄或性别相同判定为相似用户)、基于内容的(物品具有相同关键词和Tag,没有考虑人为因素),以及基于协同过滤的推荐(发现物品,内容或用户的相关性推荐,分为三个子类,下文阐述);
    3. 根据其建立方式,分为基于物品和用户本身的(用户-物品二维矩阵描述用户喜好,聚类算法)、基于关联规则的(The Apriori algorithm算法是一种最有影响的挖掘布尔关联规则频繁项集的算法)、以及基于模型的推荐(机器学习,所谓机器学习,即让计算机像人脑一样持续学习,是人工智能领域内的一个子领域)。

         关于上述第二个分类(2、根据其数据源)中的基于协同过滤的推荐:随着 Web2.0 的发展,Web 站点更加提倡用户参与和用户贡献,因此基于协同过滤的推荐机制因运而生。它的原理很简单,就是根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性,然后再基于这些关联性进行推荐。

        而基于协同过滤的推荐,又分三个子类

    1. 基于用户的推荐(通过共同口味与偏好找相似邻居用户,K-邻居算法,你朋友喜欢,你也可能喜欢),
    2. 基于项目的推荐(发现物品之间的相似度,推荐类似的物品,你喜欢物品A,C与A相似,可能也喜欢C),
    3. 基于模型的推荐(基于样本的用户喜好信息构造一个推荐模型,然后根据实时的用户喜好信息预测推荐)。

        我们看到,此协同过滤算法最大限度的利用用户之间,或物品之间的相似相关性,而后基于这些信息的基础上实行推荐。下文还会具体介绍此协同过滤。

        不过一般实践中,我们通常还是把推荐引擎分两类:

    • 第一类称为协同过滤,即基于相似用户的协同过滤推荐(用户与系统或互联网交互留下的一切信息、蛛丝马迹,或用户与用户之间千丝万缕的联系),以及基于相似项目的协同过滤推荐(尽最大可能发现物品间的相似度);
    • 第二类便是基于内容分析的推荐(调查问卷,电子邮件,或者推荐引擎对本blog内容的分析)。

     

    3、新浪微博推荐机制

        在新浪微博推荐好友的机制中:1、我与A非好友,但我的好友中有不少人与A是好友,即我和A有不少共同的好友,那么系统便会把A也推荐给我(新浪称之为共同好友);2、我关注的人中有不少人关注了B,那么系统推测我也可能会喜欢B,从而亦会把B也推荐给我(新浪称之为间接关注人)。

        但新浪实际操作起来,这两种方式会搅在一起,如我关注的人中,有不少人关注了B,但事实上这关注B的不少人中有些也是我的好友。以上推荐方式,统称为基于相似用户的协同过滤推荐(无非就是找到:用户与用户之间千丝万缕的联系,或是从你的好友入手,或是从你关注的人入手)。

        当然,还有一类比如人气用户推荐,便是上文所述的基于大众行为的推荐,即人云亦云、跟风。系统推测大家都喜欢的,可能你也会喜欢。如大家都知道姚晨新浪微博粉丝数量排第一,则争相关注,最终粉丝量越推越高。两种推荐方式如下图所示:

        不过,上述不论是基于用户的推荐方式,还是基于大众行为的推荐都并没有真正寻找到用户与用户之间共同的兴趣,偏好和口味,因为很多的时候,朋友的朋友不一定能成为你自己的朋友,且有的人清高于世,你们都追求的,我偏不屑。所以,从分析用户发表的微博的内容相关入手,找到各自共同的关注点、兴趣点才是王道。当然新浪微博最近让用户选择给自己发表的微博内容打上标签,以利于日后寻找微博内容中相关用户共同的标签tag,关键词,此种推荐方式正是基于微博内容分析的推荐。如下图:

        只是问题是,谁会不遗余力发完微博后,还去给它添加什么标签呢?所以,新浪微博还得努力,寻找另一种更好地分析微博内容的方式。不然系统全盘扫描海里用户的海量微博内容,则恐怕吃不消也负担不起。

        然个人觉得倒是可以从微博关键词(标签tag云)和每个用户为自己打的标签(打着越多的共同标签可定义为相似用户)入手,如下图左右部分所示:

        也就是说,通过共同的好友和通过间接关注的人来定义相似用户是不靠谱的,只有通过基于微博内容的分析寻找相似用户才是可行之道,同时,更进一步,通过微博内容分析得到标签tag云后,再从中找到相同或相近的标签tag云寻找相似的用户无疑比已有推荐好友方式(通过共同的好友和通过间接关注的人来定义相似用户)更靠谱。

    3.1、多种推荐方式结合

        在现行的 Web 站点上的推荐往往都不是单纯只采用了某一种推荐的机制和策略,他们往往是将多个方法混合在一起,从而达到更好的推荐效果。

        举个例子如Amazon中除此基于用户的推荐之外,还会用到基于内容的推荐(物品具有相同关键词和Tag):如新产品的推荐;基于项目的协同过滤推荐(喜欢A,C与A类似,可能也喜欢C):如捆绑销售and别人购买/浏览的商品。

        总之,多种推荐方式结合,加权(用线性公式(linear formula)将几种不同的推荐按照一定权重组合起来,具体权重的值需要在测试数据集上反复实验,从而达到最好的推荐效果。)、切换、分区、分层等混合。但不论是哪种推荐方式,一般也就涵盖在上文所述的推荐方式中。


    4、协同过滤推荐

        协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友或者称之为广义上的邻居(neighborhood),看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。如下图,你能从图中看到多少信息?

    4.1、协同过滤推荐步骤

        做协同过滤推荐,一般要做好以下几个步骤:

    1)若要做协同过滤,那么收集用户偏好则成了关键。可以通过用户的行为诸如评分(如不同的用户对不同的作品有不同的评分,而评分接近则意味着喜好口味相近,便可判定为相似用户),投票,转发,保存,书签,标记,评论,点击流,页面停留时间,是否购买等获得。如下面第2点所述:所有这些信息都可以数字化,如一个二维矩阵表示出来。

    2)收集了用户行为数据之后,我们接下来便要对数据进行减噪与归一化操作(得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮点数值)。下面再简单介绍下减噪和归一化操作:

    • 所谓减噪:用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用户的误操作,我们可以通过经典的数据挖掘算法过滤掉行为数据中的噪音,这样可以是我们的分析更加精确(类似于网页的去噪处理)。
    • 所谓归一化:将各个行为的数据统一在一个相同的取值范围中,从而使得加权求和得到的总体喜好更加精确。最简单的归一化处理,便是将各类数据除以此类中的最大值,以保证归一化后的数据取值在 [0,1] 范围中。至于所谓的加权,很好理解,因为每个人占的权值不同,类似于一场唱歌比赛中对某几个选手进行投票决定其是否晋级,观众的投票抵1分,专家评委的投票抵5分,最后得分最多的选手直接晋级。

    3)找到相似的用户和物品,通过什么途径找到呢?便是计算相似用户或相似物品的相似度。

    4)相似度的计算有多种方法,不过都是基于向量Vector的,其实也就是计算两个向量的距离,距离越近相似度越大。在推荐中,用户-物品偏好的二维矩阵下,我们将某个或某几个用户对莫两个物品的偏好作为一个向量来计算两个物品之间的相似度,或者将两个用户对某个或某几个物品的偏好作为一个向量来计算两个用户之间的相似度。

            相似度计算算法可以用于计算用户或者项目相似度。以项目相似度计算(Item Similarity Computation)为列,通性在于都是从评分矩阵中,为两个项目i,j挑选出共同的评分用户,然对这个共同用户的评分向量,进行计算相似度si,j,如下图所示,行代表用户,列代表项目(注意到是从i,j向量中抽出共有的评论,组成的一对向量,进行相似度计算):

        所以说,很简单,找物品间的相似度,用户不变,找多个用户对物品的评分;找用户间的相似度,物品不变,找用户对某些个物品的评分

    5)而计算出来的这两个相似度则将作为基于用户、项目的两项协同过滤的推荐。

        常见的计算相似度的方法有:欧几里德距离,皮尔逊相关系数(如两个用户对多个电影的评分,采取皮尔逊相关系数等相关计算方法,可以抉择出他们的口味和偏好是否一致),Cosine相似度,Tanimoto系数。下面,简单介绍其中的欧几里得距离与皮尔逊相关系数:

    •     欧几里德距离(Euclidean Distance)是最初用于计算欧几里德空间中两个点的距离,假设 x,y 是 n 维空间的两个点,它们之间的欧几里德距离是:

        可以看出,当 n=2 时,欧几里德距离就是平面上两个点的距离。当用欧几里德距离表示相似度,一般采用以下公式进行转换:距离越小,相似度越大(同时,避免除数为0):

     

    • 余弦相似度Cosine-based Similarity
      两个项目 i ,j 视作为两个m维用户空间向量,相似度计算通过计算两个向量的余弦夹角,那么,对于m*n的评分矩阵,i ,j 的相似度sim( i , j ) 计算公式:

      (其中 " · "记做两个向量的内积)

    • 皮尔逊相关系数一般用于计算两个定距变量间联系的紧密程度,为了使计算结果精确,需要找出共同评分的用户。记用户集U为既评论了 i 又评论了 j 的用户集,那么对应的皮尔森相关系数计算公式为:

          其中Ru,i 为用户u 对项目 i 的评分,对应带横杠的为这个用户集U对项目i的评分评分。

    6)相似邻居计算。邻居分为两类:1、固定数量的邻居K-neighborhoods (或Fix-size neighborhoods),不论邻居的“远近”,只取最近的 K 个,作为其邻居,如下图A部分所示;2、基于相似度门槛的邻居,落在以当前点为中心,距离为 K 的区域中的所有点都作为当前点的邻居,如下图B部分所示。

        再介绍一下K最近邻(k-Nearest Neighbor,KNN)分类算法:这是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

    7)经过4)计算出来的基于用户的CF(基于用户推荐之用:通过共同口味与偏好找相似邻居用户,K-邻居算法,你朋友喜欢,你也可能喜欢),基于物品的CF(基于项目推荐之用:发现物品之间的相似度,推荐类似的物品,你喜欢物品A,C与A相似,那么你可能也喜欢C)。

     

    4.2、基于基于用户相似度与项目相似度

        上述3.1节中三个相似度公式是基于项目相似度场景下的,而实际上,基于用户相似度与基于项目相似度计算的一个基本的区别是,基于用户相似度是基于评分矩阵中的行向量相似度求解,基于项目相似度计算式基于评分矩阵中列向量相似度求解,然后三个公式分别都可以适用,如下图:

     

    (其中,为0的表示未评分)

    • 基于项目相似度计算式计算如Item3,Item4两列向量相似度;
    • 基于用户相似度计算式计算如User3,User4量行向量相似度。

    千言万语不如举个例子。我们来看一个具体的基于用户相似度计算的例子。

    假设我们有一组用户,他们表现出了对一组图书的喜好。用户对一本图书的喜好程度越高,就会给其更高的评分。我们来通过一个矩阵来展示它,行代表用户,列代表图书。

    如下图所示,所有的评分范围从1到5,5代表喜欢程度最高。第一个用户(行1)对第一本图书(列1)的评分是4,空的单元格表示用户未给图书评分。

    使用基于用户的协同过滤方法,我们首先要做的是基于用户给图书做出的评价,计算用户之间的相似度。

    让我们从一个单一用户的角度考虑这个问题,看图1中的第一行,要做到这一点,常见的做法是将使用包含了用户喜好项的向量(或数组)代表每一个用户。相较于使用多样化的相似度量这种做法,更直接。

    在这个例子中,我们将使用余弦相似性去计算用户间的相似度。

    当我们把第一个用户和其他五个用户进行比较时,就能直观的看到他和其他用户的相似程度。

    对于大多数相似度量,向量之间相似度越高,代表彼此更相似。本例中,第一个用户第二、第三个用户非常相似,有两本共同书籍,与第四、第五个用户的相似度低一些,只有一本共同书籍,而与最后一名用户完全不相似,因为没有一本共同书籍。

    更一般的,我们可以计算出每个用户的相似性,并且在相似矩阵中表示它们。这是一个对称矩阵,单元格的背景颜色表明用户相似度的高低,更深的红色表示它们之间更相似。

    所以,我们找到了与第一个用户最相似的第二个用户,删除用户已经评价过的书籍,给最相似用户正在阅读的书籍加权,然后计算出总和。

    在这种情况下,我们计算出n=2,表示为了产生推荐,需要找出与目标用户最相似的两个用户,这两个用户分别是第二个和第三个用户,然后第一个用户已经评价了第一和第五本书,故产生的推荐书是第三本(4.5分),和第四本(3分)。

    此外,什么时候用item-base,什么时候用user-base呢:http://weibo.com/1580904460/zhZ9AiIkZ?mod=weibotime

    一般说来,如果item数目不多,比如不超过十万,而且不显著增长的话,就用item-based 好了。为何?如@wuzh670所说,如果item数目不多+不显著增长,说明item之间的关系在一段时间内相对稳定(对比user之间关系),对于实时更新item-similarity需求就降低很多,推荐系统效率提高很多,故用item-based会明智些。

    反之,当item数目很多,建议用user-base。当然,实践中具体情况具体分析。如下图所示(摘自项亮的《推荐系统实践》一书):

     

    5、聚类算法

        聚类聚类,通俗的讲,即所谓“物以类聚,人以群分”。聚类 (Clustering) 是一个数据挖掘的经典问题,它的目的是将数据分为多个簇 (Cluster),在同一个簇中的对象之间有较高的相似度,而不同簇的对象差别较大。

    5.1、K 均值聚类算法

        K-均值(K-Means)聚类算法与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。此算法假设对象属性来自于空间向量,目标是使各个群组内部的均方误差总和最小。

      K均值聚类算法首先会随机确定K个中心位置(位于空间中代表聚类中心的点),然后将各个数据项分配给最临近的中心点。待分配完成之后,聚类中心就会移到分配给该聚类的所有节点的平均位置处,然后整个分配过程重新开始。这一过程会一直重复下去,直到分配过程不再产生变化为止。下图是包含两个聚类的K-均值聚类过程:

     

        以下代码所示即是此K-均值聚类算法的python实现:

    //K-均值聚类算法  
    import random  
      
    def kcluster(rows,distance=pearson,k=4):  
      # 确定每个点的最小值和最大值  
      ranges=[(min([row[i] for row in rows]),max([row[i] for row in rows]))   
      for i in range(len(rows[0]))]  
      
      # 随机创建k个中心点  
      clusters=[[random.random()*(ranges[i][1]-ranges[i][0])+ranges[i][0]   
      for i in range(len(rows[0]))] for j in range(k)]  
        
      lastmatches=None  
      for t in range(100):  
        print 'Iteration %d' % t  
        bestmatches=[[] for i in range(k)]  
          
        # 在每一行中寻找距离最近的中心点  
        for j in range(len(rows)):  
          row=rows[j]  
          bestmatch=0  
          for i in range(k):  
            d=distance(clusters[i],row)  
            if d<distance(clusters[bestmatch],row): bestmatch=i  
          bestmatches[bestmatch].append(j)  
      
        # 如果结果与上一次相同,则整个过程结束  
        if bestmatches==lastmatches: break  
        lastmatches=bestmatches  
          
        # 把中心点移到其所有成员的平均位置  
        for i in range(k):  
          avgs=[0.0]*len(rows[0])  
          if len(bestmatches[i])>0:  
            for rowid in bestmatches[i]:  
              for m in range(len(rows[rowid])):  
                avgs[m]+=rows[rowid][m]  
            for j in range(len(avgs)):  
              avgs[j]/=len(bestmatches[i])  
            clusters[i]=avgs  
        
      # 返回k组序列,其中每个序列代表一个聚类      
      return bestmatches  

        k-Means是一种机器学习领域中的一种非监督学习。下面,简要介绍下监督学习与无监督学习:

    • 监管学习的任务是学习带标签的训练数据的功能,以便预测任何有效输入的值。监管学习的常见例子包括将电子邮件消息分类为垃圾邮件,根据类别标记网页,以及识别手写输入。创建监管学习程序需要使用许多算法,最常见的包括神经网络、Support Vector Machines (SVMs) 和 Naive Bayes 分类程序。
    • 无监管学习的任务是发挥数据的意义,而不管数据的正确与否。它最常应用于将类似的输入集成到逻辑分组中。它还可以用于减少数据集中的维度数据,以便只专注于最有用的属性,或者用于探明趋势。无监管学习的常见方法包括K-Means,分层集群和自组织地图。

     

    5.2、Canopy 聚类算法 

        Canopy 聚类算法的基本原则是:首先应用成本低的近似的距离计算方法高效的将数据分为多个组,这里称为一个 Canopy,我们姑且将它翻译为“华盖”,Canopy 之间可以有重叠的部分;然后采用严格的距离计算方式准确的计算在同一 Canopy 中的点,将他们分配与最合适的簇中。Canopy 聚类算法经常用于 K 均值聚类算法的预处理,用来找合适的 k 值和簇中心。

    5.3、模糊 K 均值聚类算法 

            模糊 K 均值聚类算法是 K 均值聚类的扩展,它的基本原理和 K 均值一样,只是它的聚类结果允许存在对象属于多个簇,也就是说:它属于我们前面介绍过的可重叠聚类算法。为了深入理解模糊 K 均值和 K 均值的区别,这里我们得花些时间了解一个概念:模糊参数(Fuzziness Factor)。

        与 K 均值聚类原理类似,模糊 K 均值也是在待聚类对象向量集合上循环,但是它并不是将向量分配给距离最近的簇,而是计算向量与各个簇的相关性(Association)。假设有一个向量 v,有 k 个簇,v 到 k 个簇中心的距离分别是 d1,d2⋯ dk,那么 V 到第一个簇的相关性 u1可以通过下面的算式计算:

        计算 v 到其他簇的相关性只需将 d1替换为对应的距离。从上面的算式,我们看出,当 m 近似 2 时,相关性近似 1;当 m 近似 1 时,相关性近似于到该簇的距离,所以 m 的取值在(1,2)区间内,当 m 越大,模糊程度越大,m 就是我们刚刚提到的模糊参数。

        其余聚类算法本文不再介绍。关于冷启动、数据稀疏、可扩展性、可移植性、可解释性、多样性、推荐信息的价值等问题则待后续阐述。

     

    6、分类算法

        接下来,分类算法有很多,本文介绍决策树学习,与贝叶斯定理。

    6.1、决策树学习

        咱们直接切入正题。所谓决策树,顾名思义,是一种树,一种依托于策略抉择而建立起来的树。

        机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。
        从数据产生决策树的机器学习技术叫做决策树学习, 通俗说就是决策树。

        来理论的太过抽象,下面举两个浅显易懂的例子:

        第一个例子:通俗来说,决策树分类的思想类似于找对象。现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:

          女儿:多大年纪了?
          母亲:26。
          女儿:长的帅不帅?
          母亲:挺帅的。
          女儿:收入高不?
          母亲:不算很高,中等情况。
          女儿:是公务员不?
          母亲:是,在税务局上班呢。
          女儿:那好,我去见见。

          这个女孩的决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。假设这个女孩对男人的要求是:30岁以下、长相中等以上并且是高收入者或中等以上收入的公务员,那么这个可以用下图表示女孩的决策逻辑:

        也就是说,决策树的简单策略就是,好比公司招聘面试过程中筛选一个人的简历,如果你的条件相当好比如说清华博士毕业,那么二话不说,直接叫过来面试,如果非重点大学毕业,但实际项目经验丰富,那么也要考虑叫过来面试一下,即所谓具体情况具体分析、决策。

        第二个例子来自Tom M.Mitchell著的机器学习一书:

        小王的目的是通过下周天气预报寻找什么时候人们会打高尔夫,他了解人们决定是否打球的原因最主要取决于天气情况。而天气状况有晴,云和雨;气温用华氏温度表示;相对湿度用百分比;还有有无风。如此,我们便可以构造一棵决策树,如下(根据天气这个分类决策这天是否合适打网球):

        上述决策树对应于以下表达式:(Outlook=Sunny ^Humidity<=70)V (Outlook = Overcast)V (Outlook=Rain ^ Wind=Weak)。得到的最佳分类属性如下图所示:

         在上图中,计算了两个不同属性:湿度(humidity)和风力(wind)的信息增益,最终humidity这种分类的信息增益0.151>wind增益的0.048。说白了,就是在星期六上午是否适合打网球的问题诀策中,采取humidity较wind作为分类属性更佳,决策树由此而来。

    ID3算法决策树的形成

        OK,下图为ID3算法第一步后形成的部分决策树。这样综合起来看,就容易理解多了。1、overcast样例必为正,所以为叶子结点,总为yes;2、ID3无回溯,局部最优,而非全局最优,还有另一种树后修剪决策树。下图是ID3算法第一步后形成的部分决策树:

    6.2、贝叶斯分类的基础:贝叶斯定理

       贝叶斯定理:已知某条件概率,如何得到两个事件交换后的概率,也就是在已知P(A|B)的情况下如何求得P(B|A)。这里先解释什么是条件概率:

          表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:

          贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A),贝叶斯定理就为我们打通从P(A|B)获得P(B|A)的道路。

          下面不加证明地直接给出贝叶斯定理(公式被网友指出有问题,待后续验证改正):

          

     

    7、推荐实例扩展

    7.1、阅读推荐

        先来看一段文字(摘自36kr):

    ”北京十分科技也非常看好阅读推荐类的应用,他们花了非常大的精力(一年60人团队),才在今天推出了iPhone 版“酷云阅读”。

    为什么要投入这么多人去做这个阅读应用?CEO 李鹏告诉我,这个团队超过一半的人都在做后台相关的东西,包括语义分析、机器学习等算法。他们的目的是将互联网“语义化”以后,把人的兴趣明确,最后把每个人感兴趣的内容推荐给相关的人。在iPhone 上,酷云的大致做法和Zite iPad 版类似,用户的行为也是有“喜欢”、“不喜欢”,以及点击相应的媒体来源或者相关的标签来告诉酷云你希望以后看到更多这些内容。

    这个目的是大部分阅读推荐应用都有的,但是酷云的做法似乎更加变态。他们除了每天要抓取来自互联网的超过10万篇文章之外,还对全国200个的电视台播出的视频内容进行了索引,以便用户也可以通过文字搜索出视频、以及对视频内容进行一样的推荐。大致做法是先把这些节目都录制下来,然后把声音转文字,最后建立摘要和索引。“

        一般的推荐系统应用的算法是有上文所述的什么协同过滤那般复杂呢?以下是援引自本人1月21日所发在微博上的文字:

        1、大多数推荐阅读应用一般会给文章根据内容打上标签:算法,iphone(点击相当于为此标签加分加权重),并邀请对文章作出评价:喜欢,或不喜欢。每一次点击都被推荐系统记录了下来,最终渐渐形成用户的标签tag云(与此同时,还可基于相同或相似的标签tag寻找相似用户,从而基于用户推荐),而后系统每检索一篇新的文章,提取出文章的关键字,匹配用户的标签取向,进行推送。

        2、目前手机上的新闻阅读做到了分类,如科技,教育,但一般不会采取如网页那般评分表态,所以也就无法记录用户的行为特征,也就不会有新的文章出来后后续的推荐阅读服务,于是造就了一批手机推荐阅读的问世,如 @酷云阅读 ,指阅等。

         3、但一般用户的习惯是看完一段新闻便完事了,择日要看则择日看。例如有几个用户愿意为了评价一篇文章而特地去注册一个帐号呢?如何尽量让用户付出额外代价去使用这类阅读器,改变用户习惯,个人认为,是关键。

        然后我还对上面的那句:先把这些视频节目都录制下来,然后把声音转文字有点疑问。我们已经知道如果是音乐的话像豆瓣FM可能是如下的做法:

    1. 你喜欢一些歌曲,而我也喜欢一些歌曲,如果你我喜欢的歌曲中有很多是重复类似的,则系统会把你我定义为好友,即相似用户,基于用户的协同过滤推荐:朋友喜欢,你也可能喜欢 ;
    2. 还有一个就是针对歌曲的推荐,你喜欢一首歌曲A,而另一首歌曲B与歌曲A类似(如都是有关爱情、感伤一类的),所以系统猜测你也可能喜欢B,而把B推荐给你。这就是基于项目(物品)的协同过滤推荐。

        根据所听歌曲的重复类似判定为好友从而基于用户的协同过滤进行推荐,通过某些歌曲是差不多类似的来基于项目的协同过滤进行推荐,但问题出来了,重复的好说,同一首歌曲同一个歌手嘛,可那些相似音乐歌曲又如何定义判定呢?通过系统去分析歌曲的频谱?区别各个歌曲节奏的快慢,音频?此举虽然看起来有效,但实际实行起来不太现实。

        我觉得应该是为那些音乐打上标签tag(估计视频也是这么做的,便于日后查找索引。全视频的实录目前觉得还是不靠谱),如打上“爱情”“感伤”一类的tag,而后tag相同的则可判定为相似歌曲。但关键是怎么打?语音识别?

     

    7.2、标签tag怎么打

        初期可以人肉,爬虫,买数据库,等流量上来了,可以考虑ugc。所谓ugc,用户产生内容。但是用户一般不太可能自己给音乐打标签,太繁琐了(如最近的新浪微博的每条微博内容下多了一个“加标签”的提示,但有多少用户愿去理它呢?),当然有的系统也会为你自动产生一些标签tag(当然,你也可以自行加上一些标签),如新浪博客:

        如何做到的呢?我的想法是,

    1. 应该是系统在背后扫描你的文章一遍,然后提取一些关键词作为tag,供你选择。取哪些关键词呢?当然是取高频词。扫描整篇文章,统计每个单词出现的频率。
    2. 然后取其前TOP K,如上面截图中的“算法”在那篇文章中出现了4次,“博客”出现了3次,所以系统为你自动匹配这些标签。
    3. 至于采取何种数据结构或方法来统计这些关键词的频率呢。一般的应用hash+堆(十一、从头到尾彻底解析Hash表算法),或trie树(从Trie树谈到后缀树)均可。但当trie树面对的是汉字中文的时候,就比较麻烦了。所以hash+堆是比较理想的选择。

        同样,针对视频的话,应该也是类似的:1、通过系统或机器读取视频内容,把视频转换为文字,然后提取其中频率出现高的关键词(如何提取关键词呢,这就涉及到一个关键问题了:分词。本blog日后阐述),把提取出来的这些关键词作为此视频的标签tag;2、然后针对这些tag建立索引摘要(什么样的索引?倒排索引。至于什么是倒排索引,参考编程艺术第二十四章:第二十三、四章:杨氏矩阵查找,倒排索引关键词Hash不重复编码实践),最终方便于日后用户或系统的查找(此节系与编程艺术内的朋友讨论整理总结而出)。

        具体细节后续阐述。

     

    8、参考文献

    1. 本人1月7日,1月21日的发表的微博(挂在本blog左侧边栏);
    2. 探索推荐引擎内部的秘密,作者:赵晨婷,马春娥;
    3. 集体智慧编程,TobySeganra著。
    4. 推荐系统之协同过滤概述
    5. http://www.cnblogs.com/leoo2sk/
    6. Mitchell, Tom M. Machine Learning. McGraw-Hill, 1997(机器学习领域的开山之作).
    7. http://zh.wikipedia.org/wiki/%E5%86%B3%E7%AD%96%E6%A0%91。
    8. http://www.36kr.com/p/75415.html
    9. 智能web算法,第三章推荐系统(实现了用户及项目的相似度的计算,值得一看)
    10. 协同过滤推荐算法和基于内容的过滤算法:https://time.geekbang.org/article/1947

     

    后记

        OK,本文只是初步成型,还看到了很多的问题、漏洞亟待完善。同时,一切还只是我的理解,尚未在实际工作中运用。所以,理解不深,未辨真知。一切还得在后续实践中检验。读者若发现本文或本blog中任何问题或错误,恳请随时不吝指正。万分感谢。完。July、2011.01.12。

    展开全文
  • “探索推荐引擎内部的秘密”系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用。同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模...

    最近要用到协同过滤的算法来解决工作中的问题,先学习,以后再把自己的收获总结下来。

    转自:http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/

    “探索推荐引擎内部的秘密”系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用。同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模数据上实现各种推荐策略,进行策略优化,构建高效的推荐引擎的方法。本文作为这个系列的第一篇文章,将深入介绍推荐引擎的工作原理,和其中涉及的各种推荐机制,以及它们各自的优缺点和适用场景,帮助用户清楚的了解和快速构建适合自己的推荐引擎。

    信息发现

    如今已经进入了一个数据爆炸的时代,随着 Web 2.0 的发展, Web 已经变成数据分享的平台,那么,如何让人们在海量的数据中想要找到他们需要的信息将变得越来越难。

    在这样的情形下,搜索引擎(Google,Bing,百度等等)成为大家快速找到目标信息的最好途径。在用户对自己需求相对明确的时候,用搜索引擎很方便的通过关键字搜索很快的找到自己需要的信息。但搜索引擎并不能完全满足用户对信息发现的需求,那是因为在很多情况下,用户其实并不明确自己的需要,或者他们的需求很难用简单的关键字来表述。又或者他们需要更加符合他们个人口味和喜好的结果,因此出现了推荐系统,与搜索引擎对应,大家也习惯称它为推荐引擎。

    随着推荐引擎的出现,用户获取信息的方式从简单的目标明确的数据的搜索转换到更高级更符合人们使用习惯的信息发现。

    如今,随着推荐技术的不断发展,推荐引擎已经在电子商务 (E-commerce,例如 Amazon,当当网 ) 和一些基于 social 的社会化站点 ( 包括音乐,电影和图书分享,例如豆瓣,Mtime 等 ) 都取得很大的成功。这也进一步的说明了,Web2.0 环境下,在面对海量的数据,用户需要这种更加智能的,更加了解他们需求,口味和喜好的信息发现机制。

    推荐引擎

    前面介绍了推荐引擎对于现在的 Web2.0 站点的重要意义,这一章我们将讲讲推荐引擎到底是怎么工作的。推荐引擎利用特殊的信息过滤技术,将不同的物品或内容推荐给可能对它们感兴趣的用户。

    图 1. 推荐引擎工作原理图
    图 1. 推荐引擎工作原理图

    图 1 给出了推荐引擎的工作原理图,这里先将推荐引擎看作黑盒,它接受的输入是推荐的数据源,一般情况下,推荐引擎所需要的数据源包括:

    • 要推荐物品或内容的元数据,例如关键字,基因描述等;
    • 系统用户的基本信息,例如性别,年龄等
    • 用户对物品或者信息的偏好,根据应用本身的不同,可能包括用户对物品的评分,用户查看物品的记录,用户的购买记录等。其实这些用户的偏好信息可以分为两类:
    • 显式的用户反馈:这类是用户在网站上自然浏览或者使用网站以外,显式的提供反馈信息,例如用户对物品的评分,或者对物品的评论。
    • 隐式的用户反馈:这类是用户在使用网站是产生的数据,隐式的反应了用户对物品的喜好,例如用户购买了某物品,用户查看了某物品的信息等等。

    显式的用户反馈能准确的反应用户对物品的真实喜好,但需要用户付出额外的代价,而隐式的用户行为,通过一些分析和处理,也能反映用户的喜好,只是数据不是很精确,有些行为的分析存在较大的噪音。但只要选择正确的行为特征,隐式的用户反馈也能得到很好的效果,只是行为特征的选择可能在不同的应用中有很大的不同,例如在电子商务的网站上,购买行为其实就是一个能很好表现用户喜好的隐式反馈。

    推荐引擎根据不同的推荐机制可能用到数据源中的一部分,然后根据这些数据,分析出一定的规则或者直接对用户对其他物品的喜好进行预测计算。这样推荐引擎可以在用户进入的时候给他推荐他可能感兴趣的物品。

    推荐引擎的分类

    推荐引擎的分类可以根据很多指标,下面我们一一介绍一下:

    1. 推荐引擎是不是为不同的用户推荐不同的数据

      根据这个指标,推荐引擎可以分为基于大众行为的推荐引擎和个性化推荐引擎

      • 根据大众行为的推荐引擎,对每个用户都给出同样的推荐,这些推荐可以是静态的由系统管理员人工设定的,或者基于系统所有用户的反馈统计计算出的当下比较流行的物品。
      • 个性化推荐引擎,对不同的用户,根据他们的口味和喜好给出更加精确的推荐,这时,系统需要了解需推荐内容和用户的特质,或者基于社会化网络,通过找到与当前用户相同喜好的用户,实现推荐。

      这是一个最基本的推荐引擎分类,其实大部分人们讨论的推荐引擎都是将个性化的推荐引擎,因为从根本上说,只有个性化的推荐引擎才是更加智能的信息发现过程。

    2. 根据推荐引擎的数据源

      其实这里讲的是如何发现数据的相关性,因为大部分推荐引擎的工作原理还是基于物品或者用户的相似集进行推荐。那么参考图 1 给出的推荐系统原理图,根据不同的数据源发现数据相关性的方法可以分为以下几种:

      • 根据系统用户的基本信息发现用户的相关程度,这种被称为基于人口统计学的推荐(Demographic-based Recommendation)
      • 根据推荐物品或内容的元数据,发现物品或者内容的相关性,这种被称为基于内容的推荐(Content-based Recommendation)
      • 根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性,这种被称为基于协同过滤的推荐(Collaborative Filtering-based Recommendation)。
    3. 根据推荐模型的建立方式

      可以想象在海量物品和用户的系统中,推荐引擎的计算量是相当大的,要实现实时的推荐务必需要建立一个推荐模型,关于推荐模型的建立方式可以分为以下几种:

      • 基于物品和用户本身的,这种推荐引擎将每个用户和每个物品都当作独立的实体,预测每个用户对于每个物品的喜好程度,这些信息往往是用一个二维矩阵描述的。由于用户感兴趣的物品远远小于总物品的数目,这样的模型导致大量的数据空置,即我们得到的二维矩阵往往是一个很大的稀疏矩阵。同时为了减小计算量,我们可以对物品和用户进行聚类, 然后记录和计算一类用户对一类物品的喜好程度,但这样的模型又会在推荐的准确性上有损失。
      • 基于关联规则的推荐(Rule-based Recommendation):关联规则的挖掘已经是数据挖掘中的一个经典的问题,主要是挖掘一些数据的依赖关系,典型的场景就是“购物篮问题”,通过关联规则的挖掘,我们可以找到哪些物品经常被同时购买,或者用户购买了一些物品后通常会购买哪些其他的物品,当我们挖掘出这些关联规则之后,我们可以基于这些规则给用户进行推荐。
      • 基于模型的推荐(Model-based Recommendation):这是一个典型的机器学习的问题,可以将已有的用户喜好信息作为训练样本,训练出一个预测用户喜好的模型,这样以后用户在进入系统,可以基于此模型计算推荐。这种方法的问题在于如何将用户实时或者近期的喜好信息反馈给训练好的模型,从而提高推荐的准确度。

    其实在现在的推荐系统中,很少有只使用了一个推荐策略的推荐引擎,一般都是在不同的场景下使用不同的推荐策略从而达到最好的推荐效果,例如 Amazon 的推荐,它将基于用户本身历史购买数据的推荐,和基于用户当前浏览的物品的推荐,以及基于大众喜好的当下比较流行的物品都在不同的区域推荐给用户,让用户可以从全方位的推荐中找到自己真正感兴趣的物品。

    深入推荐机制

    这一章的篇幅,将详细介绍各个推荐机制的工作原理,它们的优缺点以及应用场景。

    基于人口统计学的推荐

    基于人口统计学的推荐机制(Demographic-based Recommendation)是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户,图 2 给出了这种推荐的工作原理。

    图 2. 基于人口统计学的推荐机制的工作原理
    图 2. 基于人口统计学的推荐机制的工作原理

    从图中可以很清楚的看到,首先,系统对每个用户都有一个用户 Profile 的建模,其中包括用户的基本信息,例如用户的年龄,性别等等;然后,系统会根据用户的 Profile 计算用户的相似度,可以看到用户 A 的 Profile 和用户 C 一样,那么系统会认为用户 A 和 C 是相似用户,在推荐引擎中,可以称他们是“邻居”;最后,基于“邻居”用户群的喜好推荐给当前用户一些物品,图中将用户 A 喜欢的物品 A 推荐给用户 C。

    这种基于人口统计学的推荐机制的好处在于:

    1. 因为不使用当前用户对物品的喜好历史数据,所以对于新用户来讲没有“冷启动(Cold Start)”的问题。
    2. 这个方法不依赖于物品本身的数据,所以这个方法在不同物品的领域都可以使用,它是领域独立的(domain-independent)。

    那么这个方法的缺点和问题是什么呢?这种基于用户的基本信息对用户进行分类的方法过于粗糙,尤其是对品味要求较高的领域,比如图书,电影和音乐等领域,无法得到很好的推荐效果。可能在一些电子商务的网站中,这个方法可以给出一些简单的推荐。另外一个局限是,这个方法可能涉及到一些与信息发现问题本身无关却比较敏感的信息,比如用户的年龄等,这些用户信息不是很好获取。

    基于内容的推荐

    基于内容的推荐是在推荐引擎出现之初应用最为广泛的推荐机制,它的核心思想是根据推荐物品或内容的元数据,发现物品或者内容的相关性,然后基于用户以往的喜好记录,推荐给用户相似的物品。图 3 给出了基于内容推荐的基本原理。

    图 3. 基于内容推荐机制的基本原理
    图 3. 基于内容推荐机制的基本原理

    图 3 中给出了基于内容推荐的一个典型的例子,电影推荐系统,首先我们需要对电影的元数据有一个建模,这里只简单的描述了一下电影的类型;然后通过电影的元数据发现电影间的相似度,因为类型都是“爱情,浪漫”电影 A 和 C 被认为是相似的电影(当然,只根据类型是不够的,要得到更好的推荐,我们还可以考虑电影的导演,演员等等);最后实现推荐,对于用户 A,他喜欢看电影 A,那么系统就可以给他推荐类似的电影 C。

    这种基于内容的推荐机制的好处在于它能很好的建模用户的口味,能提供更加精确的推荐。但它也存在以下几个问题:

    1. 需要对物品进行分析和建模,推荐的质量依赖于对物品模型的完整和全面程度。在现在的应用中我们可以观察到关键词和标签(Tag)被认为是描述物品元数据的一种简单有效的方法。
    2. 物品相似度的分析仅仅依赖于物品本身的特征,这里没有考虑人对物品的态度。
    3. 因为需要基于用户以往的喜好历史做出推荐,所以对于新用户有“冷启动”的问题。

    虽然这个方法有很多不足和问题,但他还是成功的应用在一些电影,音乐,图书的社交站点,有些站点还请专业的人员对物品进行基因编码,比如潘多拉,在一份报告中说道,在潘多拉的推荐引擎中,每首歌有超过 100 个元数据特征,包括歌曲的风格,年份,演唱者等等。

    基于协同过滤的推荐

    随着 Web2.0 的发展,Web 站点更加提倡用户参与和用户贡献,因此基于协同过滤的推荐机制因运而生。它的原理很简单,就是根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性,然后再基于这些关联性进行推荐。基于协同过滤的推荐可以分为三个子类:基于用户的推荐(User-based Recommendation),基于项目的推荐(Item-based Recommendation)和基于模型的推荐(Model-based Recommendation)。下面我们一个一个详细的介绍着三种协同过滤的推荐机制。

    基于用户的协同过滤推荐

    基于用户的协同过滤推荐的基本原理是,根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,在一般的应用中是采用计算“K- 邻居”的算法;然后,基于这 K 个邻居的历史偏好信息,为当前用户进行推荐。下图 4 给出了原理图。

    图 4. 基于用户的协同过滤推荐机制的基本原理
    图 4. 基于用户的协同过滤推荐机制的基本原理

    上图示意出基于用户的协同过滤推荐机制的基本原理,假设用户 A 喜欢物品 A,物品 C,用户 B 喜欢物品 B,用户 C 喜欢物品 A ,物品 C 和物品 D;从这些用户的历史喜好信息中,我们可以发现用户 A 和用户 C 的口味和偏好是比较类似的,同时用户 C 还喜欢物品 D,那么我们可以推断用户 A 可能也喜欢物品 D,因此可以将物品 D 推荐给用户 A。

    基于用户的协同过滤推荐机制和基于人口统计学的推荐机制都是计算用户的相似度,并基于“邻居”用户群计算推荐,但它们所不同的是如何计算用户的相似度,基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。

    基于项目的协同过滤推荐

    基于项目的协同过滤推荐的基本原理也是类似的,只是说它使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户,图 5 很好的诠释了它的基本原理。

    假设用户 A 喜欢物品 A 和物品 C,用户 B 喜欢物品 A,物品 B 和物品 C,用户 C 喜欢物品 A,从这些用户的历史喜好可以分析出物品 A 和物品 C 时比较类似的,喜欢物品 A 的人都喜欢物品 C,基于这个数据可以推断用户 C 很有可能也喜欢物品 C,所以系统会将物品 C 推荐给用户 C。

    与上面讲的类似,基于项目的协同过滤推荐和基于内容的推荐其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息。

    图 5. 基于项目的协同过滤推荐机制的基本原理
    图 5. 基于项目的协同过滤推荐机制的基本原理

    同时协同过滤,在基于用户和基于项目两个策略中应该如何选择呢?其实基于项目的协同过滤推荐机制是 Amazon 在基于用户的机制上改良的一种策略,因为在大部分的 Web 站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,同时基于项目的机制比基于用户的实时性更好一些。但也不是所有的场景都是这样的情况,可以设想一下在一些新闻推荐系统中,也许物品,也就是新闻的个数可能大于用户的个数,而且新闻的更新程度也有很快,所以它的形似度依然不稳定。所以,其实可以看出,推荐策略的选择其实和具体的应用场景有很大的关系。

    基于模型的协同过滤推荐

    基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,计算推荐。

    基于协同过滤的推荐机制是现今应用最为广泛的推荐机制,它有以下几个显著的优点:

    1. 它不需要对物品或者用户进行严格的建模,而且不要求物品的描述是机器可理解的,所以这种方法也是领域无关的。
    2. 这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好

    而它也存在以下几个问题:

    1. 方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。
    2. 推荐的效果依赖于用户历史偏好数据的多少和准确性。
    3. 在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。
    4. 对于一些特殊品味的用户不能给予很好的推荐。
    5. 由于以历史数据为基础,抓取和建模用户的偏好后,很难修改或者根据用户的使用演变,从而导致这个方法不够灵活。

    混合的推荐机制

    在现行的 Web 站点上的推荐往往都不是单纯只采用了某一种推荐的机制和策略,他们往往是将多个方法混合在一起,从而达到更好的推荐效果。关于如何组合各个推荐机制,这里讲几种比较流行的组合方法。

    1. 加权的混合(Weighted Hybridization): 用线性公式(linear formula)将几种不同的推荐按照一定权重组合起来,具体权重的值需要在测试数据集上反复实验,从而达到最好的推荐效果。
    2. 切换的混合(Switching Hybridization):前面也讲到,其实对于不同的情况(数据量,系统运行状况,用户和物品的数目等),推荐策略可能有很大的不同,那么切换的混合方式,就是允许在不同的情况下,选择最为合适的推荐机制计算推荐。
    3. 分区的混合(Mixed Hybridization):采用多种推荐机制,并将不同的推荐结果分不同的区显示给用户。其实,Amazon,当当网等很多电子商务网站都是采用这样的方式,用户可以得到很全面的推荐,也更容易找到他们想要的东西。
    4. 分层的混合(Meta-Level Hybridization): 采用多种推荐机制,并将一个推荐机制的结果作为另一个的输入,从而综合各个推荐机制的优缺点,得到更加准确的推荐。

    推荐引擎的应用

    介绍完推荐引擎的基本原理,基本推荐机制,下面简要分析几个有代表性的推荐引擎的应用,这里选择两个领域:Amazon 作为电子商务的代表,豆瓣作为社交网络的代表。

    推荐在电子商务中的应用 – Amazon

    Amazon 作为推荐引擎的鼻祖,它已经将推荐的思想渗透在应用的各个角落。Amazon 推荐的核心是通过数据挖掘算法和比较用户的消费偏好于其他用户进行对比,借以预测用户可能感兴趣的商品。对应于上面介绍的各种推荐机制,Amazon 采用的是分区的混合的机制,并将不同的推荐结果分不同的区显示给用户,图 6 和图 7 展示了用户在 Amazon 上能得到的推荐。

    图 6. Amazon 的推荐机制 - 首页
    图 6. Amazon 的推荐机制 - 首页
    图 7. Amazon 的推荐机制 - 浏览物品
    图 7. Amazon 的推荐机制 - 浏览物品

    Amazon 利用可以记录的所有用户在站点上的行为,根据不同数据的特点对它们进行处理,并分成不同区为用户推送推荐:

    • 今日推荐 (Today's Recommendation For You): 通常是根据用户的近期的历史购买或者查看记录,并结合时下流行的物品给出一个折中的推荐。
    • 新产品的推荐 (New For You): 采用了基于内容的推荐机制 (Content-based Recommendation),将一些新到物品推荐给用户。在方法选择上由于新物品没有大量的用户喜好信息,所以基于内容的推荐能很好的解决这个“冷启动”的问题。
    • 捆绑销售 (Frequently Bought Together): 采用数据挖掘技术对用户的购买行为进行分析,找到经常被一起或同一个人购买的物品集,进行捆绑销售,这是一种典型的基于项目的协同过滤推荐机制。
    • 别人购买 / 浏览的商品 (Customers Who Bought/See This Item Also Bought/See): 这也是一个典型的基于项目的协同过滤推荐的应用,通过社会化机制用户能更快更方便的找到自己感兴趣的物品。

    值得一提的是,Amazon 在做推荐时,设计和用户体验也做得特别独到:

    Amazon 利用有它大量历史数据的优势,量化推荐原因。

    • 基于社会化的推荐,Amazon 会给你事实的数据,让用户信服,例如:购买此物品的用户百分之多少也购买了那个物品;
    • 基于物品本身的推荐,Amazon 也会列出推荐的理由,例如:因为你的购物框中有 ***,或者因为你购买过 ***,所以给你推荐类似的 ***。

    另外,Amazon 很多推荐是基于用户的 profile 计算出来的,用户的 profile 中记录了用户在 Amazon 上的行为,包括看了那些物品,买了那些物品,收藏夹和 wish list 里的物品等等,当然 Amazon 里还集成了评分等其他的用户反馈的方式,它们都是 profile 的一部分,同时,Amazon 提供了让用户自主管理自己 profile 的功能,通过这种方式用户可以更明确的告诉推荐引擎他的品味和意图是什么。

    推荐在社交网站中的应用 – 豆瓣

    豆瓣是国内做的比较成功的社交网站,它以图书,电影,音乐和同城活动为中心,形成一个多元化的社交网络平台,自然推荐的功能是必不可少的,下面我们看看豆瓣是如何推荐的。

    图 8 . 豆瓣的推荐机制 - 豆瓣电影
    图 8 . 豆瓣的推荐机制 - 豆瓣电影

    当你在豆瓣电影中将一些你看过的或是感兴趣的电影加入你看过和想看的列表里,并为它们做相应的评分,这时豆瓣的推荐引擎已经拿到你的一些偏好信息,那么它将给你展示如图 8 的电影推荐。

    图 9 . 豆瓣的推荐机制 - 基于用户品味的推荐
    图 9 . 豆瓣的推荐机制 - 基于用户品味的推荐

    豆瓣的推荐是通过“豆瓣猜”,为了让用户清楚这些推荐是如何来的,豆瓣还给出了“豆瓣猜”的一个简要的介绍。

    “你的个人推荐是根据你的收藏和评价自动得出的,每个人的推荐清单都不同。你的收藏和评价越多,豆瓣给你的推荐会越准确和丰富。
    每天推荐的内容可能会有变化。随着豆瓣的长大,给你推荐的内容也会越来越准。”

    这一点让我们可以清晰明了的知道,豆瓣必然是基于社会化的协同过滤的推荐,这样用户越多,用户的反馈越多,那么推荐的效果会越来越准确。

    相对于 Amazon 的用户行为模型,豆瓣电影的模型更加简单,就是“看过”和“想看”,这也让他们的推荐更加专注于用户的品味,毕竟买东西和看电影的动机还是有很大不同的。

    另外,豆瓣也有基于物品本身的推荐,当你查看一些电影的详细信息的时候,他会给你推荐出“喜欢这个电影的人也喜欢的电影”, 如图 10,这是一个基于协同过滤的应用。

    图 10 . 豆瓣的推荐机制 - 基于电影本身的推荐
    图 10 . 豆瓣的推荐机制 - 基于电影本身的推荐

    总结

    在网络数据爆炸的年代,如何让用户更快的找到想要的数据,如何让用户发现自己潜在的兴趣和需求,无论是对于电子商务还是社会网络的应用都是至关重要的。推荐引擎的出现,使得这个问题越来越被大家关注。但对大多数人来讲,也许还在惊叹它为什么总是能猜到你到底想要些什么。推荐引擎的魔力在于你不清楚在这个推荐背后,引擎到底记录和推理了些什么。

    通过这篇综述性的文章,你可以了解,其实推荐引擎只是默默的记录和观察你的一举一动,然后再借由所有用户产生的海量数据分析和发现其中的规律,进而慢慢的了解你,你的需求,你的习惯,并默默的无声息的帮助你快速的解决你的问题,找到你想要的东西。

    其实,回头想想,很多时候,推荐引擎比你更了解你自己。

    通过第一篇文章,相信大家对推荐引擎有一个清晰的第一印象,本系列的下一篇文章将深入介绍基于协同过滤的推荐策略。在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法。它以其方法模型简单,数据依赖性低,数据方便采集,推荐效果较优等多个优点成为大众眼里的推荐算法“No.1”。本文将带你深入了解协同过滤的秘密,并给出基于 Apache Mahout 的协同过滤算法的高效实现。Apache Mahout 是 ASF 的一个较新的开源项目,它源于 Lucene,构建在 Hadoop 之上,关注海量数据上的机器学习经典算法的高效实现。

    感谢大家对本系列的关注和支持。

    展开全文
  • “探索推荐引擎内部的秘密”系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用。同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模...

    “探索推荐引擎内部的秘密”系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用。同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模数据上实现各种推荐策略,进行策略优化,构建高效的推荐引擎的方法。本文作为这个系列的第一篇文章,将深入介绍推荐引擎的工作原理,和其中涉及的各种推荐机制,以及它们各自的优缺点和适用场景,帮助用户清楚的了解和快速构建适合自己的推荐引擎。

    信息发现

    如今已经进入了一个数据爆炸的时代,随着 Web 2.0 的发展, Web 已经变成数据分享的平台,那么,如何让人们在海量的数据中想要找到他们需要的信息将变得越来越难。

    在这样的情形下,搜索引擎(Google,Bing,百度等等)成为大家快速找到目标信息的最好途径。在用户对自己需求相对明确的时候,用搜索引擎很方便的通过关键字搜索很快的找到自己需要的信息。但搜索引擎并不能完全满足用户对信息发现的需求,那是因为在很多情况下,用户其实并不明确自己的需要,或者他们的需求很难用简单的关键字来表述。又或者他们需要更加符合他们个人口味和喜好的结果,因此出现了推荐系统,与搜索引擎对应,大家也习惯称它为推荐引擎。

    随着推荐引擎的出现,用户获取信息的方式从简单的目标明确的数据的搜索转换到更高级更符合人们使用习惯的信息发现。

    如今,随着推荐技术的不断发展,推荐引擎已经在电子商务 (E-commerce,例如 Amazon,当当网 ) 和一些基于 social 的社会化站点 ( 包括音乐,电影和图书分享,例如豆瓣,Mtime 等 ) 都取得很大的成功。这也进一步的说明了,Web2.0 环境下,在面对海量的数据,用户需要这种更加智能的,更加了解他们需求,口味和喜好的信息发现机制。

    推荐引擎

    前面介绍了推荐引擎对于现在的 Web2.0 站点的重要意义,这一章我们将讲讲推荐引擎到底是怎么工作的。推荐引擎利用特殊的信息过滤技术,将不同的物品或内容推荐给可能对它们感兴趣的用户。

    图 1. 推荐引擎工作原理图
    图 1. 推荐引擎工作原理图

    图 1 给出了推荐引擎的工作原理图,这里先将推荐引擎看作黑盒,它接受的输入是推荐的数据源,一般情况下,推荐引擎所需要的数据源包括:

    • 要推荐物品或内容的元数据,例如关键字,基因描述等;
    • 系统用户的基本信息,例如性别,年龄等
    • 用户对物品或者信息的偏好,根据应用本身的不同,可能包括用户对物品的评分,用户查看物品的记录,用户的购买记录等。其实这些用户的偏好信息可以分为两类:
    • 显式的用户反馈:这类是用户在网站上自然浏览或者使用网站以外,显式的提供反馈信息,例如用户对物品的评分,或者对物品的评论。
    • 隐式的用户反馈:这类是用户在使用网站是产生的数据,隐式的反应了用户对物品的喜好,例如用户购买了某物品,用户查看了某物品的信息等等。

    显式的用户反馈能准确的反应用户对物品的真实喜好,但需要用户付出额外的代价,而隐式的用户行为,通过一些分析和处理,也能反映用户的喜好,只是数据不是很精确,有些行为的分析存在较大的噪音。但只要选择正确的行为特征,隐式的用户反馈也能得到很好的效果,只是行为特征的选择可能在不同的应用中有很大的不同,例如在电子商务的网站上,购买行为其实就是一个能很好表现用户喜好的隐式反馈。

    推荐引擎根据不同的推荐机制可能用到数据源中的一部分,然后根据这些数据,分析出一定的规则或者直接对用户对其他物品的喜好进行预测计算。这样推荐引擎可以在用户进入的时候给他推荐他可能感兴趣的物品。

    推荐引擎的分类

    推荐引擎的分类可以根据很多指标,下面我们一一介绍一下:

    1. 推荐引擎是不是为不同的用户推荐不同的数据

      根据这个指标,推荐引擎可以分为基于大众行为的推荐引擎和个性化推荐引擎

      • 根据大众行为的推荐引擎,对每个用户都给出同样的推荐,这些推荐可以是静态的由系统管理员人工设定的,或者基于系统所有用户的反馈统计计算出的当下比较流行的物品。
      • 个性化推荐引擎,对不同的用户,根据他们的口味和喜好给出更加精确的推荐,这时,系统需要了解需推荐内容和用户的特质,或者基于社会化网络,通过找到与当前用户相同喜好的用户,实现推荐。

      这是一个最基本的推荐引擎分类,其实大部分人们讨论的推荐引擎都是将个性化的推荐引擎,因为从根本上说,只有个性化的推荐引擎才是更加智能的信息发现过程。

    2. 根据推荐引擎的数据源

      其实这里讲的是如何发现数据的相关性,因为大部分推荐引擎的工作原理还是基于物品或者用户的相似集进行推荐。那么参考图 1 给出的推荐系统原理图,根据不同的数据源发现数据相关性的方法可以分为以下几种:

      • 根据系统用户的基本信息发现用户的相关程度,这种被称为基于人口统计学的推荐(Demographic-based Recommendation)
      • 根据推荐物品或内容的元数据,发现物品或者内容的相关性,这种被称为基于内容的推荐(Content-based Recommendation)
      • 根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性,这种被称为基于协同过滤的推荐(Collaborative Filtering-based Recommendation)。
    3. 根据推荐模型的建立方式

      可以想象在海量物品和用户的系统中,推荐引擎的计算量是相当大的,要实现实时的推荐务必需要建立一个推荐模型,关于推荐模型的建立方式可以分为以下几种:

      • 基于物品和用户本身的,这种推荐引擎将每个用户和每个物品都当作独立的实体,预测每个用户对于每个物品的喜好程度,这些信息往往是用一个二维矩阵描述的。由于用户感兴趣的物品远远小于总物品的数目,这样的模型导致大量的数据空置,即我们得到的二维矩阵往往是一个很大的稀疏矩阵。同时为了减小计算量,我们可以对物品和用户进行聚类, 然后记录和计算一类用户对一类物品的喜好程度,但这样的模型又会在推荐的准确性上有损失。
      • 基于关联规则的推荐(Rule-based Recommendation):关联规则的挖掘已经是数据挖掘中的一个经典的问题,主要是挖掘一些数据的依赖关系,典型的场景就是“购物篮问题”,通过关联规则的挖掘,我们可以找到哪些物品经常被同时购买,或者用户购买了一些物品后通常会购买哪些其他的物品,当我们挖掘出这些关联规则之后,我们可以基于这些规则给用户进行推荐。
      • 基于模型的推荐(Model-based Recommendation):这是一个典型的机器学习的问题,可以将已有的用户喜好信息作为训练样本,训练出一个预测用户喜好的模型,这样以后用户在进入系统,可以基于此模型计算推荐。这种方法的问题在于如何将用户实时或者近期的喜好信息反馈给训练好的模型,从而提高推荐的准确度。

    其实在现在的推荐系统中,很少有只使用了一个推荐策略的推荐引擎,一般都是在不同的场景下使用不同的推荐策略从而达到最好的推荐效果,例如 Amazon 的推荐,它将基于用户本身历史购买数据的推荐,和基于用户当前浏览的物品的推荐,以及基于大众喜好的当下比较流行的物品都在不同的区域推荐给用户,让用户可以从全方位的推荐中找到自己真正感兴趣的物品。

    深入推荐机制

    这一章的篇幅,将详细介绍各个推荐机制的工作原理,它们的优缺点以及应用场景。

    基于人口统计学的推荐

    基于人口统计学的推荐机制(Demographic-based Recommendation)是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户,图 2 给出了这种推荐的工作原理。

    图 2. 基于人口统计学的推荐机制的工作原理
    图 2. 基于人口统计学的推荐机制的工作原理

    从图中可以很清楚的看到,首先,系统对每个用户都有一个用户 Profile 的建模,其中包括用户的基本信息,例如用户的年龄,性别等等;然后,系统会根据用户的 Profile 计算用户的相似度,可以看到用户 A 的 Profile 和用户 C 一样,那么系统会认为用户 A 和 C 是相似用户,在推荐引擎中,可以称他们是“邻居”;最后,基于“邻居”用户群的喜好推荐给当前用户一些物品,图中将用户 A 喜欢的物品 A 推荐给用户 C。

    这种基于人口统计学的推荐机制的好处在于:

    1. 因为不使用当前用户对物品的喜好历史数据,所以对于新用户来讲没有“冷启动(Cold Start)”的问题。
    2. 这个方法不依赖于物品本身的数据,所以这个方法在不同物品的领域都可以使用,它是领域独立的(domain-independent)。

    那么这个方法的缺点和问题是什么呢?这种基于用户的基本信息对用户进行分类的方法过于粗糙,尤其是对品味要求较高的领域,比如图书,电影和音乐等领域,无法得到很好的推荐效果。可能在一些电子商务的网站中,这个方法可以给出一些简单的推荐。另外一个局限是,这个方法可能涉及到一些与信息发现问题本身无关却比较敏感的信息,比如用户的年龄等,这些用户信息不是很好获取。

    基于内容的推荐

    基于内容的推荐是在推荐引擎出现之初应用最为广泛的推荐机制,它的核心思想是根据推荐物品或内容的元数据,发现物品或者内容的相关性,然后基于用户以往的喜好记录,推荐给用户相似的物品。图 3 给出了基于内容推荐的基本原理。

    图 3. 基于内容推荐机制的基本原理
    图 3. 基于内容推荐机制的基本原理

    图 3 中给出了基于内容推荐的一个典型的例子,电影推荐系统,首先我们需要对电影的元数据有一个建模,这里只简单的描述了一下电影的类型;然后通过电影的元数据发现电影间的相似度,因为类型都是“爱情,浪漫”电影 A 和 C 被认为是相似的电影(当然,只根据类型是不够的,要得到更好的推荐,我们还可以考虑电影的导演,演员等等);最后实现推荐,对于用户 A,他喜欢看电影 A,那么系统就可以给他推荐类似的电影 C。

    这种基于内容的推荐机制的好处在于它能很好的建模用户的口味,能提供更加精确的推荐。但它也存在以下几个问题:

    1. 需要对物品进行分析和建模,推荐的质量依赖于对物品模型的完整和全面程度。在现在的应用中我们可以观察到关键词和标签(Tag)被认为是描述物品元数据的一种简单有效的方法。
    2. 物品相似度的分析仅仅依赖于物品本身的特征,这里没有考虑人对物品的态度。
    3. 因为需要基于用户以往的喜好历史做出推荐,所以对于新用户有“冷启动”的问题。

    虽然这个方法有很多不足和问题,但他还是成功的应用在一些电影,音乐,图书的社交站点,有些站点还请专业的人员对物品进行基因编码,比如潘多拉,在一份报告中说道,在潘多拉的推荐引擎中,每首歌有超过 100 个元数据特征,包括歌曲的风格,年份,演唱者等等。

    基于协同过滤的推荐

    随着 Web2.0 的发展,Web 站点更加提倡用户参与和用户贡献,因此基于协同过滤的推荐机制因运而生。它的原理很简单,就是根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性,然后再基于这些关联性进行推荐。基于协同过滤的推荐可以分为三个子类:基于用户的推荐(User-based Recommendation),基于项目的推荐(Item-based Recommendation)和基于模型的推荐(Model-based Recommendation)。下面我们一个一个详细的介绍着三种协同过滤的推荐机制。

    基于用户的协同过滤推荐

    基于用户的协同过滤推荐的基本原理是,根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,在一般的应用中是采用计算“K- 邻居”的算法;然后,基于这 K 个邻居的历史偏好信息,为当前用户进行推荐。下图 4 给出了原理图。

    图 4. 基于用户的协同过滤推荐机制的基本原理
    图 4. 基于用户的协同过滤推荐机制的基本原理

    上图示意出基于用户的协同过滤推荐机制的基本原理,假设用户 A 喜欢物品 A,物品 C,用户 B 喜欢物品 B,用户 C 喜欢物品 A ,物品 C 和物品 D;从这些用户的历史喜好信息中,我们可以发现用户 A 和用户 C 的口味和偏好是比较类似的,同时用户 C 还喜欢物品 D,那么我们可以推断用户 A 可能也喜欢物品 D,因此可以将物品 D 推荐给用户 A。

    基于用户的协同过滤推荐机制和基于人口统计学的推荐机制都是计算用户的相似度,并基于“邻居”用户群计算推荐,但它们所不同的是如何计算用户的相似度,基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。

    基于项目的协同过滤推荐

    基于项目的协同过滤推荐的基本原理也是类似的,只是说它使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户,图 5 很好的诠释了它的基本原理。

    假设用户 A 喜欢物品 A 和物品 C,用户 B 喜欢物品 A,物品 B 和物品 C,用户 C 喜欢物品 A,从这些用户的历史喜好可以分析出物品 A 和物品 C 时比较类似的,喜欢物品 A 的人都喜欢物品 C,基于这个数据可以推断用户 C 很有可能也喜欢物品 C,所以系统会将物品 C 推荐给用户 C。

    与上面讲的类似,基于项目的协同过滤推荐和基于内容的推荐其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息。

    图 5. 基于项目的协同过滤推荐机制的基本原理
    图 5. 基于项目的协同过滤推荐机制的基本原理

    同时协同过滤,在基于用户和基于项目两个策略中应该如何选择呢?其实基于项目的协同过滤推荐机制是 Amazon 在基于用户的机制上改良的一种策略,因为在大部分的 Web 站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,同时基于项目的机制比基于用户的实时性更好一些。但也不是所有的场景都是这样的情况,可以设想一下在一些新闻推荐系统中,也许物品,也就是新闻的个数可能大于用户的个数,而且新闻的更新程度也有很快,所以它的形似度依然不稳定。所以,其实可以看出,推荐策略的选择其实和具体的应用场景有很大的关系。

    基于模型的协同过滤推荐

    基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,计算推荐。

    基于协同过滤的推荐机制是现今应用最为广泛的推荐机制,它有以下几个显著的优点:

    1. 它不需要对物品或者用户进行严格的建模,而且不要求物品的描述是机器可理解的,所以这种方法也是领域无关的。
    2. 这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好

    而它也存在以下几个问题:

    1. 方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。
    2. 推荐的效果依赖于用户历史偏好数据的多少和准确性。
    3. 在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。
    4. 对于一些特殊品味的用户不能给予很好的推荐。
    5. 由于以历史数据为基础,抓取和建模用户的偏好后,很难修改或者根据用户的使用演变,从而导致这个方法不够灵活。

    混合的推荐机制

    在现行的 Web 站点上的推荐往往都不是单纯只采用了某一种推荐的机制和策略,他们往往是将多个方法混合在一起,从而达到更好的推荐效果。关于如何组合各个推荐机制,这里讲几种比较流行的组合方法。

    1. 加权的混合(Weighted Hybridization): 用线性公式(linear formula)将几种不同的推荐按照一定权重组合起来,具体权重的值需要在测试数据集上反复实验,从而达到最好的推荐效果。
    2. 切换的混合(Switching Hybridization):前面也讲到,其实对于不同的情况(数据量,系统运行状况,用户和物品的数目等),推荐策略可能有很大的不同,那么切换的混合方式,就是允许在不同的情况下,选择最为合适的推荐机制计算推荐。
    3. 分区的混合(Mixed Hybridization):采用多种推荐机制,并将不同的推荐结果分不同的区显示给用户。其实,Amazon,当当网等很多电子商务网站都是采用这样的方式,用户可以得到很全面的推荐,也更容易找到他们想要的东西。
    4. 分层的混合(Meta-Level Hybridization): 采用多种推荐机制,并将一个推荐机制的结果作为另一个的输入,从而综合各个推荐机制的优缺点,得到更加准确的推荐。

    推荐引擎的应用

    介绍完推荐引擎的基本原理,基本推荐机制,下面简要分析几个有代表性的推荐引擎的应用,这里选择两个领域:Amazon 作为电子商务的代表,豆瓣作为社交网络的代表。

    推荐在电子商务中的应用 – Amazon

    Amazon 作为推荐引擎的鼻祖,它已经将推荐的思想渗透在应用的各个角落。Amazon 推荐的核心是通过数据挖掘算法和比较用户的消费偏好于其他用户进行对比,借以预测用户可能感兴趣的商品。对应于上面介绍的各种推荐机制,Amazon 采用的是分区的混合的机制,并将不同的推荐结果分不同的区显示给用户,图 6 和图 7 展示了用户在 Amazon 上能得到的推荐。

    图 6. Amazon 的推荐机制 - 首页
    图 6. Amazon 的推荐机制 - 首页
    图 7. Amazon 的推荐机制 - 浏览物品
    图 7. Amazon 的推荐机制 - 浏览物品

    Amazon 利用可以记录的所有用户在站点上的行为,根据不同数据的特点对它们进行处理,并分成不同区为用户推送推荐:

    • 今日推荐 (Today's Recommendation For You): 通常是根据用户的近期的历史购买或者查看记录,并结合时下流行的物品给出一个折中的推荐。
    • 新产品的推荐 (New For You): 采用了基于内容的推荐机制 (Content-based Recommendation),将一些新到物品推荐给用户。在方法选择上由于新物品没有大量的用户喜好信息,所以基于内容的推荐能很好的解决这个“冷启动”的问题。
    • 捆绑销售 (Frequently Bought Together): 采用数据挖掘技术对用户的购买行为进行分析,找到经常被一起或同一个人购买的物品集,进行捆绑销售,这是一种典型的基于项目的协同过滤推荐机制。
    • 别人购买 / 浏览的商品 (Customers Who Bought/See This Item Also Bought/See): 这也是一个典型的基于项目的协同过滤推荐的应用,通过社会化机制用户能更快更方便的找到自己感兴趣的物品。

    值得一提的是,Amazon 在做推荐时,设计和用户体验也做得特别独到:

    Amazon 利用有它大量历史数据的优势,量化推荐原因。

    • 基于社会化的推荐,Amazon 会给你事实的数据,让用户信服,例如:购买此物品的用户百分之多少也购买了那个物品;
    • 基于物品本身的推荐,Amazon 也会列出推荐的理由,例如:因为你的购物框中有 ***,或者因为你购买过 ***,所以给你推荐类似的 ***。

    另外,Amazon 很多推荐是基于用户的 profile 计算出来的,用户的 profile 中记录了用户在 Amazon 上的行为,包括看了那些物品,买了那些物品,收藏夹和 wish list 里的物品等等,当然 Amazon 里还集成了评分等其他的用户反馈的方式,它们都是 profile 的一部分,同时,Amazon 提供了让用户自主管理自己 profile 的功能,通过这种方式用户可以更明确的告诉推荐引擎他的品味和意图是什么。

    推荐在社交网站中的应用 – 豆瓣

    豆瓣是国内做的比较成功的社交网站,它以图书,电影,音乐和同城活动为中心,形成一个多元化的社交网络平台,自然推荐的功能是必不可少的,下面我们看看豆瓣是如何推荐的。

    图 8 . 豆瓣的推荐机制 - 豆瓣电影
    图 8 . 豆瓣的推荐机制 - 豆瓣电影

    当你在豆瓣电影中将一些你看过的或是感兴趣的电影加入你看过和想看的列表里,并为它们做相应的评分,这时豆瓣的推荐引擎已经拿到你的一些偏好信息,那么它将给你展示如图 8 的电影推荐。

    图 9 . 豆瓣的推荐机制 - 基于用户品味的推荐
    图 9 . 豆瓣的推荐机制 - 基于用户品味的推荐

    豆瓣的推荐是通过“豆瓣猜”,为了让用户清楚这些推荐是如何来的,豆瓣还给出了“豆瓣猜”的一个简要的介绍。

    “你的个人推荐是根据你的收藏和评价自动得出的,每个人的推荐清单都不同。你的收藏和评价越多,豆瓣给你的推荐会越准确和丰富。
    每天推荐的内容可能会有变化。随着豆瓣的长大,给你推荐的内容也会越来越准。”

    这一点让我们可以清晰明了的知道,豆瓣必然是基于社会化的协同过滤的推荐,这样用户越多,用户的反馈越多,那么推荐的效果会越来越准确。

    相对于 Amazon 的用户行为模型,豆瓣电影的模型更加简单,就是“看过”和“想看”,这也让他们的推荐更加专注于用户的品味,毕竟买东西和看电影的动机还是有很大不同的。

    另外,豆瓣也有基于物品本身的推荐,当你查看一些电影的详细信息的时候,他会给你推荐出“喜欢这个电影的人也喜欢的电影”, 如图 10,这是一个基于协同过滤的应用。

    图 10 . 豆瓣的推荐机制 - 基于电影本身的推荐
    图 10 . 豆瓣的推荐机制 - 基于电影本身的推荐

    总结

    在网络数据爆炸的年代,如何让用户更快的找到想要的数据,如何让用户发现自己潜在的兴趣和需求,无论是对于电子商务还是社会网络的应用都是至关重要的。推荐引擎的出现,使得这个问题越来越被大家关注。但对大多数人来讲,也许还在惊叹它为什么总是能猜到你到底想要些什么。推荐引擎的魔力在于你不清楚在这个推荐背后,引擎到底记录和推理了些什么。

    通过这篇综述性的文章,你可以了解,其实推荐引擎只是默默的记录和观察你的一举一动,然后再借由所有用户产生的海量数据分析和发现其中的规律,进而慢慢的了解你,你的需求,你的习惯,并默默的无声息的帮助你快速的解决你的问题,找到你想要的东西。

    其实,回头想想,很多时候,推荐引擎比你更了解你自己。

    通过第一篇文章,相信大家对推荐引擎有一个清晰的第一印象,本系列的下一篇文章将深入介绍基于协同过滤的推荐策略。在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法。它以其方法模型简单,数据依赖性低,数据方便采集,推荐效果较优等多个优点成为大众眼里的推荐算法“No.1”。本文将带你深入了解协同过滤的秘密,并给出基于 Apache Mahout 的协同过滤算法的高效实现。Apache Mahout 是 ASF 的一个较新的开源项目,它源于 Lucene,构建在 Hadoop 之上,关注海量数据上的机器学习经典算法的高效实现。

    感谢大家对本系列的关注和支持。

    声明

    本人所发表的内容仅为个人观点,不代表 IBM 公司立场、战略和观点。

    参考资料

    学习

    from: https://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/
    展开全文
  • 推荐引擎相关

    千次阅读 2016-03-11 12:17:25
    “探索推荐引擎内部的秘密”系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用。同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模...
  • 推荐引擎系统结构

    2017-02-27 18:29:32
    推荐引擎系统结构
  • 推荐引擎简介

    千次阅读 2014-03-15 20:40:18
    推荐引擎  随着 Web 技术的发展,使得内容的创建和分享变得越来越容易。每天都有大量的图片、博客、视频发布到网上。信息的极度爆炸使得人们找到他们需要的信息将变得越来越难。传统的搜索技术是一个相对简单的...
  • 推荐引擎初探

    千次阅读 2013-12-12 11:45:54
    探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探 注:本文转自developworkers社区:http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html 随着 Web 技术的发展,...
  • 本系列的第一篇为读者概要介绍了推荐引擎,下面几篇文章将深入介绍推荐引擎的相关算法,并帮助读者高效的实现这些算法。 在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法。它以其...
  • 推荐引擎基本知识

    2012-04-26 15:32:01
    推荐引擎简介推荐引擎的发展历程推荐引擎技术的使用推荐引擎无处不在 展开 推荐引擎简介 推荐引擎  推荐引擎,是主动发现用户当前或潜在需求,并主动推送信息给用户的信息网络。 特点  推荐引擎不是被动...
  • 100行代码实现电影推荐引擎系统

    千次阅读 2018-09-12 19:42:57
    推荐引擎应用于电影情境,便成为一个电影推荐引擎,应用到购物中,则成为购物推荐引擎。 通过预测当前用户可能会喜欢的内容,将相应的东西从数据库中筛选出来,这样有助于将用户和数据集中的内容连接起来,通过...
  • 几种不同的推荐引擎比较

    千次阅读 2015-05-11 18:25:59
    以前也用了一些推荐算法写过一些应用,最近用上了网易云音乐,于是便想写篇推荐引擎的文章。 一.推荐引擎 主动发现用户当前或潜在需求,并主动推送信息给用户的信息网络。挖掘用户的喜好和需求,主动向用户推荐其感...
  • 使用 Taste 构建推荐引擎实例 – 电影推荐引擎 根据上面的步骤,我们可以得到一个简单的推荐引擎 demo 环境,下面介绍如何使用 Taste 方便地构建自定义的推荐引擎。 抽取 Taste 工具包 直接使用 Mahout 的...
  • 阿里推荐引擎使用总结

    千次阅读 2018-07-05 09:20:18
    一、阿里推荐引擎概述推荐引擎(RecommendationEngine,以下简称RecEng,特指阿里云推荐引擎)是在阿里云计算环境下建立的一套推荐服务框架,目标是让广大中小互联网企业能够在这套框架上快速的搭建满足自身业务需求...
  • 阿里云推荐引擎使用教程

    千次阅读 2017-10-24 16:35:28
    数加推荐引擎全力支持新闻资讯、短视频、直播、电商、社交、音乐、在线教育等众多推荐业务,为各类APP、网站以及其他业务提供高质量的个性化推荐服务。 产品详情:https://data.aliyun.com/product/re 课时列表 ...
  • 基于Spark构建推荐引擎

    千次阅读 2015-07-23 10:23:11
    基于Spark构建推荐引擎之一:基于物品的协同过滤推荐http://blog.csdn.net/sunbow0/article/details/42737541Spark构建推荐引擎之二:基于Spark Streaming 实时推荐计算... 学习转载:http://blog.csdn.net/s
  • 随着 Web 技术的发展,使得内容的创建和分享变得越来越容易。每天都有大量的图片、博客、视频发布到网上。信息的极度爆炸使得人们找到他们需要的信息将变得越来越难。...而推荐引擎的出现,使用户获
  • 推荐一下IBM软件工程师赵晨婷和马春娥的系列文章探索推荐引擎内部的秘密IBM Developworks探索推荐引擎内部的秘密第 1 部分 推荐引擎初探探索推荐引擎内部的秘密第 2 部分 深入推荐引擎相关算法 - 协同过滤探索推荐...
  • 探索推荐引擎内部的秘密系列

    千次阅读 2017-04-21 21:59:18
    最近要用到协同过滤的算法来解决工作...“探索推荐引擎内部的秘密”系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用。同时在理论讲解的基础上,还会结
  • 推荐引擎简介 推荐引擎利用特殊的信息过滤(IF,Information Filtering)技术,将不同的内容(例如电影、音乐、书籍、新闻、图片、网页等)推荐给可能感兴趣的用户。通常情况下,推荐引擎的实现是通过将用户的个人...
  • 阿里云推荐引擎使用调查记录

    千次阅读 2017-06-29 10:17:29
    最近项目中需要使用到推荐引擎,直接选用的是阿里云推荐引擎。由于一开始都没涉及过这方面的知识,而且调查时正好是V3发布前,调查到一半的时候,推荐引擎发布了最新V3版本,DDL和V2的略有不同。在调查与开发过程中...
  • 推荐引擎的学习资料

    千次阅读 2012-04-11 16:44:57
    推荐《探索推荐引擎的秘密》系列 http://tiny4.org/blog/2011/05/recommend-enginee/ 该文作者为iApp4me创始人,文中提到几个开源推荐引擎项目 探索推荐引擎内部的秘密系列:http://www.ib
  • 规则引擎和推荐引擎区别

    千次阅读 2014-12-01 12:46:47
     推荐引擎的方式 通过电子商城数据挖掘和机器学习的方式,计算得到每一个客户的购物偏好,进而推荐其喜好的商品和促销活动,如新蛋极客空间(Geek)在活动推选上真实有号召性;  备注:关于规
  • 推荐引擎(一)

    千次阅读 2013-05-30 11:16:01
    推荐系统,与搜索引擎对应,又称为推荐引擎。随着推荐引擎的出现,用户获取信息的方式从简单的目标明确的数据的搜索转换到更高级更符合人们使用习惯的信息发现。 推荐引擎 推荐引擎利用特殊的信息过滤技术,将不同的...
  • java 推荐引擎

    千次阅读 2018-05-30 21:52:17
    参考博客https://blog.csdn.net/lazythinker/article/details/25110961
  • 基于协同过滤的推荐引擎

    千次阅读 2013-07-26 19:16:00
    探索推荐引擎内部的秘密”系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用。同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 265,098
精华内容 106,039
关键字:

推荐引擎