推荐系统之---企业级平台推荐设计

前言

不管是做直播推荐、电商平台推荐、视频推荐、亦或是其他平台的推荐,从技术上讲【很多东西都是想通的,也许你可以从这里借鉴到你想要的东西。】
下面我会按照以下顺序开始介绍,并且这个顺序也大概是推荐架构实现的一个顺序:

  • 用户画像系统
  • 推荐召回系统
  • 推荐排序系统
  • 推荐系统评估系统
    如果某些同学,对某些部分已经非常熟悉了,可以直接跳过,毕竟这里只是介绍了这些系统是怎么去做的,以及在整个架构中起到了什么作用,而并没有提供具体的实现方法。

1.用户画像系统

用户画像系统是非常重要的一个环节,因为它是我们数据的源头,如果说在数据最开始就把我们带偏了,那我们后面不管做的多么的完美,都是只会在错误的道路上越走越远,所以我们必须要重视这份初始的数据,把握好数据的质量。
推荐系统–用户画像,应用的场景最主要的是用户分析和研究,就是单一用户行为细致分析和用户调研,可以做单独群体使用习惯研究。还有产品和运营,了解系统用户现状,优化用户体验实现精准营销,实现更好的营销方案。
用户画像是可以和业务系统相关的,推荐系统–基于内容的方式,基于内容统计,排序阶段特征获取,推荐系统,找到可能对主播感兴趣的用户。用户刚好喜欢这个主播所具有的特征,就可以给他发送信息,以此让他参加关于该主播的活动。对于电商的推荐道理相同,找到对应某一主题感兴趣的用户,给这些用户做信息推送,这样就可以让用户与该主题下的物品进行互动,以此进一步挖掘用户的偏好。
用户画像
上面的这张图,已经很清晰的告诉我们,用户画像在做什么,能做什么。
下面我们看一下用户画像的结构,最底层是原始数据,比如说物品的信息,还有各种日志,观看日志,评论日志,礼物日志等等,有了这些以后对他们进行规划。可以做一些统计行为信息,用户什么时间段喜欢看视屏,每天看多少个,用户的付费能力怎么样,每天付费多少等等。可以根据这些行为日志,算出用户的兴趣,比如一个用户经常看跟没事相关的视频。有了用户画像以后,可以提供给运营系统,还有推荐系统。
用户画像架构图
用户画像可以分为以下几类:

  • 基础属性:年龄、性别、设备型号、安装渠道、常住地等等。
  • 行为属性:浏览时长、浏览时段、消费等级、活跃度等等。
  • 兴趣属性:用户感兴趣的主题,这些主题往往是平台定义的,比如动漫、社科、历史等等。
    在这里插入图片描述

2.推荐召回系统

2.1 推荐召回的必要性

首先来看一下推荐系统产生的背景,随着互联网技术发展,信息过载成为普遍问题,信息消费者,从海量的信息中找到自己喜欢的或者感兴趣的内容比较困难,作为信息生产这,让自己的信息容易被发觉、容易被用户感知到、甚至从众多的信息中脱颖而出,受到广大用户的关注也是比较困难得。
这个问题在很早以前就被意识到了,并且有了对应的解决方案。那就是【搜索引擎】,这个方案的提出者是雅虎,因为搜索引擎可以帮助用户找到相关的内容。但是,这里还有一个问题,如果用户的描述中关键字不准确,或者用户本身没有什么需求,搜索引擎就无能为力了。这个时候推荐系统就应运而生,它不需要用户描述它的需求,是根据它的历史给用户推荐感兴趣的内容。【如此就定义出:推荐系统是用来满足用户需求不是很明确的时候,帮用户找到可能感兴趣的内容】。
在这里插入图片描述

2.2 推荐系统功能

推荐系统的功能,简单介绍就是:推荐商品。下面具体介绍

  • 推荐系统的主要任务是建立用户和信息(信息可以是任何其他形式的东西)之间的联系,一方面帮助用户找到他可能感兴趣的内容,同时另一方面吧信息呈现在可能对它感兴趣的用户面前,以此达到双方共赢。
  • 解决海量信息过载时用户获取信息效率,解决用户无明确需求时信息获取,长尾物品推荐,满足小众个性需求,我们现在常见的是个性化推荐,已经成为了各大网站的标配了。
  • 在一个App上面的话是中间一样的存在,一个内容的话,是推荐系统根据模型推荐你内容,同事做一些相关性的推荐,比如说“看了又看,买了又买”相关性的推荐。或者你买了一个东西,给你推荐和这个东西最相关的,在一些社交网站会推荐一些相似用户或者好友相似推荐。我们会预测到用户感兴趣的话,会给推荐一些感兴趣的信息。
  • 看一下整体流程,过滤出优质内容,去除低俗、敏感信息,我们根据用户的兴趣找到他感兴趣的内容,用常用的一些算法找到感兴趣的内容,比如说看了一些关于历史的视频,就可以把新的视频推荐给他。
  • 如果发现了一个非常相似的用户,那么那个人用户看过的一些内容,相似用户并没有可过,就可以通过一些策略把这些内容推荐给他。假如这个量级太大,一个用户很难一天一次把这些内容看完,所以我们可以进行多步走,就是把用户最感兴趣的内容放在最前面,根据用户、物品特征,对含量信息预估内容的可能性,根据这个可能性从高到低的进行排序,把最可能看的推荐给他,经过这一步之后剩下的可能是几十个或者几个了,这个量级是用户一天一次是可以看完的。
    在这里插入图片描述

