一文入门推荐系统——推荐系统实践读书笔记(中)

简介: 一文入门推荐系统——推荐系统实践读书笔记(中)

正文


3. 通用推荐模型


3.1. 协同过滤推荐


3.1.1. 基于邻域的模型 UserCF & ItemCF


基于邻域的算法分为两大类,一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法。

(1)基于用户的协同过滤算法 UserCF

1.png

在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和A有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有关注过的物品推荐给A。这种方法称为基于用户的协同过滤算法(UserCF)。


基于用户的协同过滤算法主要包括两个步骤:


找到和目标用户兴趣相似的用户集合

找到这个集合中的用户喜欢的,且目标用户没有听说过的物品,推荐给目标用户

算法的关键是计算两个用户的兴趣相似度。协同过滤算法主要利用用户兴趣列表的相似度计算用户兴趣的相似度,给定用户 u uu、v vv,令 N ( u ) N(u)N(u) 表示用户 u uu 曾经有过兴趣的物品集合,N ( v ) N(v)N(v) 表示用户 v vv 曾经有过兴趣的物品集合。


计算用户兴趣相似度的方法有3种:

Jaccard公式

2.png

余弦相似性

3.png

改进的余弦相似性

4.png

其中5.png降低了用户u uu和用户v vv的共同兴趣列表中热门物品对用户相似度的影响

得到了用户之间的兴趣相似度之后,就要将用户兴趣列表转换为“物品-用户”倒排表,即对每个物品建立一个喜欢它的用户的列表,以此来给用户推荐与他兴趣最相似的K KK个用户喜欢的物品。如下的公式度量了UserCF算法中用户u uu对物品i ii的感兴趣程度:

其中S ( u , K ) S(u,K)S(u,K)包含和用户u uu兴趣最接近的K KK个用户,N ( i ) N(i)N(i)是对物品i ii有过行为的用户集合,w u  是用户u uu和用户v vv的兴趣相似度,r v i 代表用户v vv对物品i ii的兴趣。一般情况下,如果使用的是单一行为的隐反馈数据,那所有的r v i = 1

例如用户A AA、B BB、C CC、D DD和物品a aa、b bb、c cc、d dd、e ee有如下用户兴趣列表:

用户 兴趣物品列表

A

abd

B

ac

C

be

D

cde

用余弦相似度计算用户兴趣相似度:


7.png

通过比较我们可以知道用户A AA与用户D DD的兴趣相似度最高,用户B BB、C CC次之。若我们设K = 1 K=1K=1则意味着从相似度最高的用户D DD的兴趣列表中选取物品推荐给用户A AA;若设K = 2 K=2K=2,则从用户B D BDBD或C D CDCD的兴趣列表中选择;若设K = 3 K=3K=3则从全部用户B C D BCDBCD的兴趣列表中选择物品推荐给用户A AA。


这里我们设K = 3 K=3K=3,此时我们需要计算用户A AA与用户B C D BCDBCD兴趣列表中的物品(即,a aa、b bb、c cc、d dd、e ee)的感兴趣程度。首先建立“物品-用户”倒排表:

物品 喜欢该物品的用户

a

AB

b

AC

c

BD

d

AD

e

CD

从倒排表我们可以轻松地找到不同物品关联的喜欢该物品的用户,这时我们就可以利用用户A AA对其他用户的相似度来衡量用户A对这些物品的感兴趣程度了:

8.png

根据计算结果,我们可以知道用户 A AA 对物品 c cc、e ee 的兴趣一致,因此我们可以任意推荐他们其中一个,或者一起推荐给用户 A AA。需要注意的是我们没有计算 p ( A , a ) p(A,a)p(A,a)、p ( A , b ) p(A,b)p(A,b)、p ( A , d ) p(A,d)p(A,d),这是因为物品 a aa、b bb、d dd 已经在用户 A AA 的兴趣列表中了,所以没必要再推荐。

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

1.png

基于物品的协同过滤算法用于给用户推荐那些与他们之前喜欢的物品相似的物品。


ItemCF算法主要通过分析用户的行为记录来计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。


