探索推荐引擎内部的秘密(归纳)

http://www.edu.xxt.cn/articleFront/articleDetailed.action?article.id=2963

(一)推荐引擎初探

推荐引擎分类

基于人口统计学(Demographic-based Recommendation)的分类:根据系统中用户的信息查找用户的相关度,为用户推荐相似用户喜欢的物品。

比如下图:发现用户C与A相似,所以将用户A喜欢的物品A推荐给用户C

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

对于用户不存在“冷启动”(cold-start)问题,但分类过于粗糙。

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

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

能很好地建模用户的口味,提供更加精确的推荐。但仍存在一些不足之处,比如:

1.需要对物品进行分析和建模,推荐质量依赖于对物品建模的完整性和全面程度,一般认为关键词和标签是描述内容的一种简单有效的方法。例如对于视频我们可以基于类型,主演,国家,描述的关键字等信息进行建模。

2.内容相似度分析仅仅依赖于内容本身,没有考虑用户对内容喜好态度。

3.因为需要基于用户以往喜好历史做出推荐,所以存在“冷启动”问题。

基于协同过滤(collaborative filtering)的推荐:考虑到用户对物品或内容的偏好,发现用户的相关性,或是发现内容或物品的相似性。

基于用户的协同过滤推荐:根据所有用户对物品或内容的偏好,发现与当前用户口味和偏好相似的近邻用户群,一般可采用K-近邻算法。然后基于最近的K个近邻用户偏好信息为当前用户推荐物品或内容。

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

上图,我们可以发现用户A和C的偏好近似,所以我们可以为用户A推荐物品D。根据上图可以退出关联规则:喜欢物品A,C===>喜欢物品D

基于项目的协同过滤推荐:根据所用用户对物品的偏好信息,发现物品与物品间相似度,然后根据用户历史偏好信息,将类似物品推荐给用户。

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

上图可以发现用户A,B都喜欢A,C,因此可以认为喜欢物品A的一定喜欢物品C(关联规则A====>C),即物品A和C相似。现在发现用户C喜欢物品A,推测用户C也好会喜欢物品C。

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

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

该模型是迄今使用最广泛的推荐算法。它不需要对用户或物品进行严格建模,而且不要求物品的描述是机器可理解的,所以这种方法与领域无关。这种计算是开放的,可以共用他人经验,很好地支持用户发现潜在兴趣。但也存在以下几个问题:

1.方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。 

2.推荐的效果依赖于用户历史偏好数据的多少和准确性。 

3.在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等。

4. 对于一些特殊品味的用户不能给予很好的推荐。

5.由于以历史数据为基础,抓取和建模用户的偏好后,很难修改或者根据用户的使用演变,从而导致这个方法不够灵活。

混合的推荐机制:多种推荐方法混合使用。下面介绍几种比较流行的混合方式

加权的混合(Weighted Hybridization):用线性公式(linear formula)将几种不同的推荐按照一定权重组合起来,具体权重的值需要在测试数据集上反复实验,从而达到最好的推荐效果。 

切换的混合(Switching Hybridization):前面也讲到,其实对于不同的情况(数据量,系统运行状况,用户和物品的数目等),推荐策略可能有很大的不同,那么切换的混合方式,就是允许在不同的情况下,选择最为合适的推荐机制计算推荐。 

分区的混合(Mixed Hybridization):采用多种推荐机制,并将不同的推荐结果分不同的区显示给用户。其实,Amazon,当当网等很多电子商务网站都是采用这样的方式,用户可以得到很全面的推荐,也更容易找到他们想要的东西。 

分层的混合(Meta-Level Hybridization): 采用多种推荐机制,并将一个推荐机制的结果作为另一个的输入,从而综合各个推荐机制的优缺点,得到更加准确的推荐。

推荐在电子商务中应用

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

豆瓣:

http://www.edu.xxt.cn/articleFront/articleDetailed.action?article.id=2964

