推荐系统概述

1.什么是推荐系统

在具体聊推荐系统之前,我们先来了解一下获取信息的两种基本机制,第一是主动获取,第二是被动获取。

主动获取信息
对于信息主动获取的方式,最典型的有两种,一个是搜索,另一个是导航。
对于搜索,百度和谷歌通过解决用户的信息主动检索问题,便能成就一个产业,所以对于信息主动获取的需求是很巨大的。
对于另一个主动信息获取的方式,即导航。在门户时代,门户网站的分门别类的各色频道,以及频道下对应的各级菜单其实就是一种导航,再到目前国内遥遥领先世界的电子商务领域,其各色平台,少不了的就是类目导航。导航提供的是一种通用的目录结构,人们通过对信息的认知,再结合通用的树状结构,逐步检索到自己需要的信息。
被动获取信息
对于大部分的场景中,至少过半的用户并不是抱着一个很明确的目的去使用的,大部分都是一种随意看看、随便逛逛的心态,这就意味着被动信息获取的场景我们同样需要去满足。虽然用户是随便看看、随便逛逛,但作为被逛的主体方可不能带着这种心态,我们必须在用户的随便行为中,把用户给牢牢吸引住,不然就不知不觉地给逛走了。这就涉及到了被动信息获取机制中的推荐系统。对于用户来说,推荐是一种被动的行为,主体方意图通过推荐的方式将最吸引用户或者说用户最可能感兴趣的东西被动呈现给用户。和搜索引擎不同,个性化推荐系统需要依赖用户的行为数据。通过推荐的方式,缩短用户与其潜在需求信息的路径,从而提升用户的体验、提升用户的粘性。
再回到什么是推荐系统
对于推荐系统的定义有不少,但被广泛接受的推荐系统的概念和定义是Resnick和Varian在1997年给出的:“它是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程”。推荐系统就是根据用户的历史行为、社交关系、兴趣点、所处上下文环境等信息去判断用户当前需要或感兴趣的物品/服务的一类应用。
推荐系统有3个重要的模块:用户建模模块、推荐对象建模模块、推荐算法模块。通用的推荐系统模型流程如图1所示。推荐系统把用户模型中兴趣需求信息和推荐对象模型中的特征信息匹配,同时使用相应的推荐算法进行计算筛选,找到用户可能感兴趣的推荐对象,然后推荐给用户。
注意,推荐系统不等于推荐算法。
这里写图片描述
图1 推荐系统通用模型

2.常见的推荐算法

既然推荐算法是推荐系统中的核心,我们有必要对常规常见的一些推荐算法有个直观的认知,然后再结合自身的产品体验对推荐算法的一些逻辑进一步深入的理解。

基于内容属性的推荐

这种推荐逻辑很简单,只是单纯的依赖物品之间的属性相似来构建推荐关系,结合导读中的腾讯视频推荐的例子,比如如果我在看《蜘蛛侠3》,你给我推荐《钢铁侠》、《蝙蝠侠》,理论上是有一定道理的,都是科幻大片嘛,说不定还是同个系列呢。
所以,基于内容的推荐,容易理解,并且很多时候还是有一定效果的,但实际上很多时候会存在这几种情况,导致了这种原始推荐失效。
如果用户浏览当前的物品本身就不是用户的菜,甚至是一个非优质信息(当前主体不可控),再基于当前物品进行推荐就是个伪命题。
基于上面这条,即使当前主体是用户的目标,但再推类似主体会造成信息冗余,即当前主体信息已经解决了用户的问题。
所以,由于用户行为的不可控,基于内容属性相似的推荐,风险还是挺高的,这是导致了这种原始直接的机制并不会得到广泛的推广。
但与乱推荐相比,还是有一定正向作用的,毕竟用户浏览的主体是自身选择的结果,本身用户对于其选择的信息主体是有一定偏好性的。

基于画像的推荐

