一个推荐系统,实现完整的设计-在百度搜索关键词推荐案例

在之前一篇博文中, 有同学在评论中问了个问题: 怎样解决因式分解带来的推荐冷门。热门关键词的问题。 在回答这个问题的时候, 想到了近几年在做搜索推荐系统的过程中, 学术界和工业界的一些差别。 正好近期正在做技术规划, 于是写偏文章说下工业界完整推荐系统的设计。结论是: 没有某种算法可以全然解决这个问题, 多重算法+交互设计, 才干解决特定场景的需求。

下文也对之前的一些博文进行梳理。构成一个完整工业界推荐系统所具有的方方面面(主要以百度关键词搜索推荐系统为例)

完整的推荐系统肯定不会仅仅用一种推荐算法

在学术界。 一般说到推荐引擎, 我们都是环绕着某一种单独的算法的效果优化进行的, 比如按内容推荐, 协同过滤(包含item-based, user-based, SVD分解等),上下文推荐。Constraint-based推荐。图关系挖掘等。

非常多比較牛的单个算法。 就能在某个指标上取得较好效果。 比如MAE。RMSE。。。只是有自己的长处。 每种算法也有自己的缺点。 比如按内容推荐主要推荐和用户历史结果相似的item,一般的item-basedeasy推荐热门item(被很多其它人投票过)。。。。   所以在工业界。比如各互联网公司,
都会使用多种算法进行互相配合, 取长补短, 配合产品提升效果。

并且在完整的推荐系统中,不仅有传统的Rating推荐。 还须要辅以许多的挖掘, Ranking来达到预期效果

推荐系统3大件:User Profile、基础挖掘推荐、Ranking

在实践中, 一个完整的推荐系统会主要由3部分组成:

  1. User Profile
  2. 基础推荐挖掘算法
  3. Ranking

此处之所以将Ranking单独列出来,是由于其在推荐任务中过于重要。直接决定了推荐的效果。

下面为整个推荐的数据流: 

User Profile

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会包括下面详细内容:

  1. 用户兴趣数据
  2. 用户的基础注冊信息,背景信息:比如用户出生地,年龄,性别,星座,职业等。这些信息一般从用户注冊信息中获取。比如高德,百度地图注冊用户,淘宝注冊用户等
  3. 用户行为反馈:包含显示的反馈(explicit)和隐藏(implicit)的反馈,显示的反馈包含用户的评分,点赞等操作。百度关键词搜索推荐工具上的点赞(正向显示反馈)和垃圾桶(负向显示反馈),淘宝上的评分;隐式反馈包含用户的浏览行为,比如在百度关键词搜索推荐上搜过那些词,淘宝上点击了那些页面,在高德上点击了那些POI等
  4. 用户交互偏好比如用户喜欢使用哪些入口,喜欢哪些操作,以及从这些操作中分析出来的偏好,比方在高德地图上依据用户行为反馈分析出来的用户对美食的偏好:更喜欢火锅,粤菜,还是快餐
  5. 用户上下文信息:这些信息有些是分析出来的,比如在LBS中分析出来的用户的家在哪儿,公司在哪儿,常常活动的商圈,常常使用的路线等

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) 传统的推荐算法研究主要围着这块工作进行。如今已经有非常多比較成熟的算法。这些算法相关的研究可參见博文:《推荐系统经典论文文献及资料》;当中也能找到业界较多成功推荐系统的实践分享
主要包括下面几类:

  1. Content Based推荐: 按内容推荐,基本的工作是user profile, item profile的提取和维护,然后研究各种相似度度量方法(详细相似度度量參见博文:《推荐系统中的相似度度量》)
  2. 协同过滤:相当于应用了用户的行为进行推荐(差别于Content based算法)。比較经典的算法包含传统的item-based/user-based算法(參见博文:《协同过滤中item-based与user-based选择依据》,《collaborative-filtering依据近邻推荐时须要考虑的3要素》)。SVD,SVD++(详细原理及源代码參见博文:《SVD因式分解实现协同过滤-及源代码实现》)
  3. 上下文相关推荐:和传统推荐相比, 考虑很多其它上下文因素。LBS。 移动场景下使用比較多(详细參见博文:《context-aware-recommendation》)
  4. 基于图的关系挖掘推荐:主要是利用图论原理,依据item,user之间的数据,反馈关联关系。挖掘更深层次的关系进行推荐。该类方法一般效果都不错,当然资源要求也较高。

    详细參见博文:《级联二步图关系挖掘关键词推荐系统》,《频繁二项集合的hadoop实现》《itemrankrandom-walk-based-scoring-algorithm-for-recommener-system

  5. Constrainted-based推荐:依据限制性条件进行演绎推荐

