基于WEB的个性化商品推荐系统_第1页
基于WEB的个性化商品推荐系统_第2页
基于WEB的个性化商品推荐系统_第3页
基于WEB的个性化商品推荐系统_第4页
基于WEB的个性化商品推荐系统_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业设计(论文)题目:基于WEB的个性化商品推荐系统的设计与实现I页第1章绪论1.1概述在信息化高速发展,大数据与人工智能技术逐渐成为主导的时代,越来越多的人利用计算机知识来方便自己的生活。电商行业的发展,使得人们可以实现足不出户就能够买到自己喜爱的商品,随着智能上网设备的普及,越来越多的人也学会了网上购物,据不完全统计,中国目前有大约七亿多人在进行网上购物,市场是非常可观的,同时也给商家节约成本的机会,用户也能够以更加实惠的价格买到自己心仪的产品。面对如此多的用户,提升用户的购物体验来留住市场就是一件势在必行的事情了。随着购物平台上的商品信息也越来越多,如何能够让用户能够快速的挑选到自己喜爱的商品就成了人们研究的难题。所以研发了基于WEB的个性化商品推荐系统,该系统能够根据每个人不同的喜好和购物习惯,分析出用户想买以及比较感兴趣的商品信息,为用户提供个性化的推荐服务[2]。1.2课题研究背景与意义1.2.1课题研究背景随着信息化的高速发展,我国的网上购物产业在近几年得到了很好的发展。需要进行购物的人只需要在家里面,拥有网络,以及一个电脑,或者手机就可以像逛街一样浏览与购买自己喜爱的商品。不管什么时候,只要你下单,快递就会在两三天内送到你的手上,非常的方便,给消费者创造了一个非常完美的购物方式,同时也推动了经济的发展。但是,随着人们购物要求的提高,简单的购物功能已经不能满足于人们的日常需要了[1]。面对网上花样繁多的商品信息,消费者会想如果能够很快的找到自己喜欢的东西就好了。所以,在那么多繁杂的信息中能够很快的找到自己想要并且喜爱的东西便成为了一个难题。1.2.2课题意义在大数据主导,电子商务高速发展的时代,网上的购物信息层出不穷,花样繁多。用户可能一时之间难以从众多商品中挑选出自己喜爱的东西,而且,对于部分用户来说,逛购物网站的时候并没有明确的目标自己要买什么,这时候一个商品个性化推荐系统就显得尤为重要了。不仅可以根据用户的喜好和需求来推荐用户喜欢的东西将会方便用户的使用,也促进电商行业的发展。1.3国内外研究概述电商行业目前在国内的发展可以说是如日中天,随着各大购物网站的兴起,足不出户就实现人们的日常购物需求已经是一件很常见的事情了。正是由于巨大的用户数量,为了使用户的购物体验增加,各大平台都有特定的部门正对购物智能推荐进行研究,并不断的完善更新[6]。到今天为止,已经有很多相关技术研究出来,但使用最多的则是搜索引擎和分类目录的技术。搜索引擎可以让用户输入自己想要内容的关键词,就搜索出与关键字相关的东西,可搜索技术也不是万能的,有的用户并不明确自己的需求,甚至都不知道搜索什么,这时搜索引擎技术的功能可能就不是万能的了。于是在搜索引擎技术基础上研究出了推荐系统,可以更加智能的为用户进行推荐,用户甚至都不用去进行输入关键字来进行搜索,这项技术的关键就是要去分析用户的历史搜索技术或者是用户停留时间比较长的内容,再对这一数据进行总结分析,数据建模等一系列操作,就可以分析出用户比较感兴趣的内容,进而推荐给用户,达到智能化个性推荐的目的。在这一技术的发展下,国内的电商平台大多都是采用这一模式,不止电商平台,大多数的软件都有应用这一算法来使自己的软件更加受到消费者的喜欢。这个算法就是根据用户的历史记录来进行一个分析,最后得出用户最近的喜好,还能根据用户以往的搜索记录来推测出用户对什么东西比较感兴趣,进而推荐用户感兴趣的内容。但在目前,这一技术还不是特别的完美,仍然有很多需要进步和研究的地方,所以我希望能以我的理解做一个基于WEB的个性化商品推荐系统。期间,参考了不少别人的优秀文章以及科研成果,来完成这一系统。在未来,个性化推荐系统还将继续发展,功能变得更加的强大和完美。1.4论文组织结构第1章:绪论。主要对基于WEB的个性化商品推荐系统的国内外研究现状与其研究意义和发展情况做了简单的介绍,同时给出了本论文的组织结构。第2章:对基于WEB的个性化商品推荐系统做了简单介绍,并且介绍了系统开发所使用的各个技术栈以及开发工具和运行平台,同时与其他类似技术栈进行了简单对比,分析了选用技术栈的原因,同时还介绍了系统的架构,系统的各个模块与服务。第3章:从社会、技术、操作三个不同方面对基于WEB的个性化商品推荐系统进行了可行性分析,并且对系统进行了需求分析建模,包含功能分析,系统用例图绘制与用例描述。第4章:从系统实现原则、系统架构体系、类图、顺序图以及活动图、数据库设计,全面的介绍了基于WEB的个性化商品推荐系统的整体设计。第5章:图文并茂,从功能介绍、业务设计、模块设计、功能实现方面全面介绍了基于WEB的个性化商品推荐系统的各个功能的实现细节,并展示了最终实现效果图。第6章:利用不同的方法,从功能测试与非功能测试两个方向对系统进行了全面的测试,找出了系统已存或可能潜伏的一些问题与bug,并进行改进与修复,最后给出了详细的测试报告。第7章:回顾整个过程,对系统的设计与实现进行了总结,并从内部算法、外部功能、整体架构等多个方面对系统进行了分析,给出了目前系统还可以优化完善的地方,给予展望。

