一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

提示:最近系统性地学习推荐系统的课程。我们以小红书的场景为例,讲工业界的推荐系统。
我只讲工业界实际有用的技术。说实话,工业界的技术远远领先学术界,在公开渠道看到的书、论文跟工业界的实践有很大的gap,
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。

王树森娓娓道来《小红书的推荐系统》
GitHub资料连接:http://wangshusen.github.io/
B站视频合集:https://space.bilibili.com/1369507485/channel/seriesdetail?sid=2249610

提示:文章目录

文章目录

基于物品的协同过滤(ItemCF)

从本文开始,我们学习推荐系统链路上的召回环节。

今儿个是 基于物品的系统过滤,缩写是item cf
item意思是物品,就是你平时看的电影,买的商品,听得音乐,定的外卖啥的等等物品。
CF是collaboration filter的缩写,意思是协同过滤。

首先有个通俗的例子解释item cf的原理,

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

比方说我喜欢看《笑傲江湖》,笑傲江湖与《鹿鼎记》相似,而且我没有看过《鹿鼎记》,那么系统会给我推荐《鹿鼎记》,
推荐的理由是两个物品很相似系统,通过历史记录可以知道我喜欢看笑傲江湖。而且我没有看过鹿鼎记。

但是推荐系统如何知道笑傲江湖与鹿鼎记相似?

有很多种办法可以做到,比如用知识图谱了解到两本书的作者相同,所以两本书相似,
还可以基于群体用户的行为判断两个物品的相似性。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

比如看过笑傲江湖的用户,也看过鹿鼎记,给笑傲江湖写好评的用户,也给鹿鼎记写好评。
我们可以从用户的行为中挖掘出物品之间的相似性,再利用物品之间的相似性做推荐。

; item cf具体怎么做?

每个用户都交互过若干物品,比如点击、点赞、收藏、转发过的物品;
可以量化用户对物品的兴趣,比如点击、点赞、收藏、转发的四种行为各算一分(打分–评价分数:rate)。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

在这个例子中,用户对此物品的兴趣分数分别是2143,
然后,来了一个用户没有交互过的候选物品,我们要决定是否把这个物品推荐给用户。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

假设我们知道物品 两两之间的相似度,比如item和前面那几个物品之间的相似度分别是0.1,0.4,0.2,0.6。
【这个数字咋来的呢?】后面会详细讲解相似度是如何计算出来的,

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

我们先用下面的公式来预估用户对候选物品的 兴趣

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

like这一项是用户对自己交互过的itemj这些物品的兴趣,也就是图中左边的四个分数,2143
sim这一项是itemj这个物品与候选物品item之间的相似度,
也就是图中右边的四个分数,0.1,0.4,0.2,0.6,
依次把两项相乘,再把所有的乘积相加得到总分得到用户对item的兴趣interest
总分表示用户对候选物品的兴趣。这个分高,就说明感兴趣,分低就不感兴趣了

在这个例子中,从用户到候选物品有四条路径,所以要计算四个分数,然后把它们相加,
计算2乘以0.1
加1乘以0.4
加4乘以0.2
加3乘以0.6。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

这里的2143是用户对四个物品的兴趣分数,
0.1,0.4,0.2,0.6是物品之间的相似度,
四个分数相加等于3.2,表示用户对候选物品的兴趣。【1–5分评分来看,3.2其实也还可以了】

举个例子,有2000个 候选物品,我们逐一计算用户对候选物品的兴趣分数。
然后返回其中分数最高的100个物品,就可以推荐展示给用户了。

上面说的sim咋计算?俩物品的相似度sim(itemi, itemj)

我们来看看具体如何计算,两个物品之间的相似度。

计算物品相似度的基本想法是这样的, 两个物品的受众重合度越高,两个物品就越相似。

我们可以从数据中挖掘出物品的相似度。
举个例子,就玩射雕英雄传跟神雕侠侣的读者重合度很高,因此可以认为射雕英雄传和神雕侠侣相似。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

我举个例子来说明什么样的两个物品被判定为不相似。

下面是一些用户,这些边表示用户喜欢物品,

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

红色和绿色这两个物品的受众没有重合,这意味着两个物品不相似。

而下面这个例子中的两个物品被判定为相似,
这是因为两个物品的受众重合度非常高,

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

我们来计算两个物品的相似度,
把喜欢物品I1的用户记作集合W1
W1是用户的集合,
把喜欢物品I2的用户记作集合W2
把集合W1和W2的交集记作V。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
V是包含同时喜欢物品I1和I2的用户,

用sim(i1,i2)这个公式计算物品I1和 I2的相似度
公式中的分子是集合V的大小,即 对两个物品都感兴趣的用户的人数
分母是集合W1 W2大小的乘积,
单取根号,这样计算出的相似度一定是一个介于零到一之间的数。
数值越大表示两个物品越相似,
为什么相似度是介于零到一之间的?
这是因为集合V比W1 W2都要小。

