图解推荐系统
回顾20多年前推荐算法提出的90年代,也是中国互联网起步的时候,浏览门户网站即可满足我们对数字世界探索的大部分需求,彼时是‘人找物’,系统推荐的应用空间不大。时间在推移,内容亦在丰富,在当前海量信息爆炸的时代,五花八门的内容琳琅满目,让人应接不暇。此时需要‘物能找人’,因此推荐系统将合适的内容推送给合适的用户实在是恰逢其会。
1. 系统初探
那么推荐系统是如何运转的呢?为什么它知道我在某宝上要买的是咖啡而不是啤酒,然后在App的首页呈现?回答这个问题,我们先从推荐系统流程的角度着手了解:系统将一个物品/内容推荐给用户主要经历两个步骤,即召回与排序。
当人们浏览一个电商网站,比如女生会关注种草喜欢的美妆博主、收藏某一品牌的护肤品、加购了三只松鼠的坚果等到双十一叫男票清空购物车...这一系列的行为反应了你对某些商品的偏好,致使系统能大致勾勒出你的兴趣。在购物网站上会有很多与你兴趣相似的用户,你们有着类似的喜好,Ta喜欢的东西大概率你也会觉得不错,通过行为统计寻找你们的相似度就可以找到那些同类用户喜欢的而你还没有接触过的商品。另外,商品之间也有相似的属性,比如《魔鬼经济学》与《牛奶可乐经济学》是有关行为经济学的著作,一般我们就会见到电子书网站会为看过《魔鬼经济学》的读者推荐《牛奶可乐经济学》。如上描述的把相似的用户与相似的物品匹配起来,从而筛选出用户感兴趣物品的过程就是召回。
召回阶段取回的物品数量通常都比较大,可能在十万百万量级以上,进一步地,推荐引擎结合多种因素考量(比如业务特征、人工干预等),精细筛选出Top100款甚至更少的物品推荐给用户,这就是排序的过程。
从系统流程可以看出,相似度是推荐系统的核心环节。那么用户之间、物品之间的相似度怎么定义、如何计算呢?
2. 找到相似的用户/物品
2.1 相似度计算
对于推荐系统来说,通常是基于向量来确定两两用户或两个物品是否相似,即系统首先要把用户(用户属性或用户行为偏好)、物品(物品特征)向量化。比如有5件商品:夹克、连衣裙、球鞋、网球拍、贝雷帽,1表示用户购买过该商品,0表示未购买过。用户P买过夹克、球鞋、网球拍,用户Q买过连衣裙、网球拍、贝雷帽,则用向量表示用户P和用户Q就是R(P)=(1,0,1,1,0),R(Q)=(0,1,0,1,1)。
那么如何计算两个用户是否相似呢?计算相似度的公式有很多,如‘欧几里德距离’、‘皮尔逊相关系数’、‘余弦相似度’等。余弦相似度是常用的计算方法,即当两个向量之间的夹角越小,则两个向量越相似。让我们回忆一下中学关于两个向量u、v的余弦相似度公式:
利用公式,可以知道用户P(1,0,1,1,0)和用户Q(0,1,0,1,1)之间的相似度为:
2.2 最近的邻居
所谓物以类聚、人以群分,系统当然不需要按相似度遍历所有数据,一般推荐引擎只需要寻找一批与目标(用户/物品)最相似的‘邻居’组成一类群体进而做物品推荐。接下来看看最近的邻居是如何确定的:以用户间的相似度举例,想象一个二维平面,每个用户代表一个点,用户(点与点)之间的距离就是相似度的大小;计算用户①的若干个最近邻,一种方案就是以目标用户①为圆心,设定一个距离K,落在半径K的圆中的所有用户就是①最近的‘邻居’。
3. 推荐算法类型
上面介绍了如何计算相似度和寻找最相似的‘邻居’,接下来就要探寻推荐系统的核心——推荐算法。通常,推荐算法可以分为三类:基于属性相似度的推荐、基于协同过滤推荐、基于模型推荐。
3.1 基于属性相似度的推荐
基于属性相似度的推荐是一种基础的推荐算法,又可分为按用户属性的相似度推荐和按物品属性的相似度推荐。
用户属性的相似度推荐,即按用户的年龄、性别、地域等基础特征建模,计算用户之间的相似度,把用户A喜欢的物品推荐给与他类似的用户B。
物品属性的相似度推荐,即按物品的属性特征(以音乐举例,如音乐类型、歌手、播放时长等)建模,用户喜欢钢琴曲,而小提琴曲与钢琴曲都可以划分为轻音乐,则系统把小提琴曲推荐给用户。
上述基于属性相似度的推荐,好处是推荐解释性较强,易于理解,且不需要过多依赖用户行为的历史数据,对于长尾/上新的物品都能做到很好的曝光。然而这类算法的缺点也很明显,如算法特征过于简单(仅包括用户或物品的基础属性),而人们的喜好通常会随环境、时间成长等动态变化,无法很好的满足用户需求多样性。
3.2 基于协同过滤推荐
协同过滤,顾名思义就是指由相似兴趣的用户们组成‘邻居’互相协作,通过不断的与系统发生交互从而持续过滤掉用户不感兴趣的内容,它是一种群体智慧效应的体现。从用户与内容的角度又可划分为基于用户的协同过滤(UserCF)和基于物品的协同过滤(ItemCF)。
基于用户的协同过滤(UserCF)
基于用户的协同过滤是通过用户的行为去寻找与其相似的用户进行推荐,与上一节基于用户属性的推荐对比,两者的核心区别是计算相似度的定义不同,基于用户属性推荐只考虑用户的静态特征,而UserCF是在用户的历史行为偏好中计算相似度。
基于用户协同过滤预测用户u对物品i的兴趣程度p(ui)的公式如下:
其中,S (u , K )是包含和用户u兴趣最接近的K个用户,N (i)是对物品i有过行为的用户集合,w(uv)是用户u与用户v的兴趣相似度,r(vi)代表用户v对物品i的行为兴趣评分。从公式可以看出,基于用户的协同过滤算法主要有两步,一是用户之间的相似度,二是用户与内容之间的行为偏好分数,通过图形拆解算法的计算路径如下图。
基于物品的协同过滤(ItemCF)
基于物品的协同过滤是通过用户对物品的行为偏好找到与用户喜欢物品的相似物品进行推荐,简单理解即喜欢物品1的用户大多也喜欢物品2。
基于物品的协同过滤预测用户u对物品j的兴趣程度p(uj)的公式如下:
其中,N(u)是用户喜欢的物品的集合,S(j,K)是和物品j最相似的K个物品的集合,w(ji)是物品j和i的相似度,r(ui)是用户u对物品i的兴趣分数。同UserCF,基于物品的协同算法主要也是两步,一是物品之间的相似度,二是用户产生过偏好行为的物品评价分数,图示计算路径如下。
3.3 基于模型的推荐
基于模型的推荐主要是利用机器学习的方法挖掘用户、物品、用户历史行为偏好之间的关系,从而找到用户可能感兴趣的物品进行推荐。机器学习包括深度学习的推荐算法在业界已经提出了很多种,本文仅介绍一种经典的模型——基于隐语义的模型推荐(LFM)。
如下图形式是把所有用户和物品按用户对物品的偏好程度画成一张表中,推荐系统的工作就是要预测那些表格中的空白值。
为了找到用户喜欢的物品,我们可以先把用户按其兴趣偏好进行分类,比如在买手机的时候有的人会关注品牌,有的人喜欢尺寸要大、有人在意型号、有人对价格敏感等等。同样,物品也可以按这些用户偏好(品牌、尺寸、型号、价格)进行分类。隐语义模型就是要找到用户-偏好、物品-偏好这两个关系矩阵(如下图),然后通过矩阵计算的方式合成用户-物品的完整矩阵,求得用户对物品的推荐分数。系统求解的过程是随机生成初始矩阵,推荐结果要与原始数据矩阵中有值的项尽可能相近,这就转换成了机器学习求最优解的问题。
相比协同过滤,无论UserCF或ItemCF,能够影响推荐效果的往往是少部分的用户行为和物品,而隐语义模型则通过机器挖掘隐藏在数据中的偏好从而进行推荐,通常能更充分的探寻到数据中的信息,推荐效果也更准确。但因为偏好信息没有具体物理意义,所以其缺点也同样明显,无法对推荐结果做出合理的解释。
4. 谈信息茧房
至此,推荐系统的大致原理和算法模型已经介绍完毕了。在结束之前,最后简单聊聊信息茧房问题。在当前的互联网世界中,无论图文信息流亦或短视频应用,到处充斥着个性化推荐算法,很多用户担心终将会被禁锢在由狭隘偏好所编制的茧牢中。
其实破解信息茧房就是在回答一个问题,即什么是好的推荐系统?从技术的角度,多样性推荐既是系统需要纳入的算法之一,也是衡量系统效果的指标,所以一份推荐结果并不会永远只有用户曾经赞过看过的内容。同样,从策略的角度,PM们也需要关注打散、重排、去重过滤逻辑是否合理有效,可以借助线上badcase持续跟踪优化。
意料之外,情理之中,也许是对推荐系统最好的诠释。
公众号:策略伽 欢迎关注~