在实际应用时。我们常常使用按内容推荐,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:该推荐能为系统带来什么收益。比如对百度的变现有多大收益? 对淘宝的销售有多少收益等 详细这些指标的选择可參见博文:《选择推荐算法时须要考虑得因素

Ranking,此部分是成熟的搜索,推荐系统具有的核心逻辑

比較简单的实现方法, 是直接对各种特征拍阈值进行线性加权,比較成熟的系统通常会使用机器学习的方式和综合个维特征, 学习出模型后进行排序, 比如使用Learning to rank技术。 该部分须要考虑的因素较多较为复杂。 和传统的推荐相比, 此处单独将Ranking拿出来。 基础推荐挖掘, 和传统的推荐部分比較类似,主要结合user profile, 挖掘哪些item适合推给哪些user。

但仅依据这些挖掘就直接进行推荐是不够的。 真实online推荐场景中, 须要考虑很多其它其它因素。 比如:相关性,推荐的上下文,CTR预估,以及商业业务规则。

  1. 相关性: item与用户的相关性,这是大多数搜索和推荐任务的基石。比如在搜索中判定一个query和一个document的相关性,或是一个query 和 还有一个query的相关性,或是在特征比較多的情况下。 一个user 和一个item 记录的相关性;实现方式能够非常easy,比如传统的相似度度量方式(參见博文:《推荐系统中的相似度度量》),对于文本,业界使用简单的TF*IDF,或是BM25。
    只是非常多时候我们须要添加很多其它维度特征,包含推荐item本身的重要性,比如IDF,Pagerank(详细參见博文:《pagerank的经济学效用解释》)。同一时候使用模型来提升相关性推断的准确性。

    使用模型的方式会更加复杂,但效果提升也非常明显。详细可參见博文:《集成树类模型及其在搜索推荐系统中的应用》。《分类模型在关键词推荐系统中的应用》,《adaboost

  2. 推荐的上下文:比如推荐产品的入口。交互方式。 不同的入口,甚至同一入口的不同交互方式。 推荐的结果有可能都须要不一样; 在LBS生活服务中, 请求发生的时间, 地点也是推荐须要重点考虑的上下文因素。比如饭点对餐饮item的提权。 异地情况下对酒店等结果的加权等
  3. CTR预估:成熟的商业系统都会使用模型来完毕CTR预估,或是转化预估
  4. 以及商业业务规则:比如黑白名单,或者强制调权。

    比如在百度关键词搜索推荐中。某些有比較高变现潜力的词。 就应该加权往前排; 比方在高德LBS服务中,有些海底捞的店点评评分较低。 但我们也应该往前排;或是在搜索引擎中。搜国家领导人的名字。 有些最相关的结果可能由于法律因素是须要屏蔽的

算法评估

非常直接,离线调研的时候看就看算法的评估指标,參见博文:《关键词搜索推荐系统中的推荐准确性度量》。《使用ndcg评估关键词推荐系统的相关性
上线的时候,进行圈用户(圈定某两个user集合作为实验/对比用户组)实验, 或者圈请求实验(比如随机圈定5%流量进行实验),之后依据系统效果监控中的指标值推断实验效果。

下面为一个典型的效果监控截图: 实验假设证明成功,达到预期效果。一般之后推广到全流量;反之,假设实验未达到预期效果,则须要分析什么地方有问题。怎样改进,之后继续调整算法继续实验。

当实验较多时。还会涉及较多project问题,比如分层实验框架等。

系统效果监控

对于整个系统,须要建立晚上的效果监控平台进行效果的实时监控,以便发现用户的行为模型,系统的不足,分析兴许的发力点等。

一般这种监控平台会使用Dashboard来完毕,主要的框架是前段UI + 后端数据库。非常多时候,离线统计策略在hadoop上处理统计日志计算指标,并将计算出来的指标存入数据库。前端UI訪问数据库。拉出指定时间段内某些指标的值,并进行简单分析。 详细的监控指标,及指标体系的建立。可參见博文:《搜索引擎变现策略指标体系

交互设计

完整的产品包含便捷的交互和背后牛叉的算法。非常多时候,要提升推荐的效果,须要算法和交互配合,才干达到理想的效果: 交互须要有健壮的算法产出结果;而算法也须要有配套的交互,才干达到预期效果。否则再牛叉的算法,对结果的影响也可能没那么明显。

一些交互的样例參见博文:

关键词推荐工具中的用户引导机制之中的一个:总述

关键词推荐工具中的用户引导机制之二:suggestion架构

关键词推荐工具中的用户引导机制之三:相关搜索query技术

关键词推荐工具中的用户引导机制之四:种子query推荐

说了那么多,中心就是想说明, 一个完整的推荐系统。远远不止是一两个rating算法可以覆盖的。并且此处还未涉及project部分。