注意,其实这个公式 没有考虑用户喜欢物品的程度,用这个公式,只要是喜欢就看做一不喜欢就看做零。

如果想要用到喜欢的程度,需要改一下这个公式,比如点击、点赞、收藏、转发各自算一分。
用户对物品的喜欢程度最多可以是四分【也就是说,用户对物品操作了四个行为,每个行为都算一个分数贡献,加起来就是总分rate】。

现在 我们考虑用户喜欢物品的程度,其他都一样,
只有下面的公式变了,分子把换成用户小V对物品I1 和 I2的兴趣分数相乘。
原来是交集,现在是对那俩物品的喜欢程度

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
然后取连加,连加是关于用户小v取的,
用户小v同时喜欢两个物品,如果兴趣分数的取值是零或者一,那么分子就是同时喜欢两个物品的人数,也就是集合V的大小,
公式的分母是两个根号的乘积,第一项是用户对物品的兴趣分数。
分母是关于所有用户,求连加,然后开根号第二项类似用户对物品I的兴趣分数。

这个公式计算出的数值介于零到一之间表示两个物品的相似度,
其实这个公式就是 余弦相似度cos similarity
把一个物品表示为一个向量,向量每个元素对应一个用户元素的值就是用户对物品的兴趣,
两个向量的夹角的余弦就是这个公式,我不展开讲了,大家自己思考一下为什么这个公式是余弦相似度。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
小结一下前面的内容,item cf的基本思想是 根据物品的相似度做推荐
如果某个用户喜欢物品一,而且物品一跟物品二相似,那么该用户很可能会喜欢物品二,
做推荐就需要预估用户对候选物品的兴趣有多强,
给每个物品打一个分数,
把分数高的物品推荐给用户,预估兴趣分数要用上面这个公式。

从用户的历史行为记录中,我们知道用户对物品J的兴趣,
我们还知道物品J与候选物品的相似度,
把两个数相乘,然后关于物品J去连加。

作为用户对候选物品进取分数的预估,可以这样理解,用户对物品J感兴趣,兴趣传递到候选物品,得到用户对候选物品的兴趣。
分数有很多条这样的路径,把兴趣从用户传递到物品J,再传递到候选物品,
把这些路径全都加起来,就是用户对候选物品的兴趣分数,
这个公式需要知道每两个物品之间的相似度。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

我们事先计算物品两两之间的相似度,并且保存起来,
这样计算物品两两之间的相似度,把每个物品表示为一个系稀疏向量,向量每一个元素对应一个用户,
相似度函数就是两个向量夹角的余弦,
其实就是其学习里面常用的cos相似度。

我已经讲完了itemCF的原理,下面我要讲解itemCF用来召回的完整流程。

; ItemCF召回的完整流程

为了能在线上做到实时的推荐,基本必须要事先做离线计算,建立两个索引。

一个索引是 用户到物品索引,记录每个用户最近点击过交互过的物品的ID,
比如最近交互过的200个物品,有了这个索引之后,给定任意用户ID,可以快速返回他近期感兴趣的物品列表。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

另一个索引是从 物品到物品,我们首先要计算物品之间两两相似度,
这个计算量会比较大,对于每个物品,所以它最相似的K物品,比如K等于十或者100。
有了这个索引之后,给定任意物品ID,可以快速查出他对相似的配置物品的ID,而且知道相似度分数。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

这里演示一下第一个索引,也就是用户到物品的索引,
左边usr这些是用户ID,比如小红书有几亿个用户,每个用户有一个ID,
我们记录每个 用户最近点击交互的物品ID,还有它对于每个物品交互评价的一个兴趣分数rate。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

比方说点击、点赞、收藏、转发各算一分,各种骚操作的分数相加就是用户对物品的兴趣分数,
上面第一个用户的物品列表,里面记录了物品ID和分数,分数有高有低,
下面第二个用户的物品列表,也是记录物品的ID和分数。
每个用户都有一个列表,懂?

另一个索引是从物品到物品,左边这些是物品的ID。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

比如小红书有一篇笔记,每篇笔记就是一个物品索引,这个索引记录每个物品 最相似的K个物品的ID和相似度
上面是第一个物品最相似的K物品的列表。其中的分数,0.7,0.6,0.6,0.3,0.3,表示相似度从高到低排列,
下面是第二个物品最相似的。
K物品的列表,也记录了物品ID和相似度分数。

给定任意一个物品ID,用这个索引可以快速找到它最相似的K物品。

有了索引之后,我们可以 在线上给用户做实时推荐。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

比如现在有个用户刷小红书系统,要开始做推荐,
系统知道这个用户的ID,首先查看用户到物品的索引,可以快速找到这位用户近期感兴趣的物品的列表,
我们把用户最近交互的物品叫做last n。
对于last n集合中的每个物品,我们利用物品到物品的索引,找到n个它感兴趣的物品的top k相似物品,
用户最近有N个感兴趣的物品,我们又找到了每个物品的top k相似物品,
那么一共取回N×K的物品,
对于取回的N乘以K的相似物品,用公式预估用户对这nk个物品的兴趣分数。
按照分数rate从高到低对物品做排序,
返回分数最高的100个物品,这100个物品就是ICF之后的推荐物品。

