第01课:推荐算法不等于推荐系统

在上篇导读中,我们对推荐的需求背景以及场景等偏业务领域的知识,有了个大概的认知,从这篇起,我们将逐渐过渡到偏技术的层次上。

这里我们将对推荐,或者更确切的说是推荐系统有个更全面的认知,比如它的组成结构,涉及到哪些需要解决的技术问题、哪些技术领域,以及这些问题的具体表现等。

推荐系统概述

在上篇中,我们看到了很多推荐的应用场景、各个领域、各种应用都或多或少的体现了这个模式的可用性,但对于业务层来说,我们单纯看到的就是一个推荐栏位、栏位名称及推荐的形式,具体的推荐列表。

所以,这种情况会给人带来一种错觉,下意识的认为推荐算法其实就是推荐系统的全部,我们能看到的推荐列表就是通过某个推荐算法计算出来的,而我们研究推荐其实就是研究推荐算法。

这个观点实际上是很不负责任的,推荐系统是一个相对复杂的业务系统,其中会涉及到数据是如何处理的、架构是如何搭建的、推荐的算法如何去设计实现、反馈的数据如何收集、基于收集的数据如何做优化迭代、整体系统如何做评估、产品形态上如何做设计。

如此看来,整个推荐体系实际上是一个相对复杂的体系,远不止我们了解的那样简单,而想要达到一个好的推荐效果,整个体系的完善是必不可缺少的。

而我们所接触的最近的以及最熟悉的实际上是推荐的产品形态,以及推荐算法或者说推荐策略,当然,不可否认的是,推荐算法确实是整个推荐系统的灵魂,其好坏严重影响整个推荐的转化。

常见的推荐算法简介

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

基于内容属性的推荐

这种推荐逻辑很简单,只是单纯的依赖物品之间的属性相似来构建推荐关系,结合导读中的腾讯视频推荐的例子,比如如果我在看《蜘蛛侠3》,你给我推荐《钢铁侠》、《蝙蝠侠》,理论上是有一定道理的,都是科幻大片嘛,说不定还是同个系列呢。

所以,基于内容的推荐,容易理解,并且很多时候还是有一定效果的,但实际上很多时候会存在这几种情况,导致了这种原始推荐失效。

  • 如果用户浏览当前的物品本身就不是用户的菜,甚至是一个非优质信息(当前主体不可控),再基于当前物品进行推荐就是个伪命题。
  • 基于上面这条,即使当前主体是用户的目标,但再推类似主体会造成信息冗余,即当前主体信息已经解决了用户的问题。

所以,由于用户行为的不可控,基于内容属性相似的推荐,风险还是挺高的,这是导致了这种原始直接的机制并不会得到广泛的推广。

但与乱推荐相比,还是有一定正向作用的,毕竟用户浏览的主体是自身选择的结果,本身用户对于其选择的信息主体是有一定偏好性的。

基于画像的推荐

基于物品本身属性的推荐,其实与个性化是没有任何的关系,毕竟推荐候选集只跟物品主体有关,与用户无关,就谈不上什么个性化了。

而基于用户画像(更多人喜欢用基于用户标签)的推荐,则更大程度上依赖于用户的画像属性来推荐,这就体现了用户偏好信息,根据偏好信息来选择候选集。

这是一种很通用的做法,并且在大规模数据集情况下,在很多实际的产生过程中喜欢使用这种机制。而用户的画像,或者更具体点用户的兴趣标签如何构建呢?其实就是依赖用户累积的行为数据了,通过行为数据生成用户的兴趣标签。

这看似是一种相对靠谱的做法,毕竟如果把用户的爱好都分析清楚了,主动给用户做推荐不就显得很个性化了吗?在实际的场景中,首先,并不是所有用户的行为都足够用来表征其兴趣偏好的,即我们会高估用户的行为集合,从而产生有偏差的画像属性,更甚者,如果用户完全没有行为怎么办呢?

其次,通常来说,用户的兴趣爱好是会随时间迁移而改变的,所以,把握用户的兴趣程度以及其变化并不是一个容易的事情,更何况用户实际的选择还会受很多因素影响,比如,我当前查找的一个信息并不是我之前掌握的信息,那意味着这些信息偏好在我的历史轨迹中都体现不出来,那单纯的通过我的兴趣去推荐就显得不靠谱了。

但不管怎么说,根据用户的偏好来做推荐,大方向肯定是没有问题的。

基于协同过滤的推荐

协同过滤,或许了解过推荐系统的的朋友,多多少少都能听过一些,并且协同推荐可是作为推荐领域典型案例而存在的。