基于物品本身属性的推荐,其实与个性化是没有任何的关系,毕竟推荐候选集只跟物品主体有关,与用户无关,就谈不上什么个性化了。
而基于用户画像(更多人喜欢用基于用户标签)的推荐,则更大程度上依赖于用户的画像属性来推荐,这就体现了用户偏好信息,根据偏好信息来选择候选集。
这是一种很通用的做法,并且在大规模数据集情况下,在很多实际的产生过程中喜欢使用这种机制。而用户的画像,或者更具体点用户的兴趣标签如何构建呢?其实就是依赖用户累积的行为数据了,通过行为数据生成用户的兴趣标签。
这看似是一种相对靠谱的做法,毕竟如果把用户的爱好都分析清楚了,主动给用户做推荐不就显得很个性化了吗?在实际的场景中,首先,并不是所有用户的行为都足够用来表征其兴趣偏好的,即我们会高估用户的行为集合,从而产生有偏差的画像属性,更甚者,如果用户完全没有行为怎么办呢?
其次,通常来说,用户的兴趣爱好是会随时间迁移而改变的,所以,把握用户的兴趣程度以及其变化并不是一个容易的事情,更何况用户实际的选择还会受很多因素影响,比如,我当前查找的一个信息并不是我之前掌握的信息,那意味着这些信息偏好在我的历史轨迹中都体现不出来,那单纯的通过我的兴趣去推荐就显得不靠谱了。
但不管怎么说,根据用户的偏好来做推荐,大方向肯定是没有问题的。

基于协同过滤的推荐

协同过滤,或许了解过推荐系统的的朋友,多多少少都能听过一些,并且协同推荐可是作为推荐领域典型案例而存在的。
协同过滤同样不会去研究物品的本身属性,甚至也没有空去构建用户的画像标签,正如他的名字描述的一样,他严重依靠于用户的行为以及其周边用户的协同行为。
举个例子,为一个用户推荐信息,那么我只需要参考其周边用户在看什么信息,就给他推荐什么信息就好了。
重点在于,如何限定周边这个范围,比如根据两个用户的行为,去构建相关关系,从而判断用户之间的相似程度,把相似用户的行为推荐给当前用户,这就是协同中典型的基于用户推荐。
而如果以物品为维度,以用户的购买或者观看记录为向量,则可以构建物品的相似度量,针对于每一个待推荐选项,用户的历史轨迹就是其向量构成,就可以判断该用户历史的轨迹信息与当前的待选物品的向量相关度了,从而判断是否要推荐,这就是基于物品的协同逻辑。
与基于用户画像的推荐对比,这种推荐有一定几率可以发现新物品,即并不严格依赖用户的兴趣。举个例子,假设几个信息的层级是 A、B、C,并且 A、B、C 是层级递进关系,并不是同一个东西,对于一个用户来说,他掌握的是 A,则意味着他的兴趣偏好大多偏向于 A,根据兴趣标签,其实是很难推荐这种递进相关的信息。
但是,如果其他用户的学习轨迹都是 A→B→C 这种轨迹,这意味着 A、B、C 三者之间本身就有前后潜在逻辑关系存在的,基于协同,即可为该用户在掌握 A 的基础上,推荐 B、C 的内容,这也是基于兴趣所做不到的地方。
当前,基于协同行为的推荐,除了基于物品还有基于用户,还有其他诸如基于模型的协同,典型如最近邻模型、基于矩阵分解以及基于图关系模型的构建的推荐机制。

基于关联规则的推荐

在上一篇中,相信大家有看到其中一个推荐场景的理由“看过 XX 的还看过”,或者“买过 XX 的用户还买过”类似的推荐理由。
实际上支撑类似理由的一个很重要的推荐算法就是关联规则。即我们通过一定的逻辑来寻找物品之间的相关关系,请注意是相关关系并不是相似关系,又或者说我们寻找并不是严格意义上属性上的相似,单纯只是为了寻找他们之间的关联性。
这就要从“啤酒与尿布”的故事说起,或许很多朋友已经听过这个故事,即超市对用户的的购物清单进行分析,发现一个很奇怪的现象,那就是很多经常在购买尿布的时候顺带会购买啤酒。
这是一个很奇怪的组合,单纯从物品属性的角度上看,两者之间很难有明面上的关系,但事实就是他们确实存在某种关联,超市于是将这两种商品放在同个货架中,于是大大提升了两者的搭配销售额,并且做了类似的计算,来优化整个货架陈列,从而提升销售额。
实际上这就是一个推荐场景,即在尿布的商品浏览的时候适当进行啤酒的推荐,从而提升搭配销售的效果,实际上这是一个关联分析的过程。
即通过他们历史的搭配售卖情况,来分析每个搭配之间的合理性,即分析不同商品组合之间的相关性,这种相关性很难去解释,但确实是在生效。

其他常见推荐算法