这个召回通道的输出会跟其他召回通道的输出融合起来,然后做排序,最终展示给用户。

为什么要用离线计算俩索引?

数据库中有上亿个物品,如果在线挨个按照公式计算用户对所有物品的兴趣分数,那么这个计算量会爆。

索引的意义在于避免枚举所有的物品,用空间换时间,让在线计算速度足够快

假如我们记录用户最近感兴趣的N等于200个物品,
取回每个物品最相似的K等于十个物品,

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

那么,一共也就取回N乘以K等于2000个物品,
用公式给这2000个物品打分,也就是说,分别预估用户对这2000个物品的兴趣分数,
返回分数最高的100个物品作为爱上CF这个召回通道的结果,这样计算量是很小的,可以做到在线实时计算。

总结一下,用索引的话,离线计算量大,需要更新两个索引,
好处是每次线上都召回都很快,只需要给2000个物品打分,不需要访问上亿个物品。

最后我演示一下item cf做召回的流程。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

用户usr登录之后,系统要给这位用户做推荐,我们知道用户的ID,
利用用户到物品的索引,找到用户近期感兴趣的n个物品。
这个列表记录了物品的ID和兴趣分数。

接下来,我们要利用物品到物品的索引,找到每个物品n的top k相似物品,
我们知道这个物品的ID,我们要去索引最相似的K的物品。
这些就是top k相似物品的ID和相似度。

这个例子中,K等于2,

用同样的方法,根据物品到物品的索引,找到每个物品的top k相似物品top k相似,会召回很多物品,
然后就可以用这前面介绍过的公式计算用户对召回物品的兴趣分数,
根据算术的分数做排序,返回排在前100的物品。

做计算的时候需要用到这些列表里的数值,
用到上面列表中用户对物品的兴趣分数,
用到下面列表中物品和物品的相似度分数,

把兴趣分数跟相似度分数相乘,如果指回的物品ID有重复的,就去重。
把分数加起来,得到每个物品的兴趣分数。

最后总结一下本文的所有内容,
Item cf的原理是这样的,

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

如果某位用户喜欢物品I1,那么他可能喜欢跟物品I1相似的物品记作I2,
物品的相似度是根据交互过的用户来定的,
如果喜欢物品I1和I2的用户有很大的重叠,那么就判定物品I1与I2相似。

注意, 这里不是根据物品的内容判定物品相似。
【个性化美学评价,大概率是根据物品内容(即图片场景内容)的相似程度,和属性相似度来计算的(比如美学尚需经,构图属性)】

item cf是根据用户的行为来判定物品相似。

具体是用这个公式计算物品I1与I2的相似度
分子是同时喜欢两个物品的用户的数量,分母是做归一化。

前面讲过这个公式,这里就不再具体解释了。

在工业界的推荐系统中, itemCF是最重要的召回通道之一。

为了能在线上非常快速的做召回,需要离线维护两个索引,
一个索引是从用户到物品列表,记录每个用户最近交互过的N个物品,
另一个索引是从物品到物品列表记录每个物品相似度最高的K的物品。

一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

在进入召回的时候,要用到这两个索引,每次取回nk个物品,】
这个数量比较大,可能有几千个物品,不可能全都返回,还需要做个筛选。

item cf用这个公式预估用户对每个物品的兴趣分数。
这个公式用到用户对物品的兴趣分数和物品与物品的相似度,
两种分数分别记录在两个索引上,
在给待推荐的物品打分之后,返回分数最高的100个物品作为召回结果。

今天关于item cf的东西讲完了,后面几节课会讲解其他几种召回通道。

我想你应该懂了吧?
就是根据待推荐物品,和我操作过的一堆物品的相似度(加我对他们的喜欢程度),来算我可能对待推荐物品的喜好程度rate,排序rate,抽前面topN来推荐。

; 总结

提示:如何系统地学习推荐系统,本系列文章可以帮到你

(1)找工作投简历的话,你要将招聘单位的岗位需求和你的研究方向和工作内容对应起来,这样才能契合公司招聘需求,否则它直接把简历给你挂了
(2)你到底是要进公司做推荐系统方向?还是纯cv方向?还是NLP方向?还是语音方向?还是深度学习机器学习技术中台?还是硬件?还是前端开发?后端开发?测试开发?产品?人力?行政?这些你不可能啥都会,你需要找准一个方向,自己有积累,才能去投递,否则面试官跟你聊什么呢?
(3)今日推荐系统学习经验:itemCF就是根据待推荐物品,和我操作过的一堆物品的相似度(加我对他们的喜欢程度),来算我可能对待推荐物品的喜好程度rate,排序rate,抽前面topN来推荐。

Original: https://blog.csdn.net/weixin_46838716/article/details/126136865
Author: 冰露可乐
Title: 一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/557147/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球