2.3 推荐系统架构

我们看一下推荐系统架构,在推荐系统里面用户跟系统有两种交互的场景,下图里的消息队列里就包含了用户的一些行为数据,比如:观看信息、购买信息之类的行为信息会上报到我们的接受服务器里面,缓存到消息推荐里面,后面会做两种方式的处理,一种是用这种数据训练两种模型,用来做后面的推荐用。
在这里插入图片描述

2.4 推荐系统–推荐算法

常用的推荐算法有如下几种

  • 流行度推荐算法
    • 热门排行榜
  • 基于内容的推荐算法
    • 标签推荐
  • 协同过滤算法
    • UserCF 基于用户的协同过滤
    • ItemCF 基于物品的协同过滤
    • ModelCF 基于模型的协同过滤
  • 基于图模型/基于社交关系

2.4.1 流行度推荐

所谓的流行度推荐,其实就是排行榜推荐,他在推荐系统里面是非常重要的一个算法,非常简单,容易实现、非常容易理解,解决新用户冷启动问题,可作为老用户的兴趣发现方式,可以作为其他算法补充,可作为系统降级方案。
缺点:

  • 所有用户看到的界面都是一样的推荐结果,没有个性化。
  • 排行榜更新相对较慢,短期不会修改太大的变化。
  • 容易受到攻击,也就是刷榜。
    排行榜
    下面介绍两种推荐排行榜的方式:
  • 【时间衰减】
    介绍一下他的思路,把排行榜想象成一个梯子,每个物品都在奋力的往上爬,他们的动力来自于用户的手动投票,物品本身都要承受一定的重力,会从梯子上往下滑,而用户的投票可以抵挡部分重力,投票数不及时或者不够的话,排行榜的物品就会一直往下滑。
    下面是它的计算公式,P表示物品的得票数;T表示物品已发布时间(小时),加上2是为了防止最新的物品导致分母过小;G表示重力因子,即:将物品排名往下拉的力量。
    时间衰减
    想象一下,Score和P是正比例关系,P增加相应的Score也会增加;Score和G、T是反比例,所以随着时间T的增加Score会下降,同样对于幂函数而言,这种情况下,增大重力因子G,分母整体会增大,也会导致Score的下降。
    在实际使用时,只要能够把握、调整参数G就可以正常使用“时间衰减”了。
  • 【贝叶斯平均】
    下面介绍贝叶斯平均,假如曝光量是1的时候,点击人数也是1,CTR是100%;曝光量是2的时候,点击人数是1,CTR是50%;曝光量是10000的时候,点击人数是3000,CTR是30%。
    思路是先估计一个值,然后不断用新的信息修正,使得它越来越接近正确的值,如果投票人数少,总分接近全局平均分;如果投票人数多,总分接近项目平均分。
    下面是它的计算公式,n是该项目的投票人数;x是该项目的每张选票的值;m是平均投票得分;C是平均投票人数。
    贝叶斯平均

2.4.2 基于内容的推荐

下面讲基于内容的推荐,利用用户已知兴趣特征和物品的特征相匹配为用户推荐感兴趣的商品。我们举一个栗子,这个表里用户A的旅游权值是0.8%,美食是0.3%,舞蹈是0.7%,根据这个权重做一些推荐。用户B也是一样的思路。
基于内容的推荐
基于内容推荐来说,优点就是说实现比较简单,推荐结果比较容易理解,对于新物品在没有用户评分的情况下,也可以进行推荐,只从当前用户提供的评分构建兴趣模型,不需要像CF一样找近邻。
缺点就是对于新用户有冷启动的问题,需要生成标签,图片,视频很难提取标签,它只能推荐和用户兴趣相似的物品,无法发现令人惊喜的推荐。意思就是说如果你喜欢美食不喜欢旅游的,就只会给你推荐美食相关的,绝对不会给你推荐旅游的。
内容推荐

2.4.3 协同过滤

