标签:
在之前一篇博文中, 有同学在评论中问了个问题: 怎样解决因式分解带来的推荐冷门。热门关键词的问题。 在回答这个问题的时候, 想到了近几年在做搜索推荐系统的过程中, 学术界和工业界的一些差别。 正好近期正在做技术规划, 于是写偏文章说下工业界完整推荐系统的设计。结论是: 没有某种算法可以全然解决这个问题, 多重算法+交互设计, 才干解决特定场景的需求。
下文也对之前的一些博文进行梳理。构成一个完整工业界推荐系统所具有的方方面面(主要以百度关键词搜索推荐系统为例)
在学术界。 一般说到推荐引擎, 我们都是环绕着某一种单独的算法的效果优化进行的, 比如按内容推荐, 协同过滤(包含item-based, user-based, SVD分解等),上下文推荐。Constraint-based推荐。图关系挖掘等。
非常多比較牛的单个算法。 就能在某个指标上取得较好效果。 比如MAE。RMSE。。。只是有自己的长处。 每种算法也有自己的缺点。 比如按内容推荐主要推荐和用户历史结果相似的item,一般的item-basedeasy推荐热门item(被很多其它人投票过)。。。。 所以在工业界。比如各互联网公司, 都会使用多种算法进行互相配合, 取长补短, 配合产品提升效果。
并且在完整的推荐系统中,不仅有传统的Rating推荐。 还须要辅以许多的挖掘, Ranking来达到预期效果。
在实践中, 一个完整的推荐系统会主要由3部分组成:
此处之所以将Ranking单独列出来,是由于其在推荐任务中过于重要。直接决定了推荐的效果。
A user profile is a representation of information about an individual user that is essential for the (intelligent) application we are considering user profile主要是用户(注冊)信息,以及对用户反馈的信息进行处理,聚合,用于描写叙述用户的特征。 是兴许推荐和排序的基石。 普通情况下。user profile会包括下面详细内容:
user profile常常是一份维护好的数据。在使用的时候,会直接使用该数据,或是将该数据存储在KV系统中。供Online系统实时使用。 在搜索或是推荐的场景下,每次请求一般仅仅会涉及到一次user profile的KV请求,所以online使用的时候。基本的实现困难是存储。以及高速KV的高速响应。
基础挖掘推荐算法, 主要使用传统推荐算法, 结合分析的item profile和user profile, 建立user和item的关系,此时并不会过多考虑其它因素。比如是否冷门/热门,最基本的就是建立user和item的关系。 在各种论文中狭义的推荐。主要就是指该部分内容。 主要环绕着Rating,以及Top N进行该处的Top N(更像是直接Rating值最高的Top N) 传统的推荐算法研究主要围着这块工作进行。如今已经有非常多比較成熟的算法。这些算法相关的研究可參见博文:《推荐系统经典论文文献及资料》;当中也能找到业界较多成功推荐系统的实践分享 主要包括下面几类:
详细參见博文:《级联二步图关系挖掘关键词推荐系统》,《频繁二项集合的hadoop实现》《itemrankrandom-walk-based-scoring-algorithm-for-recommener-system》
在实际应用时。我们常常使用按内容推荐,item-based寻找从感知的角度比較靠谱的结果。使用SVD,SVD++。图关系寻找更深层次的联系结果。
同一时候在推荐时,会结合非常多因素来进行综合排序,比如关键词, 或是LBS中POI的热度等。详细可參见下文ranking部分。
以上这些算法。 我们在离线的时候。使用Cross-Validation方式,就能够分析出其效果。并且离线分析的时候,代价比較小,比較easy操作。当然,对于不同的问题会使用相应的指标进行衡量。 对于预測Rating准确性主要是用RMSE,或是MAE;详细可參见博文:《关键词搜索推荐系统中的推荐准确性度量》 假设是排序。 则很多其它使用NDCG,MAP, MRR等指标。详细可參见博文:《使用ndcg评估关键词推荐系统的相关性》 在详细应用场景中。对于特定推荐问题,会涉及到选用哪种算法的问题。推荐不像CTR预估这种问题,目标比較单一,常常我们须要考虑多个指标,并且这些指标可能此消彼长。须要做权衡。比如须要考虑算法的准确性(accuracy),同一时候也须要考虑算法的覆盖(coverage)。置信度(confidence),新奇度(novelty)和惊喜度(Serendipity)。同一时候还须要考虑推荐为系统带来的收益和效用(utility)。 这些指标常常须要权衡,并且常常提升某一个的时候会导致其他下降,所以有时候存在一定的主观性:我们究竟看中哪一个指标? 并且这个问题可能随着系统,平台所处的阶段而不同。 比如在建立口碑的时候,我们可能不太关注coverage,而更关注accuracy,由于要让用户建立一种:该系统非常准的认知;假设在系统已经比較成熟了,此时可能须要考虑novelty, serendipity的同一时候,还须要考虑utility:该推荐能为系统带来什么收益。比如对百度的变现有多大收益? 对淘宝的销售有多少收益等 详细这些指标的选择可參见博文:《选择推荐算法时须要考虑得因素》
比較简单的实现方法, 是直接对各种特征拍阈值进行线性加权,比較成熟的系统通常会使用机器学习的方式和综合个维特征, 学习出模型后进行排序, 比如使用Learning to rank技术。 该部分须要考虑的因素较多较为复杂。 和传统的推荐相比, 此处单独将Ranking拿出来。 基础推荐挖掘, 和传统的推荐部分比較类似,主要结合user profile, 挖掘哪些item适合推给哪些user。
但仅依据这些挖掘就直接进行推荐是不够的。 真实online推荐场景中, 须要考虑很多其它其它因素。 比如:相关性,推荐的上下文,CTR预估,以及商业业务规则。
使用模型的方式会更加复杂,但效果提升也非常明显。详细可參见博文:《集成树类模型及其在搜索推荐系统中的应用》。《分类模型在关键词推荐系统中的应用》,《adaboost》
比如在百度关键词搜索推荐中。某些有比較高变现潜力的词。 就应该加权往前排; 比方在高德LBS服务中,有些海底捞的店点评评分较低。 但我们也应该往前排;或是在搜索引擎中。搜国家领导人的名字。 有些最相关的结果可能由于法律因素是须要屏蔽的
非常直接,离线调研的时候看就看算法的评估指标,參见博文:《关键词搜索推荐系统中的推荐准确性度量》。《使用ndcg评估关键词推荐系统的相关性》 上线的时候,进行圈用户(圈定某两个user集合作为实验/对比用户组)实验, 或者圈请求实验(比如随机圈定5%流量进行实验),之后依据系统效果监控中的指标值推断实验效果。
下面为一个典型的效果监控截图: 实验假设证明成功,达到预期效果。一般之后推广到全流量;反之,假设实验未达到预期效果,则须要分析什么地方有问题。怎样改进,之后继续调整算法继续实验。
当实验较多时。还会涉及较多project问题,比如分层实验框架等。
对于整个系统,须要建立晚上的效果监控平台进行效果的实时监控,以便发现用户的行为模型,系统的不足,分析兴许的发力点等。
一般这种监控平台会使用Dashboard来完毕,主要的框架是前段UI + 后端数据库。非常多时候,离线统计策略在hadoop上处理统计日志计算指标,并将计算出来的指标存入数据库。前端UI訪问数据库。拉出指定时间段内某些指标的值,并进行简单分析。 详细的监控指标,及指标体系的建立。可參见博文:《搜索引擎变现策略指标体系》
完整的产品包含便捷的交互和背后牛叉的算法。非常多时候,要提升推荐的效果,须要算法和交互配合,才干达到理想的效果: 交互须要有健壮的算法产出结果;而算法也须要有配套的交互,才干达到预期效果。否则再牛叉的算法,对结果的影响也可能没那么明显。
一些交互的样例參见博文:
《关键词推荐工具中的用户引导机制之二:suggestion架构》
《关键词推荐工具中的用户引导机制之三:相关搜索query技术》
说了那么多,中心就是想说明, 一个完整的推荐系统。远远不止是一两个rating算法可以覆盖的。并且此处还未涉及project部分。
很多其它内容,也可以直接访问: http://semocean.com
版权声明:本文博主原创文章。博客,未经同意不得转载。
标签:
原文地址:http://www.cnblogs.com/bhlsheji/p/4834765.html