过年前打算学习一下推荐,买了一本国内推荐系统的经典,项亮的《推荐系统实践》,因为封城,导致3月末才拿到这本书,今天好好看了一下。
正式开始内容之前,想说点题外话,第一个是关于为什么要学习推荐系统,关于这个问题是因为结合19年工业界NLP和算法的发展,单纯能把NLP落地的项目已经越来越少了,但是NLP往推荐、搜索、广告方向做,落地的方式还是很广阔的,所以准备往这个方向走。
第二个是关于这本《推荐系统实践》,12年的书,但是现在还是卖得这么好,而且是推荐系统,是实打实能落地的方向,说明两个问题,第一个是推荐领域虽然深度学习有大幅度的运用,但是取得的效果,在某些场景下可能并不太好,老的方法在现在也还能用;第二个说明这本书确实是经典,经典的东西永远不会过时,所以推荐大家看一看。
推荐系统的思考
推荐系统,在之前对这个系统已经有了一个大概的认识。我在网上之前找到一张推荐系统架构的图 微博AI实验室负责人给的图学了算法肯定会听过协同过滤算法,然而协同过滤也好,还是现在流行的DIN和FM也好,这只是推荐系统算法的一部分,做好一个推荐要考虑的还有很多,针对于现在来说,先从推荐算法这一块入手。
这本书的第一章,写的是如何评价一个推荐系统。里面除了准确率召回率,有两个评价指标我仔细看了一下,新颖性和惊喜度。
- 新颖性:给用户推荐那些他们以前没有听说过的物品
- 惊喜度:如果推荐结果和用户的历史兴趣不相似,但却让用户觉得很满意,那么就可以说推荐结果的惊喜度很高。
我们来回想一下我们经常用的APP的推荐系统,淘宝,豆瓣,头条系APP,知乎。
先说头条系APP和知乎,大家在使用过程中有没有发现,系统的推荐结果都是在历史的关注的行为里面,把相似的结果推荐给你。这就导致了,如果你不看新的话题内容,就一直在老的话题里循环,这就是所谓的马太效应,个人认为这个推荐策略是非常错误的,老是把关注点放到一个内容上,久而久之就是在浪费时间,推荐毫无新颖性和惊喜度。这也是我为什么越来越不喜欢知乎和头条抖音等这些app。
而淘宝、豆瓣不一样,它们的推荐策略会为你提供一些之前没有关注的东西,也就是在它们的推荐系统里有新颖性和惊喜度的考虑,这才是有温度的推荐系统。
协同过滤
协同过滤(CF)是一种基于领域的一种算法,在1992年就被提出,也算老古董了。
1. 基于用户的协同过滤(UserCF)
在用微博的时候应该会注意到,推荐栏里面有 你关注的XXX也关注了XXX。这就是基于用户的协同过滤,把你感兴趣的用户感兴趣的东西推荐给你。
这里我不想把公式复制粘贴出来,因为这个真的很容易理解,这里说一点的就是,如果用户A买了一本《新华字典》,用户B也买了一本《新华字典》,但我们并不能说用户A和用户B他们感兴趣的方向一致,只能说他们都上过小学。所以有一个改进后的基于用户的协同过滤
这个公式里面的分子
惩罚了用户u和用户v共同兴趣列表中热门物品,N(i)代表对物品i有过兴趣的用户集合。
2.基于物品的协同过滤(ItemCF)
在淘宝里面,推荐栏里面有 和该商品类似的商品XXX。这就是基于物品的协同过滤,把你感兴趣的东西的类似属性的东西推荐给你。
这里面蕴含着一个假设:就是假设每个用户的兴趣都局限在某几个方面,因此如果两个物品属于一个用户的兴趣列表,那么这两个物品可能就属于有限的几个领域,而如果两个物品属于很多用户的兴趣列表,那么它们就可能属于同一个领域,因而有很大的相似度。
这里根据这个假设就会出现一个问题,就是如果你粉了一个爱豆,系统会给你推荐和你这个爱豆相似的爱豆,比如你粉蔡徐坤就会给你推荐韩国女团的练习生。但是有一个卖假粉的公司,他们的一个账号会粉无数的爱豆,这就意味着蔡徐坤和无数个爱豆发生了关系有了相似性,这样这个算法会给你推荐其他人了。
这里就有一个排除活跃用户的公式了,因为活跃用户对物品相似度的共现应该小于不活跃的用户。
这个和基于用户的协同过滤惩罚大量相似用户类似。
3.UserCF和ItemCF的比较
项目 | UserCF | ItemCF |
---|---|---|
性能 | 适用于用户较少的场合,如果用户过多,计算用户相似度矩阵的代价交大 | 适用于物品数明显小于用户数的场合,如果物品很多,计算物品相似度矩阵的代价交大 |
领域 | 实效性要求高,用户个性化兴趣要求不高 | 长尾物品丰富,用户个性化需求强烈 |
实时性 | 用户有新行为,不一定需要推荐结果立即变化 | 用户有新行为,一定会导致推荐结果的实时变化 |
冷启动 | 在新用户对少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度是离线计算的 新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给其他用户 | 新用户只要对一个物品产生行为,就能推荐相关物品给他,但无法在不离线更新物品相似度表的情况下将新物品推荐给用户 |
推荐理由 | 很难提供 | 可以根据用户历史行为归纳推荐理由 |
针对不同的业务场景,可以用的算法也不同。ItemCF需要维护一张物品相关度的表,当物品量更新速度太快时,此表的维护在技术上有难度,所以对于电商、音乐、图书等网站而言,ItemCF的优势更大。新闻类网站对于新用户可直接推荐热门新闻即可,为了满足实时性,新闻类更适合用UserCF。
但是算法不是万能的,协同过滤有些场景无法覆盖,比如两个不同领域的最热门物品之间往往具有比较高的相似度,仅仅靠用户行为数据是不能解决的,所以就要引入新的特征了。这个下一次再讨论
网友评论