(二)集体智慧和协同过滤

集体智慧在大量的人群的行为和数据中收集答案,帮助你对整个人群得到统计意义上的结论,这些结论是我们在单个个体上无法得到的,它往往是某种趋势或者人群中共性的部分。

Wikipedia和Google是两个典型利用集体智慧的Web2.0应用。

协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。协同过滤的几个步骤:收集用户偏好,找到相似的用户或物品,计算推荐

之一,收集用户偏好

表1 用户行为和用户偏好

用户行为

类型

特征

作用

评分

显式

整数量化的偏好,可能的取值是 [0, n];n 一般取值为 5 或者是 10

通过用户对物品的评分,可以精确的得到用户的偏好

投票

显式

布尔量化的偏好,取值是 0 或 1

通过用户对物品的投票,可以较精确的得到用户的偏好

转发

显式

布尔量化的偏好,取值是 0 或 1

通过用户对物品的投票,可以精确的得到用户的偏好。
如果是站内,同时可以推理得到被转发人的偏好(不精确)

保存书签

显示

布尔量化的偏好,取值是 0 或 1

通过用户对物品的投票,可以精确的得到用户的偏好。

标记标签
(Tag)

显示

一些单词,需要对单词进行分析,得到偏好

通过分析用户的标签,可以得到用户对项目的理解,同时可以分析出用户的情感:喜欢还是讨厌

评论

显示

一段文字,需要进行文本分析,得到偏好

通过分析用户的评论,可以得到用户的情感:喜欢还是讨厌

点击流 
( 查看 )

隐式

一组用户的点击,用户对物品感兴趣,需要进行分析,得到偏好

用户的点击一定程度上反映了用户的注意力,所以它也可以从一定程度上反映用户的喜好。

页面停留时间

隐式

一组时间信息,噪音大,需要进行去噪,分析,得到偏好

用户的页面停留时间一定程度上反映了用户的注意力和喜好,但噪音偏大,不好利用。

购买

隐式

布尔量化的偏好,取值是 0 或 1

用户的购买是很明确的说明这个项目它感兴趣。

重要工作:减噪和归一化

减噪:用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用户的误操作,我们可以通过经典的数据挖掘算法过滤掉行为数据中的噪音,这样可以是我们的分析更加精确。归一化:如前面讲到的,在计算用户对物品的喜好程度时,可能需要对不同的行为数据进行加权。但可以想象,不同行为的数据取值可能相差很大,比如,用户的查看数据必然比购买数据大的多,如何将各个行为的数据统一在一个相同的取值范围中,从而使得加权求和得到的总体喜好更加精确,就需要我们进行归一化处理。最简单的归一化处理,就是将各类数据除以此类中的最大值,以保证归一化后的数据取值在 [0,1] 范围中。 

进行的预处理后,根据不同应用的行为分析方法,可以选择分组或者加权处理,之后我们可以得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮点数值。

之二,找到相似的用户或物品

基于用户的CF和基于物品的CF,这两种方法都需要计算相似度。相似度计算方法略。

图 1 相似邻居计算示意图

上图:固定数量邻居(K-neighbours或fix-size neighbours)与基于相似度门槛的邻居(Threshold-based neighbours)


