什么是EasyRec?
EasyRec是一个易集成、易扩展、功能强大且具有可视化管理的推荐系统。EasyRec可以同时给多个不同的网站提供推荐服务,通过tenant来区分不同的网站。架设EasyRec服务器,为网站申请tenant,通过tenant就可以很方便的集成到网站中。通过各种不同的数据收集(view,buy.rating)API收集到网站的用户行为,EasyRec通过离线分析,就可以产生推荐信息,您的网站就可以通过Recommendations和Community Rankings来进行推荐业务的实现。
从源码来看,EasyRec纵向采用三层架构模式(展现层、业务层和持久层),横向采用模块化(核心模块,插件模块,特定领域模块及推荐模块等)。下面是我对
从上图,我们可以清晰的了解到,EacyRec的分层很清晰,下面是我理解的模块详细图:
有上面的介绍,我们可以大致了解EasyRec的基本功能。但是从功能模块上分析,很多模块从代码上还是有交叉的,主要包含以下内容:
1.easyrec-Core:核心模块,包括:数据模型,基本services(ItemAssocService、RecommenderService等)
2.easyrec-domain:针对特定领域做得一个孤立模块,支持第三方扩展业务,目前有music领域。
3.easyrec-Plugins-API:插件的父类,定义了扩展插件需要实现的接口。
4.easyrec-Plugins-Container:提供一个运行插件的框架。
5.easyrec-Plugins:一个插件集,扩展的插件目录
6.easyrec-Utils:工具集
7.easyrec-Web:web工程,提供api给调用者。
下面就每一个功能模块做一些介绍。
数据录入模块提供了原始用户行为数据的录入功能,主要可以采用以下两种方式进行初始数据的录入:
1.Action API录入
通过Action(view,buy,rating) API,EasyRec可以接受到集成网站上用户的行为信息。从而为离线行为分析做准备。
2.批量导入功能
通过管理几面,还可以通过Import API进行.csv文件来快速的数据(item和rule)导入。数据的格式参数数据表itemassoc。
EasyRec提供了一个可视化的管理界面,用户通过注册用户可以进行相应功能管理。主要提供的管理功能有:
1.Tenants管理:EasyRec管理员通过该页面可以管理不同网站的tenant。可以操作用户的插件,tenant配置,查看日志和用户数据分析报表。
2.Operators管理:即用户管理,查看用户状态
3.Performance管理:展示REST API的工作效率
4.Plugins Log管理:展示不同分析插件的工作记录,还可以对各插件进行配置已经插件的数据分析报表。
5.Plugins管理:进行插件的上传、启动等操作。
6.Info管理:对系统的硬件及相关软件的运行状况进行实时采集。
推荐模块是该系统的灵魂所在,通过Recommendations 和Comunity Rankings两个API分别提供个性化和大众化的推荐服务。
1.其他用户看过
2.其他用户买过
3.其他用户觉得好
4.针对某个用户推荐
5.相关items
6.用户历史记录
1.被浏览最多的items
2.卖的最多的items
3.被评分最多的items
4.评价最好的items
5.评价最差的items
离线分析模块是通过收集的用户行为信息,通过运行分析组件来产生推荐数据,从而为推荐模块服务。目前EasyRec已实现的推荐算法有:
1.ARM
2.ItemItem
3.Mahout-Boolean
4.Mahout-Slopeone
5.Pearson
6.Slopeone
7.Waiting
针对2.3节不同的推荐模块可以通过配置管理界面来配置不同的已注册的算法分析插件来产生推荐数据。
该模块是为了不同用户扩展自己的用户数据模型,它是一个独立的模块。目前EasyRec源码中有关于Music领域的实现,具体实现见源码。
最新版的EasyRec0.98的数据库有25张表具体见下图:
下面就一下重要的表做一些说明:
Action表:记录action的操作信息
ratingValue:如果action是rating,则记录rating的值,否则默认
searchSuceeded:如果action是搜索,表示是否找到记录,否则默认
numberOfFoundItems:如果action是搜索,记录返回结果数
Actiontype表:表示action的类型
name:表示action的类型,如:buy,view或rate
Backtracking表:记录用户对推荐商品的行为信息
userId:对推荐商品操作的用户ID
itemFromId:推荐单页的商品ID
itemToId:推荐单页的商品关联推荐商品ID
assocType:推荐类型
Itemassoc表:存储item之间的关联关系
itemFromId:主动关联的item的id
itemFromId:主动关联的item的类型id
assocTypeId:item关联的类型id
assocTypeId:item之间关联的关联值
itemToId:被动关联的Id
itemToTypeId:被动关联的类型Id
sourceTypeId:插件类型Id
sourceInfo:插件的配置参数
Recommendation表:记录推荐行为
userId:操作用户的Id
queriedItemId:查询item的Id
queriedItemTypeId:查询item的类型Id
queriedAssocTypeId:查询关联类型Id
relatedActionTypeId:相关操作类型Id
recommendationStrategy:推荐策略
RecommendatinItem表:推荐的商品信息
recommendationId:推荐行为的Id
predictionValue:预期的推荐值
itemAssocId:关联item的id
以上只是对EasyRec的主要表结构做了一下分析,主要是为了帮助理解EasyRec的运行流程及数据模型。其他的表的详细信息可以看数据库表结构得知。
个人任务,EasyRec的强大之处不仅是功能齐全,而且还提供了非常方便的扩展功能。
第一步,编程实现自己的插件。需要实现EasyRec已经定义好的接口,这样才能让EasyRec能够识别自己实现的插件。
GeneratorConfiguration接口:插件配置接口
GeneratorStatistics接口:插件分析接口,实际工作接口
easyrec-plugin.xml:将插件申明成一个spring bean
第二步,测试实现的组件,保证其功能完整
第三部,上传安装插件:选择插件、安装组件
在学习easyrec推荐系统的过程中,有如下几个概念容易混淆:
1、tenant:用来标识一个网站。多个网站可以同时调用easyrec的API,依靠tenantID区分不同的网站。
2、user:用户,即实际的实施行为的对象。行为数据是由每个tenant上的许多users产生的。
3、item:项目,即待推荐的对象。具体到电影推荐系统中,就是指某一部电影。
4、cluster:类,即将相似的item放入一个类中。例如,在电影推荐系统中,将动作片归为一类,一个item可以同时属于多个类。
5、type:类型,包括项目类型(例如:动作片、爱情片、科幻片)、动作类型(例如:购买、评分、浏览)、关系类型(例如:同时购买的、好评的、相关的)
6、operator:管理员,管理多个tenant,以及不同推荐算法的配置等等。
转自:http://blog.sina.com.cn/s/blog_86dad8bb0101nul1.html
http://blog.csdn.net/u011065164/article/details/51461763
http://01404421.iteye.com/blog/1131352