读这本书,本来是因为最近接的一个项目,和推荐相关,想熟悉下推荐的基础理论。读完后感叹,为啥早没看这本书,推荐/搜索不愧是经典的策略分支之一,理论体系非常成熟,很大一部分能够复用到其他的策略分支中去,一些之前工作中的迷茫,都能找到解决的思路。
希望通过本篇读书笔记,二次思考,对推荐的系统方法论做个抽象,复用到后面的策略工作中去。
二次思考,怎么理解推荐呢?或者说怎么把推荐系统变成一套思维模型,来指导相关工作呢?
啥是元?是主体,是客观存在的事物。
啥是线?是关系,是连接的方式。
- 最开始的理解,人是元,是主体,兴趣就是围绕在人身边的小元,以人为主键构成一个人的画像,不同的画像组合起来,就是人所处在的面,而不同的商品、内容、信息,都在另一个面上,推荐就是条线,根据各种人与人、人与物、物与物间的信息,连接两个面中不同的大元、小元。
升级下理解
推荐系统是一个三维结构。
人所在的面,是一个纯粹的,由用户、需求组成的面
- 圆心,依然是人,是主键
- 围着圆心的第二层,是围绕在这个人身边的各种行为、兴趣、需求。旅游是兴趣&需求,确认了旅游的地方,买票是需求。购房是需求、买车是需求。
- 第三层元,是围绕在各种兴趣、需求旁边的属性,它们描绘了二层元的各种属性,对房子来说,是小区、是物业;对买车来说,是马力、是内饰;对买火车票来说,是起点终点。
商品、内容、信息所处的面
- 圆心,第一层元,围着用户千奇百怪的需求, 可以是电商的商品、旅游攻略、房子信息、火车票。
- 第二层元,这些商品周边各种客观的属性标签,像火车票的起点终点、旅游攻略的地理位置、行程安排。
推荐是线,我们通过各种人与人、人与物、物与物的行为记录、信息数据,建立这种线。因为建立认知一定发生在两个主键之间,所以线的两端一定是主键。线的建立,背后是一个用户场景,拆解影响一个场景的,有用户心智、流程、动机、角色、心理,这五个因素。
在两个面间,叠加上时间,就变成了一个三维模型,时间的改变,带动面和面之间连接的改变、元的改变。
根据这个思维模型,我们怎么思考推荐系统在产品中的定位,设计一套围着推荐系统的产品?
最好的推荐系统,或者说发挥商业价值最大的推荐系统,在哪里?
头条、抖音、火山,用户的操作都极简单,但依托丰富的内容体系,都达到了亿级的DAU。在这个推荐系统里,商品是内容,人做为主键。
这个推荐系统满足了用户什么需求?如何在头条的产品体系中发挥的作用?从产品愿景<搭建全球最大的内容创作与交流平台看>,分别满足了不同人群的创作、记录、传播、分享、猎奇、学习、好玩、打发时间等需求。
推荐系统作为信息分发的一种模式,承载了产品愿景中的交流这项使命。围着用户心智&需求,在整体内容库中做召回,分发给每一个用户,通过内容搭配+交互细节,保证用户的使用时间&粘性。
什么样的产品,推荐系统空间最小?12306。
我们怎么做导购?推荐在导购里的作用是什么?
- 围着来贝壳的用户心智,我们做导购的愿景、目标是什么?
- 目标,依托用户画像,推荐给用户专业、有趣的购房内容,引导商机转化。
- 里程碑1,在19年底打到日均商机量6000。
推荐的定位是什么?
三次思考
1. 好的推荐系统
本章将介绍什么是推荐系统、推荐系统的主要任务、推荐系统和分类目录以及与搜索引擎的区别等。
然后本章将分门别类的介绍目前业界常见的个性化推荐应用。
最后,本章将介绍推荐系统的评测,通过介绍评测指标给"好"的定义,从而最终解答"什么是好的推荐系统",这个问题。
1.1 什么是推荐系统
在信息过载时代,对信息生产者、信息消费者,如何让自己生产的信息获得关注、如何找到自己感兴趣的信息,都是难题。
推荐系统就是解决这一矛盾的重要工具。推荐系统的任务,就是联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对他感兴趣的用户面前,从而实现生产者和消费者的双赢。
一个有趣的点,作者提到了解决信息过载的三个方式,推荐、搜索、分类,其中分类的典型公司,雅虎还有国内的hao123,都基本死了。
猜测下,分类目录终究不是一种完美的解决用户精细化需求的办法,随着近些年信息量进一步的爆炸,体验上终究慢慢被搜索、推荐超越,那未来会不会出现超越搜索推荐的,信息检索方法?
要了解推荐如何工作的,可以回顾下,现实生活中,用户面对多选择问题,如何决定看哪部电影,如何解决的?
- 向朋友咨询
- 看自己之前喜欢的导演和演员,有没有芯片
- 看排行榜,别人都在看什么
从以上三种方法可以看出,推荐算法的本质是通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式。
作者也提到,搜索和推荐的不同,是搜索可能是用户有明确的需求,来搜索目标;推荐是,用户可能不知道自己要什么,推荐给他感兴趣的东西。
1.2 个性化推荐系统的应用
1.2.1 电子商务
这是亚马逊的商品推荐列表,主体由三部分构成。
- 推荐结果的标题、缩略图及内容属性
- 推荐结果的平均分
- 推荐理由
1.2.2 电影和视频网站
奈飞的宣传资料中宣传,他们有60%的用户,是靠推荐找到自己感兴趣的电影或者电视剧的。
上篇亚马逊的销售额,说20~30%来自推荐,看起来,推荐的效果和业务属性关系也很大。电影是典型的轻业务,大部分用户都没有明确的需求。
1.2.3 个性化音乐推荐
总结的音乐业务特点:
- 物品空间大:物品数很多
- 消费每首歌的代价很小:对于在线音乐来说,都是年费的
- 物品种类丰富:音乐种类丰富
- 听一首歌耗时很少:听一首音乐的时间成本很低
- 物品重用率很高:一首歌会被不同的人反复听
- 用户充满激情:一个用户会消费很多首歌
- 上下文相关:用户的偏好,很受当时的场景影响
- 次序很重要:用户听音乐一般是按照一定的次序一首一首的听
- 很多播放列表资源:很多用户会创建很多个人播放列表
- 不需要用户全身关注:音乐不需要用户全身关注的听,很多用户将音乐作为背景声音
- 高度社会化:用户听音乐的行为具有很强的社会化特性,比如我们会和好友分享自己喜欢的音乐。
相比购物来说,音乐则更轻!也更适合推荐。
这里抛出一个问题,有没有什么框架,能够全维度描述一个业务的特点?
知乎上有咨询行业的朋友抛出一套方法论,所有企业的盈利模式都可以用waht who how,既用什么产品,赚谁的钱,怎么赚。
1.2.4 社交网络
社交网络中的个性化推荐技术,主要应用三个放啊面:
- 利用用户的社交网络信息对用户进行个性化的物品推荐。
- 信息流的会话推荐
- 给用户推荐好友
1.3 推荐系统评测
什么才是好的推荐系统?
一个完整的推荐系统一般存在三个参与方,用户、物品提供者和提供推荐系统的网站。
以图书推荐为例,首先,推荐系统需要满足用户的需求,给用户推荐那些令他们感兴趣的图书。其次,推荐系统要让各出版社的书能够被推荐给对其感兴趣的用户,而不是只推荐大型出版社的书。最后,好的推荐系统设计,能够让推荐系统本身收集到高质量的用户反馈,不断完善推荐的质量,增加用户和网站的交互,提高网站的收入。
因此在评测一个推荐算法时,需要同时考虑三方的利益,一个好的推荐系统是能够令三方共赢的系统。
一个典型的复杂策略系统,多角色构成,利益各不相同,但最终的目标,是共赢(但其实最重要的还是平台长期利益)。
所以,好的推荐系统不仅仅能够准确预测用户的行为,而且能够拓展用户的视野,帮助用户发现那些他们可能会感兴趣的,单却不那么容易发现的东西。
这有点绕,假如以单纯的点击购买为目标,那很多时候,不管你推荐不推荐,用户都会购买,推荐的价值不应该在这里,而在于将用户感兴趣或者潜意识感兴趣的东西,展现给用户,促成购买。
同样是以购买为目标,但盘子变大了。
来贝壳的用户,推荐的价值在哪里?可能不同生命周期的用户,推荐价值不同。
- 对刚来看房的用户,模糊的需求,我们应该顺着他可能的兴趣推荐房源;
- 对在贝壳看了一段房子,锁定目标小区的用户,推荐的价值,可能在围绕着这个小区、相似小区,给他推荐房源,进一步锁定成交。
但不管是哪种用户,房子都是个非常复杂、重决策的东西,推荐单纯的展现房源信息,可能都不太够。
为了全面测评推荐系统对三方利益的影响,本章将从不同角度出发,提出不同的指标。这些指标包括:准确度、覆盖率、新颖度、惊喜度、信任度、透明度等。
1.3.2 评测指标
用户满意度:以一个论文推荐网站做的问卷调查为例,该问卷的调查问题是,请问下面那句话最能描述你看到推荐结果后的感受?
- 推荐的论文都是我非常想看的。
- 推荐的论文,很多我都看过了,缺失是符合我兴趣的不错论文。
- 推荐的论文和我的研究兴趣是相关的,但我并不喜欢。
- 不知道为什么会推荐这些论文,他们和我的兴趣丝毫没有关系。
这个问卷,很tricky的在于,没有直接问用户满意度,而是问用户看到推荐结果的感受。这点我们可以学习。
预测准确率
topN推荐,网站在给用户提供推荐服务时,一般是给用户一个个性化的推荐列表,这种挸叫做topN推荐,topN推荐的预测准确率一般是靠准确率/召回率度量的。
召回率=(R∩T)/T
准确率=(R∩T)/R
覆盖率
覆盖率描述一个系统对物品长尾的发掘能力。覆盖率有不同的定义方法,最简单的定义为推荐系统能够推荐出来的物品占中物品集合的比例。
多样性
用户的兴趣是广泛的,浏览单个网站时,需要既可能是发散的、也可能是收敛至一点的,但这不影响我们要求推荐结果的多样化。
不在一棵树上吊死。
所以,多样性指标,描述了一个用户的推荐列表里,商品的相似关系,下面是计算公式。
但注意,对不同的商品,这个计算函数,S,都不同,对内容、电商,计算公式不同。
如何既满足用户的满次需求,又露出合适数量的多样性推荐?从不同用户的生命周期、浏览目的出发,可能比较合适,比方说一个看电影的用户,80%时间喜欢动作片,20%时间喜欢动画片,那给他的推荐,是82分,比较合适。
对买房用户来说,刚开始浏览熟悉的,可以推荐的多样性高一点,对锁定小区的,可以推荐的多样性少一点。
新颖性
新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。
新颖度对每个用户来说各不相同,因为每个用户不知道的东西是不一样的,所以这部分的统计,严重依赖问卷。
惊喜度
惊喜度指标和新颖度的区别,最大之处在于,惊喜度更强调结果要好,新颖度从定义上,只单纯要求结果要新。
1.3.3 评测维度
评测维度和评测指标还不完全一样,评测指标是垂直衡量一个系统的各维度表现优劣,测评维度,是从几个关键因素,用户、商品、时间角度,衡量推荐系统在各横向维度下的表现。
- 用户维度:主要包括用户的人口统计学信息、活跃度以及是不是新用户等。
- 物品维度:包括物品的属性信息、流行度、平均分以及是不是新加入的物品等。
- 时间维度,包括季节,是工作日还是周末、是白天还是晚上等。
2. 利用用户行为数据
为了让推荐结果符合用户口味,我们需要深入了解用户。如何才能了解一个人呢?<论语.公冶长>中说"听其言,观其行",也就是说可以通过用户留下的文字和行为了解用户兴趣和需求。
心法一句话!
2.1 用户行为数据简介
2.3 实验设计和算法评测
2.3.2 实验设计
协同过滤算法的离线实验一般如下设计。首先,将用户行为数据按照均匀分布随机挑选M份,挑选一份作为测试集,将剩下的M-1分作为训练集。然后在训练集上建立用户兴趣模型,并在测试集上对用户行为进行预测,统计出相应的评测指标。
为了保证评测指标并不是过拟合的结果,需要进行M次试验,并且每次都是用不同的测试集。
2.4 基于邻域的算法
余弦相似度的计算方式
其中N(u),是用户u曾经有过正反馈的物品集合。
N(v),为用户v曾经有过正反馈的集合。
2.4.1 基于用户的协同过滤算法
1.找到和目标用户兴趣相似的用户集合。
2.找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
测评指标,分别是
- 准确率和召回率,在K=80的时候,准确率+召回率最高,所以选择合适的K对推荐系统的精度比较重要。
- 流行度,K越大,流行度越大,本质上是因为参考用户数量的变多,导致推荐结果越来越趋近于全局热门的物品。
- 覆盖率,K越大,推荐结果的覆盖率越低,覆盖率的降低是因为流行度增加,随着流行度增加,usercf越来越倾向于推荐热门的物品,从而对长尾物品的推荐越来越少,因此造成覆盖率的降低。
如果把人群和商品做为两个平行空间,用户对商品的兴趣做为连线,那推荐就是根据已有的数据,建立新的连线。
为什么准召率没有办法衡量这个系统的优劣?覆盖率和流行度,在这里是代表了什么价值?
2.4.2 基于物品的协同过滤算法
基于物品的协同过滤算法(ItemCF),给用户推荐那些和他们之前喜欢的物品相似的物品。相比基于用户的协同过滤算法(UserCF),有两个优势:
- 随着用户数量的增加,计算用户兴趣相似度矩阵将越来越困难,其运算时间复杂度和空间复杂度的增长和用户数的增长近似平方关系。
- 基于用户的协同过滤,很难对推荐结果做出解释。
基于物品的协同过滤孙发主要分为两步。
- 计算物品之间的相似度
- 根据物品之间的相似度和用户的历史行为给用户生成推荐列表。
有趣的是,基于物品的协同过滤算法,在K值增加的时候,表现出了和UserCF很相似的指标表现。
针对准确率、召回率、覆盖率、流行度,这四个指标的表现,是你,你怎么拍K的取值?
2.4.3 UserCF和ItemCF对比
3.推荐系统冷启动的问题
推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,因此大量的用户行为数据就成为推荐系统的重要组成部分和先决条件。
本章主要讨论,如何基于用户的蛛丝马迹信息,完成冷启动。
3.1 冷启动问题简介
- 用户冷启动,主要解决如何给新用户做个性化推荐的问题。
- 物品冷启动,物品冷启动主要解决如何将新的物品推荐给可能对他感兴趣的用户这一问题。
- 系统冷启动,解决如何在一个新开发的网站上,设计个性化推荐系统。
对于这三种冷启动问题,有不同的解决方案,一般来说,可以参考如下:
- 提供非个性化的推荐,给用户推荐热门排行榜,等用户数据全了,再改成个性化的。
- 利用用户注册时提供的年龄、性别等,做粗颗粒度的个性化。
- 在用户登录时,选择标签、对一些物品进行反馈。
- 对于新加入的物品,可以利用内容信息,将他们推荐给喜欢过和他们相似的物品。
- 在系统冷启动时,可以引入业务专家,建立起物品的相关度。
3.2 利用用户注册信息
用户注册信息分三种
- 人口统计学信息:包括用户的年龄、性别、职业、民族、学历和居住地。
- 用户兴趣的描述:有一些网站会让用户用文字描述他们的兴趣。
- 从其他网站导入的用户站外行为数据,比如用户通过豆瓣、新浪微博的登录,就可以在用户同意的情况下,获取用户的一些行为数据和社交网络数据。
举例,一个28岁的男性,物理学家的用户,可以根据28岁、男性、物理学家,这三个特征。
建三张表,分别是男性—电视剧相关度表、年龄—电视剧相关度表、性别—电视剧相关度表。
然后将3张相关表查询出的电视剧列表按照一定权重相加,得到给用户的最终推荐列表。
3.4 利用物品的内容信息
物品冷启动需要解决的问题是,如何将新加入的物品推荐给对它感兴趣的用户。
从第二章介绍的两种推荐算法—UserCF和ItemCF来看,UserCF对这个问题并不是非常敏感,因为对很多网站来说,用户总有从其他途径了解这些商品、产生反馈,当用户产生反馈后,和他历史兴趣相似的其他用户的推荐列表就有可能出现这一物品。
对有些五站的推荐列表可能是用户获取信息的主要途径,比如豆瓣网络电台,那么对UscerCF算法就需要解决第一推动力问题,可以考虑利用物品的内容信息,将新物品先投放给曾经喜欢过和它内容相似的其他物品的用户。
对于ItemCF来说,需要重新基于用户行为,计算物品的相似度。但新入库的物品,是没有用户行为的,这时,可以根据物品内容,计算物品相关表,并且频繁的更新相关表。
3.5 发挥专家的作用
对物品进行各维度的标注,然后计算相似度。
4. 利用用户标签数据
4.3 基于标签的推荐系统
4.3.2 一个最简单的算法
拿到了用户标签的行为数据,相信大家都可以想到一个最简单的个性化推荐算法。
- 统计每个用户最常用的标签。
- 对于每个标签,统计被打过这个标签次数最多的物品。
- 对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门物品推荐给这个用户。
4.3.4 基于图的推荐算法
前面讨论的算法简单易懂,也容易实现,但缺点是不够系统化和理论化。
首先,我们需要将用户打标签的行为表示到一张图上。我们知道,图是由顶点、边和边上的权重组成的,而在用户标签数据集上,有三种不同的元素,既用户、物品和标签。因此我们需要定义三种不同的定点,既用户顶点、物品顶点和标签顶点。
然后,如果我们得到一个表示用户U给物品I打了标签B的用标签行为(U/I/B),那么,最自然的想法就是在图中增加3条边,首先需要在用户U对应的顶点V(U)和物品I对应的定点V(I)之间,增加一条边(如果这两个顶点之间已经有边,则应该增加权重1)。
在定义出用户-物品-标签图后,我们可以用第二章提到的personalRANK算法,计算出所有物品相对当前用户在图上的相关性,然后按照相关性从大到小的排序,给用户推荐排名最高的物品。
5. 利用上下文信息
本章之前提到的推荐算法主要集中研究了如何联系用户兴趣和物品,将最符合用户兴趣的物品推荐给用户,但这些算法都忽略了一点,就是用户所处的上下文,这些上下文,包括用户访问系统的时间、地点、心情等,对于提高推荐系统的推荐效果非常重要的。
比如,系统不能因为用户在夏天喜欢某件T恤,就在冬天也给该用户推荐类似的T恤。
我觉得冬天夏天这个例子,还不是很明显,假如基于UserCF来推荐,那用户总会开始慢慢迁移兴趣,夏天点击T恤,冬天点击羽绒服,用户行为数据的变化是非常明显的,系统应该也能学到。
更恰当的例子,可以早上上班坐地铁和中午午休刷手机,两个场景下的心理、需求是不同的,但这么细颗粒度的差异,是很难从用户行为数据上反应出来的。
5.1 时间上下文信息
5.1.1 时间效应简介
- 用户兴趣是变化的,用户的兴趣,是随着年龄增长、身份转变、甚至认知改变,而变化的。
- 物品也是有生命周期的,一部电影可能刚上映的时候被很多人关注,但过一段时间,就被遗忘了。
- 季节效应,季节效应,主要反应了时间本身对用户兴趣的影响。
5.1.2 时间效应举例
5.1.3 系统时间特性的分析
在给定时间信息后,推荐系统从一个静态系统变成了一个动态系统,而用户行为数据,也变成了时间序列。