基于用户CF和基于物品CF(一)中已介绍,此处略。二者比较:

    计算复杂度 Item CF 和 User CF 是基于协同过滤推荐的两个最基本的算法,User CF 是很早以前就提出来了,Item CF 是从 Amazon 的论文和专利发表之后(2001 年左右)开始流行,大家都觉得 Item CF 从性能和复杂度上比 User CF 更优,其中的一个主要原因就是对于一个在线网站,用户的数量往往大大超过物品的数量,同时物品的数据相对稳定,因此计算物品的相似度不但计算量较小,同时也不必频繁更新。但我们往往忽略了这种情况只适应于提供商品的电子商务网站,对于新闻,博客或者微内容的推荐系统,情况往往是相反的,物品的数量是海量的,同时也是更新频繁的,所以单从复杂度的角度,这两个算法在不同的系统中各有优势,推荐引擎的设计者需要根据自己应用的特点选择更加合适的算法。

     适用场景 在非社交网络的网站中,内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。比如在购书网站上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性远远超过了网站首页对该用户的综合推荐。可以看到,在这种情况下,Item CF 的推荐成为了引导用户浏览的重要手段。同时 Item CF 便于为推荐做出解释,在一个非社交网络的网站中,给某个用户推荐一本书,同时给出的解释是某某和你有相似兴趣的人也看了这本书,这很难让用户信服,因为用户可能根本不认识那个人;但如果解释说是因为这本书和你以前看的某本书相似,用户可能就觉得合理而采纳了此推荐。

     相反的,在现今很流行的社交网络站点中,User CF 是一个更不错的选择,User CF 加上社会网络信息,可以增加用户对推荐解释的信服程度。

基于Apache Mahout实现高效的协同过滤推荐

略,自己课后测试下

之三,计算推荐

UserCF


ItemCF


Slope One:User CF和Item CF在海量数据计算时,计算量很大,从而导致推荐效率下降。Mahout还提供了轻量级的Slope One。

   Slope One 是有 Daniel Lemire 和 Anna Maclachlan 在 2005 年提出的一种对基于评分的协同过滤推荐引擎的改进方法,下面简单介绍一下它的基本思想。

基于 Slope One 的方法会得到以下规律:

  • 用户对物品 B 的评分 = 用户对物品 A 的评分 + 1
  • 用户对物品 B 的评分 = 用户对物品 C 的评分

基于以上的规律,我们可以对用户 A 和用户 B 的打分进行预测:

  • 对用户 A,他给物品 A 打分 4,那么我们可以推测他对物品 B 的评分是 5,对物品 C 的打分也是 5。
  • 对用户 B,他给物品 A 打分 2,给物品 C 打分 4,根据第一条规律,我们可以推断他对物品 B 的评分是 3;而根据第二条规律,推断出评分是 4。当出现冲突时,我们可以对各种规则得到的推断进行就平均,所以给出的推断是 3.5。

这就是 Slope One 推荐的基本原理,它将用户的评分之间的关系看作简单的线性关系:

Y = mX + b;

当 m = 1 时就是 Slope One,也就是我们刚刚展示的例子。

图 5 Slope One 推荐策略示例

http://www.edu.xxt.cn/articleFront/articleDetailed.action?article.id=2965

(三)聚类

聚类分类

聚类结果是排他的还是可重叠的:排他:例如“喜欢詹姆斯卡梅隆电影”的客户和“不喜欢詹姆斯卡梅隆电影”的客户;可重叠:“喜欢詹姆斯卡梅隆电影的”客户和“喜欢奥纳多电影的客户”,当然还存在重叠部分“同时喜欢詹姆斯卡梅隆和奥纳多电影”的客户。

基于层次还是基于划分的:划分问题:基于一定规则划分成若干组,大多数采用这类方法;基于层次:大多数自底向上,一步步细化分组;也有自顶向下,即先划分为大量小类,再聚成大类。

簇数目固定还是无限制聚类:前者聚类前已经确定了聚类数目,比如将一堆动物划分为猫和狗。后者根据聚类算法确定聚类数目,也称为盲聚类。

基于距离还是基于概率分布聚类:基于距离前面已经详细说明过,主要利用相似度(相关性计算)及距离进行度量。基于概率分布的聚类可以理解为N维空间一组分布点,而他们分布往往满足一定特征。基于概率分布模型的聚类问题,就是在一组对象中,找到能符合特定分布模型的点的集合,他们不一定是距离最近的或者最相似的,而是能完美的呈现出概率分布模型所描述的模型。

图 1 基于距离和基于概率分布模型的聚类问题

Apache Mahout进行聚类研究:略


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值