在IBMBluemix云平台上开发并部署您的下一个应用。
推荐引擎利用特殊的信息过滤(IF,InformationFiltering)技术,将不同的内容(例如电影、音乐、书籍、新闻、图片、网页等)推荐给可能感兴趣的用户。通常情况下,推荐引擎的实现是通过将用户的个人喜好与特定的参考特征进行比较,并试图预测用户对一些未评分项目的喜好程度。参考特征的选取可能是从项目本身的信息中提取的,或是基于用户所在的社会或社团环境。
根据如何抽取参考特征,我们可以将推荐引擎分为以下四大类:
随着互联网上数据和内容的不断增长,人们越来越重视推荐引擎在互联网应用中的作用。可想而知,由于互联网上的数据过多,用户很难找到自己想要的信息,通过提供搜索功能来解决这个问题是远远不够的。推荐引擎可以通过分析用户的行为来预测用户的喜好,使用户能更容易找到他们潜在需要的信息。这里以电子商务应用中的推荐引擎为例来说明推荐引擎在互联网应用中的重要性。
电子商务推荐系统(E-CommenceRecommendationSystem)向客户提供商品信息和购买建议,模拟销售人员帮助客户完成购买过程。智能推荐系统的作用可以概括为:将电子商务网站的浏览者转变为购买者,提高电子商务网站的交叉销售能力,提高客户对电子商务网站的忠诚度。
电子商务推荐系统的界面表现形式有以下几种:
ApacheMahout是ApacheSoftwareFoundation(ASF)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。经典算法包括聚类、分类、协同过滤、进化编程等等,并且,在Mahout的最近版本中还加入了对ApacheHadoop的支持,使这些算法可以更高效的运行在云计算环境中。
Taste是ApacheMahout提供的一个协同过滤算法的高效实现,它是一个基于Java实现的可扩展的,高效的推荐引擎。Taste既实现了最基本的基于用户的和基于内容的推荐算法,同时也提供了扩展接口,使用户可以方便的定义和实现自己的推荐算法。同时,Taste不仅仅只适用于Java应用程序,它可以作为内部服务器的一个组件以HTTP和WebService的形式向外界提供推荐的逻辑。Taste的设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。
Taste由以下五个主要的组件组成:
安装Taste的软件需求:
安装Taste并运行Demo:
也可以通过简单的HTTP请求调用这个Web服务:
根据上面的步骤,我们可以得到一个简单的推荐引擎demo环境,下面介绍如何使用Taste方便地构建自定义的推荐引擎。
直接使用Mahout的项目环境进行编码,需要使用Ant或者Maven进行编译,整个过程比较复杂,这里我们将构建推荐引擎所需要的工具包从Mahout工程中抽取出来,从而方便的构建自定义的推荐引擎。
在Eclipse中创建Web应用的工程MovieSite,将demo时生成的推荐引擎Web应用的war包解压缩,将lib下的jar文件拷贝到MovieSite的lib目录下。这样我们就可以方便的编写自己的推荐引擎。
这里我们想要编写一个电影推荐引擎,第一步需要对数据进行建模,分析应用中涉及的主要实体以及实体间的关系,从而设计数据库存储,程序中的类,以及推荐引擎的DataModel。
数据模型中存在以下实体:
下面我们就基于这个数据模型设计数据库的存储以及推荐引擎的DataModel。
1.创建MySQL数据库存储电影和用户的信息,用户的喜好信息以及电影的相似度。
由于上面采用数据库存储用户的喜好信息,这里需要基于数据库的推荐引擎实现。这里扩展MySQLJDBCDataModel实现电影推荐引擎的DataModel实例。
publicfinalclassMovieRecommenderimplementsRecommender{privatefinalRecommenderrecommender;publicMovieRecommender()throwsIOException,TasteException{this(newMovieDataModel());}publicMovieRecommender(DataModeldataModel)throwsTasteException{//创建一个SlopeOneRecommender的实例recommender=newCachingRecommender(newSlopeOneRecommender(dataModel));}//对外提供的推荐的接口,参数为用户标识和推荐项的个数publicList
完成了推荐引擎的设计与实现,下面我们需要设计一些RESTAPI,向外暴露推荐功能。为了提高推荐引擎的处理效率,这里采用Singleton模式实现一个推荐引擎的单例MovieRecommenderSingleton。在Servlet启动的时候初始化推荐引擎的单例,以后每次调用推荐方法。
实现一个推荐引擎的最后一步就是编写客户端代码,为电影推荐引擎提供一个友好的用户界面。下面展示一下我们为电影推荐引擎写的一个简单的用户界面:右边红色框中的是该用户已经打分的电影列表,左边蓝色框中是推荐引擎为用户推荐的电影列表。
首先,展示一下基于用户的推荐引擎的推荐结果,推荐引擎会根据用户已打分的电影找到用户的“邻居”,将“邻居”们比较喜欢的电影推荐给当前用户。
其次,图6展示了基于内容的推荐引擎的推荐结果,推荐引擎会根据用户已打分的电影找到相似的电影,推荐给当前用户。
最后,展示SlopeOne推荐引擎的推荐结果,这种推荐引擎计算速度较快,效果很好,是一种非常快速简单的基于项目的推荐方法。
目前几乎所有大型的电子商务系统,都不同程度地使用了各种形式的推荐引擎。推荐技术的使用,不仅大大的提高了用户购物的体验,增加了用户的粘着度,而且电子商务公司也由于推荐系统的应用而大大的提高了交叉销售的可能,从而大大的提高了营业额。今天,你有自己的商品推荐系统么?