我们知道推荐系统架构重要的一点就是协同过滤,根据目标用户的行为特征,为他发现一个兴趣相投,拥有共同经验的群体,然后根据群体的喜好来为目标用户过滤能感兴趣的内容。
协同过滤
我们看一下它的优缺点
优点

  • 推荐个性话、自动化程度高,能够有效的利用其它相似使用者的回馈信息,不断更新信息,加快个性化学习的速率
  • 允许用户之间的分享观点,避免了内容分析的不准确
  • 可以发现使用者潜在的但自己尚未发现的兴趣偏好

缺点

  • 用户和项目的数量都非常大,这种情况下,评分矩阵会极度稀疏,这会对算法的效率产生消极影响。
  • 新用户、新项目存在冷启动问题
  • 用户CF可解释性差
2.4.3.1 相似度计算

【Jaccard相似度】

  • 因为会涉及到用户相似度,Jaccard相似度。Jaccard相似度是两个集合的交集元素个数在并集中所占的比例。非常适合应用于布尔向量计算,例如使用用户的收藏行为,计算用户之间的相似度。它的算法也是非常简单的。
    Jaccard相似度

【欧氏距离】

  • 欧式距离计算M维空间中两个点之间的真实距离,欧式距离得到的值是一个非负数,最大值是无穷大。通常相似度计算转化为[-1,1]之间。度量的是空间中两个点的绝对差异,使用与分析用户能力之间的差异,比如消费能力、贡献能力等。
    欧式距离

【余弦相似度】

  • 余弦相似度计算两个向量的夹角余弦值来评估他们的相似度;余弦相似度适用于文本、用户、物品相似度;取值在[-1,1]之间;
    • 趋近于1,表示两个向量的方向很近;
    • 趋近于-1,表示两个向量的方向相反;
    • 趋近于0,表示两个向量近乎正交;
      余弦相似度
2.4.3.2 UserCF和ItemCF对比

对比一下两种协同过滤算法

  • 从使用场景来说
    • UserCF使用于用户相对物品较少场景。
    • ItemCF使用于物品相对较少场景。
    • 比如,直播场景持续开播的主播相对较少。
  • 从实时性来说
    • UserCF用户有新的交互行为,推荐结果需要等待模型更新时才变化。
    • ItemCF用户有新的交互行为,推荐结果也需要等待模型更新是才会变化。
  • 从冷启动方面
    • UserCF新用户、新物品有交互行为后,也需要等待模型更新才能有推荐结果或者被推荐出去。
    • ItemCF有两点:1.新用户只要对一个物品有交互行为就可以给他推荐类似的其他物品;2.新物品需要等待模型更新。
  • 从推荐理由
    • UserCF不能提供很好的推荐理由
    • ItemCF可以提供,比如看了又看,买了又买等。
      在这里插入图片描述

2.4.4 基于模型的推荐–ALS

下图是基于模型的协同过滤ALS的算法矩阵分解图,左边是用户的评分矩阵称为“U-V矩阵”,每一行代表一个用户,每一列代表一个物品,空的部分是没有打过分的物品,可以看到空的位置很多,用户很少有主动评分的行为,这种时候,一般会采用权重的方式,给用户有过行为的物品填上分值,以此降低矩阵的稀疏性;不过,尽管如此,还是会有大量的空缺部分,因此基于模型的ALS算法就是通过矩阵分解的方式,将空缺的位置进行分值回填。然后按照回填后评分的高低反映给用户就可以了,具体做法就是把大矩阵拆分成小矩阵。之所以被称作“小矩阵”,因为他的维度远远低于原始的评分矩阵。而小矩阵的大小,又取决于隐因子的个数K,如此K个隐因子将用户和物品联系起来,就可以还原大矩阵,实现对空缺评分的回填。
ALS
下面可以用一个具体的例子来说明,左边是大矩阵,分解成为两个小矩阵,用已知的值算出来以后,就可以用于回填,比如说第一个用户。按照这个评分就可以反映给用户。
als
我们可以看一下Spark ALS中是怎么应用的,算法中的输入需要用户ID,物品ID,评分。模型训练完成以后,给所有用户进行推荐,推荐完了以后得到一个新的。这个从高到低进行排序的,我们把这个反映给用户就可以了。
如果想详细的了解,可以参考微博,这里有更加详尽的说明
在这里插入图片描述

2.4.5 领域和矩阵分解的区别

我们看一下领域和矩阵分解的异同
【从方式来看】

  • 领域本质是基于统计的方法,没有学习的过程。
  • 矩阵分解是一种基于机器学习的方法,通过优化一个设定的指标建立最优模型

【从复杂度来看】

  • 领域是有M个用户,N个物品,O(M * M)或者O(N * N)。
  • 矩阵分解是M个用户,N个物品,F个隐因子,O(F*(M + N))。复杂度小一些