其实在我们实际的操作过程中,并不会严格的依赖于这种条条框框、只要合理即可行,比如我们完全可以把推荐问题转化为分类问题,针对于每个待选项,它都是 Yes or No 的问题,即一个二值分类。
再比如微信朋友圈,微信一定是会研究用户的朋友圈关系的,比如你对哪类朋友点赞、互动行为最多,它是不是会考虑推荐你欣赏的朋友偏好内容给你?毕竟微信是一个典型的熟人社交模型。
所以,推荐算法看似重要,但其实想想又没有这么重要,很多时候并不是一成不变的,都要我们根据场景去考虑,最最最重要的是,需要我们用实际效果来选择机制,也或许是多种机制共同生效的结果。

3.推荐系统的冷启动问题

推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,因此大量的用户行为 数据就成为推荐系统的重要组成部分和先决条件。对于很多像百度、当当这样的网站来说,这或 许不是个问题,因为它们目前已经积累了大量的用户数据。但是对于很多做纯粹推荐系统的网站 (比如Jinni和Pandora),或者很多在开始阶段就希望有个性化推荐应用的网站来说,如何在没有 大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统, 就是冷启动的问题。
这种情况,我们需要尽快的累积起第一批用户行为轨迹。我们可以通过基于内容的推荐,或者做一些其他类似的操作,快速有效的进行物品推荐。一段时间后,累积到一定的用户行为时,整个系统就能够正常使用协同过滤等方式进行推荐了。但是,针对于新加入的用户,或者新加入的物品,同样也是出于冷启动状态的,这个时候,需要对这种物品或者用户做特殊的处理。
除了基于内容属性的推荐,我们还有其他的一些策略用于弥补这种行为数据不足的情况,比如典型的热度模型,推荐热点信息这种行为虽然 low,但是从整体的反馈来看,还是有一定效果的,此外,还可以根据一些统计学上的结论,进行基于统计分析结论的推荐。
除此之外,我们也可以通过其他渠道收集用户的数据,比如用户注册的时候所填写的个人资料,这些都是可以作为推荐的原始依赖数据。

Bandit算法

在这里,重点介绍一种冷启动中常用的算法,那就是 Bandit 算法,又俗称老虎机算法。
一个玩家要去玩老虎机,一排老虎机,外表都是一样的,但每个老虎机吐钱的概率是不同的,我们不知道每个老虎机吐钱的概率是如何分布的,并且需要考虑如何获取最大化的收益;然后会采用多臂尝试的手段,即有策略的逐一进行探测,即 MAB 问题的解决(Multi-armed bandt problem,K-armed bandit problem)。
具体的过程如下:
用有限个类别来表示用户的每个兴趣,这也就是 MAB 问题的 Arm。
通过几次实验之后(推荐反馈),来计算新用户对每个类别的感兴趣概率。
经历“选择-评估-更新-选择”的循环测试之后,理论上最终的选择会越来越逼近用户真正感兴趣的类别。
实际上我们会发现,这就是一个动态选择,并且不断通过反馈来更新选择的过程,这种算法某种意义上能够解决一定程度上的冷启动问题。
可以参考 : https://blog.csdn.net/dengxing1234/article/details/73188731

4.推荐系统的长尾效应

马太效应或者说长尾效应,即热者愈热,实际举例来说就是,在实际的购买场景中,由于你推荐的次数越多,部分优质的商品购买或者点击的次数就越多,形成的用户购买轨迹就越多,所以得到的推荐机会就越多,进而产生的推荐也越多,变得越热。
随着不断迭代,子子孙孙无穷尽也,这样得到推荐的商品就会集中在少部分商品中,而大部分长尾商品是沉寂的,一个推荐系统如果长时间处于长尾效应中,造成推荐疲劳,其推荐效果就会减弱。
所以,一个好的推荐系统,要考虑到适当的挖掘长尾商品,通过真的个性化,把适当的长尾商品送到真正需要他们的人手里,在实际的操作过程中,我们可以适当的进行热度降权,从而让一些中下层的商品得到更多的曝光机会,当然前提是保证点击率的情况下。
另外一个场景会形成马太效应的是热度模型,即我们的热度榜单,长时间的高居榜首,一定会获得更多的点击,而点击越多其热度越高,但我们的信息是需要保持新鲜度的,不然点击率迟早会下架的。
所以,我们使用一些机制让处于头部的商品或者信息降权,时间衰减是一个比较通用的做法,即随着时间的迁移,其整体热度会不断的下降,至于说下降的方式,速率就看模型的设计了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值