专栏首页AI科技大本营的专栏集合70多种推荐算法,东北大学老师用Java写了一个开源库,在GitHub上收获近1500个Star

集合70多种推荐算法,东北大学老师用Java写了一个开源库,在GitHub上收获近1500个Star

【AI科技大本营导读】在经过一年多的开发工作之后,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 的特点

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

1)丰富的算法

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

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

3)灵活的框架配置

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

4)简单的框架用法

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

▌LibRec 3.0

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

1)深度学习算法

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

2)POI 算法

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

3)增量更新算法

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

4)集成学习算法

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

▌专访郭贵冰

AI科技大本营:请简单介绍下 LibRec。

郭贵冰:LibRec 就是一个包含了各式各样推荐算法的开源库。利用这个开源库,首先可以让入门者在学习和入门过程中快速知道算法基本操作流程、算法的实现逻辑,以及算法性能的对比表现。

此外,这个开源库提供了很多基础架构,包括很多除了算法、逻辑以外的东西,比如数据结构、数据分割、数据算法评估等这些内容。如果是一个有经验的人,在有了 LibRec 之后会变得非常方便,他只需要关注算法本身的逻辑就行了,无需关注其他与算法逻辑无关的,但这些是使得算法能跑起来的、能够运转的关键技术。

另外,很多人需要用 LibRec 做不同的实际应用,因为 LibRec 相对来说比较抽象的算法库,我们完全可以利用它作为核心,来开发不同的应用。比如我们可以用它来开发学术论文的推荐、电影的推荐,甚至任何一个需要大数据算法的实际应用都可以用它来做。

AI科技大本营:为什么选择用 Java,不用 Python?

郭贵冰:最开始用 Java 是因为 2012 年 Python 还没有那么流行。Java 是可以跨平台的,比如我在 Windows 上开做发,但是可以在 Linux 服务器上执行,中间不需要做任何修改。另外, Java 更多用于企业开发,很多企业项目用 Java 来做的。尽管 Python 可以快速地做原型,但是我在跟很多企业人士沟通的过程中发现,如果用 Python 快速做一个离线的原型,先训练出一个模型,但是这个模型训练之后,还要再把它放在 Java 开发的程序里来跑。另外,Java 在企业项目时应用更广泛一些,Python 更关注快速搭建原型。

我们内部也有讨论要不要开发 Python 接口,但是我们本身团队规模比较小,没有那么多经精力,而且 Python 接口这个东西,因为我们学 IT 的知道编程语言什么的不是最核心的事情,我们还有很多其他的事情需要优先去做,比如优化底层架构等等。

AI科技大本营:获得博士学位之后为什么会选择去东北大学?

郭贵冰:有很多人都问过我这个问题。第一,我大学是在河北秦皇岛读的书,所以其实我对北方的气候不会产生不适应的状况,很多人不愿意在这边是觉得气候不行,但我本身比较适应。

另外,我回国时也有参考天津大学、东北大学和一些南方的高校,但东北大学给我的起点相对高一点。对老师来说,起点高一点可以带学生做东西,所以我选择了东北大学。

AI科技大本营:在南洋理工大学和东北大学做科研有什么不一样吗?

郭贵冰:南洋理工大学学术氛围更浓一些,经常有学术交流,有一些专家过来,我们可以去交流。回国之后,我感觉这方面的研究方式相对来说机会要小很多。硬件设施上我觉得倒还好,因为我现在能够给学生使用的硬件资源还蛮丰富的。

最后,附上项目链接: LibRec: http://www.librec.net/ Github Repo: https://github.com/guoguibing/librec Doc Link: http://wiki.librec.net/doku.php

——【完】——

本文分享自微信公众号 - AI科技大本营(rgznai100)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 4种最常问的编码算法面试问题,你会吗?

    导语:面试是测查和评价人员能力素质的一种考试活动。最常问的编码算法面试问题你知道多少呢?

    AI科技大本营
  • 图解Python算法

    背包问题有很多种解决办法,每一种都对应一种算法。把这个问题想清楚了,你至少可以成为半个算法高手。

    AI科技大本营
  • 面向可解释的NLP:北大、哈工大等提出文本分类的生成性解释框架

    【导语】北大、哈工大和加州大学圣巴巴拉分校在 ACL 2019 的一篇论文中联合提出了一个全新的生成性解释框架,该框架能够对分类策略进行学习,并同时提供细粒度的...

    AI科技大本营
  • Human Interface Guidelines —— Popovers

    霖酱
  • TortoiseSVN客户端使用的2个配置问题

    软件开发中,都需要涉及到代码管理工具。在Visual Studio中一般都是使用Team Foundation Server,简称TFS。团队中一般有一台服务器...

    八哥
  • 干货:基于Spark Mllib的SparkNLP库。

    引言 这是来自John Snow Labs工程团队的社区博客和工作,解释了他们对开源Apache Spark自然语言处理(NLP)库的贡献。 Apache Sp...

    Spark学习技巧
  • 简单的验证码识别(三)----------------代码实现

    此处使用了双层的LSTM作为隐含层,保留最后四个cell的输出结果,加一层full connection,并concat得到最后的输出。

    andrew_a
  • Vue框架Element UI教程-时间选择器(二)

    Element UI手册:https://cloud.tencent.com/developer/doc/1270 中文文档:http://element-c...

    祈澈菇凉
  • 如何在Ubuntu 18.04上使用Gunicorn和Nginx为Flask应用程序提供服务

    在本指南中,您将使用Ubuntu 18.04上的Flask微框架构建Python应用程序。本文的大部分内容将涉及如何设置Gunicorn应用程序服务器以及如何启...

    物花无语
  • Delta的真正用处和价值,你可知道

    应该说,Delta是最近几年Databricks开源的最有价值的东西。Databricks这几年对外致力于AI,对内则努力给客户提供一站式分析处理平台。这个一站...

    用户2936994

扫码关注云+社区

领取腾讯云代金券