CN107357845A - 一种基于Spark的旅游兴趣推荐系统及推荐方法 - Google Patents
一种基于Spark的旅游兴趣推荐系统及推荐方法 Download PDFInfo
- Publication number
- CN107357845A CN107357845A CN201710496944.6A CN201710496944A CN107357845A CN 107357845 A CN107357845 A CN 107357845A CN 201710496944 A CN201710496944 A CN 201710496944A CN 107357845 A CN107357845 A CN 107357845A
- Authority
- CN
- China
- Prior art keywords
- user
- data
- module
- student
- rdd
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2465—Query processing support for facilitating data mining operations in structured databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9535—Search customisation based on user profiles and personalisation
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Fuzzy Systems (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Spark的旅游兴趣推荐系统,包括:数据仓库模块,用于存储数据;数据收集模块,将收集到的数据存储到数据仓库模块中;推荐引擎组模块,从数据仓库模块中提取数据;结果处理模块,对推荐引擎组模块输出的结果按照权重统一起来;评估模块,对推荐引擎组模块的每一个引擎针对准确度和多样性进行评估;引擎管理模块,根据评估模块的结果,动态的增加、删除推荐引擎,确定各个引擎的权重;用户反馈处理模块,将用户交互界面的用户反馈数据收集。本发明还公开了上述推荐系统的推荐方法。解决了现有推荐算法分析计算效率低下、存储空间扩展性不足的问题。
Description
技术领域
本发明属于旅游技术领域,具体涉及一种基于Spark的旅游兴趣推荐系统,本发明还涉及利用上述推荐系统进行推荐的方法。
背景技术
目前,随着生活水平的提高,人们在满足物质需求的基础上,更加注重精神需求,但是,目前旅游景点商业化和旅行团跟团游存在的强制消费以及无自由时间活动等问题,使得消费者无法享受当地文化中的建筑之美,文化之美,餐饮之美。而且,目前的旅游消费体系中忽略了当地大学生的导游作用,通过私人定制旅游系统,有利于当地大学生通过兼职导游解决生活来源的问题,有利于大学生带领消费者体验纯正的当地文化,不再盲目聚集。在当前大数据的时代背景下,信息过载是消费者面临的重要问题之一,如何帮助游客在海量的数据集中获取自己不明确和难以表达的需求,筛选到满意的大学生导游是目前面临的主要问题。
在旅游推荐系统中面临的主要挑战是:数据稀疏性、冷启动以及多样性和新颖性等问题。当采用单一的推荐算法如SVD算法会存在冷启动以及维度高,计算复杂等问题,基于人口统计学的推荐方法粗糙不准确。这些推荐算法都有自己的特点和适用场景,但都无法面对复杂的旅游推荐场景。为了充分利用各种数据提供的信息,保证推荐的准确性、多样性、新颖性,旅游推荐中采用并行混合推荐算法。
传统的推荐算法运行在单机环境中,其性能受到限制,使得分析计算效率低下,存储空间扩展性能不足,为了快速响应用户的需求,推荐系统需要大数据处理的能力。目前这一领域的框架很多,其中Spark是最新一代的计算框架,大数据处理能力很强,将Spark用于大数据的离线和在线计算将大大提高推荐系统的运行效率。
发明内容
本发明的目的是提供一种基于Spark的旅游兴趣推荐系统,解决了现有推荐算法分析计算效率低下、存储空间扩展性不足的问题。
本发明的另一个目的是提供利用上述推荐系统进行推荐的方法。
本发明所采用的第一种技术方案是,一种基于Spark的旅游兴趣推荐系统,包括:
数据仓库模块,用于存储数据;
数据收集模块,将用户交互界面的数据进行收集,将收集到的数据存储到数据仓库模块中;
推荐引擎组模块,从数据仓库模块中提取数据,每个引擎都有自己的推荐策略;
结果处理模块,对推荐引擎组模块输出的结果按照权重统一起来,并将最终的结果展示给游客;
评估模块,对推荐引擎组模块的每一个引擎针对准确度和多样性进行评估,以便确定各个引擎的使用场景;
引擎管理模块,根据评估模块的结果,动态的增加、删除推荐引擎,确定各个引擎的权重;
用户反馈处理模块,将用户交互界面的用户反馈数据收集,并将收集到的反馈数据发送至数据仓库模块。
本发明第一种技术方案的特点还在于:
推荐引擎组模块包括三个推荐引擎,分别是:
基于内容的推荐,利用了大学生导游描述文件;
基于人口统计学的推荐,利用了游客描述文件;
基于SVD的推荐,利用了游客评分文件;
三个推荐引擎之间采用模块化设计,根据情况线性添加、删除及实时的调整推荐系统的权值分布。
每一个推荐引擎都分为两部分,离线计算模块和在线计算模块。
推荐引擎的离线计算模块处理数据量和计算量较大的原始数据,采用Spark分布式计算框架,供在线计算时使用。
推荐引擎的在线计算模块与具体的推荐目标相关,计算量不大,在离线计算的基础上,以最快的速度给出推荐结果。
本发明所采用的第二种技术方案是:采用一种基于Spark的旅游兴趣推荐系统的推荐方法,数据收集模块从用户交互界面获取用户数据User.dat、大学生导游数据Student.dat、用户打分记录Rating.dat存储到数据仓库模块,用户反馈处理模块从用户交互界面收集反馈数据发送给数据仓库模块;数据仓库模块包括原始数据层、离线中间层、推荐结果层,原始数据层将数据集中的数据抽象后封装,以Prequet文件的形式存储于HDFS中以供推荐引擎组模块调用;离线中间层基于原始数据层,离线中间层是将各个推荐引擎离线部分产生的中间计算结果存储在数据仓库中,与具体的推荐对象无关,目的是先提前计算好以便供推荐引擎组模块在线计算使用;推荐结果层是各个推荐引擎基于离线中间层数据个性化推荐的结果数据存储于内存中;结果处理模块将推荐结果层中存储的数据过滤排序后直接返回给用户交互页面;评估模块对推荐引擎组模块的推荐结果的准确性、新颖性进行评估,根据评估的评估模块的结果,引擎管理模块动态的增加、删除推荐引擎,确定各个引擎的权重,以便获取需要的准确性、新颖性信息。
本发明所采用的第二种技术方案的特点还在于:
推荐系统中利用了数据集的三个文件:
①User.dat,用于描述用户信息,用来构造人口统计学的推荐,每条记录的数据格式设置为:
UserID::Gender::Age::Occupation::Hobby
其中Occupation和hobby被数字字典化;UserID是指用户ID,Gender是指用户性别,Age是指用户年龄,Occupation是指用户职业,Hobby是指用户兴趣;
②Student.dat,用于描述大学生导游信息,用来构造基于内容的推荐,文件中每行的数据格式为:
StudentID::Gender::Age::University::Hobby
其中StudentID是指学生导游ID,Gender是指学生导游性别,Age是指学生导游年龄,University是指学生导游学校,Hobby是指学生导游兴趣;
③Rating.dat,用于描述用户打分记录,提供了用户行为信息,用来构造基于SVD的推荐,文件中每条记录的数据格式为:
UserID::StudentID::Rating::Time
UserID是指用户ID,Student是指学生导游ID,Rating是指用户对学生导游的评分,Time是指用户对学生导游评分的日期。
数据仓库模块中数据仓库表的具体实现为:
①设计字符串Schema;
②将上述字符串转化为Spark能处理的Schema对象,并给每一个字段分配类型;
③构造原始数据RDD-dataset_rating、dataset_user、dataset_student,这是对原始文件Rating.dat、User.dat、Student.dat的抽象,用于分布式抽取其中的数据进行处理;
④构建rowRDD,将上述dataset_rating、dataset_user、dataset_student中的每一条数据处理得到结构化记录;
⑤将rowRDD与Shema对象绑定并存储到HDFS中,将最终产生的Parquet文件存储在数据仓库模块中。
推荐引擎组模块中三个推荐引擎包括两部分:离线计算和在线计算;
离线计算
使用SparkSQL从数据仓库模块中读取用户表记录,构造RDD(Row),其中每一行是用户信息,将RDD(Row)进行笛卡尔积操作,得到RDD(Row1,Row2),其中Row1和Row2包含了RDD(Row)中任意两行的组合,然后对RDD(Row1,Row2)中每一行的两个Row对象进行相似度计算,得到RDD(user1,user2,sim),最后将此RDD持久化存储到数据仓库模块中;
在线计算实现了两个基本的推荐:评分预测和Top-N推荐
评分预测的入口参数如下:
Inut(Score)=(user,student)表示用户给大学生导游的打分;
Top-N推荐
评分预测入口参数如下:
Input(Top-N)=(user)表示给用户推荐N个可能感兴趣的导游;
评分预测的具体步骤为:
①从数据仓库模块中选择与目标用户距离小于阈值的用户,得到RDD(user,sim),每一条记录表示与目标用户距离为sim的user;
②从原始数据层rating_base表中选出选择过目标导游的所有用户以及评分,得到RDD(user,rating);
③将前两步得到的RDD按照user进行join算子操作,得到RDD(User,(rating,sim)),其中user是所有选择过导游,且与目标用户距离小于阈值的用户;
④对上一步中的RDD进行map操作,交换顺序RDD(sim,(user,rating)),并按照sim由小到大的顺序排序,按照相似度排名取前K个;
⑤计算打分:
score=∑i∈R(sim/sim_all)*ratingi
其中i表示列表中的项,R是所有的记录,sim_all是列表中用户相似度的和;
最终的打分为推荐引擎估算目标用户对目标大学生导游可能的打分;
Top-N推荐的具体步骤为:
①在评分预测中已经得到与目标用户相似的用户及距离RDD(user,sim),其中此距离要小于阈值,高于此阈值的被删除;
②由rating_base表得到RDD(user,(student,rasting)),与上一步中的RDD进行join操作,得到RDD(user,((student,rating),sim));
③将上一步得到的RDD进行groupByKey算子操作,得到RDD(user,iterable[((student,rating),sim)]),表示与目标用户距离为sim的user,其已经选择过的所有大学生导游及评分记录。然后将该RDD进行map得到RDD(sim,(user,iterable[student,rating])),然后将sim从大到小进行排序,取相似度最高的k个人;
④根据上一步取出的记录进行flatMap操作,得到RDD(student,score1),表示导游的推荐度为score1:
score1=sim*(rating-2.5)
然后根据该大学生导游的推荐度,对其中的记录进行reduceByKey操作,按照student进行推荐度叠加,进一步得到RDD(student,score2);
将RDD(student,score2)按照score2由大到小排序,选取N个值,则为最终的推荐结果。
结果处理模块对推荐结果的处理具体步骤为:
首先对推荐引擎内进行标准化评分,即组内最高评分,然后将所有的评分与权值相乘,从得到的结果进行排序,得到最终的推荐结果:
norm(i,s)=(s/smax)*λi
其中,norm(i,s)表示推荐引擎i输出的结果集中s评分的标准化结果,smax表示该引擎推荐结果的最高分,λi表示该引擎的权重;
在初始推荐中设定每个引擎平均分配权值为0.33;
权值的调整是根据游客对筛选导游的行为设定的,不同的游客有不同的倾向,根据用户的偏好、季节、兴趣的变化等合适的调整权值,从而体现个性化的推荐。
本发明的有益效果是:本发明一种基于Spark的旅游兴趣推荐系统及推荐方法,①设计实现一个高效的数据仓库,作为原始数据及推荐引擎离线计算结果的数据仓库,该仓库能够大大提高推荐系统离线及在线计算效果;②基于Spark编程模型通过实现三个推荐算法的并行化,进一步实现了三个推荐引擎,使得这些引擎能够很好地与底层数据仓库融合,基于Spark的设计大大减少了离线及在线计算时间,同时,推荐算法的并行化设计可以解决新注册用户的冷启动问题、数据稀疏问题以及确保推荐结果的新颖性、多样性;③通过这种并行化混合推荐模型,统一各个推荐引擎的结果,并且根据游客的选择自动调整各引擎的权重,从而实现更加个性化的推荐。
附图说明
图1是本发明旅游兴趣推荐系统的整体架构图;
图2是本发明旅游兴趣推荐系统中推荐引擎组模块的框架图。
图中,1.数据仓库模块,2.数据收集模块,3.推荐引擎组模块,4.结果处理模块,5.评估模块,6.引擎管理模块,7.用户反馈处理模块。
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
本发明一种基于Spark的旅游兴趣推荐系统,是联系游客与大学生导游的媒介,通过收集静态数据——游客描述信息与大学生描述信息,和动态数据——游客评分记录,推荐系统可以根据不同的情况,向游客推荐他们感兴趣的大学生导游,以一种直观的方式显示在地图上供游客筛选。在本系统中采用多种推荐引擎的混合模型,分别是基于内容法的推荐、基于人口统计学的推荐、和基于SVD的推荐,并行处理每个推荐引擎获得推荐结果,确保实现推荐系统的多样性、新颖性。
本发明一种基于Spark的旅游兴趣推荐系统,如图1所示,包括:
数据仓库模块1,用于存储数据;
数据收集模块2,将用户交互界面的数据进行收集,将收集到的数据存储到数据仓库模块1中;
推荐引擎组模块3,是整个旅游推荐系统的核心,从数据仓库模块1中提取数据,每个引擎都有自己的推荐策略;
结果处理模块4,对推荐引擎组模块3输出的结果按照权重统一起来,并将最终的结果展示给游客;
评估模块5,对推荐引擎组模块3的每一个引擎针对准确度和多样性进行评估,以便确定各个引擎的使用场景;
引擎管理模块6,根据评估模块5的结果,动态的增加、删除推荐引擎,确定各个引擎的权重;
用户反馈处理模块7,将用户交互界面的用户反馈数据收集,并将收集到的反馈数据发送至数据仓库模块1。
如图2所示,推荐引擎组模块3包括三个推荐引擎,分别是:
基于内容的推荐,利用了大学生导游描述文件;
基于人口统计学的推荐,利用了游客描述文件;
基于SVD的推荐,利用了游客评分文件;
三个推荐引擎之间采用模块化设计,根据情况线性添加、删除及实时的调整推荐系统的权值分布,使得最终的推荐结果准确、多样、新颖。
每一个所述推荐引擎都分为两部分,离线计算模块和在线计算模块。离线计算部分主要处理数据量和计算量较大的原始数据,采用Spark分布式计算框架,供在线计算时使用。在线计算与具体的推荐目标相关,计算量不大,在离线计算的基础上,以最快的速度给出推荐结果。
推荐引擎的离线计算模块处理数据量和计算量较大的原始数据,采用Spark分布式计算框架,供在线计算时使用。
推荐引擎的在线计算模块与具体的推荐目标相关,计算量不大,在离线计算的基础上,以最快的速度给出推荐结果。
采用上述一种基于Spark的旅游兴趣推荐系统的推荐方法,数据收集模块2从用户交互界面获取用户数据User.dat、大学生导游数据Student.dat、用户打分记录Rating.dat存储到数据仓库模块1,用户反馈处理模块7从用户交互界面收集反馈数据发送给数据仓库模块1;数据仓库模块1包括原始数据层、离线中间层、推荐结果层,原始数据层将数据集中的数据抽象后封装,以Prequet文件的形式存储于HDFS中以供推荐引擎组模块3调用;离线中间层基于原始数据层,离线中间层是将各个推荐引擎离线部分产生的中间计算结果存储在数据仓库中,与具体的推荐对象无关,目的是先提前计算好以便供推荐引擎组模块3在线计算使用;推荐结果层是各个推荐引擎基于离线中间层数据个性化推荐的结果数据存储于内存中;结果处理模块4将推荐结果层中存储的数据过滤排序后直接返回给用户交互页面;评估模块5对推荐引擎组模块3的推荐结果的准确性、新颖性进行评估,根据评估的评估模块5的结果,引擎管理模块6动态的增加、删除推荐引擎,确定各个引擎的权重,以便获取需要的准确性、新颖性信息。
推荐系统中利用了数据集的三个文件:
①User.dat,用于描述用户信息,用来构造人口统计学的推荐,每条记录的数据格式设置为:
UserID::Gender::Age::Occupation::Hobby
其中Occupation和hobby被数字字典化;UserID是指用户ID,Gender是指用户性别,Age是指用户年龄,Occupation是指用户职业,Hobby是指用户兴趣;
②Student.dat,用于描述大学生导游信息,用来构造基于内容的推荐,文件中每行的数据格式为:
StudentID::Gender::Age::University::Hobby
其中StudentID是指学生导游ID,Gender是指学生导游性别,Age是指学生导游年龄,University是指学生导游学校,Hobby是指学生导游兴趣;
③Rating.dat,用于描述用户打分记录,提供了用户行为信息,用来构造基于SVD的推荐,文件中每条记录的数据格式为:
UserID::StudentID::Rating::Time
UserID是指用户ID,Student是指学生导游ID,Rating是指用户对学生导游的评分,Time是指用户对学生导游评分的日期。
数据仓库模块1中数据仓库表的具体实现为:
①设计字符串Schema;
②将上述字符串转化为Spark能处理的Schema对象,并给每一个字段分配类型;
③构造原始数据RDD-dataset_rating、dataset_user、dataset_student,这是对原始文件Rating.dat、User.dat、Student.dat的抽象,用于分布式抽取其中的数据进行处理;
④构建rowRDD,将上述dataset_rating、dataset_user、dataset_student中的每一条数据处理得到结构化记录;
⑤将rowRDD与Shema对象绑定并存储到HDFS中,将最终产生的Parquet文件存储在数据仓库模块1中。
推荐引擎组模块3中三个推荐引擎包括两部分:离线计算和在线计算;
离线计算
使用SparkSQL从数据仓库模块1中读取用户表记录,构造RDD(Row),其中每一行是用户信息,将RDD(Row)进行笛卡尔积操作,得到RDD(Row1,Row2),其中Row1和Row2包含了RDD(Row)中任意两行的组合,然后对RDD(Row1,Row2)中每一行的两个Row对象进行相似度计算,得到RDD(user1,user2,sim),最后将此RDD持久化存储到数据仓库模块1中;
在线计算实现了两个基本的推荐:评分预测和Top-N推荐
评分预测的入口参数如下:
Inut(Score)=(user,student)表示用户给大学生导游的打分;
Top-N推荐
评分预测入口参数如下:
Input(Top-N)=(user)表示给用户推荐N个可能感兴趣的导游;
评分预测的具体步骤为:
①从数据仓库模块1中选择与目标用户距离小于阈值的用户,得到RDD(user,sim),每一条记录表示与目标用户距离为sim的user;
②从原始数据层rating_base表中选出选择过目标导游的所有用户以及评分,得到RDD(user,rating);
③将前两步得到的RDD按照user进行join算子操作,得到RDD(User,(rating,sim)),其中user是所有选择过导游,且与目标用户距离小于阈值的用户;
④对上一步中的RDD进行map操作,交换顺序RDD(sim,(user,rating)),并按照sim由小到大的顺序排序,按照相似度排名取前K个;
⑤计算打分:
score=∑i∈R(sim/sim_all)*ratingi
其中i表示列表中的项,R是所有的记录,sim_all是列表中用户相似度的和;
最终的打分为推荐引擎估算目标用户对目标大学生导游可能的打分;
Top-N推荐的具体步骤为:
①在评分预测中已经得到与目标用户相似的用户及距离RDD(user,sim),其中此距离要小于阈值,高于此阈值的被删除;
②由rating_base表得到RDD(user,(student,rasting)),与上一步中的RDD进行join操作,得到RDD(user,((student,rating),sim));
③将上一步得到的RDD进行groupByKey算子操作,得到RDD(user,iterable[((student,rating),sim)]),表示与目标用户距离为sim的user,其已经选择过的所有大学生导游及评分记录。然后将该RDD进行map得到RDD(sim,(user,iterable[student,rating])),然后将sim从大到小进行排序,取相似度最高的k个人;
④根据上一步取出的记录进行flatMap操作,得到RDD(student,score1),表示导游的推荐度为score1:
score1=sim*(rating-2.5)
然后根据该大学生导游的推荐度,对其中的记录进行reduceByKey操作,按照student进行推荐度叠加,进一步得到RDD(student,score2);
将RDD(student,score2)按照score2由大到小排序,选取N个值,则为最终的推荐结果。
结果处理模块4对推荐结果的处理具体步骤为:
首先对推荐引擎内进行标准化评分,即组内最高评分,然后将所有的评分与权值相乘,从得到的结果进行排序,得到最终的推荐结果:
norm(i,s)=(s/smax)*λi
其中,norm(i,s)表示推荐引擎i输出的结果集中s评分的标准化结果,smax表示该引擎推荐结果的最高分,λi表示该引擎的权重;
在初始推荐中设定每个引擎平均分配权值为0.33;
权值的调整是根据游客对筛选导游的行为设定的,不同的游客有不同的倾向,根据用户的偏好、季节、兴趣的变化等合适的调整权值,从而体现个性化的推荐。
Claims (10)
1.一种基于Spark的旅游兴趣推荐系统,其特征在于,包括:
数据仓库模块(1),用于存储数据;
数据收集模块(2),将用户交互界面的数据进行收集,将收集到的数据存储到数据仓库模块(1)中;
推荐引擎组模块(3),从数据仓库模块(1)中提取数据,每个引擎都有自己的推荐策略;
结果处理模块(4),对推荐引擎组模块(3)输出的结果按照权重统一起来,并将最终的结果展示给游客;
评估模块(5),对推荐引擎组模块(3)的每一个引擎针对准确度和多样性进行评估,以便确定各个引擎的使用场景;
引擎管理模块(6),根据评估模块(5)的结果,动态的增加、删除推荐引擎,确定各个引擎的权重;
用户反馈处理模块(7),将用户交互界面的用户反馈数据收集,并将收集到的反馈数据发送至数据仓库模块(1)。
2.根据权利要求1所述一种基于Spark的旅游兴趣推荐系统,其特征在于,所述推荐引擎组模块(3)包括三个推荐引擎,分别是:
基于内容的推荐,利用了大学生导游描述文件;
基于人口统计学的推荐,利用了游客描述文件;
基于SVD的推荐,利用了游客评分文件;
三个推荐引擎之间采用模块化设计,根据情况线性添加、删除及实时的调整推荐系统的权值分布。
3.根据权利要求1所述一种基于Spark的旅游兴趣推荐系统,其特征在于,每一个所述推荐引擎都分为两部分,离线计算模块和在线计算模块。
4.根据权利要求3所述一种基于Spark的旅游兴趣推荐系统,其特征在于,所述推荐引擎的离线计算模块处理数据量和计算量较大的原始数据,采用Spark分布式计算框架,供在线计算时使用。
5.根据权利要求3所述一种基于Spark的旅游兴趣推荐系统,其特征在于,所述推荐引擎的在线计算模块与具体的推荐目标相关,计算量不大,在离线计算的基础上,以最快的速度给出推荐结果。
6.采用一种基于Spark的旅游兴趣推荐系统的推荐方法,其特征在于,数据收集模块(2)从用户交互界面获取用户数据User.dat、大学生导游数据Student.dat、用户打分记录Rating.dat存储到数据仓库模块(1),用户反馈处理模块(7)从用户交互界面收集反馈数据发送给数据仓库模块(1);
数据仓库模块(1)包括原始数据层、离线中间层、推荐结果层,原始数据层将数据集中的数据抽象后封装,以Prequet文件的形式存储于HDFS中以供推荐引擎组模块(3)调用;离线中间层基于原始数据层,离线中间层是将各个推荐引擎离线部分产生的中间计算结果存储在数据仓库中,与具体的推荐对象无关,目的是先提前计算好以便供推荐引擎组模块(3)在线计算使用;推荐结果层是各个推荐引擎基于离线中间层数据个性化推荐的结果数据存储于内存中;结果处理模块(4)将推荐结果层中存储的数据过滤排序后直接返回给用户交互页面;评估模块(5)对推荐引擎组模块(3)的推荐结果的准确性、新颖性进行评估,根据评估的评估模块(5)的结果,引擎管理模块(6)动态的增加、删除推荐引擎,确定各个引擎的权重,以便获取需要的准确性、新颖性信息。
7.根据权利要求6所述的采用一种基于Spark的旅游兴趣推荐系统的推荐方法,其特征在于,所述推荐系统中利用了数据集的三个文件:
①User.dat,用于描述用户信息,用来构造人口统计学的推荐,每条记录的数据格式设置为:
UserID::Gender::Age::Occupation::Hobby
其中Occupation和hobby被数字字典化;UserID是指用户ID,Gender是指用户性别,Age是指用户年龄,Occupation是指用户职业,Hobby是指用户兴趣;
②Student.dat,用于描述大学生导游信息,用来构造基于内容的推荐,文件中每行的数据格式为:
StudentID::Gender::Age::University::Hobby
其中StudentID是指学生导游ID,Gender是指学生导游性别,Age是指学生导游年龄,University是指学生导游学校,Hobby是指学生导游兴趣;
③Rating.dat,用于描述用户打分记录,提供了用户行为信息,用来构造基于SVD的推荐,文件中每条记录的数据格式为:
UserID::StudentID::Rating::Time
UserID是指用户ID,Student是指学生导游ID,Rating是指用户对学生导游的评分,Time是指用户对学生导游评分的日期。
8.根据权利要求7所述的采用一种基于Spark的旅游兴趣推荐系统的推荐方法,其特征在于,所述数据仓库模块(1)中数据仓库表的具体实现为:
①设计字符串Schema;
②将上述字符串转化为Spark能处理的Schema对象,并给每一个字段分配类型;
③构造原始数据RDD-dataset_rating、dataset_user、dataset_student,这是对原始文件Rating.dat、User.dat、Student.dat的抽象,用于分布式抽取其中的数据进行处理;
④构建rowRDD,将上述dataset_rating、dataset_user、dataset_student中的每一条数据处理得到结构化记录;
⑤将rowRDD与Shema对象绑定并存储到HDFS中,将最终产生的Parquet文件存储在数据仓库模块(1)中。
9.根据权利要求7所述的采用一种基于Spark的旅游兴趣推荐系统的推荐方法,其特征在于,所述推荐引擎组模块(3)中三个推荐引擎包括两部分:离线计算和在线计算;
离线计算
使用SparkSQL从数据仓库模块(1)中读取用户表记录,构造RDD(Row),其中每一行是用户信息,将RDD(Row)进行笛卡尔积操作,得到RDD(Row1,Row2),其中Row1和Row2包含了RDD(Row)中任意两行的组合,然后对RDD(Row1,Row2)中每一行的两个Row对象进行相似度计算,得到RDD(user1,user2,sim),最后将此RDD持久化存储到数据仓库模块(1)中;
在线计算实现了两个基本的推荐:评分预测和Top-N推荐
评分预测的入口参数如下:
Inut(Score)=(user,student)表示用户给大学生导游的打分;
Top-N推荐
评分预测入口参数如下:
Input(Top-N)=(user)表示给用户推荐N个可能感兴趣的导游;
评分预测的具体步骤为:
①从数据仓库模块(1)中选择与目标用户距离小于阈值的用户,得到RDD(user,sim),每一条记录表示与目标用户距离为sim的user;
②从原始数据层rating_base表中选出选择过目标导游的所有用户以及评分,得到RDD(user,rating);
③将前两步得到的RDD按照user进行join算子操作,得到RDD(User,(rating,sim)),其中user是所有选择过导游,且与目标用户距离小于阈值的用户;
④对上一步中的RDD进行map操作,交换顺序RDD(sim,(user,rating)),并按照sim由小到大的顺序排序,按照相似度排名取前K个;
⑤计算打分:
score=∑i∈R(sim/sim_all)*ratingi
其中i表示列表中的项,R是所有的记录,sim_all是列表中用户相似度的和;
最终的打分为推荐引擎估算目标用户对目标大学生导游可能的打分;
Top-N推荐的具体步骤为:
①在评分预测中已经得到与目标用户相似的用户及距离RDD(user,sim),其中此距离要小于阈值,高于此阈值的被删除;
②由rating_base表得到RDD(user,(student,rasting)),与上一步中的RDD进行join操作,得到RDD(user,((student,rating),sim));
③将上一步得到的RDD进行groupByKey算子操作,得到RDD(user,iterable[((student,rating),sim)]),表示与目标用户距离为sim的user,其已经选择过的所有大学生导游及评分记录。然后将该RDD进行map得到RDD(sim,(user,iterable[student,rating])),然后将sim从大到小进行排序,取相似度最高的k个人;
④根据上一步取出的记录进行flatMap操作,得到RDD(student,score1),表示导游的推荐度为score1:
score1=sim*(rating-2.5)
然后根据该大学生导游的推荐度,对其中的记录进行reduceByKey操作,按照student进行推荐度叠加,进一步得到RDD(student,score2);
将RDD(student,score2)按照score2由大到小排序,选取N个值,则为最终的推荐结果。
10.根据权利要求9所述的采用一种基于Spark的旅游兴趣推荐系统的推荐方法,其特征在于,所述结果处理模块(4)对推荐结果的处理具体步骤为:
首先对推荐引擎内进行标准化评分,即组内最高评分,然后将所有的评分与权值相乘,从得到的结果进行排序,得到最终的推荐结果:
norm(i,s)=(s/smax)*λi
其中,norm(i,s)表示推荐引擎i输出的结果集中s评分的标准化结果,smax表示该引擎推荐结果的最高分,λi表示该引擎的权重;
在初始推荐中设定每个引擎平均分配权值为0.33;
权值的调整是根据游客对筛选导游的行为设定的,不同的游客有不同的倾向,根据用户的偏好、季节、兴趣的变化等合适的调整权值,从而体现个性化的推荐。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710496944.6A CN107357845A (zh) | 2017-06-26 | 2017-06-26 | 一种基于Spark的旅游兴趣推荐系统及推荐方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710496944.6A CN107357845A (zh) | 2017-06-26 | 2017-06-26 | 一种基于Spark的旅游兴趣推荐系统及推荐方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107357845A true CN107357845A (zh) | 2017-11-17 |
Family
ID=60272581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710496944.6A Pending CN107357845A (zh) | 2017-06-26 | 2017-06-26 | 一种基于Spark的旅游兴趣推荐系统及推荐方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107357845A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110706013A (zh) * | 2018-07-10 | 2020-01-17 | 鄢海军 | 一种数据分配方法及其设备、存储介质、电子设备 |
CN110874780A (zh) * | 2018-09-01 | 2020-03-10 | 昆山炫生活信息技术股份有限公司 | 基于大数据统计的景区游玩系统及推荐方法 |
CN111079968A (zh) * | 2018-10-22 | 2020-04-28 | 昆山炫生活信息技术股份有限公司 | 基于多特征融合的景区游玩轨迹预测系统 |
CN111489213A (zh) * | 2019-01-25 | 2020-08-04 | 上海菲碧文化传媒有限公司 | 一种基于大数据的电子商务个性化推荐系统 |
CN111814054A (zh) * | 2020-07-20 | 2020-10-23 | 山东省科院易达科技咨询有限公司 | 一种海量信息数据的推荐方法及推荐装置 |
CN112381501A (zh) * | 2020-11-05 | 2021-02-19 | 上海汇付数据服务有限公司 | 一种产品运作平台系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105069717A (zh) * | 2015-07-29 | 2015-11-18 | 陕西师范大学 | 一种基于游客信任度的个性化旅游线路推荐方法 |
-
2017
- 2017-06-26 CN CN201710496944.6A patent/CN107357845A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105069717A (zh) * | 2015-07-29 | 2015-11-18 | 陕西师范大学 | 一种基于游客信任度的个性化旅游线路推荐方法 |
Non-Patent Citations (1)
Title |
---|
胡于响: "基于Spark的推荐系统的设计与实现", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110706013A (zh) * | 2018-07-10 | 2020-01-17 | 鄢海军 | 一种数据分配方法及其设备、存储介质、电子设备 |
CN110874780A (zh) * | 2018-09-01 | 2020-03-10 | 昆山炫生活信息技术股份有限公司 | 基于大数据统计的景区游玩系统及推荐方法 |
CN110874780B (zh) * | 2018-09-01 | 2023-11-14 | 昆山炫生活信息技术股份有限公司 | 基于大数据统计的景区游玩系统及推荐方法 |
CN111079968A (zh) * | 2018-10-22 | 2020-04-28 | 昆山炫生活信息技术股份有限公司 | 基于多特征融合的景区游玩轨迹预测系统 |
CN111489213A (zh) * | 2019-01-25 | 2020-08-04 | 上海菲碧文化传媒有限公司 | 一种基于大数据的电子商务个性化推荐系统 |
CN111814054A (zh) * | 2020-07-20 | 2020-10-23 | 山东省科院易达科技咨询有限公司 | 一种海量信息数据的推荐方法及推荐装置 |
CN111814054B (zh) * | 2020-07-20 | 2021-11-09 | 山东省科院易达科技咨询有限公司 | 一种海量信息数据的推荐方法及推荐装置 |
CN112381501A (zh) * | 2020-11-05 | 2021-02-19 | 上海汇付数据服务有限公司 | 一种产品运作平台系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107357845A (zh) | 一种基于Spark的旅游兴趣推荐系统及推荐方法 | |
CN107133277B (zh) | 一种基于动态主题模型和矩阵分解的旅游景点推荐方法 | |
CN107424043A (zh) | 一种产品推荐方法及装置,电子设备 | |
CN105320719B (zh) | 一种基于项目标签和图形关系的众筹网站项目推荐方法 | |
CN103412937B (zh) | 一种基于手持终端的搜索购物方法 | |
CN102279851B (zh) | 一种智能导航方法、装置和系统 | |
CN103544216B (zh) | 一种结合图像内容和关键字的信息推荐方法及系统 | |
CN107291841A (zh) | 一种基于位置和用户画像智能匹配社交目标的方法和系统 | |
CN107220365A (zh) | 基于协同过滤与关联规则并行处理的精准推荐系统及方法 | |
CN107688606A (zh) | 一种推荐信息的获取方法及装置,电子设备 | |
CN105791085B (zh) | 在位置社交网络中基于位置与时间的好友推荐方法 | |
CN102411754A (zh) | 一种基于商品属性熵值的个性化推荐方法 | |
CN104834686A (zh) | 一种基于混合语义矩阵的视频推荐方法 | |
CN110110221A (zh) | 政务数据智能推荐方法和系统 | |
CN105930469A (zh) | 基于Hadoop的个性化旅游推荐系统及方法 | |
CN108595461A (zh) | 兴趣探索方法、存储介质、电子设备及系统 | |
CN106326413A (zh) | 一种个性化视频推荐系统及方法 | |
CN110399563A (zh) | 一种基于用户行为分析的偏好模型及个性化信息主动推荐方法 | |
CN111177559B (zh) | 文旅服务推荐方法、装置、电子设备及存储介质 | |
CN106960044A (zh) | 一种基于张量分解及加权hits的时间感知个性化poi推荐方法 | |
CN110490686A (zh) | 一种基于时间感知的商品评分模型构建、推荐方法及系统 | |
CN110008397A (zh) | 一种推荐模型训练方法及装置 | |
CN104272304B (zh) | 信息处理设备、信息处理方法以及程序 | |
CN109597899A (zh) | 媒体个性化推荐系统的优化方法 | |
CN113343127A (zh) | 一种旅游路线推荐方法、系统、服务器及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB03 | Change of inventor or designer information |
Inventor after: Jiu Yalin Inventor after: Zhao Liyi Inventor after: Hou Wentao Inventor before: Jiu Yalin Inventor before: Zhao Liyi |
|
CB03 | Change of inventor or designer information | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171117 |
|
RJ01 | Rejection of invention patent application after publication |