1. 为何要做个性化推荐
个性化推荐,一方面从用户角度,可以基于用户特征过滤掉“无效”物品/信息,推荐符合用户口味的物品/信息,从而提升用户体验,进一步也增加用户点击率,从而为转化提供更多的可能性;另一方面从系统的角度,也可以让更多长尾的物品/信息被曝光,从而最大效率的利用资源。如下图所示,可以看出好的个性化推荐比简单热门排序算法有更好的的有效信息覆盖度(图中斜线面积)。
2. 推荐算法的前提——断物识人
通常我们说物以类聚、人以群分,推荐算法也是基于用户喜好物品/信息的相似性和同类用户兴趣相同的原理来推荐,这里就涉及到人一物和人—人—物的关系,为了可量化人与物以及人与人的关系,我们需要做的就是给提炼出人和物的特征——即给人和物打上标签,通过标签抽象出事物更具有表意性、更为显著的特点,然后通过标签进行匹配。
2.1 给物打上标签
标签不只是简单的给物品/信息分类,而是代表着分发给不同的用户群体,比如运动、健身类视频就可以在标签中加上“球迷”“健身达人”等,有关动漫等二次元的内容,也可以加入些类似“宅男”“萝莉”等标签。
这里补充一下标签和分类的区别,分类是树状的,是自上而下依次划分的。在分类体系里,每个节点都有严格的父子关系,在兄弟节点层都具有可以被完全枚举的属性值,如天猫的商品服务分类(下图)。应用分类时必须考虑分类权威性和信息完备性问题,避免因为子节点覆盖不全或分类错误导致的认知问题。
标签是网状的,更强调表达属性关系而非继承关系, 只有权重大小之分,不强调包含与被包含关系。这就使得相对于分类而言,标签的灵活性更强。 在权威性方面,标签是弱化的,每个用户都可参与进来,基于自己的偏好贴标签,从而借助规模效应实现对信息表意完备性的覆盖。因此,在设计系统时,可以先基于产品场景快速覆盖主要标签,再结合标签集合的使用频次、专家建议等因素逐步将部分入口收敛到树状的分类体系中来。
通过PGC和UGC可以获取物品/信息标签。例如人人都是产品经理上文章通过审核后,官方会在文章下面会打上相关标签。有的产品除给物品/信息打上标签之外,还会以分值代表这一标签的表征程度,如音乐推荐引擎潘多拉(Pandora)的音乐基因工程中,歌曲体系被抽离出450个标签,细化到如主唱性别、电吉他失真程度、背景和声类型等。每一首歌曲都会经由工作人员耗时二三十分钟,有选择性地标注一些标签,并以0~5的分值代表这一标签的表征程度。
而在豆瓣,给电影的标签的是普通网友产出(如下图所示)。群体的力量为豆瓣积累了大量具有语义表意性的标签。当然,由于用户的多样性和编辑的开放性,用户标签系统需要经过特定的清洗和归一处理。
2.2 给用户打上标签
一个用户行为的数据集一般由一个三元组的集合表示,其中记录{u,i,b}表示用户u给物品i打上了标签b(当然实际中会包含用户属性、物品属性等,更为复杂)。给用户提供标签一般有4种方法 :
给用户推荐一个系统中最热门的标签;
给用户推荐物品i上最热门的标签;
给用户推荐他自己经常使用的标签;
将方法2和方法3融合,通过一个系数将上面的推荐结果线性加权,生成最终的推荐结果。
实际推荐过程中,为了给用户更精确的推荐,除了用户行为数据外,还会收集用户基本信息、位置信息、搜索等信息建立完整的用户画像。
3. 推荐算法原则——物以类聚、人以群分
3.1 物以类聚:基于物的相似性推荐
基于物的相似性推荐是基础的推荐策略。如果你浏览或购买过某种类型的内容/物品,则基于类型或标签给你推荐其他内容/物品(如下图)。以内容推荐为例,其用于相似度计算的常见因素有:作者层面的相似性(基于订阅或偏好关系),内容层面的相似性(如关键词、话题、类目、标签等)。
如果想要进一步细化,那么可以借助TF– IDF方式给不同的标签设定权重,其基本思想是一个标签在某内容中出现次数越多, 同时在所有内容中出现次数越少, 越能够代表该内容, 那么这个标签的权重应该较高,反之区分度就没有那么高,权重较低。
以内容/物品属性来推荐:
(1)优点
只依赖物品本身的特征而不依赖用户的行为,让新的物品、冷僻的物品都能得到展示的机会。
(2)缺点
推荐质量的优劣完全依赖于特征构建的完备性,但特征构建本身是一项系统的工程,存在一定成本;
基于物品或信息属性推荐没有考虑用户对物品的态度,用户的品位和调性很难得到诠释和表达。比如,市面上关于内容分发的书籍很多,仅从标签词上很难分辨出高下。
因此,为了在推荐中更好地引入受众反馈因素,提出了基于用户行为的“协同过滤”概念。
3.2 人以群分:基于用户行为的协同过滤
协同推荐是目前应用最为广泛的推荐机制,其基于用户行为的特点使我们不需要对内容/物品进行完整的标签化分析和建模,从而实现了领域无关,可以很好地发现用户的潜在兴趣偏好。考虑到协同过滤的方式依赖历史数据,新的用户和新的物品会存在冷启动的问题,该问题笔者会在后续文章中继续进行探索和梳理。
基于用户的协同其基础思路分为两步:
第一步,找到那些与你在某一方面口味相似的人群;
第二步,将这一人群喜欢的新东西推荐给你。
目前主要包括三个子类:基于用户( User- based)的协同、基于物品( Item- based)的协同、和基于模型( Model- based)的协同。
(1)基于用户的 CF(User CF)
基于用户的CF的基本思想相当简单,通过用户对内容/物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。下图给出了一个例子,对于用户 A,根据用户的历史偏好,这里只计算得到一个邻居—用户C,然后将用户C喜欢的物品D推荐给用户 A(如下图):
① 发现偏好相同的用户
通常用 Jaccard 公式或者余弦相似度计算两个用户之间的相似度。设 N(u) 为用户 u 喜欢的物品或信息集合,N(v) 为用户v喜欢的物品或信息集合,那么u和v的相似度为:
假设目前共有4个用户:A、B、C、D;共有5篇物品或信息:a、b、c、d、e。用户与物品/信息的关系(用户喜欢物品/信息),如下图左边所示,为计算方便,通常首先需要建立“物品—用户”的倒排表(如下图中间所示),然后对于每个物品,喜欢他的用户,两两之间相同物品加1。例如喜欢物品 a 的用户有 A 和 B,那么在矩阵中他们两两加1(如下图右边所示)。
计算用户两两之间的相似度,上面的矩阵仅仅代表的是公式的分子部分。以余弦相似度为例(如下图),到此,计算用户相似度就大功告成,可以很直观的找到与目标用户兴趣较相似的用户。
② 推荐物品
首先需要从矩阵中找出与目标用户u最相似的K个用户,用集合S(u, K) 表示,将S中用户喜欢的物品或信息全部提取出来,并去除u已经喜欢的物品。对于每个候选物品i ,用户u对它感兴趣的程度用如下公式计算:
如上面的4个用户,假设我们要给A推荐物品,选取 K = 3 个相似用户,相似用户则是:B、C、D,那么他们喜欢过并且A 没有喜欢过的物品有:c、e,那么分别计算 p(A, c) 和 p(A, e),通过公式可计算出用户 A 对 c 和 e 的喜欢程度可能是一样的,在真实的推荐系统中,只要按得分排序,取前几个物品就可以了。
(2)基于物品的 CF(Item CF)
基于物品的 CF 的原理和基于用户的 CF 类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。下图给出了一个例子,对于物品A,根据所有用户的历史偏好,喜欢物品 A的用户都喜欢物品C,得出物品A和物品C比较相似,而用户C喜欢物品A,那么可以推断出用户C可能也喜欢物品 C。
ItemCF的算法结构基本与UserCF的算法类似(如下图),只不过由对人的相似度改为了物品之间的相似度,这里不做过多说明了。
N(i)和N(j)表示喜欢物品i的用户数,ItemCF的算法结构基本与UserCF的算法类似,这里不做过多说明了。
(3)基于模型的协同
基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测推荐。
① 建立好评分规则
比如,对于一篇内容而言,可能会有以下行为:
② 算出用户对物品或信息的偏好
基于模型的协同最常见的方法为矩阵分解(Matrix factorization),其示意图如下图左边。矩阵分解通过把原始的评分矩阵R分解为两个矩阵相乘,只考虑有评分的值,训练时不考虑missing项的值,如下图右边所示。其背后的核心思想,找到两个矩阵,它们相乘之后得到的那个矩阵的值,与评分矩阵R中有值的位置中的值尽可能接近。这样一来,分解出来的两个矩阵相乘就尽可能还原了评分矩阵R,因为有值的地方,值都相差得尽可能地小,那么missing的值通过这样的方式计算得到,比较符合趋势。具体案例可参考知乎上关于网易云音乐的歌单推荐算法的回答。
4. 个性化推荐系统的架构
个性化推荐引擎架构主要包括三部分,如下图所示:
模块A部分负责从数据库或缓存中拿到用户行为数据,通过分析不同行为,生成当前用户的特征向量(即标签),如果使用非行为特征,就不需要行为提取和分析模块了,该模块的输出就是用户特征向量。
模块B部分负责将用户的特征向量通过特征- 物品或信息相关矩阵转化为初始推荐物品或信息列表。
模块C部分负责对初始的推荐列表进行过滤、排名等处理,从而生成该引擎的最终推荐结果。
此外,有的推荐系统会将用户行为拆分为数据和事件,其中,数据的时间敏感度更低,事件的时间敏感度更高。基于时间维度,会在推荐系统中增加一个近线层,比如,我在大众点评上输入了野郊公园后,如果希望及时更新用户的推荐列表,那么这次观看动作就会被视作事件型进入近线层,以更快地更新用户画像数据,因此短期内我会收到公园甚至是该公园相关推荐,但是过了一段时间后,公园的频度就会少很多。
5. 小结
一说到个性化推荐,大家都会觉得这是技术来主导的事情,但是通过前面对个性化推荐的了解后, 作为产品经理,还是有不同的优化空间和迭代导向。
5.1 完善用户画像
完善用户画像既可以通过尽可能多的外部渠道数据塑造用户来实现,也可以借助产品设计和运营活动引导用户多沉淀行为来实现。以支付宝为例,一次过年的集五福活动,就让它收集了数以亿计的关系链数据。而紧随 其后的蚂蚁森林、蚂蚁庄园等轻社交游戏,间接地丰富了用户的线下支付数据、用户的健康数据等。
5.2 完善规则系统, 优化用户使用体验
一方面,规则是最快的上线生效途径,可以用于纠偏、提权等操作。比如最新的网络语举个例子,在《中国有嘻哈》开播之前,大众是不知道红花会是什么的。这时,产品经理就该进行规则干预了,标注红花会是一个嘻哈团体。
另一方面,需要认识到短期的干预是应该逐步被长期的机制所替换的。我们应该下力气解决系统的滞后性, 让它能够更快速地实现搜索意图理解的进化,比如监控全网产出的新物品或信息,分析其中的共现词汇特点。
5.3 根据推荐的结果优化推荐结果
评测推荐系统的指标有:
用户满意度;
预测准确度;
覆盖率;
多样性;
新颖性;
惊喜度;
信任度;
实时性;
健壮性和商业目标。
因此,基于不同的场景,在使用推荐系统后,产品需要去亲自体验并收集各方面反馈,将反馈同步给技术,并基于反馈,尝试不同推荐方式共同作用,做到查遗补缺,找到更有的推荐方案。