【基于 Mahout 的个性化推荐系统】1、系统设计

本贴最后更新于 1761 天前,其中的信息可能已经水流花落

本系统 Github 传送门:基于 Mahout 的个性化推荐系统

一、前言

近日在学校做毕设,主要部分是实现一个简单的个性化推荐系统。经过了长达一个多月的学习和搬砖实现,基本能实现其个性化推荐功能。在此准备写几篇专题系列文章,专注讲解“基于 Mahout 的个性化推荐系统设计”的整个设计过程及实现。

由于能力有限,本系列文章主要介绍其工程应用部分,对于算法原理部分的解析较少。将详细介绍整个系统架构、数据模型建立、推荐结果、执行计算、呈现结果设计等各部分的设计。

本推荐系统是基于电商平台进行设计开发,对于其它领域比如电影推荐、图书推荐同样适用。

二、相关技术介绍

1、Apache Mahout

Apache Mahout 是 Apache Software Foundation (ASF) 开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在 Apache 在许可下免费使用。该项目已经发展到了它的最二个年头,目前只有一个公共发行版。Mahout 包含许多实现,包括集群、分类、CP 和进化程序。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。

更多 Mahout 知识见文末参考链接。

2、技术介绍

此系统采用 SpringBoot 进行开发,ORM 框架选择 MyBatis,数据库连接池采用 C3P0。

数据库采用 MySQL,Redis 做缓存支持。

采用 Nginx 做反向代理服务器,Apache Tomcat 做应用服务器。

三、系统设计

在本系统的设计中,主要涉及电商平台业务和推荐系统设计两部分。

推荐系统的设计,主要采用基于 Apache Mahout 机器学习算法库进行开发推荐系统核心模块,另外再加上商品推荐队列的设计、推荐商品排行榜的设计、 时令商品的设计等处理冷启动问题。对于推荐部分的计算,从数据采集到数据处理、数据转化、数据写入推荐队列等一系列的操作均采用异步编程方式,采用离线计算用户推荐商品信息,对用户的推荐均可视为是从数据库中读取业务数据所需花费性能和时延,提升了用户的体验度。

此部分主要分为显微镜模块、数据模型模块、推荐算法模块、执行器模块、 计算器模块、转换器模块、推荐队列模块、推荐排行榜模块,各大模块之间的组织架构设计如下图所示。

推荐系统架构设计图.png
【推荐系统架构设计图】

其中,箭头主要表示数据流向和交互说明。整体流程如下:

  1. 异步方式采集用户行为数据写入 DB 和缓存
  2. 从 DB 中读取数据构造数据模型 DataModel
  3. 基于 DataModel 构造推荐器
  4. 推荐器进行推荐,并调用计算器进行计算
  5. 计算器某些操作需要与 DB 交互数据
  6. 推荐器将推荐结果返回转换器或执行器
  7. 转换器对推荐结果进行数据处理,返回结果至执行器
  8. 执行器进行相应处理,包括数据处理、写入推荐队列、写入推荐排行榜等。
  9. 执行器返回推荐数据至业务系统

1、电商平台业务模块

本推荐系统是基于电商平台进行开发实现的,在此处主要介绍下电商平台与推荐系统相关平台。主要涉及用户信息模块、商品模块、商品订单模块、购物车模块、消息客服模块、评论模块。

详细设计传送门:【基于 Mahout 的个性化推荐系统】2、电商平台业务设计

2、数据采集模块(显微镜模块)

数据采集模块,因其采集用户行为信息并采用异步采集方式,故取名显微镜模块。

此模块主要涉及两个子模块:1、执行器模块 2、嗅探器模块。两个模块搭配使用,目前涉及采集用户行为信息、推荐商品信息。

用户行为信息写入用户行为表,进行计算用户偏好进行推荐。

推荐商品信息写入推荐排行榜表,用于构造推荐排行榜,进行热门推荐。

详细设计传送门:【基于 Mahout 的个性化推荐系统】3、显微镜模块设计

3、数据模型

在目前的推荐架构中,都存在着数据模型的建立,其推荐计算均需要在数据模型上进行计算或转换。在本设计中,主要采用 Mahout 提供的 MySQLJDBCDataModel,并对其进行增强设计。

详细设计传送门:

4、计算器模块

在调研过程中,大多数前辈使用的都是直接在用户偏好信息上进行推荐计算,但在本系统中,用户偏好信息的采集较为困难。目前采用的是通过用户的操作行为进行计算偏好信息。

此模块的功能,主要是实现用户行为信息进行计算用户偏好信息。

目前的计算方案设计极为简陋,之所以把此部分也进行抽离出来,是因为后期可以对于此模块进行优化设计。目前采用各种行为权重加和的方式构造,是简单的线性关系。

后期可对用户对推荐结果进行反馈信息采集,反复训练用户信息对偏好的影响权重。进而实现更为科学合理的个性化推荐。

详细设计传送门:

5、推荐算法模块

此模块是本系统的核心部分,除了采用 Mahout 提供的 Taste 协同过滤推荐算法(本系统采用基于用户的协同过滤推荐、基于物品的协同过滤推荐、SlopeOne 的协同过滤推荐)外,还另外实现了基于用户标签的推荐、热门推荐、时令推荐进行解决冷启动问题。

详细设计传送门:

6、转换器模块

此模块的设计,主要是对于推荐算法推荐出来的 RecommentItem 和平台商品之间进行转换数据。

详细设计传送门:

7、执行器模块

在推荐系统和电商平台的调度和执行等,均是通过执行器模块实现。电商平台在业务逻辑处理过程中,会执行调度代码,进行推荐和其他步骤。

详细设计传送门:

8、推荐队列

在整个推荐系统部分中,除了可以作为工具类的部分以外均采用异步执行。对于推荐数据,电商平台的业务操作将会触发推荐代码执行,进行异步计算推荐商品写入推荐队列中。推荐队列的设计类似缓存,用于暂存临时推荐数据。

详细设计传送门:

9、推荐排行榜

在解决冷启动问题中,采用了热门推荐,在热门推荐中主要通过 Redis 实现推荐商品排行榜功能,排行榜顶部元素认为是某种意义上的热门商品,进行推荐给用户。

详细设计传送门:

参考文献及链接

  1. Apache Mahout 主页
  2. Apache Mahout GitHub 页面
  3. Apache Mahout 简介 - IBM
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    941 引用 • 1458 回帖 • 150 关注
  • Mahout
    2 引用
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 176 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 431 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...