很多其它内容,也可以直接访问: http://semocean.com

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-11-03 22:17:08

一个推荐系统,实现完整的设计-在百度搜索关键词推荐案例的相关文章

百度搜索关键词上线大家快点踊跃使用吧

近日,百度站长平台对百度搜索关键词工具进行了全面的升级,统计数据越来越精细,指标描述也越来越亲民.对于广大SEOer来说,长期总结观察这些百度数据,对于更好的了解其站点优化情况,对于制定其未来的关键词优化方案都大有裨益.可以说,新的数据数量级别和指标描述的改变,也标志着百度正逐步将加快其完善算法的步伐,大家有望在未来享受更公正的优化排名规则. 这次,百度主要通过热门关键词和热门页面来描述网站的受欢迎状况.注意,所谓的热门关键词和热门页面,是针对您自己的网站而言的,不具有绝对的统一性.您网站通过哪

人机交互设计之百度搜索软件评价

目前所使用的最多的也觉得最方便的就是百度搜索了,下面是我对这款使用多年的软件的评价. 1.用户界面方面: 界面简洁容易操作,我们的外教老师也会使用百度搜索.上设有糯米,新闻,hao123,地图,贴吧等网站的超链接,这些包含了衣食住行和娱乐等项目,使用户用起来非常方便,还有登录和设置按钮,用户登录之后可以根据自己的喜好进行个性化设置,使用起来更方便和顺手.下设二维码,可以方便下载百度搜索和百度糯米手机APP,另外还有上传照片的功能.总体来说界面简单易操作,适合广大年龄层和文化层的用户使用,我觉得这

http协议请求实战——get请求示例之抓取百度搜索关键词对应网页信息

1通过分析搜索关键词对应的网址发现字段名和内容均在网址中网址可简化为www.baidu.com/s?wd=搜索的关键词 根据分析出的规律可通过构造get请求用爬虫实现在百度上自动查询某个关键词 代码如下: import urllib.request 导入urllib.requestkeywd = '高同同' 指定关键词keywd_cod = urllib.request.quote(keywd)将关键词进行编码url = 'https://www.baidu.com/s?wd='输入网址url_

调用百度搜索关键词

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>查询访问</title> <!-- https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd= https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=abc&cb=jQue

百度搜索关键词纠错机制研究

自动纠错链接:https://www.baidu.com/baidu?wd=c%E8%AF%AD%E8%A8%80+%E6%8E%A5%E5%8F%97%E5%8F%82%E6%95%B0&tn=monline_dg&ie=utf-8 手动修复关键词:https://www.baidu.com/s?wd=c%E8%AF%AD%E8%A8%80+%E6%8E%A5%E5%8F%97%E5%8F%82%E6%95%B0&tn=monline_dg&f=13&ie=utf

【数据分析】python分析百度搜索关键词的频率

涉及知识点 1.抓取数据 2.分页爬虫 规律分析 1.抓取数据,发现每一项都是data-tools标签 2.分页分析 代码 import requests from bs4 import BeautifulSoup import re import json import jieba #获取html页面信息 def getKeywordResult(keyword, pagenum):     url = 'http://www.baidu.com/s?wd=' + keyword + '&pn

pycharm利用request请求百度搜索关键词并读取源码下载到本地

import requests params = { 'wd' : 'seo' } headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' } response = requests.get("http://www.baidu.com/s",params=p

百度搜索这些词:(百度搜索特效,好玩)

特效,是百度搜索关键词个性体验化的一种方式,之前大家可能遇到搜某些关键词的时候,会出现意想不到的彩蛋. 下面是一些常见的带特效的关键词,你别说,小编第一次搜的时候,还真被吓一跳,不信你试试. ps.需 PC 浏览器,手机上还无法实现,如果你没看到特效,不妨换个浏览器试试. 1.打雷 真的会出现打雷的声音,而且特别逼真.此外,“布谷鸟”.“海边”.“大风”也会有同样的声音效果. 2.Duang 整个屏幕都跟真“Duang”起来了… 3.黑洞 我去,屏幕上真会出现一个黑洞,把所有东西都吸进去. 4.

Axure RP一个专业的快速原型设计工具

Axure RP是一个专业的快速原型设计工具.Axure(发音:Ack-sure),代表美国Axure公司:RP则是Rapid Prototyping(快速原型)的缩写. Axure简要介绍 Axure RP已被一些大公司采用. Axure RP的使用者主要包括商业分析师.信息架构师.可用性专家.产品经理.IT咨询师.用户体验设计师.交互设计师.界面设计师等,另外,架构师.程序开发工程师也在使用Axure. Axure RP--是一个非常专业的快速原型设计的一个工具,客户提出需求,然后根据需求定