第2章系统技术介绍2.1基于WEB的个性化商品推荐系统的介绍基于WEB的个性化推荐系统架构总体分为前端用户可视化模块和后端部分,后端部分推荐模块使用Scala语言编写,业务模块使用SpringBoot编写,项目采用maven聚合工程搭建,根据业务性质可以大致分为:综合业务部分:负责推荐结果查询、商品检索、商品评分、商品标签、人脸识别与账号密码登录注册;推荐模块:包含数据加载、离线推荐、实时推荐、基于内容的推荐、基于物品的协同过滤推荐;日志采集服务:用户对商品就行评分操作,会在综合业务模块进行评分流消息整合并进行日志埋点,将日志写到指定路径下的文件中。Flume会监听该文件,当探测到有新日志写入,Flume会采集日志,将评分流传入kafka;消息缓冲服务:采用kafka作为消息队列,Flume将采集的日志写入kafka,kafka做消息缓冲并对数据进行预处理;为了方便数据处理,综合业务服务采用非关系型数据库MongoDB。需要给实时推荐提供预备数据,为了提高其响应速度,系统采用Redis作为缓存数据库。为了在海量数据下可以检索更快,关键词匹配更精确,选用ElasticSearch进行全文检索。2.2系统的技术介绍2.2.1ScalaScala运行于Java平台(Java虚拟机),它不仅是一种多范式的编程语言,其设计的初衷就是要集成面向对象编程和函数式编程的各种特性,而函数编程范式更适合用于Map/Reduce和大数据模型,它摒弃了数据与状态的计算模型,着眼于函数本身,而非执行的过程的数据和状态的处理[3]。Scala相较于Java复杂繁琐的API,它的显得更简洁优雅,让开发者精力更多集中在业务处理。并且采用函数式编程,简单,非常适合用于处理基于不变数据的批量处理工作,这些工作基本都是通过map和reduce操作转换数据后,生成新的数据副本,然后再进行处理,而且兼容现有的Java程序,可以访问庞大的Java类库,例如:操作mysql、redis、freemarker、activemq等等。并且Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,所以和JRuby,Groovy比起来速度会快很多。本系统由于会使用到大数据以及机器学习相关的内容,因此选择了Scala语言编写推荐模块的实现更合适。至于系统的综合业务模块,依旧选择Java开发,并选择了主流框架SpringBoot。2.2.2SpingBoot本系统综合业务模块采用Java语言编写,采用了当前主流的框架SpringBoot。SpringBoot简化了开发环境配置,相较于Spring繁琐的配置更方便,让开发人员可以把精力更多的集中在业务开发而不是环境搭建;并且SpringBoot内置了Tomcat服务器,可以直接运行。SpringBoot相当于是对Spring又一层封装,它提供了很多start,start自动依赖于版本控制,利用它大量的自动化配置,可以做到开箱即用。2.2.3SparkSpark,目前运用广泛的的大数据计算框架。Spark包含了大数据领域常见的各种计算框架,比如:SparkCore用于离线计算,SparkSQL用于交互式查询,SparkStreaming用于实时流式计算,SparkMLlib用于机器学习,SparkGraphX用于图计算,Spark主要用于大数据的计算,而Hadoop以后主要用于大数据的存储(比如HDFS、Hive、HBase等),以及资源调度(Yarn),Spark+Hadoop的组合,是大数据领域最热门的组合,解决了大数据领域中,离线批处理、交互式查询、实时流计算、机器学习与图计算等最重要的任务和问题[4]。2.2.4推荐算法采用好的推荐算法可以根据用户的行为特征更精确地找到与其匹配的商品集。系统采用统计推荐,在商品搜索过滤时可以给用户推荐热门商品、综合评分优质商品;当用户登录后,采用离线推荐和实时推荐为用户推荐个性化商品集,离线推荐服务会在后台被周期性调度计算,当用户进行评分等行为操作,会采集日志重新进行实时推荐计算;进入商品详情页,会采用基于内容推荐算法和基于物品的协同过滤为用户推荐其相似商品[12]。2.3系统工具介绍2.3.1系统开发平台系统开发工具采用IDEA,全称IntelliJIDEA,是Java语言的集成开发环境,IDEA在业界被公认为是最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、创新的GUI设计等方面的功能可以说是超常的[5]。IDEA可以根据自己喜好设置自己喜欢的字体、界面主题,包含丰富的插件,可以帮助高效地完成开发,并且拥有高度智能的代码智能补全功能,还可以设置代码模板,这些使得开发效率更高。系统接口的测试主要通过Postman工具并配合谷歌浏览器进行,在前端未完成时可以先通过Postman访问每一个需要测试的接口,输入不同的数据看是否能得到想要的结果;在前端完成后,进行前后端联调,由前端发起请求看是否能完整显示结果。2.3.2运行环境用户操作系统:windowsXP、windows7、windows8、windows10等。服务器操作系统:Centos7.x。Java版本:JDK1.8。Scala版本:2.x。浏览器:Chrome、Edge等数据库:MongoDB数据库、Redis数据库。第3章基于WEB的个性化推荐系统需求分析3.1可行性分析3.1.1社会可行性当下社会信息化高速发展,各大电子商务平台信息过载,对于用户如何快速从众多商品中选出自己喜欢且对自己有价值的东西也是一大问题,因此开发一款好的个性化商品推荐系统是十分必要的。3.1.2技术可行性本系统后端推荐模块采用Scala语言编写,采用了Spark、推荐相关算法,综合业务模块采用Java语言编写。每个技术都具有丰富的生态圈,且广泛应用于各个互联网公司,开发便捷安全,具有广泛的实际用途。并且在技术选型上充分考虑其系统的各个特点而选择了比较合适的技术栈,这在技术上是完全可行的。3.1.3操作可行性现如今近乎人人都有手机,主力消费军的年轻人也基本人手一台电脑或者平板,只需要在手机或者电脑浏览器通过域名访问即可,所以在如今社会基本没有什么难度。操作也是完全可行的。3.2需求分析建模3.2.1功能分析基于WEB的个性化商品推荐系统是一款可以根据用户的相关行为操作,记录用户的行为喜好信息并给予用户个性化推荐的系统。系统主要包好推荐功能和综合业务功能。推荐功能包含:1、统计推荐:在商品搜索过滤时可以给用户推荐热门商品、综合评分优质商品。2、离线推荐:当用户登录后,采用离线推荐在首页为用户推荐个性化商品集,离线推荐服务会在后台被周期性调度计算[11]。3、当已登录用户进行评分等行为操作,会采集日志重新进行实时推荐计算并将推荐结果集展示在首页。4、基于内容的物品推荐:在商品详情页推荐与该商品相似的商品集。综合业务包含:1、商品检索:根据输入关键字进行商品检索。2、登录注册:用户可以进行人脸识别与账号密码的登录认证与注册。3、商品评分:对商品进行打分,记录埋点日志,向kafka推流到推荐模块进行实时推荐处理。4、工程调度:离线统计服务调度配置、离线推荐服务调度配置。3.2.2绘制系统用例图本平台就只有用户一种角色。此系统中的用户在没登录时可以进行商品浏览,可以登录注册,可以采用人脸识别与账号密码登录两种形式;登录后可以享用系统的个性化商品推荐服务,首页会采用离线推荐与实时推荐给用户进行个性化推荐;用户进行搜索过滤时会采用统计推荐给用户推荐热门商品、综合评分优质商品;首页轮播图会展示最近热门商品。如图3-1所示。图3-1系统用例图3.2.3用例描述1)登录用例,如表3.1所示表3-1登录用例用例名登录参与者用户前置条件用户进入登录界面主事件流输入对应的账号和密码/人脸识别登录系统会根据用户输入的账号和密码进行判断。如果账号不存在,系统会提示用户不存在,如果密码错误,系统会提示密码错误。人脸识别登录,通过人脸库对比查询注册用户登录失败后重新输入账号和密码或则重新人脸识别。如果认证成功,则进入系统界面后置条件登录成功,进入我的页面2)注册用例,如表3.2所示表3-2注册用例用例名注册参与者用户前置条件用户进入注册页面主事件流用户输入账号和密码系统对账号进行查重,如果数据库中已经存在该账号,则提示用户已存在,并返回重新注册。用户提交注册信息,为用户创建账号,否则不做修改。账号注册成功直接跳转人脸录入,录入成功直接跳转人脸识别登录;若录入失败会3次重试,若人脸识别登录失败跳转账号密码登录后置条件注册成功,或未注册成功3)离线推荐用例,如表3-3所示表3-3离线推荐用例用例名离线推荐参与者用户前置条件MongoDB数据库里面存在用户评分数据主事件流系统对数据库里面现存的用户对商品评分数据进行分析得到商品相似度矩阵和商品推荐列表矩阵。后置条件将计算得到的结果存入MongoDB数据库和Redis数据库。4)商品检索用例,如表3-4所示表3-4商品检索用例用例名商品检索参与者用户前置条件用户进入商品搜索界面主事件流用户输入关键字进行检索系统根据用户的检索关键词从该用户的推荐列表中选取商品进行返回后置条件前端根据返回的推荐列表进行数据渲染展示5)实时推荐用例表3-5实时推荐用例用例名实时推荐参与者用户前置条件用户对商品进行评分主事件流系统通过Flume对评分进行日志采集,Kafka进行消息缓冲处理实时处理模块获取到Kafka消息,利用相关算法和Spark进行实时推荐处理后置条件将处理的结果存于MongoDB数据库

