专栏名称: 机器之心
专业的人工智能媒体和产业服务平台
目录
相关文章推荐
黄建同学  ·  据OpenRouterAI,Google ... ·  3 天前  
宝玉xp  ·  回复@溝油海心馬學靑:www.youtube ... ·  3 天前  
机器之心  ·  Tokenization不存在了?Meta最 ... ·  5 天前  
爱可可-爱生活  ·  【深度思考第十九篇:AI范式即将迎来根本性转 ... ·  5 天前  
51好读  ›  专栏  ›  机器之心

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

机器之心  · 公众号  · AI  · 2017-03-30 14:19

正文

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微信公众号:


★ 猜你喜欢:「推荐系统老司机的十条经验