首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用推荐引擎个性化您的 Web 应用程序(1)推荐引擎概述

使用推荐引擎个性化您的 Web 应用程序(1)推荐引擎概述

简介想要在快节奏的全球化行业占有一席之位,技术人员必须紧跟 IT 潮流大趋势,寻找方法合并他们公司的重要技术组合。一个明显的趋势是使用推荐引擎推动用户从您的 Web 网站或者企业寻找更多产品。这些引擎根据各种模式为用户提供推荐,这对于根据特定的用户习惯来引导用户考虑那些他们之前从未察觉的产品很有帮助。
一些非常流行的 Web 站点大量使用推荐引擎。比如,Amazon 和 Netflix 的访问者通常会看到此类个性化推荐语,“如果您喜欢那款产品,您可能也会喜欢这款...” 这些网站采用推荐,以一种智能的、有意义的、特别为用户和用户偏好量身定制的方法向用户推荐其他产品,增加收益。
即使您的企业并不卖书或电影,您也有足够理由提供类似的实现。您可以推荐你们公司提供的相关产品,特别是如果您有一个广泛的产品组合。您也可以为抽象概念提供相关建议,比如,您希望用户访问的相关页面、流行服务清单、合适的教育机会、特价产品或者访问有价值的技术支持文档。
无需猜测广大用户群对什么感兴趣,通过推荐的个性化可以让您悄无声息地、智能地识别各个用户所喜欢的和所不喜欢的,并使用这些信息为各个用户定制个性化用户体验,根据以往经验推荐一个新选择是遍及许多应用领域和行业的一项任务,所以,这就是贯穿本文的一个示例。
Apache Mahout 是一个开源推荐引擎,为这些概念提供一个良好的应用,尽管小巧但功能强大,足以在中小型企业的案例中实施。本文大概介绍如何在使用 IBM Rational Application Developer for WebSphere Software V8.0.3 集成 Apache Mahout V0.5 和 IBM WebSphere Application Server V8。以推荐引擎概述开始,从一个较高的水平来介绍 Apache Mahout,向您解释如何使用 WebSphere Application Server 和 Rational Application Developer 来集成它,并提供后续步骤帮助您找到这项技术的更多信息。
推荐引擎概述推荐引擎的主要作用是根据已有数据进行推论,呈现这些对象之间的关系。对象可以是很多事物,包括用户、项、产品,等等。关系提供爱好程度或者对象之间的所属关系。例如,关系可以显示用户喜欢某一项的程度的等级(标量),或者指出用户是否将某一页面作为书签(二元的)。
为了进行推荐,推荐引擎需要执行数步来挖掘数据。起初,您可以使用输入数据代表对象以及对象之间的关系。输入数据是由对象标识符以及与其他对象之间的关系所构成的。图 1 以较高水平进行显示。
图 1. 大图 考虑到用户对项做出的评级。推荐引擎可以使用该输入数据计算对象之间的相似性。计算对象间的相似性需要大量时间,具体取决于数据的大小以及具体算法。分布式计算,比如 Apache Hadoop,可用于平行化相似性计算。这里有多种不同的算法可以计算相似性。最后,推荐引擎可以使用相似性信息根据请求参数进行推荐。
也许您认为推荐引擎很有用,但是却远远地躲开,因为您觉得它们太复杂了。事实上,推荐引擎领域很广也很复杂。幸运的是,有很多可用工具,可以在一篇文章中就能很容易地介绍所有必要的概念。更棒的是,学完以后,可以使用这些工具将课程内容付诸实践。Apache Mahout 的设计者将可扩展性和可用性作为项目的核心部分,因此您可以根据自己的需求构建自己的解决方案。
当您决定开始个性化您的应用程序并使用推荐引擎时,需要先制定几个重要决策:
  • 应用哪个算法需要制定的最重要决策是在数据中应用哪个算法。算法的选择取决于您想要确定的以及特定于您数据的关系类型。推荐使用的常见方法包括:
    • 协同过滤:该方法依赖于用户之间的社交互动。这类推荐基于其他用户所提供的评级。
    • 聚集:使用该算法,推荐引擎可以尝试基于用户或者项本身之间的相似性来构建推荐。
    • 分类:该方法使用普通属性自动将项分成不同类别。使用分类算法,计算机将尝试对所有产品进行分类。
    本文将关注协同过滤来帮助您了解用户的社交活动;这也是添加推荐到 Web 应用程序的一个好开端。
    协同过滤是一个简单且流行的技术。说它简单,是因为最重要的工作可由客户来完成,他们驾驭着您想要凸显的准则。协同过滤分析其他用户或者项的评级来进行推荐。在协同过滤中有两种方法:它们之间的主要区别在于每个方法扩展的能力随着系统中用户数量的增长而增长:
    • 基于用户的推荐这类推荐通过观察每个用户评级的项的共性来构建用户之间的相似性。例如,这个项是课程,如果两个用户都参加了同样的课程,那么他们可能被认为是相似的。另一种极端是,如果他们没有参加任何类似的课程,那有他们的相似性则非常低。要进行推荐,这些算法将依赖相似用户对那些他们并没有参加的课程所评定的级别。该推荐是最基本的一种推荐;然而,它的主要限制是,为了生成相似性,它需要对每个用户和其他用户进行比较。它适用于用户较少的应用程序,如果用户数量不断增长,那么执行这一评估的时间将会以指数级增长。
    • 基于项的推荐基于项的推荐,换句话说,是以检查与用户相关的项开始的。对于与用户相关的每个项,需要计算它与其他项的相似度,进而构建推荐列表。为了确定用户对一个项的喜欢程度,算法需要检查用户对该项的评级,并为每个推荐项提供一个加权等级。使用基于项的推荐的主要问题是需要为每个可用项构建一个相似度指数。然而,项的更改频率小于用户的更改频率,所以,基于项的推荐适合于那些预先离线计算相似度、定期更新的项。
  • 如何将此流程扩展到您的用户计算用户和项之间的相似性的过程实际上是一个过程密集性运算。根据您的数据集大小不同,运算时间可能需要几毫秒到几分钟。如果使用基于 Web 的应用程序,响应时间可能是一个问题,因为用户需要等待一段时间来检索一个推荐。
    同时,也可以实时计算用户和项之间的相似性,当处理大数据集时,需要小心地预估这些。对于基于用户和基于项的推荐方法,如果数据集较大(例如,评级超过百万),最好的方法是离线执行这些计算。离线计算在不太频繁添加新项或者用户偶尔评级项的案例中可行,因为只有在添加一个新项或者将一个新评级应用到项时才需要计算相似性。在这种场景下,推荐引擎可以使用相似性,最终将会是一致的。
    离线预先计算相似性的一个方法是,利用产品的分布式计算功能,比如 Apache Hadoop,MapReduce 技术的一个开源实现。这就是为什么您经常会在提及推荐引擎时听到那些系统。如果您想要基于一个巨大的、分散的阵列数据来进行推荐,那么您需要压缩数据,这些系统将会帮助您实现。
    幸运的是,Apache Mahout 提供可以提交到 Apache Hadoop 的作业,帮助您计算相似性。计算完成后,会将结果下载到您想要的数据源中,以便您的 Web 应用程序对其进行使用。
  • 在哪里储存您的数据最后,您需要确定在哪里存储您的数据。数据可以包含原始输入数据或者那些已通过离线进程(比如,Apache Hadoop)计算相似性的数据。如果您的数据是一个巨大的原始数据档案文件,您可能需要对其进行挖掘,获取一些内容供推荐引擎使用。您可以将您的数据集存储在一个文件系统中,或者存储在一个分布式数据源中。如果您的数据集比较小,就可以让程序从文件系统中读取数据并存储在工作存储器中。但是,如果数据集比较大,那么可以考虑使用一个数据管理系统,比如 IBM DB2®、Apache Derby,等等。如果您选择一个分布式数据源,您需要确保适当的查询优化设置(比如索引)配置适当。
    但不需要那么复杂。让事情变得简单点,假设您的数据池很小,小到可以装入一个小数据库中,比如 Apache Derby,WebSphere Application Server V8 附带的一个基于 Java™ 的开源数据库管理系统。重要的是当您以自己的方法向前迈进时,您需要根据您的具体数据确定是否需要利用一个分布式系统或者一个传统的关系数据管理系统。
返回列表