第4章系统设计接下来会对系统的架构与各个模块进行设计,对数据进行建模。并且对系统的各个具体功能进行设计。4.1系统设计原则(1)可靠性。可扩展性指的是系统设计功能的扩展,也就是指系统适应变化的能力。需要保证个性化推荐系统在大量服务运行情况下以及请求数据交互情况下稳定运行。(2)易用性。对于用户而言,系统的使用和维护等几个基本环节都应该简单快捷。推荐系统受纵广泛,应保证系统使用上手简单,界面简介。(3)流畅性。由于推荐系统涉及处理大量数据,涉及各种推荐算法处理,若数据处理不当,会让系统运行缓慢,进而导致前台可以出现伪卡顿现象。因此需要保证可以快速计算得到结果。4.2系统功能组织架构图整体系统架构总体分为前端用户可视化模块和后端部分,后端部分根据业务性质可以大致分为:综合业务部分:负责推荐结果查询、商品检索、商品评分、商品标签、人脸识别与账号密码登录注册;推荐模块:包含数据加载、离线推荐、实时推荐、基于内容的推荐、基于物品的协同过滤推荐;日志采集服务:用户对商品就行评分操作,会在综合业务模块进行评分流消息整合并进行日志埋点,将日志写到指定路径下的文件中。Flume会监听该文件,当探测到有新日志写入,Flume会采集日志,将评分流传入kafka;消息缓冲服务:采用kafka作为消息队列,Flume将采集的日志写入kafka,kafka做消息缓冲并对数据进行预处理;为了方便数据处理,综合业务服务采用非关系型数据库MongoDB。需要给实时推荐提供预备数据,为了提高其响应速度,系统采用Redis作为缓存数据库。为了在海量数据下可以检索更快,关键词匹配更精确,选用ElasticSearch进行全文检索。如图4-1和图4-2。图4-1功能模块图图4-2项目架构图4.3系统类图系统类图可以反应系统的一个整体静态结构,将系统各个模块用户功能等进行了抽象,描述了系统其组成模块的各个属性与方法,并且可以直观的描述将各个模块抽象出来的各个类之间的联系,一方面可以帮助开发人员梳理其各个类之间的关系,并更好的完成开发工作;二方面可以对其系统架构及构造进行即使调整,且可以避免内部依赖,它是系统分析与设计的产物,可以作为编码依据。展示系统类间的关系,类由类名属性和方法构成。如图4-3。图4-3完整系统类图4.4系统时序图4.4.1登录用户登录功能包含两种形式,可以采用人脸识别登录也可以采用账号密码登录。人脸识别登录前端调用摄像头采集人脸上传到后台进行人脸比对,比对到人脸库存在的人脸则登录成功;账号密码登录若同时正确后台会利用JWT生成登录凭证Token,随请求返回存于浏览器,用户登录校验[8]。人脸识别识别成功同上。如图4-4所示。图4-4登录的时序图4.4.2注册新用户需要进行注册,首先输入账号密码以及其他相关用户信息进行注册,提交请求会在后台进行注册信息检验,若信息有误或用户不可以注册,则作出对应提示;若不存在先会根据账号密码注册,注册成功后会跳转人脸录入方便之后人脸识别登录,录入成功会直接跳转人脸识别登录,录入失败会再重试3次,若3次没成功则跳转账号密码登录。如图4-5所示。图4-5注册的时序图4.4.3离线推荐离线统计服务主要在后台负责加载业务数据库MongoDB数据集,进行历史热门、近期热门、综合评分商品集处理,每隔一段时间被调度,调用离线统计服务进行数据处理,然后将新数据写入数据库,如图4-6所示[16]。图4-6离线推荐时序图4.4.4实时推荐当用户对商品进行评分等行为操作时,系统会在后台进行埋点日志处理,将评分数据处理后按照特定格式存于特定路径的日志文件中,Flume会监听该路径的日志文件,通过日志采集收集用户行为同时可能写入缓存操作,Flume将采集的日志消息写入KafkaLogTopic,然后通过kafka过滤日志消息后将评分流发到recommendertopic。[9]推荐模块获取到评分流后,加载缓存调度实时推荐服务进行处理,写入数据库,然后综合业务模块获取数据集进行展示,如图4-7所示[14]。图4-7实时推荐的时序图4.4.5商品检索用户可以根据自己需求进行商品检索,在搜索框输入检索关键词,随即输入框会监听输入关键词的变化进而在下面进行搜索词提示匹配,用户可以选择匹配的关键词,也可以选用自己的[7]。输入关键词后搜索,后端接收到前台请求,用ElasticSearch进行全文检索匹配关键词,匹配到相关商品后向前端返回商品集,如图4-8所示。图4-8商品检索的时序图4.5系统活动图首先,用户输入账号密码进行登录身份校验,如果密码正确登录成功。只有登录成功了,才能对商品进行评分相关操作,系统才能记录用户的行为,并进行个性化的推荐服务;登录成功后用户可以进行商品检索,这时系统会对登录成功的用户进行实时个性化推荐,若没有登录的用户进行商品检索,系统会基于统计学算法推荐进行历史热门推荐和近期热门商品推荐,当然不管登录成功与否都可以查看商品。但是登录的用户查看会根据该用户的特征进行相似商品推荐,如图4-9所示。图4-9系统活动图4.6系统数据库4.6.1数据库设计原则由于本系统注重是实现个性化推荐功能,没有复杂的业务,注重的是数据处理与模型训练,因此数据库表没有复杂的冗余字段,保证算法训练数据集所需的字段项存在即可[10]。4.6.2数据结构由于本系统注重是实现个性化推荐功能,没有复杂的业务,注重的是数据处理与模型训练,因此数据库表没有复杂的冗余字段,保证算法训练数据集所需的字段项存在即可。如图4-10所示。图4-10数据库的CDM图直接由CDM生成PDM,PDM可以很好反映系统设计需要的相关元素,数据组织结构以及相关元素之间的联系。如图4-11所示。图4-11数据库的PDM图4.6.3数据库表的设计表4-1商品数据表(Product)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRI主键2productIdint(11)NO商品id3namevarchar(10)NO商品名4imageUrlvarchar(100)NO商品图片5categoriesvarchar(30)NO商品分类6tagsvarchar(30)NO商品标签表4-2用户评分表(Rating)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRImongodb自带2userIdint(11)NOMUL用户id3productIdInt(11)NO商品id4scoredoubleNO商品评分5timestamplongNO评分时间表4-3用户表(User)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRImongodb自带2userIdint(11)NO用户id3usernamevarchar(16)NO用户名4passwordvarchar(16)NO密码5timestamplongNO创建时间表4-4商品标签(Tag)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRI主键2userIdint(11)NO用户id3productIdint(11)NO商品id4tagvarchar(40)NO标签5timestamplongNO时间戳表4-5商品评分次数统计(RateMoreProducts)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRI学生id2productIdint(11)NO商品id3countInt(6)NO评分次数表4-6最近商品评分统计(RateMoreRecentlyProducts)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRI主键id2productIdint(11)NO商品id3countint(11)NO评分次数4yearmonthlongNO时间戳表4-7商品平均评分(AverageProducts)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRI主键id2productIdint(11)NO商品id3avgdoubleNO平均评分表4-8用户商品推荐矩阵(UserRecs)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRI主键id2userIdint(11)NO用户id3rescArry[(productId:Int,Score:Double)]NO用户商品推荐集表4-9商品相似矩阵(ProductRecs)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRI主键id2productIdint(11)NO商品id3rescArry[(productId:Int,Score:Double)]NO相似商品集表4-10用户商品实时推荐矩阵表(StreamRecs)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRI主键id2userIdint(11)NO用户id3rescArry[(productId:Int,Score:Double)]NO用户实时推荐商品集表4-11商品相似矩阵表(ProductRecs)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRI主键id2productIdint(11)NO商品id3rescArry[(productId:Int,Score:Double)]NO相似商品集表4-12基于内容的推荐矩阵表(ContentBaseedProductRecs)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRI主键id2productIdint(11)NO商品id3rescArry[(productId:Int,Score:Double)]NO相似内容商品集表4-13基于物品的协同过滤推荐矩阵表(ItemCFProductRecs)序号字段英文名称数据类型是否为空主键描述1_idint(11)NOPRI主键id2productIdint(11)NO商品id3rescArry[(productId:Int,Score:Double)]NO推荐商品集第5章系统实现5.1综合业务服务5.1.1登录注册基于WEB的个性化推荐系统登录注册因考虑为用户尽可能提供便捷性采用两种形式,人脸识别与账号密码的形式进行登录与注册。由于系统需要用户登录才能更好的提供服务,因此系统的某些功能只能允许已登录用户才能访问,比如:购物车、实时推荐等,因此后台会对这些接口路径进行拦截。当用户登录成功后,后台会结合用户信息用JWT算法生成属于这个用户的登录凭证,并将登录成功的基础用户信息存入本地线程变量ThreadLocal中,然后会将用户的登录凭证(Token)随请求返回存于浏览器。当被拦截路径的请求来时,会携带Token到后台进行登录校验,若校验通过从本地线程变量ThreadLocal中取出存的登录用户信息并返回,路径放行,结果显示。当新用户第一次进入基于WEB的个性化推荐系统时,会要求注册。注册会先进行账号密码的注册,若该账号没有用户存在且注册成功后,会自动跳转到人脸录入,以方便下次登录可以直接人脸识别登录。若人脸录入成功则直接跳转到人脸识别登录并进入系统,若人脸录入失败则页面会跳转到账号密码形式登录。系统需要用户登录才能提供个性化的推荐服务,用户登录也有两种选择形式。进入登录页面首先默认直接采用人脸识别登录方式,当识别失败可以选择账号密码登录形式。如图5-1、图5-2、图5-3和图5-4。图5-1人脸识别登录示意图图5-2账号密码登录示意图图5-3账号密码注册示意图图5-4人脸录入认证示意图5.1.2全文检索考虑到推荐系统数据量大,为了系统更好满足及时响应,查询精准,给用户提供更好的体验,系统的搜索模块采用了ElasticSearch分布式搜索引擎构造全文检索。ElasticSearch会将商品名、标签信息进行分词,查询时输入相关关键字即可在海量数据下快速匹配到相关商品信息。为了给用户带来更好体验感,搜索框做了数据监听,随着用户输入关键词的改变,系统会自动搜索匹配用户可能想要的商品的某些信息,用户可以选择系统为其匹配的搜索信息,也可以按照个人意愿输入自己想要的关键词进行搜索,系统会进行全文检索匹配相关商品信息。具体如图5-5所示。图5-5全文检索示意图5.2实时推荐服务实时推荐服务要求快速响应,结果的精确性可以略低于离线推荐服务,但是速度一定要快,需要简化,避免过于复杂的计算,这区别于离线推荐服务。系统进行实时推荐服务要求用户需要登录,用户登录了系统采用获取到对应用户的行为特征信息。当登录的用户对商品进行评分时,系统后台会采集用户的评分流,将用户最近K次的评分都记录在Redis缓存里,评分数据会记录在日志文件中,评分数据经过Flume日志采集后传到Kafka,kafak进行消息缓存和数据预处理,将处理的数据传到实时推荐服务进行处理。实时推荐服务会从Redis里取出用户最近评分结合用户喜好推荐其相似商品并在首页进行展示。如图5-6所示。图5-6实时推荐示意图5.2.1实时推荐模型算法设计首先用户对商品进行了评分,会经过综合业务模块的监听与处理最终触发实时推荐服务的运算;然后会获取与打分商品相似的商品集合;然后再拿到用户近期评分数据集;然后计算商品的推荐优先级,生成Arry[(productId:Int,Score:Double)]形式的数据集;将数据集与上次对用户的推荐结果再进行合并处理,得到最新的推荐结果StremRec,存入MongoDB,作为最终输出。5.2.2实时推荐模块业务设计实时推荐完整业务线应该结合综合业务模块的评分功能。当用户对某个商品进行评分,综合业务模块会在Redis中存储了每一个用户最近对商品的K次评分。由于Redis是基于内存运算的,可以方便实时算法可以快速获取。并且这个评分操作会记录一个埋点日志,将评分信息按照<PRODUCT_RATING_PREFIX:userId:productId:score:timestamp>的格式记录在指定路径的日志文件里,这个日志文件会被Flume监听,当Flume感知到有新日志数据写入,Flume会采集日志并进行数据整理,将整理的数据写入与Flume对接的Kafka的LogTopic中,Kafka起到一个消息缓冲的作用,因为当系统高峰期,若直接将前台请求全部拿到推荐模块处理,可能导致一些其他问题出现。因此,将由Kafka作为缓冲,先将Flume采集的日志信息传到KafkaLogTopic,然后将消息进行处理后给实时推荐模块处理,对kafkaStream进行处理,产生评分流,userId|productId|score|timestamp,此时实时推荐模块开始进行核心算法处理,对评分流进行处理。实时推荐模块评分流处理过程:从Redis里取出当前登录用户的最近评分,计算得到该用户的商品推荐列表,把推荐列表保存到MongoDB。此后,再由前端请求综合业务模块获取该用户的实时推荐列表,前端获取到结果集解析并渲染到页面。5.3离线推荐服务本文离线推荐服务主要是综合MongoDB数据库里已存用户所有的数据集,离线统计服务区别与实时推荐服务,离线推荐服务会在后台被调度中心进行周期性调度去处理。离线推荐服务会训练隐语义模型获得预测评分矩阵,得到用户推荐列表,并利用商品的特征向量计算商品的相似矩阵,将得到的结果存入MongoDB数据库。如图5-7所示。图5-7离线推荐示意图5.4基于统计学的算法推荐基于统计学的算法推荐本系统主要有对历史热门商品进行统计和近期热门商品统计和对综合评分的优质商品进行统计。这一块是在后台单独运行的,每隔一段该服务会被调度执行一次,将数据加载出来经过处理后存入MongoDB等待综合业务调用。5.4.1历史热门商品统计首先会将MongoDB里面的商品评分表里面的数据加载出来,然后主要利用SparkSQL进行核心处理,将加载出来的商品评分数据按照评分个数进行统计,得到评分次数最多的商品,最后将筛选出来的数据存入RateMoreProductsDF并存入MongoDB中,然后用户发起相关请求经综合业务服务处理查询得到历史热门商品集并返回前端页面进行展示。如图5-8所示。图5-8历史热门商品统计示意图5.4.2近期热门商品统计首先会将MongoDB里面的商品评分表里面的数据加载出来,然后主要利用SparkSQL进行核心处理,将加载出来的商品评分数据首先把时间戳转换成yyyyMM格式进行评分个数统计,把原始Rating数据集转换成想要的结构productId,score,yearmonth形式存入RatingOfYearMonthDF,然后再按照时间戳进行排序,得到最后的数据集,将数据集存入RateMoreRecentlyProductsDF,最后存入MongoDB数据库,然后用户发起相关请求经综合业务服务处理查询得到近期热门商品集并返回前端页面进行展示[7]。如图5-9所示。图5-9近期热门商品统计5.4.3综合优质商品统计首先会将MongoDB里面的商品评分表里面的数据加载出来,然后主要利用SparkSQL进行核心处理,统计加载出来的商品的平均评分再根据平均评分排序后存入AverageProductsDF,得到最后的数据集,将数据集存入AverageProducts,最后存入MongoDB数据库。然后前端需要综合评分数据集时向后台发起相关请求经综合业务服务处理查询得到前N个高平均评分的综合优质商品集并返回前端页面进行展示。如图5-10所示。图5-10综合优质商品5.5基于隐语义模型的协同过滤算法推荐系统采用ALS作为协同过滤算法。由于这是离线处理,会由系统后台调度中心周期性调度计算,因此无需要求和实时推荐一般快。同时也为综合业务模块请求和实时推荐服务提供数据支撑,根据MongoDB中的用户评分表计算离线的用户商品推荐列表以及商品相似度矩阵,提前将数据计算出来存于MongoDB。5.5.1用户商品推荐矩阵首先会从MongoDB数据库中将相关数据加载出来,提取到所有用户和商品的数据集userRDD和productRDD。然后定义模型需要的训练参数,利用ALS算法训练隐语义模型,用userRDD和productRDD做一个笛卡尔积,获得预测评分矩阵,再从预测评分矩阵中提取得到用户推荐列表,再将预测结果按照预测分值进行排序。将最大的K个商品,作为当前用户的推荐列表,将数据按照Arry[(productId:Int,Score:Double)]数据格式保存到MongoDB的UserRecs表中。再由前端向综合业务模块发起请求,取出对应用户的推荐列表返回前端进行结果展示。如图5-11和图5-12所示。图5-11进入商品详情页面示意图图5-12用户商品矩阵推荐5.5.2商品相似度矩阵将数据从MongoDB提取出来,首先会训练隐语义模型,然后又利用训练的模型根据商品的特征向量,计算商品的相似度列表,再两两配对商品,计算弦相似度,最后将数据按照Arry[(productId:Int,Score:Double)]数据格式保存到MongoDB的ProductRecs表中。5.6基于内容的推荐当用户查看某个商品详情时,系统会在商品详情页给出与这个商品相似商品的推荐;基于内容的推荐会采集商品的标签作为商品特征向量,但是考虑到可能有部分标签的特殊性而影响最后的推荐结果,因此会通过TF-IDF算法对标签的权重进行适当调整,使得尽可能去接近用户偏好[15]。如图5-13和5-14所示。图5-13进入商品详情页面示意图图5-14相似商品推荐5.7冷启动问题处理由于要对用户进行精准的个性化推荐服务,必须依赖用户的行为数据信息,但是对于新用户系统没有任何信息记录。为了解决这个问题,可以考虑在新用户登录时让其预选感兴趣的标签,从而根据用户的偏好信息进行合理的推荐服务。但是勾选标签并不是强制性的,若用户选择跳过则不能收集到用户的偏好信息,再加上本论文主要研究推荐,因此对于冷启动问题选择了新用户直接推荐当下热门商品、评分最多的商品[13]。如图5-15所示。表5-15首页热门推荐示意图第6章系统测试系统测试是在特定条件下对系统各个功能进行,在上线前发现系统可能存在的问题进而进行改正。测试一般在各自负责的功能模块完成后进行,最后整个系统完成了再进行拉通测试,当测试发现系统存在的bug,应该及时修正,且在完善出现bug同时不能影响现存的各个功能的正常运行。在设计测试用例时,应该尽可能的罗列出所有情况。6.1功能测试主要通过Postman工具并配合谷歌浏览器进行相关接口测试,在前端未完成时通过Postman访问每一个需要测试的接口,输入不同的数据看是否能得到想要的结果;在前端完成后,进行前后端联调,由前端发起请求看是否能完整显示。6.1.1测试用例表6-1用户登录用例用例编号QDB-6-1测试项用户登录前提条件在单击主页我的按钮操作步骤编号输入数据/动作预期结果输入正常数据011.输入用户名2.输入密码3.点击登录提示:登录成功用户名输入异常数据02用户名/密码错误提示:该用户已被注册,两次输入密码不一致存在用户人脸识别031.采用人脸登录2.人脸正对摄像头3.根据提示完成人脸采集提示:登录成功不存在用户人脸识别041.采用人脸登录2.人脸正对摄像头3.根据提示完成人脸采集提示:该用户不存在表6-2离线推荐用例用例编号QDB-6-2测试项离线推荐前提条件用户已有历史评分数据且登录操作步骤编号输入数据/动作预期结果用户进入系统011.进行首页2.系统推荐首页可能喜欢展示推荐结果表6-3最近热门商品推荐用例编号QDB-6-3测试项热门商品推荐前提条件进入系统用户未登录/搜索条件筛选操作步骤编号输入数据/动作预期结果用户进入系统011.进行首页2.系统推荐首页轮播图获取热门商品集展示给用户表6-4实时推荐用例用例编号QDB-6-4测试项实时推荐前提条件用户已登录且用户有评分数据操作步骤编号输入数据/动作预期结果未登录用户进入系统011.访问首页实时推荐处提示先登录才能获得精确的推荐服务新用户登录系统021.访问首页提示:为喜欢的商品评分老用户登录系统031.访问首页提示:获取到实时推荐商品并显示表6-5商品搜索用例用例编号QDB-6-5测试项商品搜索前提条件数据库存在数据操作步骤编号输入数据/动作预期结果商品检索用户在搜索框输入关键词检索01检索存于数据库的商品返回相关商品集02检索数据库中不存在的商品提示暂没收录相关商品表6-6商品评分用例用例编号QDB-6-6测试项商品评分前提条件用户登录操作步骤编号输入数据/动作预期结果用户查看某个商品详情011.选择分数2.确认评分记录评分,推荐模块重新计算表6-7基于内容的物品推荐用例用例编号QDB-6-7测试项基于内容的物品推荐前提条件进入商品详情页操作步骤编号输入数据/动作预期结果用户查看某个商品详情011.查看商品详情获取到相似商品6.2非功能测试非功能测试主要是操作平台测试。(1)操作平台测试需要对前端和后端都进行测试,由于其他功能都是在Windows平台下测试完成的,需要考虑当服务部署在Linux平台下,系统功能是否能正常执行。并且在不同浏览器进行了系统测试,检测系统兼容性是否良好。6.3测试报告6.3.1系统测试用例结果统计表表6-8测试用例结果统计表测试项用例编号测试特性用例描述测试结论用户登录QDB-6-1能否成功登录用户选择账号登录或者人脸识别登录;账号登录输入账号密码,点击登录,判断是否登录成功。选择人脸识别登录将人脸对准摄像头,根据提示采集人脸,系统识别登录,判断是否认证登录成功。账号密码登录成功,人脸识别登录-浏览器版本过高禁止采集视频流离线推荐QDB-6-2能否推荐成功用户进入首页,系统在首页可能喜欢栏进行离线商品推荐推荐成功,首页可能喜欢栏展示离线推荐商品列表最近热门商品推荐QDB-6-3能否推荐成功用户进入首页,系统在首页顶部轮播图进行热门商品推荐推荐成功,首页顶部轮播图展示热门商品实时推荐QDB-6-4能否推荐成功用户进入首页,系统实时推荐栏根据用户喜好进行实时推荐1.未登录用户提示登录才能获得多样化推荐服务2.没有行为数据的用户登录,提示为喜欢的商品评分3.有历史行为数据的用户登录,展示实时推荐商品列表商品检索QDB-6-5能否检索成功在搜索框输入检索关键字,点击搜索检索成功并将检索得到的相关商品进行展示商品评分QDB-6-6能否评分成功进入商品详情页,为商品选择合适的分数,点击提交评分。商品评分成功基于内容的物品推荐QDB-6-7能否修改个人信息进入商品详情页,系统根据该商品推荐其相似商品。详情页面相似商品栏展示和该商品相似的商品列表6.3.2测试总结通过系统的功能测试和非功能测试,基于Web的个性化商品推荐系统所有功能都基本满足交付要求,只有人脸识别在前端调用摄像头进行人脸采集时出现了视频资源不可用的bug,经过分析与修改,该bug已解决,其他的利用多种手段进行了多组数据测试与分析,功能正常。