基于物品的协同过滤算法主要分为两步:


计算物品之间的相似度;

根据物品的相似度和用户的历史行为给用户生成推荐列表。

我们给定物品i ii、j jj,设N ( i ) N(i)N(i)为喜欢物品i ii的用户数,N ( j ) N(j)N(j)为喜欢物品j jj的用户数,则物品i ii、j jj的相似度可以表达为:


Jaccard公式

w i j = ∣ N ( i ) ∩ N ( j ) ∣ ∣ N ( i ) ∣ w_{ij}=\frac{|N(i)\cap N(j)|}{|N(i)|}


上述公式可以理解为喜欢物品 i ii 的用户中有多少比例的用户也喜欢物品 j jj

余弦相似性

10.png

  • 该公式降低了热门物品会和很多物品相似的可能性,可以避免推荐出热门的物品。
  • 改进的余弦相似性

11.png

其中12.png对余弦相似性进行了修正,使得活跃用户对物品相似度的贡献大于不活跃的用户。

提一句,如果将ItemCF的相似度矩阵 w ww 按最大值归一化,可以提高推荐的准确率,归一化公式如下:

13.png

在ItemCF中,两个物品之所以产生相似度是因为它们共同被很多用户喜欢,即每个用户都可以通过他们的历史兴趣列表给物品“贡献”相似度。也就是说,在得到物品之间的相似度后,我们可以建立一个“用户-物品”倒排表,即对每个用户建立一个包含他喜欢的物品的列表。


然后通过如下公式计算用户u uu对一个物品j jj的兴趣度:


14.png


