13.6.2 使用Taste构建一个简单的推荐引擎
Taste是Apache Mahout提供的一个协同过滤算法的高效实现,它是一个Java实现的可扩展的、高效的推荐引擎。Taste既实现了最基本的基于用户的和基于内容的推荐算法,同时也提供了扩展接口,使用户可以方便地定义和实现自己的推荐算法。同时,Taste不仅仅适用于Java应用程序,它还可以作为内部服务器的一个组件以HTTP和Web Service的形式向外界提供推荐的逻辑。Taste的设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。
Taste主要包括以下5个组件,具体如图13-6所示。
DataModel:DataModel是用户喜好信息的抽象接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息。Taste默认提供JDBCDataModel和FileDataModel,分别支持从数据库和文件中读取用户的喜好信息。
UserSimilarity和ItemSimilarity:UserSimilarity用于定义两个用户间的相似度,它是基于协同过滤的推荐引擎的核心部分,可以用来计算用户的“邻居”,这里的“邻居”指与当前用户相似的用户。ItemSimilarity用来计算内容之间的相似度。
UserNeighborhood:UserNeighborhood用于基于用户相似度的推荐方法中,推荐的内容是通过找到与当前用户喜好相似的“邻居用户”的方式产生的。UserNeighborhood定义了确定邻居用户的方法,具体实现一般是基于UserSimilarity计算得到的。
Recommender:Recommender是推荐引擎的抽象接口,Taste中的核心组件。在程序中,为它提供一个DataModel,它可以计算出对不同用户的推荐内容。在实际应用中,主要使用它的实现类GenericUserBasedRecommender或GenericItemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推荐引擎。
图 13-6 Taste的主要组件图
安装Taste主要包括以下三部分内容:
如果需要build源代码或例子,则需要Apache Ant 1.5+或Apache Maven 2.0.10+。
Taste应用程序需要Servlet 2.3+容器,例如Jakarta Tomcat。
Taste中的MySQLJDBCDataModel实现需要MySQL 4.x+数据库。
安装Taste并运行Demo的步骤如下:
1)从SVN或下载压缩包中得到Apache Mahout的发布版本。
2)从Grouplens网站http:www.grouplens.org/node/12下载数据源:“1 Million MovieLens Dataset”。
3)解压数据源压缩包,将movie.dat和ratings.dat复制到Mahout安装目录下的taste-web/src/main/resources/org/apache/mahout/cf/taste/example/grouplens目录下。
4)回到core目录下,运行“mvn install”,将Mahout core安装在本地库中。
5)进入taste-web,复制../examples/target/grouplens.jar到taste-web/lib目录。
6)编辑taste-web/recommender.properties,将recommender.class设置为org.apache.mahout.cf.taste.example.grouplens.GroupLensRecommender。
7)在Mahout的安装目录下,运行“mvn package”。
8)运行“mvn jetty:run-war”,这里需要将Maven的最大内存设置为1024MB,即:MAVEN_OPTS=-Xmx1024MB。如果需要在Tomcat下运行,可以在执行“mvn package”后,将taste-web/target目录下生成的war包复制到Tomcat的webapp下,同时也需要将Java的最大内存设置为1024MB, JAVA_OPTS=-Xmx1024MB,然后启动Tomcat。
9)访问http://localhost:8080/[your_app]/RecommenderServlet?userID=1,得到系统编号为1的用户推荐内容。参看图13-7,其中每一行的第一项是推荐引擎预测的评分,第二项是电影的编号。
图 13-7 Taste Demo运行结果界面
10)同时,Taste还提供Web服务访问接口,通过以下URL访问:http://localhost:8080/[your_app]/RecommenderService.jws。
11)WSDL文件(http://localhost:8080/[your_app]/RecommenderService.jws?wsdl)也可以通过简单的HTTP请求调用这个Web服务:http://localhost:8080/[your_app]/Recommender-Service.jws?method=recommend&userID=1&howMany=10