协同过滤同样不会去研究物品的本身属性,甚至也没有空去构建用户的画像标签,正如他的名字描述的一样,他严重依靠于用户的行为以及其周边用户的协同行为。

举个例子,为一个用户推荐信息,那么我只需要参考其周边用户在看什么信息,就给他推荐什么信息就好了。

重点在于,如何限定周边这个范围,比如根据两个用户的行为,去构建相关关系,从而判断用户之间的相似程度,把相似用户的行为推荐给当前用户,这就是协同中典型的基于用户推荐。

而如果以物品为维度,以用户的购买或者观看记录为向量,则可以构建物品的相似度量,针对于每一个待推荐选项,用户的历史轨迹就是其向量构成,就可以判断该用户历史的轨迹信息与当前的待选物品的向量相关度了,从而判断是否要推荐,这就是基于物品的协同逻辑。

与基于用户画像的推荐对比,这种推荐有一定几率可以发现新物品,即并不严格依赖用户的兴趣。举个例子,假设几个信息的层级是 A、B、C,并且 A、B、C 是层级递进关系,并不是同一个东西,对于一个用户来说,他掌握的是 A,则意味着他的兴趣偏好大多偏向于 A,根据兴趣标签,其实是很难推荐这种递进相关的信息。

但是,如果其他用户的学习轨迹都是 A→B→C 这种轨迹,这意味着 A、B、C 三者之间本身就有前后潜在逻辑关系存在的,基于协同,即可为该用户在掌握 A 的基础上,推荐 B、C 的内容,这也是基于兴趣所做不到的地方。

当前,基于协同行为的推荐,除了基于物品还有基于用户,还有其他诸如基于模型的协同,典型如最近邻模型、基于矩阵分解以及基于图关系模型的构建的推荐机制。

基于关联规则的推荐

在上一篇中,相信大家有看到其中一个推荐场景的理由“看过 XX 的还看过”,或者“买过 XX 的用户还买过”类似的推荐理由。

实际上支撑类似理由的一个很重要的推荐算法就是关联规则。即我们通过一定的逻辑来寻找物品之间的相关关系,请注意是相关关系并不是相似关系,又或者说我们寻找并不是严格意义上属性上的相似,单纯只是为了寻找他们之间的关联性。

这就要从“啤酒与尿布”的故事说起,或许很多朋友已经听过这个故事,即超市对用户的的购物清单进行分析,发现一个很奇怪的现象,那就是很多经常在购买尿布的时候顺带会购买啤酒。

这是一个很奇怪的组合,单纯从物品属性的角度上看,两者之间很难有明面上的关系,但事实就是他们确实存在某种关联,超市于是将这两种商品放在同个货架中,于是大大提升了两者的搭配销售额,并且做了类似的计算,来优化整个货架陈列,从而提升销售额。

实际上这就是一个推荐场景,即在尿布的商品浏览的时候适当进行啤酒的推荐,从而提升搭配销售的效果,实际上这是一个关联分析的过程。

即通过他们历史的搭配售卖情况,来分析每个搭配之间的合理性,即分析不同商品组合之间的相关性,这种相关性很难去解释,但确实是在生效。

其他常见推荐算法

其实在我们实际的操作过程中,并不会严格的依赖于这种条条框框、只要合理即可行,比如我们完全可以把推荐问题转化为分类问题,针对于每个待选项,它都是 Yes or No 的问题,即一个二值分类。

再比如微信朋友圈,微信一定是会研究用户的朋友圈关系的,比如你对哪类朋友点赞、互动行为最多,它是不是会考虑推荐你欣赏的朋友偏好内容给你?毕竟微信是一个典型的熟人社交模型。

所以,推荐算法看似重要,但其实想想又没有这么重要,很多时候并不是一成不变的,都要我们根据场景去考虑,最最最重要的是,需要我们用实际效果来选择机制,也或许是多种机制共同生效的结果。

本篇主要从推荐系统的整体涉及的一些概念上,以及针对于推荐系统最重要的一些常见算法进行简单的介绍,让大家对于推荐的算法逻辑有个大致的了解。

在下一篇中,我们将继续补充推荐体系相关的基础知识,包括冷启动的机制,推荐里产生的马太效应的体现,以及具体深入分析推荐系统的评判方式,最终来帮助大家建立起推荐系统的基础知识框架。

然后再深入算法设计以及实现层,进行实操。

(全文完)

(转载本站文章请注明作者和出处 第01课:推荐算法不等于推荐系统