基于微服务的个性化推荐系统设计与实现毕业论文
2020-02-19 17:01:14
摘 要
随着互联网的不断发展,推荐系统在今天的互联网的产品和应用中被更加广泛采用,推荐系统在帮助解决信息过载问题上有着巨大的意义。在商业竞争激烈的现代社会,要求推荐系统能适应需求快速变跟的商业环境,同时提供稳定高效的服务。
微服务作为近年来架构的热点,有着其独立开发、独立测试和部署等优点,可以适应需求的快速变跟。根据不同的算法独立开发不同的推荐微服务,在运用时就可以根据需求单独或者组合调用,从而满足更多场景的需求实现。在微服务架构开发的推荐系统有着重要的意义。本文从推荐系统的需求分析开始,探讨基于用户的协同过滤推荐算法、SpringCloud微服务架构下推荐系统的设计与实现、以及微服务给项目开发带来的优势与挑战。
关键词:个性化推荐,微服务,SpringBoot
ABSTRACT
With the continuous development of the Internet, the recommendation system is more widely used in today's Internet products and applications. The recommendation system has great significance in helping to solve the problem of information overload. In a modern society where business competition is fierce, the recommendation system is required to adapt to the business environment where demand is rapidly changing, while providing stable and efficient services.
As a hotspot of architecture in recent years, microservices has the advantages of independent development, independent testing and deployment, and can adapt to the rapid changes of demand. Different micro-services are independently developed according to different algorithms, and can be called individually or in combination according to requirements, so as to meet the requirements of more scenarios. The recommendation system developed in the microservice architecture has important implications. This paper starts with the demand analysis of the recommendation system, discusses the user-based collaborative filtering recommendation algorithm, the design and implementation of the recommendation system under the SpringCloud micro-service architecture, and the advantages and challenges brought by the micro-service to the project development.
KEYWORDS: Personalized Recommendation, Microservice, SpringBoot
目录
摘要 I
ABSTRACT II
第1章 绪论 4
1.1 研究背景及意义 4
1.2 国内外研究现状 4
1.3 论文主要研究内容 4
第2章 开发工具及技术介绍 6
2.1 开发工具 6
2.2 相关技术 6
第3章 推荐系统需求分析 7
3.1 系统总体需求 7
3.2 系统功能需求 8
第4章 推荐模块实现 10
4.1 推荐模块实现概述 10
4.2 基于用户的协同过滤算法介绍 10
4.3 微服务架构下基于用户协同过滤推荐实现 11
4.4 推荐系统接口设计 17
第5章 系统其它功能实现 19
5.1 实现概述 19
5.2 数据库的分析与设计 19
5.3 用户登录功能实现 21
5.4 商家后台管理实现 24
5.5 前台功能实现 28
第6章 微服务架构的优点与带来的挑战 33
6.1 微服务架构的优点 33
6.2 微服务带来的挑战 33
第7章 结论 35
参考文献 36
致谢 37
第1章 绪论
1.1 研究背景及意义
在互联网日渐发达的今天,人们可以通过网络足不出户获取大量的信息,但随着信息量的不断增长,大量的无效信息充斥于网络,淹没了人们真正关心的信息,人们从以前的信息匮乏到现在的信息过载。但好在推荐技术的发展,尤其是个性化推荐技术的发展帮助人们很好的解决了这个问题。推荐技术可以很好的连接用户与信息,一方面帮助用户更准确地获取需要的信息,另一方面也可以让信息更多的呈献给对其感兴趣的用户。今天,推荐技术已经被运用到了互联网的各个角落,推荐系统怎样能够满足企业不断地需求变跟,提供稳定的服务,是每一个推荐系统在架构阶段需要考虑的问题。
在传统的模式下,系统以单体架构的形式存在,虽然可以一次性构建,但是缺乏灵活性,难以面对快速的需求变跟,如果系统需要频繁升级,会造成维护困难。而在微服务架构下开发的系统就更加灵活,通过对系统的服务拆分,将原来的复杂的系统分成一个个相互独立的微服务,服务之间可以进行通信调用。面对不同的业务场景进行服务重组,不同的服务还可以采用不同的技术栈进行开发,服务之间还可以独立部署、测试和运维,有着一系列的优点。
1.2 国内外研究现状
微服务(Micro Service)的概念由国际著名的面向对象分析设计、UML、模式等方面的专家,敏捷开发方法的创始人之一的Martin Fowler在2014年提出。微服务倡导将单一程序划分成一组小的服务,通过服务之间的相互配合调用,共同完成业务。近几年来,微服务一直是学界的热点话题,受到各方的极大关注。
在实践中,最先使用微服务架构的是Netflix,Spring团队开发的SpringCloud微服务架构,就是在Netflix公司架构的基础上进行开发的,SpringCloud为开发者提供了一个完整而配套的工具组件,使微服务的开发和实施变得更加普通和容易。国内比较有影响的微服务框架是阿里巴巴的Dubbo框架,每天支持2万多个服务,支持每天30亿次以上的调用量,开源后当当网和百度也有部分使用。京东自研发的微服务架构JSF支撑了京东微服务架构的转变,很好地解决了京东大量访问用户带来的负载均衡问题。
1.3 论文主要研究内容
本文旨在研究微服务架构下搭建推荐系统,探讨微服务架构带来的优势与不足。本文在第三章对推荐系统进行了基本的需求分析;第四章完成了一个推荐微服务在SpringCloud架构下的注册与开发实现,并对几个推荐系统微服务进行了接口设计;第五章搭建了一个推荐微服务的调用者;最后第六章对微服务架构的优势与带来的挑战进行了分析。
第2章 开发工具及技术介绍
2.1 开发工具
(1)IEDA:本系统开发主要采用的工具为IDEA,IDEA 全称 IntelliJ IDEA,是Eclipse之后一款比较流行的java开发工具,IDEA可以快速构建工程,有着更好更全面的代码提示功能,可以极大地提高时的效率。
(2)Maven:在开发时主要使用Maven来进行项目管理,创建Maven项目可以通过配置自动导入开发需要的相关jar包,不需要再手动进行配置装载。
(3)Tomcat:Apache Tomcat一个开源Java WEB应用服务器,是初学者开发java web必不可少的工具。SpringMVC框架就是基于Servlet,可以在这个框架的基础上进行快速开发,然后部署到Tomcat中运行。
2.2 相关技术
(1)SSM框架:SSM(Spring SpringMVC MyBatis)框架是目前比较流行的开发框架,它在逐渐取代以前的SSH框架,越来越多的公司正在从SSH架构转向SSM架构。
(2)SpringBoot:SpringBoot是可以大大简化Spring配置的一个开发框架,用法上基本和SpringMVC类似,但是抛弃了Spring开发者大量的XML配置,转而使用注解方式来实现Bean的装配和其它各种配置。可以快速的构建、测试和启动Spring应用。同时微服务框架SpringCloud也是建立在其基础上的,开发SpringCloud微服务首先就得掌握SpringBoot的运用。
(3)Mahout:Mahout是Apache旗下的一个开源项目,提供了很多机器学习算法的Java实现接口,其中的Taste接口可以用来实现协同过滤算法,使用简单,功能强大。在数据分许中是个非常好用的入门工具。同时还提供了一系列拓展接口,用户可以根据需求定义和实现自己的算法。
(4) BootStrap:Bootstrap是Twitter推出的一个开源的用于web前端开发的CSS/HTML框架。提供了一些常用的前端开发组件和模板。在本文中主要用来搭建一些前台界面,用Bootstrap搭建界面操作简单,其模板美观大方,可以快速搭建一个漂亮、功能完备的网页。
第3章 推荐系统需求分析
3.1 系统总体需求
系统构建校园点评网站,根据用户在网站的店铺点评信息生成评价记录,推荐系统用户行为产生的数据进行数据挖掘,实现对用户的的个性化推荐,其中推荐模块需要基于微服务架构进行构建,作为服务提供者;网站主体模块作为服务消费,调用个性化推荐模块完成推荐,并将结果呈献给网站用户。推荐模块在系统中的架构如图3.1所示。
图 3.1 微服务架构下的推荐系统
推荐的工作流程图如图3.2所示:
图 3.2 推荐系统工作流程
根据需求分析,推荐系统基本模块主要包括:
(1)用户偏好挖掘模块:根据用户向系统主动提供的一些信息,如性别、学历、个人爱好、职业等能够代表用户特征属性的信息,以及用户对系统中某些商品的评价信息,和其他一些隐含信息,如目标用户的历史记录、日志文件等,采用OLAP技术对汇总数据从服务资源功能、属性与质量的多个维度分析用户个性化服务消费偏好,采用聚类分析技术挖掘用户个性化服务消费偏好和共性服务消费模式。其中用户个性化服务消费偏好是服务运营商向用户提供定制化服务的重要依据,共性服务消费模式是服务运营商分析用户群体和制定营销策略的重要依据。
(2)服务资源智能挖掘与聚合模块:通过用户共性服务消费模式识别和关联规则挖掘发现服务资源内容的关联关系,结合中文数字家庭语义词典,综合语义相似性和相关性,采用基于语义的聚类和关联分析技术从服务资源元数据库信息中挖掘服务资源关联关系,包括三个方面:服务资源目录与内容间关联关系、服务资源内容间关联关系、服务目录内关联关系。
(3)服务资源智能推荐模块:参考商品推荐领域基于内容的推荐技术,设计基于用户服务消费功能偏好、基于用户服务消费属性偏好、基于用户服务消费质量偏好和基于用户服务消费综合偏好的推荐算法,依据服务资源内容与上述四种偏好的匹配度做出推荐;设计基于用户偏好相似性的协同过滤推荐算法、基于服务资源内容相似性的协同过滤推荐算法以及融合用户和服务资源内容相似性的综合协同过滤推荐算法,依据用户间和/或服务资源间的相似度向用户做出推荐。
3.2 系统功能需求
(1)热门资源推荐:商品界面提供热门商品推荐:所谓的热门就是关注度高的资源,可以通过销售数量和评价表现出来。针对不同的商品,服务提供商可以设置时间段和推荐的商品个数。根据系统选项设置中设置的热门商品统计时间,统计该时间段内,各商品的点击量;将该时间段内,商品的点击量超过热门商品访问阈值的商品,视为热门商品。服务提供商可以设置时间和Top-N选项。一周、两周、一月、三月和Top-3、Top-5。
【热卖商品】:最近一个星期(前七天)销售最多的Top-N个商品。
【热评商品】:最近一个星期(前七天)评论最好的Top-N个商品。
(2)最新资源推荐:商品界面中设置新品推荐功能:针对不同类别商品,服务提供商可以设置时间和Top-N选项。一周、两周、一月、三月和Top-3、Top-5,向用户推荐这期间该类别最新上架的前Top-N个商品。
【最新商品】:向用户推荐最近一周内最新上架的Top-个N商品。
(3)猜您喜欢:根据用户偏好和服务资源特征进行相似度匹配,将高于相似度阈值的资源视为待推荐资源。系统可以设置时间和Top-N选项。一周、两周、一月、三月和Top-3、Top-5。对于商品,设置同类型商品/同品牌商品功能: 用户在浏览某类别商品到消费行为发生前,可以向用户推荐该类别服务资源中内容与用户服务消费偏好模型相似度最高的前Top-N商品。默认值为top2.
【相关商品】:相似度最高的Top-N个商品。
(4)您可能还喜欢:您可能还喜欢是根据用户对约定项目的评价,得到评价矩阵,通过用户之间的相似度计算,识别目标用户的最近邻居,通过从最近邻居信息中获得目标用户可能会喜欢的资源推荐。系统可以设置时间和Top-N选项。一周、两周、一月、三月和Top-3、Top-5。商品界面提供您可能还喜欢推荐。
【购买该商品的顾客还购买了】:交易数据库中购买相同商品人还购买了其他数量的Top-N个商品。
第4章 推荐模块实现
4.1 推荐模块实现概述
本章节将介绍在微服务架构下对于系统推荐模块的实现,推荐系统分为用户偏好挖掘、服务资源智能挖掘与聚合模块、服务资源智能推荐模块三个微服务,在不同的场景需求下可以组合使用不同的微服务。下面将以服务资源智能推荐模块下基于用户协同过滤推荐为例,演示使用基于微服务框架SpringCloud搭建服务资源智能推荐模块微服务,其它模块微服务则设计出其接口。
4.2 基于用户的协同过滤算法介绍
基于用户偏好相似性的协同过滤推荐算法,依据用户间的相似度向用户做出推荐。协同过滤算法是一种很经典推荐算法,自诞生以来,在个性化推荐领域有着十分广泛的运用。目前运用最广泛的协同过滤算法主要有两种,一种是基于商品的协同过滤算法,根据商品之间的相似程度做出推荐;另外一种则是本文运用的基于用户的协同过滤算法,根据用户之间的相似程度做出推荐。
在本系统的个性化推荐中,当一个用户需要个性化推荐餐馆时,可以根据其评价数据记录计算出跟该用户有着相似兴趣的其它用户,然后把那些用户喜欢的、而该用户没有接触评价过的餐馆推荐给该用户,这就是基于用户的协同过滤算法的实现原理。
基于用户的协同过滤算法主要分为两个步骤:
(1) 找到一个和目标用户兴趣相似的用户集合。
(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
首先是用户相似度,给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v) 为用户v已经有过正反馈的物品集合。计算用户相似度的基本算法有下面两种
- Jaccard 系数:等于样本集交集与样本集合集的比值,公式如图4.1所示。
图 4.1 Jaccard系数计算公式
- 余弦相似度:用两个向量的夹角余弦值来评估他们的相似度,公式如图4.2所示。
图 4.2 余弦相似度计算公式
通过上面的算法得到用户的兴趣相似度之后,接下来算法根据与用户兴趣最类似的K个用户,推荐这K个用户喜欢的商品,如图4.3的公式度量基于用户协同过滤算法中用户u对物品i的感兴趣程度:
图 4.3 用户对物品的感兴趣程度计算公式
其中,S(u, K)包含和用户u兴趣最接近的K个用户,N(i)是对物品i有过行为的用户集合,wuv 是用户u和用户v的兴趣相似度,rvi 代表用户v对物品i的兴趣。
系统中用户在对商家进行评价后,会形成自己的评价数据存储在评价表中,一条评价记录包含用户id,店铺id,以及用户对店铺的评分,分值从1到5分。推荐模块根据所有用户的评价记录,使用基于用户的协同过滤算法,实现个性化推荐。在本系统中的推荐模块,将使用到Apache的一个开源项目Mahout ,Mahout提供了一些可扩展的机器学习领域经典算法的实现,可以快速的构建推荐模块。基于用户协同过滤主要实现以下接口:
(1)DataModel:这是指定用户喜好信息源的接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息。Taste默认支持JDBCDataModel和FileDataModel,从数据库中或者通过文件的方式作为数据源读取用户数据。
(2)UserSimilarity:可以用来计算用户的“邻居”,在这个算法中我们把与当前用户口味相似的用户称为他的邻居。用于定义两个用户间的相似度,它是基于协同过滤的推荐引擎的重要组成部分。
(3)UserNeighborhood:定义了确定邻居用户的方法,可以使用UserSimilarity进行计算得到。用于基于用户相似度的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的邻居用户的方式产生的。
(4)Recommender 是推荐引擎的抽象接口,Taste 中的核心组件。程序中,为它提供一个 DataModel,它可以计算出对不同用户的推荐内容。在实践中中,主要使用它的实现类 GenericUserBasedRecommender实现基于用户相似度的推荐引擎。
4.3 微服务架构下基于用户协同过滤推荐实现
在SpringCloud微服务架构下,开发单个微服务的方法与使用SpringBoot开发单体服务类似,因为SpringCloud架构就是建立在SpringBoot的基础上发展来的。
Spring Cloud它包含了实现微服务架构所需的各种组件,它基于SpringBoot基础上实现开发,简化了基础开发复杂度,可以使用Spring Boot一键启动和部署的开发风格对SpringCloud中的服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等实现。