构建社会化推荐引擎

Apache Mahout 简介
Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。经典算法包括聚类、分类、协同过滤、进化编程等等,并且,在 Mahout 的最近版本中还加入了对 Apache Hadoop 的支持,使这些算法可以更高效的运行在云计算环境中。

Taste 简介
Taste 是 Apache Mahout 提供的一个协同过滤算法的高效实现,它是一个基于 Java 实现的可扩展的,高效的推荐引擎。Taste 既实现了最基本的基于用户的和基于内容的推荐算法,同时也提供了扩展接口,使用户可以方便的定义和实现自己的推荐算法。同时,Taste 不仅仅只适用于 Java 应用程序,它可以作为内部服务器的一个组件以 HTTP 和 Web Service 的形式向外界提供推荐的逻辑。Taste 的设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。

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

Taste 的安装与简单的 Demo 实现
安装 Taste 的软件需求:
如果需要 build 源代码或者例子,需要 Apache Ant 1.5+ 或 Apache Maven 2.0.10+。
Taste 应用程序需要 Servlet 2.3+容器,例如 Jakarta Tomcat。
Taste 中的 MySQLJDBCDataModel 实现需要 MySQL 4.x+数据库。
安装 Taste 并运行 Demo:
从 SVN 或是下载压缩包得到 Apache Mahout 的发布版本:
从 SVN获得;
下载 压缩包;
从 Grouplens 下载数据源:”1 Million MovieLens Dataset”。
解压数据源压缩包,将 movie.dat 和 ratings.dat 拷贝到 Mahout 安装目录下的 taste-web/src/ main/resources/org/apache/mahout/cf/taste/example/grouplens 目录下。
回到在 core 目录下,运行”mvn install”,将 Mahout core 安装在本地库中。
进入 taste-web, 拷贝 ../examples/target/grouplens.jar 到 taste-web/lib 目录
编辑 taste-web/recommender.properties,将 recommender.class 设置为 org.apache.mahout. cf.taste.example.grouplens.GroupLensRecommender。
在 Mahout 的安装目录下,运行”mvn package”。
运行“mvn jetty:run-war”。这里需要将 Maven 的最大内存设置为 1024M,MAVEN_OPTS=-Xmx1024M。如果需要在 Tomcat 下运行,可以在执行”mvn package”后,将 taste-web/target 目录下生成的 war 包拷贝到 Tomcat 的 webapp 下,同时也需要将 Java 的最大内存设置为 1024M,JAVA_OPTS=-Xmx1024M,然后启动 Tomcat。
访问“http://localhost:8080/[your_app]/RecommenderServlet?userID=1”,得到系统为编号为 1 的用户的推荐内容。参看图 2,Taste demo 运行结果界面,每一行第一项是推荐引擎预测的评分,第二项是电影的编号。
同时,Taste 还提供 Web 服务访问接口,通过以下 URL 访问:
http://localhost:8080/[your_app]/RecommenderService.jws
WSDL 文件:http://localhost:8080/[your_app]/RecommenderService.jws?wsdl
也可以通过简单的 HTTP 请求调用这个 Web 服务:
http://localhost:8080/[your_app]/RecommenderService.jws?
method=recommend&userID=1&howMany=10

image002

One thought on “构建社会化推荐引擎

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注