基于主题模型的餐馆推荐算法分析研究计算机科学与技术专业.docx
前言11.1 研究背景及意义21.2 相关研究及现状31.3 论文的工作与组织结构4第2章相关理论介绍52.1 主题模型概述52.1.1 主题模型简史52.1.2 1.DA简要介绍62.1.3 LDA模型推断72.2 推荐算法概述72.2.1 基于邻域的推荐82.2.2 基于内容的推荐82.3 推荐系统评估8第3章基于主题模型的餐馆推荐算法103.1 主要任务103.2 餐馆推荐模型113.2.1 问题的形式化表述113.2.2 餐馆推荐LDA模型123.2.3 基于主题模型的推荐143.3 实验与分析143.3.1 数据预处理143.3.2 实验及结果分析15第4章搭建推荐展示系统194.1 系统的需求分析194.2 系统的设计实现194.2.1 相关技术介绍194.2.2 系统的实现204.2.3 系统的运行演示21第5章总结与展望235.2工作展望23参考文献25摘要现如今推荐系统可见之于人们的生活中的方方面面。无论是阅读、购物、电影还是音乐,都能看到个性化推荐的影子。而随着互联网+的提出和发展,互联网+餐饮服务也渐渐成为一个热门的服务领域。将推荐系统应用于餐馆推荐也因此成为推荐系统的一个热门的应用方向。餐馆推荐,简单来说就是要根据用户的历史到访记录,分析和预测用户可能喜欢的餐馆,并向用户做推荐,以此来帮助用户在各色各样的餐馆中找到自己喜欢的餐馆。经典的推荐算法,比如说协同过滤算法,完全可以用于进行餐馆推荐,而且也应该能取得不错的效果。但是本文并没有采用经典的推荐算法,而是提出了一种基于主题模型的专门用于餐馆推荐的算法。该算法综合考虑了用户的评论和位置信息,能够根据用户的历史评论记录和到访记录对用户进行餐馆推荐。由于主题模型能够将餐馆数据映射到低维的主题空间,因而能够挖掘餐馆之间的隐含联系,同时在一定程度上也能够缓解数据稀疏的问题。此外,主题的词分布还能为推荐提供良好的解释。最后,经过设计实验将模型应用于Yelp数据集做推荐,证实了本文中所设计的推荐算法的有效性。除此之外,为了方便展示,本文还设计实现了一个推荐展示系统。该系统实现了一个完整的前后台数据交互的过程,能够在前端页面上为相应的用户展示其推荐结果信息。该系统使用SerVIet作为后台程序,采用经典的AjaX技术实现前端页面与服务器的数据交互,并调用了百度地图APl用于将餐馆的位置数据在地图上可视化。关键词:推荐系统;主题模型;LDA;餐馆推荐AbstractRecommendersystemcanbeseeneverywhereinpeople'sallaspectsoflives.Whetheritisreading,shopping,moviesormusic,youcanfindtheapplicationsofpersonalizedrecommendations.And,withthedevelopmentoftheInternet+,Internet+cateringservicehasgraduallybecomepopular.Atthesametime,applyingtherecommendersystemtotherestaurantrecommendationisalsoapopulardirectionoftheapplicationofrecommendersystem.Therestaurantrecommendationistoanalyzeandpredicttherestaurantsthattheusermaylikebasedonthehistoryoftheuser'sreviewsandvisit,andmakerecommendationstotheuser,soastohelptheuserfindhisfavoriterestaurantinavarietyofrestaurantlists.Classicalrecommendationalgorithms,suchascollaborativefilteringalgorithms,canbeusedforrestaurantrecommendationsaswell,andmaybehasagoodperformance.Inthisarticle,wedonotusetheclassicalrecommendationalgorithm,instead,wedesignarestaurantrecommendationalgorithmbasedonthetopicmodel.Thealgorithmtakesintoaccounttheuser,sreviewsandlocationinformation,andrecommendtherestauranttotheuseraccordingtotheuser'sreviewsinthepast.Sincethetopicmodelcanprojectrestaurantdatatothelow-dimensiontopicspace,itcanfindthelatentconnectionsbetweenrestaurants,andtoacertainextent,canalsoalleviatetheproblemofdatasparsity.Inaddition,thedistributionofwordsdrawnfromtopicscanprovidegoodexplanationsforrecommendations.Finally,themodelisappliedtotheYelpdatasettorecommendrestaurantsforusers.Andbyexperiments,weprovetheeffectivenessofthealgorithm.Besides,fortheconvenienceofdisplay,Ialsodesignandimplementarecommendationdisplaysystem.Thesystemmakesitpossiblefordataexchangebetweenthefront-endandback-end.Itcanshowuserstherecommendationresultsonthefront-endwebsite.ThesystemusesServletasback-endprogram,andappliesAjaxtoachieveinteractionbetweenfront-endwebsiteandback-enddatabase.,andcallstheBaidumapAPItovisualizethelocationdataofrestaurantsonthemap.Keywords:RecommenderSystem;TopicModel;LDA;RestaurantRecommendation从Web1.0到Web2.0,甚至是到以后的Web3.0,互联网行业的正以人们意想不到的速度蓬勃发展着。这期间,整个IT互联网行业已经发生了天翻地覆的变化,而它也同时给人们的生活带来了日新月异的改变。然而,凡事皆有利弊。由于互联网的飞速发展,在人们享受其所带来的便利的同时.,也需要应付其带来一些不良的“副产物”。信息过载就是这些“副产物”的其中之一。信息过载简单来说就是人们或系统需要处理的信息已经超出了其所能承受的范围。如今,信息量正呈几何级数增长,而这些信息中真正有价值的却不多,甚至还有可能充斥着大量的虚假、冗余信息。而这大大增加了挖掘有价值信息的成本。推荐系统就是一种可以用来应对信息过载问题的工具和策略。推荐系统只关注用户感兴趣的数据,因而可以过滤掉大量无关的数据,这正好迎合了人们从海量数据中获取有价值的信息的需求。特别是随着人工智能的发展,在推荐算法领域新加入的机器学习算法使得推荐系统越来越人性化,推荐质量也变得越来越高。第1章绪论1.l研究背景及意义当今时代科技飞速发展,特别是随着计算机和IT互联网行业的发展,信息量正呈爆炸式的增长。一方面人们享受着信息技术发展所带来的便利,另一方面又在被“信息爆炸”所困扰着。如何从海量信息中挖掘有价值的信息,以及如何剔除大量的垃圾信息成了亟待解决的事情。此外,人们在做决策时往往需要数据来做支撑,大量鱼龙混杂的虚假信息严重干扰了支撑数据的可靠性。人们发现在信息越多的情况下做决策反而越难了。正如哲言所云,少即是多。人们需要的是精简的、可靠的、完整的数据,而不是庞杂的、错误的、缺失的数据。针对上述问题,推荐系统(ReCommenderSystem)应运而生。现有的推荐技术已经有很多,其在现实生活中的应用也是随处可见。但无论哪一种推荐技术,其要解决的根本问题无非就是分类问题,即将用户眼前的信息分为用户感兴趣的和用户不感兴趣的信息两类。分类的方法虽然多种多样,但最重要的是分类的标准和类别。传统的分类过程需要人为地给出分类的标准和分类的类别。而人工分类的过程既昂贵又容易出错。时常会出现分类界限不清晰,分类标准模棱两可等问题。主题模型(TopicModel)就是一种用于挖掘文本中潜在主题的模型。可以用于解决上述问题。将推荐系统应用于餐馆推荐已经不是什么新鲜事了,像国内的美团、大众点评网站都在其网站上设有相应的推荐板块。传统的搜索引擎可以帮助用户查找特定需求下的餐馆信息,但推荐系统可以更进一步地挖掘用户的潜在需求。很多情况下用户无法表达自己的明确需求,这时候就是推荐引擎派上用场的时候了。在考虑选择哪一种推荐算法的时候,首先想到的就是应用最广泛的协同过滤算法。但是协同过滤算法虽然简单高效,但是它却不能有效利用用户的评论信息。考虑到这一点,本次实验利用LDA(LatentDirichletAllocation)主题模型对用户评论数据进行建模,找出用户的潜在主题分类,然后再据此对用户进行餐馆推荐。经评估,该系统在保证较好的推荐准确度的同时,也在一定程度上解决了数据稀疏等问题。1.2 相关研究及现状推荐系统的出现到现在也就不过三十年的时间。虽然时间不长,但是由于互联网和电子商务的发展,推荐系统也由此得到了飞速的发展。虽然现在推荐系统技术已经得到了长足的发展,但是还远未达到可以称作是成熟的程度。一些经典问题,诸如稀疏性和冷启动等问题仍未找到有效的解决方法。周涛曾提到,个性化推荐仍然面临着包括脆弱性、评估难题、数据稀疏性、冷启动、大数据处理、多样性与精确性等十大问题【。而刘鲁等人也提到,在未来推荐系统的研窕方向也将会集中在如何将数据挖掘技术应用于推荐系统、进一步改进推荐算法的性能、以及推荐系统的评价研究等几个方向口叫推荐系统仍有很长的路要走。此外,由于近年来移动终端设备的火热发展。出现了一种基于位置的推荐,它通过分析用户上传的位置信息,分析用户的兴趣,为其推荐用户位置附近的事件。这极大地方便了智能手机用户,因此也成为了学术界关注的热点,预计未来在基于位置做推荐的方向上还将会有更多的成果出现。本文中所做的餐馆推荐也是属于基于位置推荐的一种。随着人工智能的发展,人们开始将目光转向将机器学习算法应用于推荐算法。主题模型是一个在本世纪初被提出来的概率统计模型。它可以用于发现文章中的潜在主题。基于这一点,我们可以不仅仅将主题模型应用于自然语言处理领域。我们可以将对词的统计改为对像素的统计,从而把主题模型应用于图像处理领域。把词的统计改为商品信息的统计,从而可以把主题模型应用于推荐系统等。提到主题模型,通常人们想到的就是LDA,虽然主题模型有很多种模型,但是主题模型真正进入人们的视野恐怕就是要从LDA的提出开始的。此后的诸多主题模型基本都是基于LDA进行改进的。现在对LDA的研究可谓是百家争鸣,有基于LDA做信息检索的、有基于LDA做图像处理的、有基于LDA做推荐的,甚至有人还把LDA应用于生物信息学等其他学科领域。近年来将LDA应用于推荐系统的也数见不鲜。连LDA的作者Blei本人也参与提出了一种用于科学论文推荐的基于协同过滤和主题模型的推荐方法。目前,LDA在推荐领域的应用已经涉及到文章、社交网络、地理位置、广告等各个方面。1.3 论文的工作与组织结构本文各章节的组织结构如下:第1章绪论本章主要讲述了推荐系统的背景和研究意义。解释了为什么需要推荐系统,以及研究推荐系统的意义,包括本文设计的餐馆推荐系统能解决什么样的问题。然后就是简要阐述了一下,目前推荐系统和主题模型的研究现状。第2章相关理论介绍本章主要介绍了与主题模型和推荐系统相关的理论作为后续章节的铺垫。对于主题模型,分别从主题模型的发展史,以及主题模型的原理角度进行介绍。对于推荐系统,分别从推荐算法和评价指标等方面进行介绍。第3章基于主题模型的餐馆推荐本章正式介绍了本文所设计的基于主题模型的餐馆推荐算法。其核心就是一个LDA模型。主要内容就是围绕着这个模型展开的。具体介绍了算法主要解决的问题、模型的定义、训练模型所用的数据集、以及实验结果等。第4章搭建推荐展示系统本章的主要内容是介绍为展示推荐结果而搭建的推荐展示系统。该系统能够将用户的访问记录及推荐结果展示到前端页面上。第5章结论与展望本章总结了本次实验主要的研究内容和所取得的主要成果,同时也对今后的工作和研究内容做进一步的探讨与展望。第2章相关理论介绍目前最常见的主题模型可能就是隐含狄利克雷分配(LatemDirichletAllocation,LDA)了,LDA是在2003年由BIei等人提出也是一种改进了的PLSl(ProbabiIiStiCLatentSemanticIndexing,PLSI)o推荐系统则可以被看作是一种信息过滤机制,其旨在挖掘用户的偏好,将过滤后的物品推荐给用户。本章也将主要介绍这两方面内容,首先介绍的是主题模型,然后再对推荐系统和推荐算法做简单介绍。2.1 主题模型概述本节将首先简单地介绍一下主题模型的发展史,主题模型从诞生到发展至今天是一脉相承的,了解主题模型是怎么发展的有助于对后面LDA知识的理解。之后本文再简单介绍一下LDA的基础知识,这将有助于理解本文后面提出的用于餐馆推荐的LDA模型。2.1.1 主题模型简史1998年,Papadimitriou等人在一篇论文中提出了潜在语义索引(LatentSemanticIndexing,LSDo潜在语义索引简单来讲就是通过找出文本集合中的共现词。对于两个词,如果它们频繁出现在同一篇文档中,就可以认为这些词是语义相关的。通过这样做,可以将两个计算机“看起来”不怎么相似的词,通过语义的方式联系起来,这样在检索时就可以不仅仅是检索关键词了,还可以通过其语义相关词进行检索。1999年,Hofmann等人在LSl的基础上,提出了一个被称作概率潜在语义索引(ProbabilisticLatentSemanticIndexing,pLSI)的模型,也被称作概率潜在语义分析(Probabilisticlatentsemanticanalysis,pLSA)o这个模型将文档和词之间的语义维度用一组对应到词典上的词概率分布表示。也即可以将其看作是主题,文档中的每个词都是由主题的词分布生成的。2003年,Blei等人提出了隐含狄利克雷分配(LatentDirichletAllocation,LDA)o此后的诸多主题模型大多是以LDA为基础进行改进的,本文所要介绍的基于主题模型的餐馆推荐算法也是基于LDA设计的模型。LDA是一个生成统计模型,它的想法类似于pLSA,将文档视为是由各个隐含主 题的混合。不同于PLSA的是,在LDA中主题分布有一个稀疏的狄利克雷概率先验。 在这个做法背后的直觉是,一篇文档通常只包含几个主题,而这几个主题又是由少数使用频率较高的词所表示的。LDA认为一篇文档是按照如下方式生产的:DocumentsTopic proportions andassignmentsTopicsSeeking Life,s Bare (Genetic) NecessitiesCOI t> SPRIS<. HRfK)*. " Y,*UyUQfM - vmbbhb tMVw! ,vk « tr. : I V"hc."ru*»pu <nc rv> ¼<* Wh r,cvth t *ls *ByjntHi5 K- t.Jh* :父Uw v life h<ntrrf*J Bf* J5 d' Tbr<hf r*M4Kur n.f*.l >vw / bn *t <mpc 4r.hc 4fl Ei fnu<cJ th>t 1*e tha<c*M 工,WtrfV*rvru* <Jthc ;-hf'IA? >AJn*r he h Alh H IhC nmhrr< mucch pfvctvh. th. w fi icn in IWtlL. ManLitvJ.图21LDA生成一篇文档的过程我们假设有一定数量的主题,这些主题可以由一些词的概率分布所表示。1 .从主题分布9中选择一个主题Z。2 .从对应该主题z的词分布中选择一个词W03 .重复这一过程,直到生成整篇文档d。这一生成过程可以如图2.1所示。图中右边的直方图就可以看作是主题分布,不同的颜色对应着不同的主题。而图中左边是主题的词分布,文档中每一个词就是根据对应主题的词分布所生成的。而实际应用中我们需要做的是上述过程的逆过程,即在给定一篇文档不知道其主题的情况下,如何推断出文档中隐含的主题。LDA就是基于这样的逆过程来工作的。对于上述逆过程,我们可以使用LDA的图模型来进行表示。1.DA的概率生成过程是这样的。为了方便形式化表述,对于一篇文档d,它其中的每一个词W都是词典V中的一个词。假设这篇文档有K个主题,则这篇文档可以表示为这K个主题的主题分布o而每个主题z都可以表示成词典V上词的概率分布中。因此一篇文档的形式化表述如下:1 .采样Dir()2 .对于文档d中的每一个词w:(a)选择一个主题ZMUltinOmial(O)(b)从主题Z的多项式词分布P(WnlZn,p)中选择一个词W2.1.3LDA模型推断有了模型,接下来要做的就是模型推断。LDA的模型推断可以看作是一个求最优化的问题,但由于求解过于复杂,因而无法使用精确推断方法,只能使用近似推断方法。LDA常用的近似推断方法主要有变分推断方法和Gibbs采样方法。Blei等人在论文中进行LDA模型推断采用的就是变分推断方法。而Gibbs采样是一种基于MarkovChainMonteCarlo的采样方法,该方法由于算法简单,易于实现也被广泛应用于LDA模型的推断。2.2 推荐算法概述推荐算法是推荐技术的核心,常见的推荐算法有基于邻域的推荐算法,基于内容的推荐以及基于图模型等方法。后来随着概率统计和机器学习算法的发展,越来越多的机器学习算法被加入到推荐算法的大家族中。虽然如今新的算法层出不穷,但是经典的推荐算法依旧长盛不衰,被广泛应用。2.2.1 基于邻域的推荐基于邻域的算法也即协同过滤算法,是推荐算法领域最经典也是目前最被广泛应用的算法。主要包括基于用户的协同过滤、基于物品的协同过滤和基于模型的协同过滤。基于用户的协同过滤的核心思想是为目标用户找相似用户,相似的标准可以是相似的浏览记录、购买记录、收藏记录等。然后以这些用户为基础,为目标用户推荐其相似用户感兴趣的物品。基于物品的协同过滤的核心思想是为目标用户找与其喜欢的物品相近似的物品集合,作为推荐结果推荐给用户。虽然原理很简单,但其效果却很明显。该算法可能是目前业界应用最为广泛的算法。基于模型的协同过滤就是利用训练得到的模型进行推荐。常用的模型有LSI、贝叶斯网络等。因此,本文中的基于LDA进行推荐的算法,可以看作是基于模型的推荐方式。2.2.2 基于内容的推荐基于内容的推荐不像基于邻域的算法那样具有一定意义上的普适性。它需要根据物品的特点,选择合适的算法找出物品间的相似性,或者对用户和物品进行分类,然后再在对应的物品或类别集合中找相应的物品进行推荐。通常系统会为用户的偏好建立一个配置文件,然后根据物品的描述、特征,找到与用户配置文件中偏好相似的物品作为推荐结果。2.3 推荐系统评估由于推荐结果的好坏是个很主观的,不易于考量的问题。这给如何衡量推荐系统的有效性增加了难度。目前,总的来说有三种类型的评估方法:用户研究、在线评估和离线评估。用户研究通常就是向用户展示不同推荐算法产生的推荐结果,由用户决定推荐结果的好坏。由于需要用户的参与,这决定了它的规模难以做得很大,而这容易造成样本数据不够全面的缺点。在线评估通常以A/B测试的形式展开,系统的开发人员通过将应用不同算法的页面展示给产品的用户,记录用户在使用的过程中所做出的选择。然后通过转化率和点击率等手段衡量推荐系统的好坏。而一般对于学术研究而言,没有那么一个真实的系统环境和大量的用户。因此,多是采用对推荐系统进行离线评估的方式。离线评估可以通过将用户历史数据划分成训练集和测试集的方式进行。然后用事先定义的指标来评估算法的推荐结果。不同的推荐系统有着不同的推荐任务。其中有一类系统需要提供给用户TopK推荐的服务。而本文中设计的推荐算法也是要对用户进行TOPK推荐,因此有必要了解一下TopK推荐任务的做法和评价指标。简单来说,一个推荐系统需要给用户提供一个推荐列表,而这个推荐列表的里物品的数量如果为K的话,那么对用户的推荐就是TOPK推荐。常见的K取值可以有5、10、15等。而对于TopK推荐的评测指标通常有准确率(PreCiSiOn)和召回率(recall)。为了形式化地说明这两个指标的计算方法,定义U为所有用户的集合,定义rec(u)为算法根据用户在训练集上的数据计算出来的物品推荐列表,定义test(u)为用户测试集上的物品列表。这样的话,准确率就可以按照如下公式2.1计算:V,rec(u)ntest(u)Precision=U6-(式2.1)力/re&u)I召回率可以按照公式2.2计算:Y1.1rec(u)ntest(u)|Recall=-=L(式2.2)./test(u)I在本次实验中对设计的模型进行评估的方法就是使用准确率进行评估的。除此之外,常见的推荐系统的评价指标还有多样性、覆盖率、新颖度、惊喜度等,这里就不做一一介绍了。总而言之,就目前来说,推荐系统的评价问题仍然是一个有待进一步研究的问题。只能根据特定的系统选择合适的评估方法,然后将评估结果作为一个参考依据。第3章基于主题模型的餐馆推荐算法在本章将正式介绍一个基于主题模型的餐馆推荐算法。本章将首先从问题定义来展开,即需要确定算法的输入输出,明确算法设计的主要任务。然后是正式介绍本文中设计的LDA模型,这个模型综合考虑了用户的评论信息和位置信息进行推荐。最后就是以这个模型为基础,设计实验,训练用户的评论数据,然后进行推荐。3.1 主要任务随着互联网和移动设备的发展,越来越多的人喜欢通过访问像Yelp、美团和大众点评等网站去发现美食和自己喜欢的餐馆。并且,绝大多数的用户在到访一个餐馆后往往喜欢在相应的网站留下评论信息,来表达自己对已访问餐馆的评价。而这些评论信息可能表达了用户对餐厅的喜好,也可能是用户对餐厅的一些描述信息。例如评论:“这家西餐厅的环境好,牛排很好吃,强烈推荐”。从这句评论中就可以看出,该餐厅是一家西餐厅,餐厅环境好,而且牛排做的很好吃,并且该用户对于这家餐厅十分满意。这样的话,系统便可推知该用户的喜好,下次再给这个用户做推荐时,可以以此作为参考进行推荐。此外,一条评论信息除了包含用户的评论,还同时包含地理位置信息,以及时间等信息。可以考虑利用这些信息进行推荐。通常,在现实生活中用户的活动范围几乎是固定的,而且在相当长的一段时间用户的活动范围都不会改变。例如:一名苏州大学的在校生通常的活动范围也就是在位于苏州市姑苏区的苏州大学附近。这名学生几乎不可能跑去苏州吴江区或者其他地方就餐。因此,这名学生的美食网站的评论信息应该大部分是围绕在苏州大学这个区域活动的。所以,下次给这名学生做推荐时,应该结合其偏好给这名学生推荐在苏州大学附近的餐馆信息才比较合理。通过上述的分析,不难发现,本次实验的主要任务就是设计一个模型,它利用用户的评论数据作为训练数据。该模型能够综合考虑评论的内容以及评论的位置等信息,然后为相应的用户输出对应的推荐结果。输出图3.1模型的输入输出这个模型的输入输出可以参考图3.1。如图所示,模型的输入是带位置信息的评论,而输出是餐馆的推荐列表。模型的主要原理如图3.2所示。即系统将根据用户的评论,利用LDA模型进行分类,得到不同的主题分类。然后根据用户评论所属的分类找到该分类下其它用户未访问过的餐馆作为推荐结果推荐给该用户。3.2 餐馆推荐模型3.2.1 问题的形式化表述在确定了模型的输入输出后,需要对输入的数据进行进一步的形式化的定义。假设我们拥有的所有的用户集合定义为U,集合U中的每个用户u都有一定数量的评论。所有用户的评论组成的集合定义为D,把属于每一个用户U的评论数目定义为Duo另外,把用户U的第d篇评论中的词数定义为Nug用Z代表主题的数量。一个完整的输入输出变量的说明如表31所示。表3.1变量的定义变量定义D用户评论的集合Du用户U评论的数量NUd用户U的评论d中的词的数量V所有词的总数Z主题的个数U用户的个数I位置的个数Zu.d将用户U所写的第d篇评论指定给某一主题Ii位置i的经纬度坐标iu,d用户U所写的第d篇评论的位置WUan用户U所写的第d篇评论的第n个词322餐馆推荐LDA模型根据问题的描述,本实验需要设计一个LDA模型,模型中引入用户的评论信息和位置信息。因此,参考上述的变量定义,模型中的可观测变量是评论中的词WUdn和评论的位置iu,d。主题是隐含变量,可以用Zu,d表示用户U所写的第d篇评论被指派的主题。用Bu表示用户的主题分布。分别用6z和z表示主题的位置分布和主题的词分布。完整的参数说明参见表3.2。表3.2参数定义参数定义U用户U的主题分布Z主题Z的词分布z主题Z的位置分布为了更直观的说明本实验所设计的模型,我们可以参见图3-1所示的餐馆推荐LDA模型的图模型。图3.3餐馆推荐LDA的图模型图中圆圈表示变量,其中被涂成灰色的圆圈表示已知变量,即观测数据位置i和词W。方框右下角的角标表示方框内结构的重复次数。因此,对于上述的图模型,一篇评论d的生成过程可以表述为:对于用户集合U中的每一个用户U,根据其主题分布OU采样ZMultinomial(u)o然后对于Du个评论中的每一个评论,采样i-Multinomial(z),生成一篇包含位置i的评论;采样wMultinomiaK,),循环采样W次生成一篇包含W个字的评论。这正好就是模拟了人们平时在写评论时的思路:即写评论前先选几个与这个餐厅有关的主题,例如“中餐”,“饮品”。然后再根据这些主题选择合适的措辞来形成一篇评论。例如:“这家餐馆的狮子头真好吃,茶水也很香!”。由主题“中餐”生成“狮子头”等词,而由主题“饮品”生成“茶水”等词,从而生成一条评论。同时,由于模型中同时引入了评论和位置信息,这使得不同的餐馆可以通过语义层联系起来,而不是单纯的依靠地理位置信息。如果简单地推荐用户活动范围附近的餐馆,这就忽略了一些语义信息。因为虽然两家餐馆离得近,但是有可能这两家餐馆的风格迥异。而利用LDA模型,对用户的评论信息进行建模可以很好地考虑餐馆的语义信息,而不至于为一位喜欢中餐的用户推荐其上次去过的中餐馆旁边的西餐厅。323基于主题模型的推荐模型已经设计出来了,现在的任务就是利用该模型,对用户为访问过的餐馆进行推荐,生成TOPK的推荐列表。具体来说,可以将用户访问餐馆的数据分成用于训练模型的训练集和用于测试推荐结果的测试集。用训练集训练模型,然后用这个模型计算用户访问餐馆的概率值。对这个概率由高到低排序。由于要推荐的是用户未访问过的餐馆,因此在排序列表中去掉用户访问过的餐馆,对剩下的取TOPK的餐馆作为推荐结果,推荐给用户。用户访问餐馆的概率可以用公式3.1计算:zZp(IJr)OC2Li,Z)=XP(ZI")XpwIz,7)Xp(Iz,,)(式3.1)ZZ因此,进行TOPK推荐的话只需要将夕(,沙)降序排序,取最高的K个值作为推荐结果即可。3.3 实验与分析本节将对前面介绍的餐馆推荐LDA模型进行实验。首先将找到合适的数据集,并对其进行预处理。然后就是利用处理过的数据集训练模型。最后就是根据模型训练出来的结果作推荐。最后就是评估推荐的性能。331数据预处理本次实验使用的数据集是Yelp的公开数据集。这个数据集包含470多万条评论以及15多万商家信息。在其官网上提供了JSoN版和SQL版的数据集,这里我下载的是SQL版的数据集,下载后将其存储在MySQL数据库中。TheYelpdatasetisasubsetofourbusinesses,reviews,anduserdataforuseinpersonal,educationalandacademicpurposesAvailableinbothJSONandSQLfiles,useittoteachstudentsaboutdatabases,tolearnNLP,orforsampleproductiondatawhileyoulearnhowtomakemobileapps图3.4Yelp公开数据集9¼U.5o.r*6HJ Rl PQ<2MQJAMiXFR.OV>9 -rHMCeegMb<X*D5 MoYEeqB.MhkdyaqZmIi-2A$4tGfMWex$nKmf MLj2M<TM*ivcnfl I4,M5U.oN7X1JMA4 .-3RTM6VfimKID<Mf1< 079h AAmCfCWQaMWPI ¼V2qKt7hmG5kftyHZ0 39.V0db1 k30BWzV1 dM8YpStAl NdwtKSTaj EpOp dl.oZIUVuPlXG A-Artv2W.M03OcOMMI>( LpKw.7UW 3KE9 3YaWrr.gu52RPO-AroA1Udrf.<X> 0<½0Uoe«oM.-b*oMDGhmnctKoi C)ZEfMkU»KkXPjcoYli 7rpo8AD.qG5kn*Q3Zar bP74MlNTC9>pk; .3F.Ud9 IunOQcSQqI9Ju *XZS42D0UIPuSh2Kr<, bMcKMU9OrlCM.Wy. Z>cNQpUZ2UKHl mvZ9<m4.WfaWoMlM> -«<» W*oy 3eciMoPbt «89ir«wi>W4iz1 XGl ceC9qoMM0Cm(ri11QVZtnj.f FR.SA f*<v*WT xdvQcml6*n> adrVG2b<VT 硒9r×)9 doP48fKA50rf<M2XR Q_gMPl)ULY.MX<k6i&9 ZtSzW0n29SqKAmQwtl DtlnV3q< 0VrAW8 eEH3.hBnxFHyf23kAu QmHSOI X)Oedkr¼z OWP.vJdY>Gia LW>.oa2W13X>iVXM)( VyMqOQ>in-heod4Z»J0CwW9*CHo40W.ow5M j>Mzt¼OPb 阳gYZtart dM5 20U-0>17 00:00! 4 2015-»-» OOcOOrOO 3 20U-0$-U OOcOOeOO 3 2012-05-24 0000 4 2013-02 M OIXJOKW 4 2007-01-22 OIXJOtOO 4 201119 OOeOCfcOO 1 2016-02-12 OIXIftOO 3 2014-0S09 OOOftOO 4 201M>M3OIMO0 3 201 J9im OftOftOO 4 2WXU06OXttEoO 1 2012g 30 80ft 4 20100101 ;t 5 2016tt-03 00cO0K)0 5 2016-07-19 000t00tOoeofmyAbsohUUvonteresUurmslIUMly90totheoneon沁qbutIgmovedov<t“oma22P)TheRegW18locatedinV3ge4re.which4SUPeCconvener*becvteM$pe<<“pce<JefriteyforhiGe<s.QichmendEyboy11e11drnetItwe®decor*da*dZsI'm9iwn9tHpic.151Sndtht*tagoodt¼ng)¼n%*rmCreVin9KcrznBBQanddon'tKnIabdutoytovthisMIamtoghdtooUreOgo«08rgg,GfIWeUIdbbigmIcChoccUtNuffMid.HotCocm.«MeChCCOhce*hUvenderfusion.Mmmm.O«cobee*1Thehppyhc*xmeruifperhapsthemotte>rtf*Mveend<xth*einthecwh*defrfromfAb*oHythWOEmobilephonexpw>*<*.Iwa«$147p<rmonthandmyb(li«$2)5p*Cemehr4fHAPPyHourIm<nightl'wctu>y*nat明'rtUur*t3timeb4o<»0EyrMA>8hu9hIWaSetrem<*ythnledtowthre«Uur«ntasyjebeeGMO-Reefo<11mthafaro4eOfmydd'iIhCkWecomeMierto<eW÷*enWem>keWoofntnp.RetrrJwthvgng«rdIwmCUriC5znrtoodkH>pcnmyw4cbn11dbngHdthM«0Wrtforanochn9.Tumdcuttobaveryxpnwcdchan9ttheyWWIedmycr(«wn0Ihvbe<tothho4tomanytmZh<nev«fsuedhe<,«0i*MI90<A4HM<>ng<¼tQk&<o«e