一直对各类大热的推荐算法保持谨慎的怀疑态度,去年读了项亮的《推荐系统实践》后,稍稍改变了些看法。了解它的好处在于,在技术与价值观的争论大赛中,能把自己摆到一个比较远的位置来思考,了解后再相互比较,会有一个更全面的认识。就像我的一位朋友对我说的:“你先要知道什么是理性的,你还要知道什么是感性的,理性可能是你最好的选择,但是此时此刻,你仍然选择了感性。”
以下是一些读书笔记,希望和大家分享这本好书。
1.推荐系统的产生
人们从信息匮乏时代走向了信息过载时代,数字空间的信息膨胀速度远远超过人类的接受水平,以往的黄页、导航等等工具已经不够用了,人们希望从大量的信息中筛选出自己感兴趣的信息,一些信息提供方也希望自己的信息被人们发现。
在这种需求下,出现了两种不同的思路,最终演变成了两种不同的产品来帮助人们提升效率。一种思路认为,人们在寻找信息前已经有了大概的方向,知道自己想要的东西是什么,我们只需要从海量的信息中筛选出相关的信息即可,这种思路演变为的产品叫做搜索引擎;另一种思路认为,人们不需要去关心自己想要什么,我们在海量的信息中找出那部分人们喜欢的信息,然后直接给他即可,这种思路演变的产品叫做推荐系统。
搜索引擎和推荐系统,解决的都是信息过载的问题。搜索引擎需要用户主动提供准确的关键词来寻找信息,满足用户有明确目的主动查找信息需求;推荐系统不需要用户主动提供明确的需求,由系统主动推荐信息到用户面前,在用户没有明确目的的时候帮助他们发现信息。
2.推荐系统的类别
推荐系统的类别,分为个性化推荐和非个性化推荐。个性化推荐是指,根据用户的兴趣和行为,给用户推荐感兴趣的信息。非个性化推荐指,不针对特定用户,对全部的用户推荐同样的信息。
2.1个性化推荐
个性化推荐,针对不同用户推荐不同的信息。实行个性化推荐需要满足两个条件:1.存在信息过载;2.用户没有明确的需求。
基于以上两个条件来看,某些领域天然的具有使用个性化推荐的优势,比如:新闻,用户没有十分明确的需求(可能有比较大类型的口味偏差)且信息量太大;而某些领域天然的不具备这样的条件,比如被寡头垄断的行业(种类太少),或者信息更新速度太慢的行业。
而有些产品就不太适合个性化推荐,比如我经常用的外卖app回家吃饭,不知道哪个版本开始就把推荐的功能放在了核心位置。首先,一个固定地理位置附近的回家吃饭家厨相对有限,根本不存在信息过载的问题,随便翻几下就能翻到底了;其次,对于很多用户来说已经有了部分明确的需求(口味等),一个筛选或者搜索已经够用了。所以这个时候使用个性化推荐,个人认为不是一个投入产出比划算的场景。
作者特别指出了一种独特的个性化推荐——个性化广告,广告是整个互联网的重要商业模式,需要把广告和传统的个性化推荐加以区分:
•狭义个性化推荐——帮用户找到感兴趣的信息——以用户为核心
•个性化广告推荐——帮广告找到对它们感兴趣的用户——以广告为核心
2.2非个性化推荐
非个性化推荐不针对特定用户,对全部的用户推荐同样的信息。非个性推荐的算法比较简单,有些信息完全可以让人工来做(比如互联网运营同学,或者某一领域的专家)。
非个性化推荐可以解决两个问题:1.让全局优秀内容被大家都看到;2.让新加入的优秀内容被发现。
非个性化推荐在实际应用中也同样常用,比如,一个电商网站的top10排行榜,一个音乐网站的专家推荐栏目等等。
2.3小思考
选择个性化推荐还是非个性化推荐,需要根据产品的具体场景来分析,主要取决于供给资源的信息量,供给资源可能是商品、新闻、音乐等等。当然,对于大型平台来说,信息量是让它变大的基础资源,所以各类推荐算法就变得十分重要了,对于一些小的产品来说,还是先把核心精力放在其他地方比较好。
3.个性化推荐算法
个性化推荐算法包含非常的种类,这里可以简单介绍几种比较好理解的协同过滤算法。
协同过滤算法里面比较常用、也比较好理解的有两种:基于用户的协同过滤算法UserCF和基于物品的协同过滤算法ItemCF。这两种都属于基于邻域的方法neighborhood-based。
UserCF的核心思路是,给用户推荐和他兴趣相似的其他用户喜欢的物品。先找到和目标用户兴趣相似的用户集合,再找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
ItemCF的核心思路是,给用户推荐和他之前喜欢的物品相似的物品。先计算物品的相似度,再根据物品的相似度和用户的历史行为给用户生成推荐列表。
了解UserCF和ItemCF的同时,还需要了解下用户的行为分类。
用户的行为,按反馈的明确性,可以分为以下两种类别:
对于隐性反馈行为数据,只有正反馈数据,所以要进行推荐需要采集负反馈数据,找到负反馈数据,目的是为了不给用户进行推荐此类信息。一般认为,很热门但是用户却没有行为的信息,比冷门信息更能表示用户不感兴趣,因为冷门的信息,用户可能压根没有发现,所以谈不上兴趣。
用户的行为,按反馈的方向,可以分为以下两种类别:
UserCF和ItemCF,对比来看,存在以下差异:
关于个性化推荐算法,还有很多种类,比如隐语义模型、基于关联规则推荐等等,由于篇幅原因,在这里就不一一列举,我整理了个简单的表格供参考。需要指出的是,每种算法都不是最优的,他们都有自身的局限问题,产品需要根据自身的特点来选择合适的算法,解决实实在在的问题。
4.推荐系统的冷启动问题
在第一节我们说到,推荐系统不需要用户主动提供明确的需求,由系统主动推荐信息到用户面前,在用户没有明确目的的时候帮助他们发现信息,冷启动就指的是这个过程中,用户、信息的从0到1过程。
推荐系统的冷启动大概包含三个方面:1.在用户新入驻一个平台时,由于没有历史数据,我们如何给用户做个性化推荐。2、我们的系统新上线了一个物品(商品、音乐、新闻),如何把这个新的信息推荐给感兴趣的用户。3、如果我们从0开始设计,如何在用户少、信息少的情况下来设计推荐系统。
要解决推荐系统的冷启动问题,作者提供了很多办法,这里也就不一一列举,这里需要知道冷启动的概念即可。也推荐有兴趣的朋友购买原书来仔细阅读。
5.推荐系统的其他特性
本书还详细讨论了推荐系统的其他问题,比如基于标签的推荐系统,对于内容种类特别的多的产品还是很有用的,比如豆瓣电影中,你在评价时就可以贴标签上去。由于标签系统一般是UGC的,所以对于大数据分析来说是一种非常好的数据,所以对基于商品的数据分析特别在乎的业务,上标签系统应该是一种特别好的策略。
另外本书还讨论了上下文信息在推荐系统中的应用,缺乏上下文信息会导致很多问题,比如在夏天推荐给用户冬天的衣服,在中关村给用户推荐望京的餐厅等等,为了解决这些问题,在推荐系统中需要引入上下文信息,用来尽可能地提升推荐信息的准确性。
最后,本书还讲了关于社交网络的推荐,这里列举一个我觉得很有意思的社交网络分类:
l社会图谱(social graph)——基于人们的关系形成的,社会。例如:facebook,人人网,微信等
l兴趣图谱(interest graph)——通过人们之间的共同兴趣和信念形成的,社区。例如:twitter,微博,知乎,豆瓣小组等。
可能是我缺乏社交产品的经验,这个分类让我觉得很巧妙,二者都有相互交织的地方,或许双方也都想做对方核心结构内的事情,人与人之间的关系搬到数字空间后发生了多少变化,又有哪些永不改变,仔细想想真是十分有趣。
最后,这本书不仅适合程序员入门看,同时也适合产品经理、运营以及真正热爱生活的人。学习推荐系统的思路,了解推荐系统的基本知识,也能提醒人们思考技术与人之间的关系,在数字世界与物理世界的混合体中,我们该如何相处。