推荐引擎分类

本来是要着重了解CF的,考虑到完整性,完善背景知识,把推荐引擎的其他几种也参照下,便于对照和理解更深刻。过程中发现了其和数据挖掘中其他几种算法间的关系。主要摘自探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探这样一篇文章。可以理解为对该系列文章的学习笔记。

根据不同的数据源发现数据相关性的方法可以分为以下几种:

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

基于人口统计学的推荐

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

statistical-recommendation

 

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

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

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

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

douba的注解:

只是挖掘用户的特征,把用户和自己的相似的“邻居”分在一组,完全不考虑物品。对于有些笔记细致的物品,是有点不好用。想起了classification tree中的哪个年龄段、收入高低是否买电脑的那个例子。不考虑物品,只考虑人的属性。

基于内容的推荐

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

content-based-recommendation

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

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

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

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

douba的注解:

我想到到了信息检索中的查询扩展(query expansion),即根据对象的相关性,由已知的对象列出与对象属性相关的对象。物品属性越细,建模越细致,则效果越好。

?基于协同过滤的推荐

它的原理很简单,就是根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性,然后再基于这些关联性进行推荐。基于协同过滤的推荐可以分为三个子类:基于用户的推荐(User-based Recommendation),基于项目的推荐(Item-based Recommendation)和基于模型的推荐(Model-based Recommendation)。

基于用户的协同过滤推荐

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

user-based-recommendation

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

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

基于项目的协同过滤推荐

用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户

item-based-recommendation

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

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

 

douba的注解:

把来自每个用户的item列表想成平凡项中考察的数据库中的每个事务,则基于物品的推荐就是去发现物品的频繁项。如经典的尿布和啤酒的频发项。因为不是基于内容的,只是基于被偏爱的统计,因此,很可能有尿布和啤酒被判定为相似物品。

 

基于模型的协同过滤推荐

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

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

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

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

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

 

几种不同的推荐引擎根据其原理衍生的重要特征对照如下:

推荐引擎种类 原理 本质属性 相似性算法 优点 缺点 我的注解
基于人口统计学的推荐 首先,系统对每个用户都有一个用户 Profile 的建模,其中包括用户的基本信息,例如用户的年龄,性别等等;然后,系统会根据用户的 Profile 计算用户的相似度,可以看到用户 A 的 Profile 和用户 C 一样,那么系统会认为用户 A 和 C 是相似用户,在推荐引擎中,可以称他们是“邻居”;最后,基于“邻居”用户群的喜好推荐给当前用户一些物品,图中将用户 A 喜欢的物品 A 推荐给用户 C。 相似的人。基于“邻居”用户群计算推荐 只考虑用户本身的特征来决定人的相似性 1. 没有“冷启动(Cold Start)”的问题
2. 这个方法不依赖于物品本身的数据
对用户进行分类的方法过于粗糙,尤其是对品味要求较高的领域 只是挖掘用户的特征,把用户和自己的相似的“邻居”分在一组,完全不考虑物品。对于有些笔记细致的物品,是有点不好用。想起了classification tree中的哪个年龄段、收入高低是否买电脑的那个例子。不考虑物品,只考虑人的属性。
基于内容的推荐 根据推荐物品或内容的元数据,发现物品或者内容的相关性,然后基于用户以往的喜好记录,推荐给用户相似的物品 相似的东西 基于用户以往的喜好记录,推荐给用户相似的物品 1. 对于新用户有“冷启动”的问题。因为需要基于用户以往的喜好历史做出推荐
2.物品相似度的分析仅仅依赖于物品本身的特征,这里没有考虑人对物品的态度
我想到到了搜索引擎中的查询扩展,即根据对象的相关性,由已知的对象列出与对象属性相关的对象。物品属性越细,建模越细致,则效果越好。
协同过滤 基于用户的协同过滤推荐 根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,在一般的应用中是采用计算“K- 邻居”的算法;然后,基于这 K 个邻居的历史偏好信息,为当前用户进行推荐 相似的人。基于“邻居”用户群计算推荐 根据用户历史上对物品的喜欢来决定人的相似性。 它不需要对物品或者用户进行严格的建模,而且不要求物品的描述是机器可理解的,是领域无关的。 1. 对新物品和新用户都有“冷启动”的问题。方法的核心是基于历史数据,
2. 推荐的效果依赖于用户历史偏好数据的多少和准确性。
3. 由于以历史数据为基础,抓取和建模用户的偏好后,很难修改或者根据用户的使用演变,从而导致不够灵活。
基于项目的协同过滤推荐 用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户 相似的东西 根据用户历史上对物品的喜欢来决定物品的相似性。 把来自每个用户的item列表想成平凡项中考察的数据库中的每个事务,则基于物品的推荐就是去发现物品的频繁项。如经典的尿布和啤酒的频发项。因为不是基于内容的,只是基于被偏爱的统计,因此,很可能有尿布和啤酒被判定为相似物品。
基于模型的协同过滤推荐 基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,计算推荐

 

原创文章。为了维护文章的版本一致、最新、可追溯,转载请注明: 转载自idouba

本文链接地址: 推荐引擎分类


No comments yet.

发表评论