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具有算法丰富、易于扩展、简单易用等突出特点。
LibRec项目的系统结构如图所示。其中,Data Structure包括常用的数据结构,如SparseMatrix、SparseVector等;Data Model主要负责数据的读取、分割、导入其他数据如社交关系等;Recommender主要负责模型的训练(Inference),预测(Prediction),相似度衡量(Similarity),以及模型的持久化(Persistence);最终结果可以进行评估,或者过滤之后输出到文件。总体来说,LibRec项目拥有良好的结构,不同模块之间耦合度非常低,针对某个模块的开发通常无需关心其他模块的实现。以实现新的分割方式为例,用户只需继承Splitter接口抽象类,根据相应的逻辑重写splitData()方法即可。
基于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
了解更多,请关注Librec微信公众号:
★ 猜你喜欢:「推荐系统老司机的十条经验
继续阅读
阅读原文