发布时间:2023-08-01 08:30
https://zhuanlan.zhihu.com/p/69888124
(1)怎么去理解呢?
协同过滤是利用集体智慧的一个典型方法。
(PS,协同过滤是推荐的核心算法,即集体智慧和推荐是关系的,个中原理参见上面所说的。)
要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题:
如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?
大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。
核心原理:协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。
协同: 使用多个用户的数据来训练模型,借助群体智慧的同时也避免了单个用户数据的信息不足。过滤: 把十亿量级的商品降低到数百量级甚至更少,解决信息过载问题。结合两种思想就是协同过滤,使用多个用户的数据来训练一个模型。模型输入可以有用户信息,物品信息,还可以有上下文信息等等,模型输出是各物品的预测评分,最后仅取分数top K的物品推荐给用户。
差别在于:协同过滤必须要有用户行为,基于内容的推荐可以不用考虑用户行为。冷启动阶段只能用基于内容的推荐,因为没有用户行为数据;积累一段时间用户行为数据后就可以用协同过滤了。基于内容的推荐的要求:item数据比较容易结构化,且结构化的数据能相对完整的描述item。否则效果不会太好;协同过滤的要求:用户行为越丰富越好;不管用哪种,都要避免出现马太效应:推荐的item困在一个封闭的小范围内。产品上要多做设计。推荐看一些推荐系统方面的书籍
协同过滤本质就是算用户与用户相似度、用户与商品的相似度、商品与商品的相似度,相似度有很多种计算方式,最常用的就是欧式距离,和余弦相似度。拿最常用的 word2vec 做协同过滤例子,就是算商品跟商品的相似度,可以用来给每个商品推荐相似的商品。数据就是先把每个用户在一定时间范围内点击过的商品 id ,点击的商品要大于2,做成以空格分开的一行,再喂给 word2vec 程序,最后产出是每个商品 Id 的向量,就是俗称的词向量或 embdding ,有了向量后,再通过余弦公式算出每个商品与另一个商品的相似度,就可以作为这个商品相似的商品了,是不是比较简单,具体不同,就是数据量大的时候,可以通过 spark 进行预处理,通过 spark 训练词向量,最后算两两相似度复杂度比较高,可以通过 spark 调用矩阵库来进行加速,线上效果一般还是挺不错的。
基于用户的协同过滤算法(UserCF)
基于物品的协同过滤算法(ItemCF)
其实可以把基于物品的协同过滤看做是基于用户的协同过滤的一种改良。
针对电商类网站,用户数远大于物品数,而且物品的变更频率不高,物品的相似度相对于用户的兴趣来讲比较稳定。这个时候使用基于物品的协同过滤是比较好的选择。
针对新闻类的应用,时效性较高,物品变化很快,而用户有相对稳定的场景。此时往往会选择基于用户的协同过滤算法。
最后要如何挑选,取决于网站里哪个相似度更稳定。