基于Spark的音乐推荐系统的设计与实现_第1页
基于Spark的音乐推荐系统的设计与实现_第2页
基于Spark的音乐推荐系统的设计与实现_第3页
基于Spark的音乐推荐系统的设计与实现_第4页
基于Spark的音乐推荐系统的设计与实现_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

硕士学位论文基于Spark的音乐推荐系统的设计与实现DESIGN AND IMPLEMENTATION OF MUSICRECOMMEND SYSTEM BASED ON SPARK顾威哈尔滨工业大学2018年6月学校代码:10213密级:公开国内图书分类号:TP311 国际图书分类号:621.3工程硕士学位论文基于Spark的音乐推荐系统的设计与实现硕士研究生:顾威导师:土宏志教授副 导师董博工程师 申请学位:工程硕士 学科:软件工程所在单位:软件学院答辩日期:2018年6月 授予学位单位:哈尔滨工业大学Classified Index: TP311U.D.C: 621.3Dissertation for the Master Degree in EngineeringDESIGN AND IMPLEMENTATION OF MUSICRECOMMEND SYSTEM BASED ON SPARKCandidate:Supervisor:Associate Supervisor:Academic Degree Applied for:Speciality:Affiliation:Date of Defence:Degree-Conferring-Institution:Gu WeiProfessor Wang HongZhiSenior Engineer Dong BoMaster of EngineeringSoftware EngineeringSchool of SoftwareJune, 2018Harbin Institute of Technology哈尔滨工业人学工程硕士学位论文摘要唱吧App作为主流的K歌软件之一,经过几年的发展,已经积累了大量的 歌曲作品,但是却没有个性化的推荐系统。用户在海量的作品里很难找到符合自 己兴趣的作品。传统的搜索引擎适用于用户能够明确使用关键词表达自己需求 的场景。而通过排序算法得到的热门榜单上作品也不能代表所有用户的兴趣。 音圧是一种典型的具有长尾现象的物品一一只有少部分的作品会被人看到,大 部分的作品无人问津。所以个性化音乐推荐系统用于帮助用户发现自己感兴趣 的作品,从而达到增加用户对App的黏性的目的。推荐系统是信息过滤系统的一种,通过深入挖掘分析用户和物品的信息, 预测用户对物品的感兴趣程度。当前主流的推荐算法有协同过滤推荐和基于内 容的推荐。协同过滤推荐主要分析用户对物品的行为,而基于内容的推荐则从 物品自身属性挖掘相似的物品。不同的推荐算法有其自身的优缺点,推荐系统 往往融合多种推荐算法进行组合推荐。本文参考已有的研允成果,选取了四种推荐算法并借助Spark平台上予以 实现。四种推荐算法分别是基于用户的协同过滤推荐,组合基于物品内容和基 于物品协同过滤的推荐,基于图模型的算法,基于隐语义模型的算法。出于为 大量用户推荐大量歌曲的需求,本文在Spark平台实现这四种推荐算法对应的 推荐引擎。然后将推荐引擎和App业务系统对接,设计和实现了一个具备完整 推荐流程的推荐系统。关键词:推荐系统;SPARK;音乐推荐AbstractAfter several years of development, ChangBa mobile application as one of mainstream sing applications has accumulated much music, but there wasnt a personal recommendation system. It is difficulty for users find interesting music in such mass data.Traditional search engine is applied to the situation which user can use keywords describe his requirement.And the hot music list made by sort algorithm can not represent the interest of all users.Music is a typical item which has Long Tail appearance.Few of Music can be watched by users and much of it is% cared by anyone.So personalization music recommendation system can help users find their insteresting music and achieve the goal of increasing usage of application.Recommendation system is one of information filter system.lt predict the users interest for some item by mining and analyzing the data of user and item deeply. At present, the popular recommendation algorithm includes Collaborative Filteringbased Recommendation and Content-based Recommendation. Collaborative Filtering-based Recommendation use the action data of user, otherwise Content-based Recommendation use the original data of item.Different recommendation algorithm has personal advantage and disadvantage.So recommendation system combine many algorithm for recommendating generally.This paper referring to current research result chooses four recomenndation algorithem to achieve in spark platform.The four algorithm are Collaborative Filtering-based Recommendation , Item Content-based combined with Item based Collaborative Filter Recommendation, Graph-based model Recommendation and Latent Factor-based model Recommendation.Because of requirement that recomenndationg is for many users and much music,we use spark platform to achieve the recommendation engine with corredponding algorithm.And more, we would concat the recommendation engine and business system to design and achieve the recommendation system which has complete flow path.Keywords:recommendation system, spark, music recommendation哈尔滨丁业人学丁程硕士学位论文目录摘要IABSTRACTII第1章绪论51课题背景及研究的目的和意义51.2与木课题有关的国内外研究状况51.4木文的主要研究内容81.4论文组织结构8第2章音乐推荐系统关键技术102.1推荐引擎相关技术研究102.1.1推荐引擎概要介绍1()2.1.2推荐引擎相关算法研究112.2 Spark平台相关技术17221 Spark平台简介172.2.2 Spark编程模型和原理概述182.3 MaxCompute 月艮务简介222.4音乐推荐系统关键技术222.5木章小结22第3章 音乐推荐系统需求分析和总体设计233.1音乐推荐系统需求分析233.1.1音乐推荐系统功能需求233.1.2音乐推荐系统非功能需求263.2音圧推荐系统总体设计273.2.1音乐推荐系统功能结构设计273.2.2音乐推荐系统架构设计273.2.3音乐推荐系统数据仓库库设计293.3木章小结32第4章 音乐推荐系统设计与实现334.1数据导入和预处理模块的设计与实现334.2推荐引擎模块的设计与实现334.2.1推荐引擎模块总体设计与实现344.2.2基于用户的协同过滤推荐的设计与实现384.3.3组合基于物品内容和基于物品的协同过滤推荐的设计与实现424.3.4基于隐语义模型推荐的设计与实现474.3.5基于二分图模型推荐的设计与实现504.3.6算法实现细节优化534.3.6算法性能对比554.4推荐结果评估模块的设计与实现564.4.1离线实验和评估564.4.2在线实验和评估584.8本章小结60第5章 音乐推荐系统的部署与测试615.1音乐推荐系统部署615.2音乐推荐系统测试645.2.1音乐推荐系统功能测试645.2.2音乐推荐系统非功能测试665.3本章小结66参考文献69哈尔滨工业大学学位论文原创性声明和使用权限72致谢73个人简历74iv哈尔滨丁业人学丁程硕士学位论文第1章绪论L1课题背景及研究的目的和意义项冃来源于我所在实习公司的实际业务需求。公司主产品唱吧App作为国 内的主流K歌软件之一,每天会产生大量的歌曲和各种日志数据。一个好的音 怎推荐系统能够帮助用户解决找不到合适的歌曲问题。其通过对用户音乐行为 的深入挖掘,主动为其提供合适的个性化歌曲,从而达到增加用户的黏性和增 加App日活的目的。当前唱吧的给用户推荐听的歌曲方式有编辑推荐和好友动 态推荐等简单的方式,没有深入地挖掘用户行为数据来主动推荐个性化的歌曲。 另外不同于其它听歌音乐App, K歌App的推荐听歌具有自己的特点:一是给 用户推荐听的歌曲都是用户自己唱的,这里需要考虑歌唱者的因素。二是由于 App榜单功能的原因,存在作弊的现象。这使得在使用某些算法时需要排除作 弊者的干扰。另外随着时间的推移,存储在业务系统的日益增长的的歌曲和相关日志数 据也越来越多。在大数据规模下实现实时的个性化推荐具有相当的挑战性。所 以项目决定采用Spark这一先进的分布式处理平台,实现更快的数据处理。最终项目名称定为基于Spark的音乐推荐系统的设计与实现。根据当前需 求,最终目标是在Spark平台上实现一个具有完整推荐流程的可用于生产环境 的音乐推荐系统。1.2与本课题有关的国内外研究状况关于音乐推荐系统,当前已有许多研究成果,并且应用到实际生产环境中。 就国内的众多听歌类音乐App,女口:网易云音乐,虾米音乐,QQ音乐等音乐 App都有各自的个性化音乐推荐系统。如网易云音乐首页的每口推荐功能,每 天会定制一个推荐音乐列表,并且推荐的每首音乐都会给出推荐理由。例如:90% 的人也听过收藏了这首歌;这首歌在你收藏的歌的专辑中。而这些音乐推荐的主 要实现方式是使用推荐系统进行智能推荐。而K歌类App上推荐就当前來看还 没看到更多的个性化推荐成果,都是进行统一的推荐。腾讯的全民K歌和唱吧 主要都是根据用户的社交关系或者简单的对热门的歌曲进行推荐。其中腾讯的 全民K歌利用其强大社区优势能够直接和微信QQ好友相联系,推荐你社交圈 里人的歌曲。推荐系统当前的探索与研究主要是两个方面:一是推荐算法的研究和改进, 不断适应新的需求和推荐场景,提高推荐的各项性能。二是工程实践方面,要 使得推荐系统能够处理各种复朵情况的跳转,系统要具有健壮性。实时性和稳 定性等。在当前数据规模日益扩大的现在,如何在大数据场景下保证推荐系统 的这些特性,也是当下一个热点的方向。在推荐算法理论方而,文献认为当前大数据背景下的音乐推荐系统主要 算法包含以下三类:(1) 基于内容的推荐算法,即最大相似度算法。其基本思想如下:首先根据用 户的行为信息,比如用户收藏的曲目,用户经常点击的曲目等,分析这些曲目 的特征(旋律,风格,歌手等)信息,以此构成该用户的特征向量,然后遍历音乐 数据库,分析音乐库中文件的特征向量与用户的相关程度,选择其中相关程度 较大的曲目最为推荐曲目推荐给用户。(2) 协同过滤推荐算法。包括基于用户的协同过滤(User-CF)和基于物品 的协同过滤(ItemCF)o基于用户的协同过滤是通过比较当前用户与其他用户 对感兴趣音乐的相似度,计算岀用户间的相似度,构成用户相似度集,从中选 出与用户相似度最大的若干用户,将他们最喜欢的音乐推荐给用户。而基于物 品的协同过滤和基于内容的推荐算法是相似的,但是它所依赖的数据不是音乐 的自身属性数据,而是用户对音怎的行为数据,如:点赞,听歌时间等这样的 数据。(3) 组合推荐算法,将各种算法按照一定方式融合,而得到新的推荐结果的 算法。例如:一种简单组合方式是各个算法的结果进行加权排序,然后选择评 分高的项作为最后推荐项。推荐算法理论发展过程中,一直而临着许多问题的挑战。例如稀疏性,冷 启动,实时性,长尾现彖。稀疏性由于由于用户和物品数据规模均较大, 使得相关的评分矩阵规模更加巨大,但是矩阵只有很少元素是非零的,浪费了 大量存储空间。文献提出的奇界值分解(SVD)的方法,来对稀疏的用户物品矩 阵降维,并挖掘降维矩阵和原始矩阵的关系,从而改善矩阵信息密度过低的问 题。文献针对关联规则和奇异值分解两种推荐算法的效果进行了探究。文献 则使用MovieLens数据集对稀疏性相关问题进行了研究,并提出了改进的相似 度加强算法。冷启动分为用户,物品和系统三类冷启动。在音乐推荐系统中, 用户冷启动和音乐冷启动就是指对于新增的用户和音乐由于缺乏相关行为数据 无法进行推荐的问题,系统冷启动是指如果音乐系统是刚开发完成,没有用户 也没有音乐数据的情况下无法进行相关推荐。文献I提出一种利用新用户使用 音乐时的上下文环境信息来解决用户冷启动问题的方法。文献i对当前冷启动 问题及其解决方案做了总结和归纳。实时性问题是指大规模数据下,推荐系统 难以在较短的时间给出推荐结果。在算法理论方面主要可以使用分类模型以及 贝叶斯等概率方法减少计算复杂度,使用聚类方法减少最近邻的搜索空间,能 够一定程度上缓解实时性问题。长尾问题是指一般音乐推荐只推送热点的前20% 音乐,但是后而80%也存在着好听的音乐,但是被大量数据淹没说。文献口提 出一种根据音乐相似度和用户行为日志来推荐音乐解决长尾问题的办法。另外 可以根据用户对音圧的共同喜好,为其推荐有着共同曲风爱好的用户,来一定 程度上解决长尾问题。另外大数据环境下,音乐系统产牛的数据以隐式反馈为主,如用户对音乐 的收听数和收藏数等。文献针对隐式反馈数据高噪声和缺少负反馈的特点, 以音乐推荐为背景,在研究概率矩阵分解模型(PMF)的基础上提出了一种直接 优化排名倒数(RR)的概率矩阵分解模型(RR-PMF)o关于推荐系统在工程实践的应用方面,由于大数据时代的來临,学术界主 要关注推荐系统在大数据环境下的处理能力。除了改进算法理论,一个更有效 的方法是使用大数据处理技术,主要是各种分布式处理框架。经典的分布式处 理框架有Hadoop生态系统,它包括HDFS分布式存储框架,MapReduce分 布式计算框架,Hive数据仓库查询引擎等等。基于Hadoop的项目Mahout1171 实现了许多机器学习算法的并行化,其中包括基于物品的协同过滤的实现等。 在Hadoop基础上,由加州大学伯克利分校的AMPLab实验室开发出新的分布 式计算框架Spark平台。它与Hadoop相比,最大的不同是Spark将中间数据尽 可能放在内存中,Hadoop则是放在HDFS里,显然Spark避免了大量的磁盘10 操作,尤其适合迭代次数多的机器学习算法,速度优势明显。文献提出了基 于Hadoop分布式平台以及Spark并行计算模型的Item Based协同过滤算法。 文献也利用Spark平台使用协同过滤算法设计了一个简易的商品推荐系统并 在MovieLens数据集上作了试验和分析。另外推荐系统在实际工程中还存在数据孤岛和可扩展性问题。数据孤岛 指的是推荐系统各自使用自身平台行为数据进行分析,各平台间数据互相不共 享。可扩展性问题指的是推荐系统能够支持日益增长的数据规模,随着数据规 模的增加,可能会导致推荐系统的性能主要是实时性下降。1.4本文的主要研究内容由于本课题來源公司的实际项目,其最终目的能够实现应用于生产环境,对 于系统的健壮性,稳定性和可扩展性有着比较高的要求。另外,在大数据环境 下,需要选择综合各种因素,需要研究选择符合实际需求的针对K歌App的推 荐算法,并且这些算法要在分布式平台上予以实现。所以具体研究内容如下:(1)研究推荐系统的架构和设计方案并予以实现。具体包括推荐使用的数 据如何导入,推荐系统如何和已有的业务系统对接以及推荐系统内部工作机制。 由于推荐系统要应用到生产环境,还需要研究如何确保系统的稳定性和健壮性。(2)研究适用于K歌App的相关音乐推荐算法。推荐系统当前已经有许多 算法存在。但针对K歌App的音乐推荐算法并没有多少研究,相比于音乐电台 应用,K歌App的业务和数据都具有自身的独特的特点,需要研究分析传统的 推荐算法是否能够适用于K歌App,取得同样的推荐效果。(3)研究各个推荐算法在Spark平台上的并行化实现。Spark是一个新的分 布式平台,虽然Spark Mlib库对一些基本的机器学习算法有实现,但是对于推 荐算法来说需要自己编写算法的并行化版本代码予以实现。算法实现过程中还 需要考虑编程细节上的优化,以确保推荐系统的性能。(4)研究设计评估各种推荐算法的效果的方案并使用该方案进行评估。本 系统实现的推荐算法最好需要进行效果评估,包括离线实验和在线实验两部分 来综合判断算法的效果。1.4论文组织结构本文对各章的内容安排如下:第1章是本文的绪论,先是说明木项目的来源和意义,然后从算法理论和工 程实践两个方向对当前推荐系统现状作了说明。最后简要地介绍了木文的主要 工作。第2章对本项廿会使用的四种推荐算法作了较为全面的分析和说明,同时 对本项冃会用的Spark相关技术和MaxCompute做了介绍和说明。第3章开始对系统进行需求分析,包括功能需求和非功能需求。然后得出系 统的总体设计,包括功能结构设计,系统架构设计和数据仓库设计。第4章则是根据第3章的功能结构图,按功能模块分别叙述系统的设计与 实现。其中推荐引擎模块是本系统的核心模块,该部分最后对算法细节的优化 和性能进行了分析和对比。7哈尔滨工业人学工程硕士学位论文第5章则是先说明系统Spark集群的部署方式,然后介绍说明系统的测试流 程,包括功能测试和非功能测试。9第2章音乐推荐系统关键技术本章对本文中会用到的相关算法和技术进行简要介绍。2.1推荐引擎相关技术研究2.1.1推荐引擎概要介绍首先先简介推荐引擎的概念。维基百科中对于推荐系统的定义是:推荐系统 是信息过滤系统的一个子集,目的是预测用户对于一个物品的评分或者偏好等。 具体到本音乐推荐系统中的例子就是对于某个用户,预测该用户对于某个作品 的喜好程度。另外,和搜索引擎相比,推荐和搜索都是用户获取信息的手段, 形象地说推荐引擎被人们称为无声的搜索。用户不需要输入搜索查询词便能 得到自己关注的信息。推荐引擎是推荐系统的核心组成部分,它相当于一个黑 盒,接受输入的数据源,然后输出结果是用户可能感兴趣的物品集合。推荐引 擎的工作流程示意图如下所示:图21推荐引擎工作流程示意图推荐引擎的数据源包括物品的元数据,用户的基本信息和用户对物品的反 馈数据这三部分。用户的反馈数据分为显式的反馈和隐式的反馈。在本系统中, 用户的送礼和转发行为,就是属于显式反馈,因为它明确的表示了用户对某个 作品的喜爱程度,送礼行为由于和真实金钱挂钩,所以更是一种效果很强的显 式反馈。而用户对作品的听歌和浏览行为属于隐式反馈,这些是用户使用App 时记录下来的数据,也能某种程度上反映用户的喜好,但可能不是很准确,数 据存在很大的噪音。所以选择正确的用户行为特征,才能真实地反映用户的喜 好。实际推荐系统中,推荐引擎根据不同的推荐算法选取数据源中的部分数据, 分析出一定的规则然后构建模型,最后进行推荐的。哈尔滨丁业人学丁程硕士学位论文2.1.2推荐引擎相关算法研究推荐算法目前可以分为三大类:基于内容的推荐,协同过滤推荐和组合推荐。 协同推荐算法由于选取的物料数据和模型不同又有更多细的划分,具体如下图 所示。13图22推荐算法分类图本系统计划实现上图中的四类算法基于物品的推荐,协同过滤推荐,基于隐 语义模型的推荐和基于图模型的推荐。其中基于内容的推荐和基于邻域协同过 滤推荐,在算法流程上都有些相似,都是先得到特征向量,然后计算相似度, 最后进行推荐。如下图所示:图2-3基于内容的推荐和基于邻域的协同推荐的流程图下而更详细说明本系统中所采用的推荐系统的算法。(1)基于内容的推荐算法基于内容的推荐算法,即使用物品的元数据计算物品之间的相似度,然后根 据用户的历史行为给其推荐相似的歌曲。例如某用户听歌A作品,然后A作品 和B作品相似度很高,并且B作品用户未听过,那么就给用户A推荐B作品。 算法的优点在于能够较好预测用户的口味,提供质量较好的推荐,缺点在于存 在冷启动问题,对于新来的用户并不知道其历史行为,无法进行推荐。在音乐 推荐系统中,文献研究了使用音乐特征进行推荐的相关方法。本系统计划仅 使用歌词内容来作为物品的核心元数据来获取作品的特征。所以需要研究歌词 转化成特征向量的相关知识。将歌词转化成向量,需要用到自然语言处理(NLP)的相关技术。即N歌词 内容完全可以当成一篇文档来看待。具体来说,先需要对歌词文档进行预处理, 主要是分词并去除停用词等操作,这方而的技术已经十分成熟,有大量的现成 的并且开源框架可供使用。经过分词操作后,歌词文档就转化成了一个词语序 列。在表示文档的模型方而,NLP中有布尔模型,向量空间模型(VSM),概率 检索模型和n元语法模型等多种模型。文献对相关技术进行了分析和说明。 由于木系统是后面的计算是基于向量的,所以选择向量空间模型。向量空间模 型的假设是,一篇文档所属的类别仅与某些特定词或词组在该文档出现的频率 有关,与词组在该文档中的顺序或位置无关。也就是说,如果将构成文本的各种 语义单位(如单词、词组)统为“词项”,以及词项在文本中出现的频数称为“词 频”,那么一份文档中蕴涵的各个词项的词频信息足以用来对其进行正确的分类。 在向量空间模型中文本被形式化为n维空间中的向量D二(Wi,W2,Wt3,Wn)o 其中,Wi为第i个体特征的权重,如果特征项选择为词语,那么就刻画出了词在表 示文本内容时所起到的重要程度。由于经过预处理之后的特征词往往很多,中文的特征集通常能达到IO:大小, 其中有很多特征词并不对分类有利,且会增加文本表示的开销,造成维数灾难 等问题。所以通常要对文木特征集进行降维操作,通常有两种方式,一种是在 当前的特征集中选择最有利于类别区分的子集,即特征选择;还有一种是将当 前的特征表示转变成另一种形式的特征表达方式,即特征抽取,它们不再是原 始特征集的子集,往往是一种更高层次且更加抽象的表达方式。冃前,文本分类领域中传统的特征选择算法有:文档频率 (DoeumentFrequeney,DF)、信息增益(InformationGain,IG)、互信息 (Mutualinformation,Ml). *统计等。回特征提取利用某种方法从原特征集中 构造新的、合成的特征项,从而达到降低特征空间维度的目的。在文本分类方 面常用的特征抽取技术有:隐性语义索引(LSI)以及潜在狄利克雷分配模型(LDA) 等主题模型的方式。2随着深度学习的发展,卷积神经网络(CNN)】?勺以及基于 词向量的方法29】在文木特征抽取上也取得了很不错的效果。经过文本预处理,特征选择或特征抽取后,最终得到文本的向量表示。这 样就可以使用分类算法进行文本分类了,由于文本分类木质上是一种模式分类 的任务,所以许多经典的分类模型就可以应用到文本分类中。现有的文本分类 使用的模型主要有朴素贝叶斯、K近邻、支持向量机、决策树等方法。但这里推荐系统是为了使用歌词聚类。将作品根据歌词聚类后,便可以进行给用户推 荐相似的但其未听过的作品了。(2 )基于邻域的协同推荐算法基于邻域的协同推荐算法。它包含两类基于用户的协同推荐(User CF)和 基于物品的协同推荐(Item CF)。它们使用的数据都是用户的行为数据,具体 在这里所使用的数据就是用户的送礼数据和听歌行为数据。User-CF是使用数 据找用户的邻域,例如:用户A和用户B行为相似,认为他们屈于一类,然后 可以把B听过的作品但是A没有听过的推荐给A用户。Item CF和基于内容的 推荐类似,区别在于其使用的数据是用户行为数据而菲作品的元数据。协同过滤推荐的大致流程如图2-9所示,根据用户行为数据得到用户(物 品)的特征向量后,便可计算相似度,找到用户(物品)的最近邻集。常用的 相似度计算公式有1)余弦相似性(Cosine Similari):余弦相似度算法利用空间中两个向量 夹角的余弦值来衡量两个个体是否相似度。余弦相似度注重的是两个向量之间 的方向差异,而不是长度或者距离离上的。其了和了分别表示用户(物恥的特sim(i,j) = cos(i,j)二刖和2)皮尔森(Pearson)系数相似度:皮尔逊相关系数是度量两个对应的数列之间的线性关系程度,它的计算结果介于-1和1之间。当相关系数趋于-1 或1时,说明两个变量的线性关系很强;当相关系数趋近于0时,说明两个向量 之间的相关性很弱。R让和尺加分别表示用户i和用户j对物品c的评分。斤和 爲表示分别表示用户的平均评分。Xcwi : j(R 也- R i)(R 加- R j)(2-1)(2-2)征向量。sim(tj)=. 找到和似的用户(物品)集后,便可做Top-N推荐。User-CF是对某个用 户,看其相似的用户听过的作品中选取该用户未听过的作品进行推荐。Item-CF 和基于内容的推荐一样,对于某个用户听过的作品,找到和这些作品相似的但 是还没有听过的进行推荐。(3 )基于隐语义模型的推荐算法隐含语义分析技术从诞生到今天产生了很多著名的模型和方法,其中和该 技术相关且耳熟能详的名词有pLSA、LDA、隐含类别模型(latent class model) 哈尔滨丁业人学丁程硕士学位论文隐含主题模型(latent topic model) 矩阵分解(matrix factorization) o J0 341隐语义模型是最近几年推荐系统领域最为热门的研究话题,它的核心思想是 通过隐含特征(latent factor)联系用户兴趣和物品。隐语义模型的实现基础 是矩阵分解,它将用户及物品表示成向量形式,向量的取值由评分模式来确定 (一般以显式评分为主),通过矩阵分解将用户和物品映射到潜在因子空间,用户 -物品的关系则可以表示成该空间上的内积,形成语义上的关联。对评分矩阵R 分解成用户特征矩阵P和产品特征矩阵Q。即使用较低维的矩阵卩、Q的乘 积 来表示用户-产品评分矩阵,具体形式如式(2-3)所示:R = pr X Q(2-3)其中具体到每一个评分数据的表达式如式(2-4)所示:ru,i = PJqi = PukQuk(2 4)P, Q的值可通过对训练集数据进行学习后得到,即通过最小化RMSE对PQ进 行迭代,直至到达最优解。其中,损失函数(RMSE)的定义如式(2-5)所示:= u,ietrain(Tui PukQuk)2 IIPul|2 + 久I Mil F (2-5)其中a|pu|2 + XllqJI2是用来防止过拟合的正则化项,其中入为正则化参数, 一般可取O.Olo为了使上述的代价函数最小化,可以使用梯度下降算法对参数 P, Q进行迭代更新。由梯度下降算法可得,参数更新的公式如下所示。Puk = Puk +“ Qik(Tui Xk=l PukQik 入Pick)(丄一6)Qik = Qik +Puk(Jui Xk=l PukQik 久9认)(丄一7)其中G为学习速率,/“表示用户U有过行为的产品集合而仏表示对产品i有过行 为的用户集合。通过对产品相关矩阵Q的分析可以得出,Q中的每一项表示第i个产品在第 k个隐性特征上的权值,我们可以将其理解为第i个产品属于第k个隐类的权值。 在本系统用户对作品的送礼和转发是典型的显式反馈数据,能够直接作为用户 对物品的评分,所以无需根据隐性反馈数据来计算。如此计算后,便可以得到 用户对未产生过行为物品的评分。接下来可以应用协同过滤算法,找到该用户 的相似用户,在用户集群的的物品中,根据预测评分排序得到Top-N个物品,最 后进行推荐。使用梯度下降算法的基本隐语义模型算法在再具体实现上根据 Spsrk平台的编程特点,更适合使用批量梯度下降算法。即使用一批训练数据更 新矩阵。文献阴还提出了一种增加中间动量来改善LFM的精度和效率。(4)基于二分图模型的协同过滤推荐基于图的模型(graph-based model)是推荐系统中的重要内容。其实,很多 研究人员把基于邻域的模型也称为基于图的模型,因为可以把基于邻域的模型 看做基于图的模型的简单形式。常用图模型是二分图说,也有其它图模型用于 推荐系统皈。本文是使用二分图模型,需要将用户行为数据表示成图的形式。 用户行为数据可以是由一系列二元组组成的,其中每个二元组(u, i)表示用户u 对物品i产生过行为。这种数据集很容易用一个二分图表示。令G (V, E)表示用户 物品二分图,其中V由用户顶点集合和物品顶点集合岭组成。对于数据集中每一个二元组(u, i),图中都有一套对应的边e(vu, ),其中 Vy是用户u对应的顶点,viEVI是物品i对应的顶点。图2-18是一个简单的用 户物品二分图模型,其中圆形节3点代表用户,方形节点代表物品,圆形节点和 方形节点之间的边代表用户对物品的行为。比如图中用户节点A和物品节点a、 b、d相连,说明用户A对物品a、b d产生过行为。adb图24用户行为数据转化成二分图模型示意图基于图的算法有很多,本系统计划使用的一种是基于随机游走的 PersonalRank算法。假设要给用户u进行个性化推荐,可以从用户u对应的节点 W开始在用户物品二分图上进行随机游走。游走到任何一个节点时,首先按照概 率a决定是继续游走,还是停止这次游走并从Vu节点开始重新游走。如果决定继 续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一个节点作为 游走下次经过的节点。这样,经过很多次随机游走后,每个物品节点被访问到的概 率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。将上面的描述表示成公式,可以得到如下公式:PR(v)=(2-8)a 丫阮吨)I爲J)l (v H %)(1 一 alpha) + a Setn(v)W = %)简单的使用Personal Rank算法在所有用户和物品上计算可能时间复杂度太 高。一种方法是减少迭代次数,在收敛之前停止迭代。还有一种是将其转化为 矩阵运算形式。令M为用户物品二分图的转移概率矩阵,即:M(v, ir)15那么迭代公式可以化为r = (1 a)r0 + aMTr解出方程得到r = (1 a)(l aMT)1r0只需要计算一次(1 -矩阵即可,需要注意的是(1 - aMTyr是稀疏矩阵。稀疏矩阵求逆有成熟的算法和工具使用。(5)组合推荐组合推荐是指综合各种推荐算法进行推荐。由于各个推荐算法都有自己的 优缺点,综合考虑算法可以达到取长补短的效果。组合推荐三种模型如图2-5所 示:单一模型,并行模型以及管道模型。单一模型是把所有推荐算法整合到一 起,只有一个输入和输出。并行模型是指每个推荐算法的有各自的输入和输岀, 对各输出结果进行加权,交叉等操作组合在一起后输出。管道模式是指将各推 荐算法按管道的方式串联起来。39本文采取并行模型的方式将基于内容的推荐和基于物品的协同推荐算法组 合起来设计并实现了该组合推荐算法。由前面叙述可知,基于内容的推荐和基 于物品的协同推荐这两种算法都需要计算物品之间的相似度。区别在于基于内 容的推荐使用物品的自身属性数据,例如:歌词,评论数,点赞数等等;而基 于物品的协同推荐使用的是用户的行为数据,例如:用户对某首歌听了多久。 由此,便可以将两种方法计算的相似度使用式(29)加权平均的方式得到新的 物品之间的相似度,然后进行推荐。(2-9)心W+入2W2 +入nW*入1+入2 +入口哈尔滨丁业人学丁程硕士学位论文偷入一融合的推荐引擎输川_单一模型并行模型管道模型图25组合推荐各模型示意图2.2 Spark平台相关技术2.2.1 Spark平台简介Spark是一个基于内存的分布式计算系统。当前Spark生态系统的主要组 件如下图所示,包括 Spark SQL, MLib, Spark Streaming 和 GraphX。Spark SQL 用户查询数据,可以读取本地文件和HDFS中的文件,通常为文本类型或者 Parquet类型。Spark Streaming是基于Spark的分布式流处理框架,与之实现相 似功能还有Storm和Apache技术】。Mlib是Spark的常用机器学习算法库, 目前有支持向量机,决策树,朴素贝叶斯,K-means等算法。GraphX是Spark 提供的分布式图计算框架。Spark SQLSparkStreamingMLlib (machine learning)GraphX (graph)Apache Spark图2-6 Spark基本组件概览图Spark 的核心之一是弹性分布式存储(Resilient Distributed Datasets, RDD) 42,它是Spark对分布式内存进行的抽象,使用者可以像操作本地数据集一样 操作RDD,从而可以将精力集中于业务处理。在Spark中所有的数据操作都是 基于RDD的。数据尽可能放在内存中,来解决MapReduce读写磁盘产生大量 开销问题。即便RDD中的部分分区信息丢失,Spark也能通过日志信息进行重 新构建。Spark的部署模式有三种:Standalone模式,YARN模式,Mesos模式呵。 Standalone模式Spark自身提供的带有简单封装脚本的模式,可以只运行在一台 机器上用于测试。YARN模式和Mesos模式是第三方提供的集群资源管理模式。2.2.2 Spark编程模型和原理概述本文实际对Spark平台使用上采取如下方案,首先数据存储上仍然使用 Hadoop的HDFS分布式文件系统进行存储。然后Spark支持的语言接口有Scala、 Java、Python和R。本项目选择Python语言进行开发。另外Spark的部署模式 上有Standalone Mecos和Yarn模式。本系统使用Yarn方式进行部署。所以本 项目用到的Spark技术如图2-7所示。其中Spark提供了四种语言的API,Java, Scala, R和Python各个语言各有其优缺点,由于Spark用Java开发的原因,使 用Java和Scala会更容易和Spark交互,使用R和Python的优点在于能够方便 的使用现成的计算库。由于公司技术栈等原因,本项冃使用python语言。并且 所有的算法均使用python3版本编写。Spark当前有两套编程模型,分别是RDD和Dataset/Spark sql。在当前的 Spark2.3版本,官方文档已建议使用Dataset/Spark sql这套编程模型,并且Spark Mlib中用RDD实现的部分己进入维护模式,计划3.0移除。所以本项目中算法 实现都主要使用Dataset/Spark sql编程模型,只在很少的地方如:读取文本文件 和使用向量类型列计算的地方使用RDDo Spark Mlib是Spark的算法库,包含 了许多常见的机器学习算法,本项目会在某些算法使用其Vector (向量)类型, 算法上只在在计算TF-IDF时会直接调用其提供的APL实际上,该MLib库与 推荐系统有关的只有一个ALS(最小二乘法)。所以本项日算法都是需要自己根 据实际情况进行编写的。接口语言PythonSpark编程APISpark MlibRDDYarn 集 群管理Drilaset/Spcirk sql1IDFS图2-7本系统用到的Spark技术Spark上计算依赖于Hadoop的HDFS的分布式存储系统,算法的输入文件 和输出文件的主要存储方式还是存储在HDFS上。另外关于Spark集群环境的 管理,Spark本身支持Standalone, Yarn, Mesos和Kubernetes四种集群管理方 式。本项冃决定使用的是Hadoop的Yarn方式来管理Spark的集群任务。下面简要说明程序在Spark上的工作原理,理解原理能够帮助我们更好的实 现算法。Spark是一个分布式框架,由多个节点组成一个Spark集群。Spark会 在节点上启动两种进程执行代码,它们分别是driver和executor。当我们以yarn client模式提交Spark代码时,提交的节点机器会启动driver用yarn-cluster模 式提交Spark代码时,由Yarn负责选择和管理作为driver和executor的机器。 Driver和Excutor在Spark中的分布情况如图2-8所示。Yarn集群模式下会随机 选择一台机器作为Driver节点用于执行主程序;当主程序运行到count,show,等 会触发shuffle操作的算了时,Spark会生成一个Job来执行。Spark会进一步把 一个Job经过解析后划分成更小的task,分配到各个节点机器(包括driver机 器)启动Executor来计算。当Executor计算完成后的数据会返回到driver中用 于后续代码的执行处理。19哈尔滨工业人学工程硕士学位论文spark集群节点1driverExecutor节点2Ex ecu totEx ecu tor节点iEx ecu totEx ecu tor图2-8 Spark的Driver和Excutor分布示意图由于使用python API调用spark的接口 ,还需要对pyspark44的运行机制有 所了解。其运行原理如下图所示。显然pyspark不是用python重新实现了 spark, 而是直接调的java程序。在driver节点上,python使用py4j这个包实现python 语言访问JVM,调用java代码。Py4j的工作需要python和jvm都开启 GatewayServer,然后相互之间用sockets传递数据。这个过程是很慢的,所以需 要注意把数据拉取到driver节点的操作代码实现。在worker节点上,会进行加 载python代码模块等初始化工作,然后开启子进程的python程序执行。所以需 要注意代码里加载python库的代码得放到Spark初始化代码之后,否则会出现 找不到的情况。#哈尔滨工业人学工程硕士学位论文Data FlowPython J JVM图2-9 pyspark运行原理然后关于Dataset/Spark sql编程模型。按照Spark官方文档所说,Dataset是 分布式数据集合,是spark 1.6版本添加的优于RDD的新接口。Dataframe贝I是 有命名列的Dataset,从表面可以把它当做和关系数据库里的表等价的东西。 python没有对Dataset的API支持,但实际上由于动态语言的特性,大部分操 作都能做o Dataset/Spark sql编程模型,某种以上来说就是在用标准sql写算法, Dataframe有相应的函数API, Spark sql则是标准的sql语法。具体到代码里举 例来说,可以定义好sql字符串,然后调用SparkSession变量的sql函数执行 sql,也可以在DataFrame对象上调用select, count, groupby等sql函数。本系 统在具体实现时两种方式混合使用,使用sql语句可直接使用已有经验,但是需 要对待查询的DataFrame对象创建视图,而使用sql函数在使用UDF (用户自定 义函数)时会更加方便。与Dataset/Spark sql编程模型相比,RDD则还是传统 MapReduce操作,在代码体现上为map和reduce函数。用RDD实现两个 DataFrame的join操作时需要经过多次map和reduce,代码会复杂许多。当前 Spark Mlib(Spark的算法库)里官方文档已经不再更新基于RDD实现

温馨提示

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

评论

0/150

提交评论