首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > Apache >

基于 Apache Mahout 构建社会化推荐发动机【转】

2013-09-11 
基于 Apache Mahout 构建社会化推荐引擎【转】Taste 由以下五个主要的组件组成:DataModel:DataModel 是用户

基于 Apache Mahout 构建社会化推荐引擎【转】

Taste 由以下五个主要的组件组成:

DataModel:DataModel 是用户喜好信息的抽象接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息。Taste 默认提供 JDBCDataModel 和 FileDataModel,分别支持从数据库和文件中读取用户的喜好信息。UserSimilarity 和 ItemSimilarity:UserSimilarity 用于定义两个用户间的相似度,它是基于协同过滤的推荐引擎的核心部分,可以用来计算用户的“邻居”,这里我们将与当前用户口味相似的用户称为他的邻居。ItemSimilarity 类似的,计算内容之间的相似度。UserNeighborhood:用于基于用户相似度的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的“邻居用户”的方式产生的。UserNeighborhood 定义了确定邻居用户的方法,具体实现一般是基于 UserSimilarity 计算得到的。Recommender:Recommender 是推荐引擎的抽象接口,Taste 中的核心组件。程序中,为它提供一个 DataModel,它可以计算出对不同用户的推荐内容。实际应用中,主要使用它的实现类 GenericUserBasedRecommender 或者 GenericItemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推荐引擎。

数据模型中存在以下实体:

Movie:表示电影,包含电影的基本信息:编号、名称、发布时间、类型等等。User:表示用户,包含用户的基本信息:编号、姓名、邮件等等。Movie Reference:表示某个用户对某个电影的喜好程度,包含用户编号、电影编号、用户的评分以及评分的时间。Movie Similarity:表示两个电影的相似度(这里的相似度是双向的),包括两个电影编号、电影的相似度。两个电影的相似度可以通过电影的基本信息计算得到。

下面我们就基于这个数据模型设计数据库的存储以及推荐引擎的 DataModel。

    1 .创建 MySQL 数据库存储电影和用户的信息,用户的喜好信息以及电影的相似度。



    清单 1. 创建数据库 SQL

    ?

    从上面的代码示例清单 3 可以看出,实现一个推荐引擎需要实现 Recommender 接口,它一般是对于某种 Taste 提供的推荐引擎的扩展,这是对 GenericUserBasedRecommender 进行的扩展,其中最重要的方法就是实例化推荐引擎的构造方法,一般其中涉及以下步骤:

    基于 DataModel,计算用户的相似度,这里采用 PearsonCorrelation 算法。为用户相似度设置相似度推理方法,这里采用了 AveragingPreferenceInferrer。基于用户相似度计算用户的“邻居”,这里将与该用户最近距离为 3 的用户设置为该用户的“邻居”。使用以上得到的用户相似度对象和邻居用户的计算方法对象创建一个 GenericUserBasedRecommender 的实例。一般情况下,这时都采用 CachingRecommender 为 RecommendationItem 进行缓存,从而提高访问速度。


    清单 4. 基于内容相似度的推荐实现

    ?

    以上完成了电影推荐引擎服务器端的编程,下面我们使用 FireFox 的插件 Poster 测试一下 HTTP 请求,查看推荐引擎的返回结果。对任意一个用户,推荐引擎应该基于一定的规则计算得到一组电影以及预计的评分,为了有更好的用户体验,引擎在拿到推荐电影序号的列表后,从电影信息数据库中查询得到电影的相关信息,包括电影的名称,发表时间以及类型等信息。这里我们采用 JSON 作为推荐引擎的响应格式。


    图 4. 用 Poster 测试 Servlet 的结果(查看大图)
    基于 Apache Mahout 构建社会化推荐发动机【转】

    其次,图 6 展示了基于内容的推荐引擎的推荐结果,推荐引擎会根据用户已打分的电影找到相似的电影,推荐给当前用户。


    图 6. 基于内容的推荐结果(查看大图)
    基于 Apache Mahout 构建社会化推荐发动机【转】

    最后,展示 SlopeOne 推荐引擎的推荐结果,这种推荐引擎计算速度较快,效果很好,是一种非常快速简单的基于项目的推荐方法。


    图 7. SlopeOne 实现的推荐结果(查看大图)
    基于 Apache Mahout 构建社会化推荐发动机【转】

    总结

    目前几乎所有大型的电子商务系统,都不同程度地使用了各种形式的推荐引擎。推荐技术的使用,不仅大大的提高了用户购物的体验,增加了用户的粘着度,而且电子商务公司也由于推荐系统的应用而大大的提高了交叉销售的可能,从而大大的提高了营业额。今天,你有自己的商品推荐系统么?

    借鉴于电子商务的成功经验,我们可以把推荐技术应用到其他的领域。像我们在文章中所演示的那样,你可以创建一个电影的推荐引擎。如果你是一个 blogger,那么你可以创建一个博客的推荐引擎,如果你是一个新闻提供商,你可以使用推荐技术为不同的用户推荐它可能关心的新闻,等等。

    今天,你推荐了么?


    我的异常网推荐解决方案:Java程序员电影,http://www.myexception.cn/other/1391132.html

热点排行