Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

介绍一个推荐系统开源库:LibRec

LibRec(http://www.librec.net)是一个领先的推荐系统开源算法库,它覆盖了70余个各类型的推荐算法,有效地解决了评分预测和物品推荐两大关键的推荐问题。该项目结构清晰、代码风格良好、测试充分、注释与手册完善,基于GPL3.0协议代码开源。GitHub链接为 https://github.com/guoguibing/librec


近年来,推荐系统取得了快速发展,数以百计的新算法、新模型不断涌现。然而,这不但给刚刚接触推荐算法的新人造成无所适从,而且也给那些有经验的人士带来不少困扰。不同的人对算法的理解可能大相径庭,更不用说是具体的实现了。因此,为了解决算法实现和共享的问题,LibRec团队设计实现了基于Java的跨平台推荐框架,并以GPL-3.0协议在GitHub上开源共享。


经过几年的发展,团队成员上千次的代码提交,最新的版本代码是2.0。到目前为止,LibRec包含了矩阵分解、概率图模型等多种类型的70余个推荐算法,10个相似度度量方法,4个rating评估指标与10个ranking评估指标,5大类数据的分割方式以及2种不同格式的数据读取,满足绝大部分推荐系统的需求。因此,LibRec具有算法丰富、易于扩展、简单易用等突出特点。


3.jpg


LibRec项目的系统结构如图所示。其中,Data Structure包括常用的数据结构,如SparseMatrix、SparseVector等;Data Model主要负责数据的读取、分割、导入其他数据如社交关系等;Recommender主要负责模型的训练(Inference),预测(Prediction),相似度衡量(Similarity),以及模型的持久化(Persistence);最终结果可以进行评估,或者过滤之后输出到文件。总体来说,LibRec项目拥有良好的结构,不同模块之间耦合度非常低,针对某个模块的开发通常无需关心其他模块的实现。以实现新的分割方式为例,用户只需继承Splitter接口抽象类,根据相应的逻辑重写splitData()方法即可。


4.jpg


基于LibRec来运行推荐算法就如同搭积木一样简单,其工作流程如上图所示。首先设置好相关参数配置,然后实例化数据并测试分割,调用推荐算法训练学习,最后对推荐结果进行过滤和评估。示例程序如下所示:


publicstatic void main(String[] args) throws Exception{
    
// build data model
    
Configuration conf = new Configuration();
    conf.set(
"dfs.data.dir""path/to/data/folder/");
    Randoms.seed(
1);
    TextDataModel dataModel = 
new TextDataModel(conf);
    dataModel.buildDataModel();

    
// build recommendercontext
    
RecommenderContextcontext = new RecommenderContext(conf, dataModel);

    
// build similarity
    
conf.set("rec.recommender.similarity.key","item");
    RecommenderSimilarity similarity = 
new PCCSimilarity();
    similarity.buildSimilarityMatrix(dataModel);
    context.setSimilarity(similarity);

    
// build recommender
    
conf.set("rec.neighbors.knn.number""5");
    Recommender recommender = 
new ItemKNNRecommender();
    recommender.setContext(context);

    
// run recommenderalgorithm
    
recommender.recommend(context);

    
// evaluate therecommended result
    
RecommenderEvaluatorevaluator = new RMSEEvaluator();
    System.out.println(
"RMSE:"+ recommender.evaluate(evaluator));
}


这段示例程序调用了ItemKNN算法,采用RMSE对结果进行评估。用户也可以根据实际应用,采用其他算法与评估器来进行推荐计算。LibRec的参数配置是在配置文件中设定的,主要分为两部分。一部分是流程控制参数(默认加载),与推荐算法无关;另一部分是与推荐算法相关的参数。LibRec项目仍在快速开发中,未来会继续增强核心模块的功能,添加与深度学习相关的算法实现,并扩展至Spark等平台。


欢迎关注公众号【LibRec】,获取LibRec和推荐系统相关的研究进展。公众号会定期推送最新的开发进展,近期还推出了“每周算法”栏目,解读推荐领域比较重要的研究工作和技术发展,广受读者朋友们的喜爱。也欢迎大家多多贡献代码算法,提交pullRequest。LibRec的发展离不开大家的关注和支持,也希望聚合众人的力量在推荐系统领域创建合作共享、协同创新的开源氛围,推动推荐算法的进一步实际应用和推广。


相关链接:


Librec 通识篇:

https://mp.weixin.qq.com/s/AB39ihVWXYHRbeODbGO-2g 

LibRec工程导入:

https://mp.weixin.qq.com/s/OyYn5_4GYAbF0L0SFgsHVQ 

LibRec命令行操作:

https://mp.weixin.qq.com/s/xnkg6BGyUUKmbs009p8XCw 

Librec 团队一周年纪:

https://mp.weixin.qq.com/s/vDnca1FMW9vVrFDgti_1IA 

入门开源推荐系统推荐算法GitHub工程
2
暂无评论
暂无评论~