探索推荐引擎内部的秘密

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

信息发现

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

在这样的情形下,搜索引擎(Google,Bing,百度等等)成为你们快速找到目标信息的最好途径。在用户对本身需求相对明确的时候,用搜索引擎很方便的经过关键字搜索很快的找到本身须要的信息。但搜索引擎并不能彻底知足用户对信息发现的需求,那是由于在不少状况下,用户其实并不明确本身的须要,或者他们的需求很难用简单的关键字来表述。又或者他们须要更加符合他们我的口味和喜爱的结果,所以出现了推荐系统,与搜索引擎对应,你们也习惯称它为推荐引擎。dom

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

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


推荐引擎

前面介绍了推荐引擎对于如今的 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 之上,关注海量数据上的机器学习经典算法的高效实现。

相关文章
相关标签/搜索