利用Java写开源库 覆盖70多种推荐算法

发布于:2019-05-29   编辑:admin 浏览:

  在经过一年多的开发工作之后,LibRec 3.0 版本终于发布了。LibRec是一个基于 Java 的开源算法工具库,覆盖了 70 余个各类型推荐算法,可以有效解决评分预测和物品推荐两大关键的推荐问题,目前已经在 GitHub 上收获了 1457 个 Star,612 个 Fork。

  2012 年,还在新加坡南洋理工大学攻读博士学位的郭贵冰开始关注推荐系统。当时,MyMedialite 是最知名的推荐工具库之一。作为初学者,郭贵冰一边看论文,一边看MyMedialite 的代码,然后在它的基础上实现我自己的研究算法。

  然而,很快郭贵冰就意识到一个问题,在 Linux 服务器上跑 MyMedialite 会非常麻烦,而且在并行计算的时候诸多限制(相对于 Windows 平台),在跨平台方面存在不足。不得已,郭贵冰只好把自己的程序改成熟悉的 Java 代码,于是得到是最原始的 LibRec。随着研究和学习的深入,更多的算法慢慢添加到了 LibRec 中,并托管到 GitHub 以便版本控制。

  2015 年 11 月,郭贵冰以引进人才的方式加入东北大学软件学院,任职副教授。由于精力所限,郭贵冰开始组建开源团队。2016 年 1 月,郭贵冰、王宇峰等人组建起了最初的 LibRec 核心开发团队,并不断扩充团队。

  2016 年 12 月,郭贵冰团队发布了 LibRec 2.0 版本。经过一年多的开发之后,郭贵冰团队又在今日发布了 LibRec 3.0 版本。

  LibRec是基于 Java 的开源算法工具库,覆盖了 70 余个各类型推荐算法,有效解决评分预测和物品推荐两大关键的推荐问题。

  截止到目前,LibRec已经集成了70余个推荐算法。具体包括基准算法,协同过滤算法,基于内容的算法,基于情景感知的算法,混合算法以及其他扩展算法等。同时算法中也包含了概率图模型,张量分解模型,因子分解机,深度学习中的 RBM 模块等算法。LibRec 中包含的所有算法均已归类并注明实现参考文献。

  目前LibRec中最主要的模块为DataModel,Recommender,Evaluator与Filter,分别负责数据的预处理,推荐模型的训练,模型的执行,输出结果的过滤。

  不同算法的配置项因配置项不同,所以每一个推荐算法分别对应一个配置文件。方便管理的同时也方便用户根据算法的执行结果来调参。目前 LibRec 已经针对所有算法配置好了默认参数。

  LibRec 分别提供了 Linux 和 Windows 版本的命令行工具。用户可以根据 LibRec 提供的手册来编写配置文件,并使用命令行来执行算法。最终评估结果在终端中输出,推荐结果根据配置文件生成在相应目录下。

  经过一年多的开发,LibRec 3.0 在原版本的基础上增加了许多新特性,特别是对如今流行的深度学习、集成学习等算法的支持。

  深度学习能够使用RNN循环神经网络对动态或者序列数据进行建模,并且可以更加准确的学习user和item的特征。DeepLearning4J(DL4J)是一套基于Java语言的神经网络工具包,可以构建、定型和部署神经网络。DL4J 与 Hadoop 和 Spark 集成,支持分布式 CPU 和 GPU,为商业环境(而非研究工具目的)所设计。结合 DL4J,郭贵冰团队开发了深度学习算法模块。

  POI 算法主要是指对用户兴趣点推荐(Point Of Interest)。根据用户在社交网络中的兴趣和地理位置信息,分析用户的标签属性和地理偏好,给用户推荐合适的出行地点。基于地理位置,郭贵冰团队实现了 POI 算法模块。

  增量更新主要是提高推荐算法时效性,传统的个性化推荐系统,采用定期离线对数据进行分析的做法来更新模型。实时个性化推荐实时分析用户产生的数据,可以更准确地为用户进行推荐,同时根据实时的推荐结果进行反馈,更好地改进推荐模型。增量更新模块实现了部分推荐算法的增量更新功能。

  集成学习在机器学习算法中具有较高的准确率,不足之处就是模型的训练过程可能比较复杂,效率不是很高。集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。增量更新模块实现了部分推荐算法的增量更新功能。