Taste是 Apache Mahout 提供的一个个性化推荐引擎的高效实现,该引擎基于java实现,可扩展性强,同时在mahout中对一些推荐算法进行了MapReduce编程模式转化,从而能够利用hadoop的分布式架构,提升推荐算法的性能。 html
在Mahout0.5版本中的Taste, 实现了多种推荐算法,其中有最基本的基于用户的和基于内容的推荐算法,也有比较高效的SlopeOne算法,以及处于研究阶段的基于SVD和线性插值的算法,同时Taste还提供了扩展接口,用于定制化开发基于内容或基于模型的个性化推荐算法。 java
Taste 不单单适用于 Java 应用程序,还能够做为内部服务器的一个组件以 HTTP 和 Web Service 的形式向外界提供推荐的逻辑。Taste 的设计使它能知足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。 算法
下图展现了构成Taste的核心组件: 数据库
从上图可见,Taste由如下几个主要组件组成: 编程
DataModel:DataModel是用户喜爱信息的抽象接口,它的具体实现支持从指定类型的数据源抽取用户喜爱信息。在Mahout0.5中,Taste 提供 JDBCDataModel 和 FileDataModel两种类的实现,分别支持从数据库和文件文件系统中读取用户的喜爱信息。对于数据库的读取支持,在Mahout 0.5中只提供了对MySQL和PostgreSQL的支持,若是数据存储在其余数据库,或者是把数据导入到这两个数据库中,或者是自行编程实现相应的类。 服务器
UserSimilarit和ItemSimilarity:前者用于定义两个用户间的类似度,后者用于定义两个项目之间的类似度。Mahout支持大部分驻留的类似度或相关度计算方法,针对不一样的数据源,须要合理选择类似度计算方法。 架构
UserNeighborhood:在基于用户的推荐方法中,推荐的内容是基于找到与当前用户喜爱类似的“邻居用户”的方式产生的,该组件就是用来定义与目标用户相邻的“邻居用户”。因此,该组件只有在基于用户的推荐算法中才会被使用。 分布式
Recommender:Recommender是推荐引擎的抽象接口,Taste 中的核心组件。利用该组件就能够为指定用户生成项目推荐列表。 oop