第7章总结与展望7.1总结论文针对当下电子商务数据过载的问题,分析个性化商品推荐系统的需求,开发了这款推荐系统。系统架构总体分为前端用户可视化模块和后端部分,后端部分推荐模块使用Scala语言编写,业务模块使用SpringBoot编写,项目采用maven聚合工程搭建,根据业务性质可以大致分为:综合业务部分:负责推荐结果查询、商品检索、商品评分、商品标签、人脸识别与账号密码登录注册;推荐模块:包含数据加载、离线推荐、实时推荐、基于内容的推荐、基于物品的协同过滤推荐;日志采集服务:用户对商品就行评分操作,会在综合业务模块进行评分流消息整合并进行日志埋点,将日志写到指定路径下的文件中。Flume会监听该文件,当探测到有新日志写入Flume会采集日志,将评分流传入kafka;消息缓冲服务:采用kafka作为消息队列,Flume将采集的日志写入kafka,kafka做缓冲并预处理;为了方便数据处理,采用非关系型数据库MongoDB。需要给实时推荐提供预备数据,为了提高其响应速度,采用Redis作为缓存数据库。为了在海量数据下可以检索更快,关键词匹配更精确,选用ElasticSearch进行全文检索。系统可以根据用户的行为操作,结合用户的喜好,给用户进行个性化的推荐。一方面帮助用户快速发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息生产

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论