这里N ( u ) N(u)N(u)是用户喜欢的物品的集合,S ( j , K ) S(j,K)S(j,K)是和物品j jj最相似的K KK个物品的集合,w j是物品j jj和i ii的相似度,r u i是用户u uu对物品i的兴趣(如果用户u uu对物品i ii有过行为,即可令r u i = 1 。该公式的含义是,与用户历史上感兴趣的物品越相似的物品,越有可能是用户感兴趣的物品。


ItemCF的推荐过程可以用如下例子来表示:

假设已知用户对两个物品A 1  的兴趣度分别为1.3、0.9,现有5个用户未曾见过的新物品,它们与物品A 1 的相似度可以表示为:15.png

可得,用户对B 1 、B 2 B 3 、B 4 B_4、B 5 的兴趣度分别为

16.png

由此我们可知,用户可能对物品B 2 的兴趣度最高,应该向用户推荐物品B 2

(3)UserCF 与 ItemCF 的区别

特性 UserCF ItemCF
性能 适用于用户数少于物品数的场合,如果用户很多,计算用户相似度矩阵代价很大 适用于物品数少于用户数的场合,如果物品很多,计算物品相似度矩阵代价很大
领域 适用于时效性较强,用户个性化兴趣不太明显的领域 适用于长尾物品丰富,用户个性化需求强烈的领域
实时性 用户有新行为,不一定造成推荐结果的立即变化 用户有新行为,一定会导致推荐结果的实时变化
冷启动 无法给新用户和物品进行准确推荐 新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品
推荐解释 很难提供令用户信服的推荐解释 可以利用用户的历史行为给用户做推荐解释

关于协同过滤算法(CF)的推荐效果,我们从流行度的角度来考虑。在movie-lens-1m数据集上,ICF的推荐效果更加分散,UCF的推荐效果更加集中,也就是ICF的平均流行度会低于UCF。


ICF

下面两个图分别是(左)项目流行度与项目平均排名(Top-K)的关系;(右)项目流行度与其排名前50(Top-K)的概率。

1.jpg

UCF

下面两个图分别是(左)项目流行度与项目平均排名(Top-K)的关系;(右)项目流行度与其排名前50(Top-K)的概率。


2.jpg


3.1.2. 隐语义模型 MF


LFM(Latent Factor Model)隐语义模型的核心思想是通过隐含特征(Latent Factor)联系用户兴趣和物品,它采取基于用户行为统计的自动聚类,让用户和物品的分类自动化。


LFM通过如下公式计算用户u uu对物品i的兴趣:

17.png

其中 , p u , k p_{u,k}p

u,k


度量了用户u uu的兴趣和第k kk个隐类的关系,而q i , k q_{i,k}q

i,k


度量了物品i ii和第k kk个隐类之间的关系。


推荐系统的用户行为样本分为正样本(用户喜欢什么物品)和负样本(用户对什么物品不感兴趣)。经过对正负样本的采样,可以得到一个用户—物品集K = { ( u , i ) } K=\{(u,i)\}K={(u,i)},其中如果( u , i ) (u,i)(u,i)是正样本,则有r u i = 1 ,否则r u i = 0 ,然后,通过随机梯度下降法优化如下的损失函数来找到最合适的参数 p p和 q :

18.png

随机梯度下降法需要首先对参数 p u , k p_{u,k}p u,k和 q i , k q_{i,k}q i,k

 分别求偏导数

19.png

然后这两个参数沿着方向导数前进,得到如下递推公式:


20.png

其中,α \alphaα指学习速率(Learning Rate),是一个可调参数。


矩阵分解算法(Matrix Factorization, MF)就是LFM的一种,现实中我们得到的是残缺的评分矩阵,可以通过分解评分矩阵,学习得到用户和物品的隐向量,也就是上面的用户矩阵p u p_up u 和物品矩阵q i q_iq i

21.png

LFM和基于邻域的方法区别大致如下:

22.png


3.1.3. 基于图的模型


用户对物品的行为很容易用二分图表示,已知用户行为数据是由一系列二元组组成的,其中每个二元组( u , i ) (u, i)(u,i)表示用户u uu对物品i ii产生过行为,这样的数据可以用二分图G ( V , E ) G(V,E)G(V,E)表示,其中 V = V U ∪ V I V=V_U\cup V_IV=V

U ∪VI由用户顶点集合V U V_UV U和物品顶点集合V I V_IV I

组成。

对于数据集中的每一个二元组( u , i ) (u,i)(u,i),都有一套对应的边e ( v u , v i)e(v_u,v_i)e(v u ,v i ),其中v u ∈ V U v_u\in V_Uv u ∈V U 是用户u uu对应的顶点,v i ∈ V I v_i\in V_Iv i ∈V I是物品i ii对应的顶点,如下表和图所示:

23.png

表示为二分图:

24.png

可以看到在上图中,圆形结点为一个分割,矩形结点为另一个分割。


要将个性化推荐算法放到二分图模型上,那么给用户u uu推荐物品的任务就可以转化为度量用户顶点v u  与v u v_没有边直接相连的物品节点在图上的相关性,相关性越高的物品在推荐列表中的权重就越高。


相关性高的一对顶点,一般具有以下特征:


两个顶点之间有很多路径相连;

链接两个顶点之间的路径长度都比较短;

链接两个顶点之间的路径不会经过出度比较大的顶点。

基于上面3个主要因素,研究人员设计了很多计算图中顶点之间相关性的方法,这里讲解基于随机游走的PageRank和PersonalRank算法。


(1)PageRank算法


PageRank是用来衡量特定网页相对于搜索引擎中其他网页的重要性的算法,其计算结果作为Google搜索结果中网页排名的重要指标。


网页之间通过超链接相互连接,互联网上不计其数的网页就构成了一张超大的图。PageRank假设用户从所有网页中随机选择一个网页进行浏览,然后通过超链接在网页直接不断跳转。到达每个网页后,用户有两种选择:到此结束或者继续选择一个链接浏览。


设用户继续浏览的概率为α \alphaα,用户以相等的概率在当前页面的所有超链接中随机选择一个继续浏览。当经过很多次这样的随机游走之后,每个网页被访问用户访问到的概率就会收敛到一个稳定值。


算法迭代关系式如下所示:

25.png

其中P R ( v ) PR(v)PR(v)是网页v vv被访问的概率(也就是重要性程度),α \alphaα是用户继续访问网页的概率,N NN是网页总数。i n ( v ) in(v)in(v)表示指向网页v vv的网页集合(入度),o u t ( v ′ ) out(v')out(v  )表示网页v ′ v'v  指向的网页集合(出度)。

将网页替换为其他物品同理。

(2)PersonalRank算法

PersonalRank跟PageRank的区别只在于每一步概率的取值不一样,PersonalRank用r vr_vr v 替换了1 / N 1/N1/N,也就是说PersonalRank走到任意的下一个节点的概率服从均分布。公式表达为:


26.png


其中27.png,v u v_uv u 是指用户u uu对应的节点

为了PersonalRank的时间复杂度,可以从矩阵论出发重新设计算法。


令M MM为用户物品二分图的转移概率矩阵,即:


28.png

那么,迭代公式可以转化为:


29.png

用PersonalRank算法对上面的示例中的用户A AA进行推荐,可得如下结果:


用户 A AA 和物品 c cc、e ee 没有边相连,但是用户 A AA 和物品 c cc 有三条长度为 3 33 的路径相连,用户 A AA 和物品 e ee 有两条长度为 3 33 的路径相连。那么,顶点 A AA 与 e ee 之间的相关性就要高于顶点 A AA 与 c cc,因而物品 e ee 在用户 A AA 的推荐列表中应该排在物品 c cc 之前。最终得出的推荐列表为{ c , e } \{c,e\}{c,e}


用户A AA与物品c cc的路径:



30.png

用户A AA与物品e ee的路径:


31.png


相关文章
|
6月前
|
机器学习/深度学习 搜索推荐 算法
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
427 0
|
5月前
|
机器学习/深度学习 搜索推荐 算法
推荐系统的算法与实现:深入解析与实践
【6月更文挑战第14天】本文深入探讨了推荐系统的原理与实现,包括用户和项目建模、协同过滤、内容过滤及混合推荐算法。通过收集用户行为数据,系统预测用户兴趣,提供个性化推荐。实践中,涉及数据处理、建模、算法选择及结果优化。随着技术发展,推荐系统将持续改进,提升性能和用户体验。
|
1月前
|
数据采集 搜索推荐
推荐系统实践之新闻推荐baseline理解
推荐系统实践之新闻推荐baseline理解
28 1
|
1月前
|
数据采集 搜索推荐
推荐系统实践之新闻推荐baseline理解
推荐系统实践之新闻推荐baseline理解
52 1
|
4月前
|
机器学习/深度学习 搜索推荐 算法
深度学习在推荐系统中的应用:技术解析与实践
【7月更文挑战第6天】深度学习在推荐系统中的应用为推荐算法的发展带来了新的机遇和挑战。通过深入理解深度学习的技术原理和应用场景,并结合具体的实践案例,我们可以更好地构建高效、准确的推荐系统,为用户提供更加个性化的推荐服务。
|
6月前
|
人工智能 自然语言处理 搜索推荐
LLM在电商推荐系统的探索与实践
LLM在电商推荐系统的探索与实践
2388 1
|
5月前
|
机器学习/深度学习 人工智能 搜索推荐
构建基于AI的个性化新闻推荐系统:技术探索与实践
【6月更文挑战第5天】构建基于AI的个性化新闻推荐系统,通过数据预处理、用户画像构建、特征提取、推荐算法设计及结果评估优化,解决信息爆炸时代用户筛选新闻的难题。系统关键点包括:数据清洗、用户兴趣分析、表示学习、内容及协同过滤推荐。实践案例证明,结合深度学习的推荐系统能提升用户体验,未来系统将更智能、个性化。
|
6月前
|
机器学习/深度学习 搜索推荐 算法
推荐系统算法的研究与实践:协同过滤、基于内容的推荐和深度学习推荐模型
推荐系统算法的研究与实践:协同过滤、基于内容的推荐和深度学习推荐模型
618 1
|
6月前
|
NoSQL 搜索推荐 算法
【MongoDB】MongoDB在推荐系统中的实践应用
【4月更文挑战第1天】【MongoDB】MongoDB在推荐系统中的实践应用
|
机器学习/深度学习 分布式计算 搜索推荐
推荐系统入门之使用协同过滤实现商品推荐
本场将介绍如何使用PAI基于协同过滤算法实现商品推荐。