【从冷启动来看】

  • 领域ItemCF新用户只要对物品有行为就可以给他推荐类似的其他物品,但是也是要等到模型更新后才会有效果。
  • 矩阵分解的新用户、新物品有交互行为后,也需要等待模型更新后才有推荐结果。

【从推荐理由来看】

  • 领域可以提供推荐解释
  • 矩阵分解没有推荐解释
    领域VS矩阵分解

2.5 推荐结果的融合

在召回阶段结束后,我们需要整合多种推荐其的推荐结果,将推荐结果合并为一个列表,下面有三种混合方式:

  • 交叉式混合:直接将不同的推荐算法的结果组合在一起推荐给用户,从而每个推荐算法的优质结果都会被展示给用户。
  • 切换式混合:根据不同应用场景决定使用哪一种推荐算法,使用场景改变的话则切换推荐算法。
  • 分级混合:先界定不同算法的好坏,优先使用好算法的推荐结果,得不到结果时使用次好的算法,依次类推。

3. 推荐排序系统

召回阶段,多个通道的召回的内容是不具有可比性的,并且因为数据量太大也难以进行更加精确地偏好和质量评估,因此需要在排序阶段对召回结果进行统一的准确的打分排序。
他的做法就行下面这个图,结合用户的一些行为数据来评判,然后当用户访问的时候,我们会难道一些符合用户的特征,我们刚才拿到了列表,用户这次什么时候访问的,访问的设备,已经地理位置,这种信息输入到这个排序模型里面,就会反馈到一个结果,用户看这个视频或者这个物品的可能性是多少,按照这个可能性进行从高到低的排序,把这个结果反映给用户。
排序
目前来说,在企业中应用比较多的机器学习排序模型,也是使用的融合算法模型,今天只简单提一下GBDT+LR,在后面会单独开一篇介绍这一部分。

  • Facebook2014年的一篇论文中,提及到GBDT+LR的解决方案
  • 先使用GBDT对一些稠密的特征进行特征选择,得到的叶子节点,在拼接离散化特征放进去LR进行训练
  • 利用GBDT替代人工实现连续值特征的离散化,而且同时在一定程度组合了特征,可以改善人工离散化中可能出现的边界问题,也减少了人工的工作量
    GBDT+LR

4. 推荐系统评估系统

最后的一个阶段,必然是对模型的评估。只有得到好的模型,前面所做的一切才有意义,如果用了最好的材料,最好的技术,最好的人才,结果搞出来的是一个豆腐渣,那么一切都没有了意义。因此下面我们看一下如何评价系统。
【算法评价指标】

  • 精准率:排序列表中用户喜欢的物品所占的比例,TP/(TP+FN)
  • 召回率:用户喜欢的物品出现在推荐列表中的比例,TP/(TP+FP)
  • 覆盖率:描述一个推荐系统对物品长尾的发掘能力,推荐系统能够推荐出来的物品占总物品集合的比例

【产品层面】

  • 用户留存
  • 用户付费消费
  • 用户浏览时长

目标就是制定一个KPI,推荐系统的算法跟别的不太一样的,不像传统的能够定量知道加几台服务器接口能提升多少,做法就是要进行不断大量的实验,找到真正可以提高的算法,流程就是首先要做一些离线实验,当我们确定算法以后进行一些离线实验,本身会得到一些算法上面的指标评估,进行AB测试然后查看结果,调优算法,达到我们的目标会给他切更多流量,如果没有达到这个目标就下线,这种方案不太成功的话,我们就换一种方式。
在这里插入图片描述
要做到上面这种流程的话,需要做很多的支撑,一方面是模拟推荐。在上线之前可以很直观看到结果,线上还可以跑很多的实验,你不可能用自己的手机每个看,只能通过模拟推荐随时看到每个实验的结果。第二种场景就是我们在分析问题的时候,可以用到这样的系统,分析用户画像,以此找到问题然后提高系统的能力。
然后是AB测试系统,这是一个非常重要的系统。用户访问这个系统,AB测试根据环境信息、用户特征确定所属实验,召回排序算法生成推荐结果,推荐系统生成ID,用户反馈率,点击等交互信息,根据推荐ID统计策略、算法各项指标,根据指标调整算法。
在这里插入图片描述
这个是AB测试添加实验的页面,根据环境信息、用户画像添加实验,比如可以添加北京地区、男性用户,习惯晚高峰浏览商品的实验,比如添加一线城市,高付费的实验。
在这里插入图片描述
添加完成以后,就可以在系统里面查看它的推荐效果了,如果发现推荐效果不太理想,你就进行一些数据的分析,到模拟系统推荐里面查看一下,调整完以后再看效果。
在这里插入图片描述
参考:
1.冯丙见老师上海演讲
2.《推荐系统实战》
3.《集成群体智慧》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值