导航:首页 > 净水问答 > 图模型协同过滤

图模型协同过滤

发布时间:2024-10-30 09:39:07

『壹』 推荐系统论文阅读(二十三)-神经图协同过滤NGCF

论文:

论文题目:《Neural Graph Collaborative Filtering》

论文地址: https://arxiv.org/pdf/1905.08108.pdf

本论文是关于图结构的协同过滤算法,在原始的矩阵分解和基于深度学习的方法中,通常是通过映射描述用户(或物品)的现有特征(例如ID和属性)来获得用户(或物品)的嵌入。从而利用user和item的embedding进行协同召回。但是作者认为这种方法的固有缺点是:在user与item的interaction数据中潜伏的 协作信号(collaborative signal) 未在嵌入过程中进行编码。这样,所得的嵌入可能不足以捕获协同过滤效果。

让我们一起来看一下本论文是怎么利用数据中潜伏的协作信号的吧。

推荐算法被广泛的运用在各个领域中,在电商领域,社交媒体,广告等领域都发挥着至关重要的作用。推荐系统的核心内容就是根据用户以前的购买和点击行为来评估用户对一个物品的喜爱程度,从而针对每个用户进行个性化推荐。协同过滤算法认为历史行为相似的用户之间的兴趣是相同的,所以给用户推荐的是同类型用户的爱好,也就是UserCF,而ItemCF给用户推荐的是跟历史行为相近的物品。

传统的协同过滤方法要么是基于矩阵分解,要么是基于深度学习的,这两种方法都忽略了一个非常关键的信息---user和item交互的协作信号,该信号隐藏在user和item的交互过程中。原始的协同过滤方法忽略了这种信息,所以在进行user 和 item representation时就不足以较好的进行embedding。

本论文通过将用户项交互(更具体地说是二分图结构)集成到embedding过程中,开发了一个新的推荐框架神经图协同过滤(NGCF),该框架通过在其上传播embedding来利用user-item图结构。这种方法在用户项目图中进行高阶连通性的表达建模,从而以显式方式将协作信号有效地注入到embedding过程中。

在介绍模型之前先来讲解一下什么是useritem interaction以及什么是高阶的useritem interaction。

我们先看左边的图,这个图就是useritem interaction,u1是我们待推荐的用户,用双圆圈表示,他交互过的物品有i1,i2,i3。在看右边这个树形结构的图,这个图是u1的高阶interaction图,注意只有l > 1的才是u1的高阶连接。观察到,这么一条路径,u1 ← i2 ← u2,指示u1和u2之间的行为相似性,因为两个用户都已与i2进行了交互。而另一条更长的路径,u1←i2←u2←i4暗示u1可能会点击i4,因为他的相似用户u2之前已经购买过i4。另一方面,用户u1在l = 3这一层会更倾向于i4而不是i5,理由是i4到u1有两条路径而i5只有一条。

当然这种树结构是不可能通过构建真正的树节点来表示的,因为树模型比较复杂,而且结构很大,没法对每个用户构建一个树,这样工作量太大了。那么怎么设计模型结构可以达到跟这个high-order connectivity的效果呢,这个就要运用到神经网络了。通过设计一个embedding propagation layer来表示这种embedding 在每个层之间的传递。

还是拿上面那张图举例子,堆叠两层可捕获u1←i2←u2的行为相似性,堆叠三层可捕获u1←i2←u2←i4的潜在推荐以及信息流的强度(由层之间的可训练权重来评估),并确定i4和i5的推荐优先级。

这个跟传统的embedding是一样的,都是对原始的userID和itemID做embedding,跟传统embedding不同的地方是,在我们的NGCF框架中,我们通过在用户-项目交互图上传播embedding来优化embedding。 由于embedding优化步骤将协作信号显式注入到embedding中,因此可以为推荐提供更有效的embedding。

这一层是本文的核心内容,下面我们来进行详细的解读。

从直观上来看,用户交互过的item会给用户的偏好带来最直接的依据。类似地,交互过某个item的用户可以视为该item的特征,并可以用来衡量两个item的协同相似性。 我们以此为基础在连接的用户和项目之间执行embedding propogation,并通过两个主要操作来制定流程:消息构建和消息聚合。

Message Construction(消息构建)

对于连接的user-item对(u,i),我们定义从i到u的消息为:

其中ei是i的embedding,eu是u的embedding,pui是用于控制每次传播的衰减因子,函数f是消息构建函数,f的定义为:

其中W1和W2用来提取有用的embedding信息,可以看到W2控制的i和u直接的交互性,这使得消息取决于ei和eu之间的亲和力,比如,传递更多来自相似项的消息。

另一个重要的地方是Nu和Ni,pui = 1/ 。Nu和Ni表示用户u和item i的第一跳邻居。 从表示学习的角度来看,pui反映了历史item对用户偏好的贡献程度。 从消息传递的角度来看,考虑到正在传播的消息应随路径长度衰减,因此pui可以解释为折扣因子。

Message Aggregation

聚合方法如下 :

其中 表示在第一嵌入传播层之后获得的用户u的表示。激活函数采用的是leakyrelu,这个函数适合对pos和neg信号进行编码。

另一个重要的信息是 ,它的定义如下:

这个信息的主要作用是保留原始的特征信息。

至此,我们得到了 ,同样的方法,我们也能获得 ,这个都是first order connectivoty的信息。

根据前面的计算方式,我们如果将多个Embedding Propagation Layers进行堆叠,我们就可以得到high order connectivity信息了:

计算方式如下:

当我看到这里的时候,我的脑子里产生了一个大大的疑惑,我们在计算第l层的eu和ei时都需要第l-1层的信息,那么我们怎么知道ei和eu在第l层是否存在呢?也就是说出现u侧的总层数l大于i侧总层数的时候,我们如何根据第l-1层的ei来计算第l层的e呢?经过思考,我感觉应该是这样的,训练样本应该是一条path,也就是这个例子是u1 ← i2 ← u2 ← i4这条path,所以可以保证u1跟i4的层数l是一样的,所以不存在上面那个层数不匹配的问题。

ps:看到后面的实验结果才知道L是固定的所以每一层都不会缺失。

还有一个就是,不同层之间的W是不一样的,每一层都有着自己的参数,这个看公式就知道,理由就是我们在提取不同层信息的时候需要不同的W进行信息提取。

另一个疑惑是pui到底是不是每一个l层都一样?这里看公式好像就是指的是第一跳的Nu和Ni进行就计算的结果。

这部分内容是为了在进行batch训练的时候进行矩阵运算所推导的数学过程,其实跟之前我们讲的那个过程在数学上的计算是完全一样的,你想象一下,如果不用矩阵进行运算,在训练过程中要如何进行这么复杂的交互运算。

当进行了l层的embedding propagation后,我们就拥有了l个eu和l个ei,我们将他们进行concate操作:

这样,我们不仅可以通过嵌入传播层丰富初始嵌入,还可以通过调整L来控制传播范围。

最后,我们进行内积计算,以评估用户对目标商品的偏好:

采用的是pair-wise方式中的bpr loss:

『贰』 协同过滤,矩阵分解有感

    这个概念经常在机器学习的文章中看到,但由于接触不久,所以一直都是一知半解,没有好好了解过。

    首先从字面上理解,“协同”需要一个“集体“,“过滤”就应该是晒选的意思,那么协同过滤总的来说就是通过“集体”来“筛选”,以评分推荐系统为例子,这里的“协同”我个人理解就是集合”众多人的评价”,这里的“评价”,就是“对集体都接触过的事物进行打分”,这样大概就能通过一些共同的事物反应出用户不同的”价值观“,然后通过这样的价值观来”筛选“出价值观高度相似的人,再相互推荐共同都喜爱的东西。那么这样的推荐就很有可能是大家都需要的。

    经过资料洗礼过后,得知cf现在的两大方向,一种是以记忆为基础(Memory-base),另一种是基于模型(Model-based Collaborative Filtering)。

    普及的比较多的前者,它基于关注的目标,又分为基于用户的协同过滤和基于项目的协同过滤,上面举的一个简单的评分推荐系统的例子就可以说是基于用户的协同过滤,它是通过用户对共同物品的“主观价值”来筛选相似用户,再互补评分高的商品,从而达到推荐商品的目的;那么基于项目的意思就是通过这个用户集体对商品集的评价,在物品的角度上去寻找相似度高的物品,达到推荐商品的效果。虽然针对的目标不通,但以我个人理解,大体上都是依赖这个用户集营造的“价值观”,只不过区别在于,基于用户的CF是“关心”各个用户的“主观价值”上的“区别”,而基于项目的CF则是要基于这整个用户集对项目集的“普世价值观”,来甄别出“物品”上的差异。不知道这么比喻恰不恰当哈,“普世”我这边理解就是“大多数”,是一种整体趋势的意思。价值观比较“抽象”的话,再直接点这里的“价值观”就相当于物理中的“参考系”。

    但是以上两种方法在面对,不是每个用户对大多数商品都做出过评价(数据稀疏)时就无能为力,所以基于这个问题就引导出了基于模型(Model-based )的CF,我在最近的论文中接触到的就是一个“矩阵分解”的协同过滤,它能够基于现有的数据得到一个模型,再用此模型进行推荐。那么是如何做到的呢?接下来看看矩阵分解。

    假设我先在有一个关于用户对音乐评分的矩阵如下图:

    只有上述的数据是很难使用户相互推荐音乐的,因为可以看出用户本身听过的歌就不够多,那么如何使数据更加“饱满”呢?这时正是需要矩阵分解的时候,矩阵分解算法的数学理论基础是矩阵的行列变换。行列变换中又有以下规则,我们知道矩阵A进行行变换相当于A左乘一个矩阵,矩阵A进行列变换等价于矩阵A右乘一个矩阵,因此矩阵A可以表示为A=PEQ=PQ(E是标准阵)。

    形象的表示如下图:

    矩阵分解的目的就是把一个稀疏的用户评分矩阵分解成用户因子矩阵和项目因子矩阵相乘的形式R=U(转置)*I,我们的目的就是最后再让两个因子矩阵反乘回去得到饱满的用户评分矩阵。那么这个用户,项目因子是个什么东西呢?我们接着上面的音乐评分的形式说,一首歌可能包含多种音乐风格,我们可以量化风格,体现各种风格在一首歌中的比重,那么这里的“潜在因子”我们就可以当作“音乐风格”,K个因子就可以看作K种风格。譬如下图:

    可以说,这些因子就是我们的模型中的重要参数,个人理解分解出来的这两个因子矩阵就可以说是基于模型的CF中的,“模型”的了,其实我觉得可以类比线性模型中的参数,我们的回归模型最终重要的不就是公式中的各项参数吗,这两个因子矩阵其实就是我们这个模型中的重要参数,参数知道了模型也就求出来了。如果不了解线性模型可以参考吴恩达大大的机器学习课程,里面介绍的很详细,不像我这边一知半哈。

    那么这些个值具体是怎么得出来的呢?过程和求线性回归也很像,接下来就是相关的简单推倒,首先,我们假设,真实的用户评分和我们预测评分的差遵循高斯分布

R用是评分矩阵   U是用户因子矩阵,V是项目因子矩阵

接下来就是极大似然估计,使,在现有数据下概率最大化

    类比求线性模型,就能够了解思想很相似,所以应该同样是运用了似然估计的思想,要使值最大,式子两边同时取对数,可以看到,如果要使概率最大,那么公式的第一项就要最小,是不是想到了什么,没错接下来就可以看到最小二乘法的式子。

    线性模型我们遇到这个情况一般怎么做,没错,就是梯度下降。首先求偏导数

最后就是梯度下降的矩阵因子更新公式:

    接下来迭代到自己设置的阈值收敛就能得到局部最优解了。

    下面是我根据上述矩阵分解的思想随机的模拟实践,可以自行感受一下准度,可能写搓了点~

注释:以上诸多图片材料来自网上多篇博客文章

https://www.hu.com/question/26743347

http://blog.csdn.net/dream_angel_z/article/details/46288167

还有方便实用sklearn的中文API文档

http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030193

『叁』 基于用户协同过滤(User-CF)的推荐算法

1. 数学必备知识(向量)

2. 构建矩阵模型

3. User-CF的思想和计算

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

根据问题域中构建出来的用户-行为评分矩阵(图1-1),我们可以构建出用户的向量.首先,把每一个用户用一个向量表示,每个向量里有6个数字,分别代表该用户对6本书喜爱程度的评分.0代表用户没看过这本书.图示:

接下来,计算俩个用户的相似性,这里使用的指标叫作余弦相似度,计算公式如下:

其中,分子部分a·b表示两个向量的点积,计算方法就是两个向量对应元素先相乘再求和,比如:

用户a=[4 3 0 0 5 0]和用户b=[5 0 4 0 4 0]

a·b=4x5+3x0+0x4+0x0+5x4+0x0=40

分母部分的 代表向量a的模长, 就是a,b两个向量模长的乘积.向量模长的计算方法就是把向量

中的每个元素平方后再求和最后再开根号.

于是,第一个用户和第二个用户的相似度就可以进行如下计算:

余弦相似度的值在[0,1]闭区间内,值越大说明越相似,值越小说明越不相似.根据上面的计算公式,分别计算小白和其他5个同事的相似度,然后根据从大到小的顺序排列.可以看到小白和前俩个同事相似度高而和最后一个同事完全不相似.

比如,和小白最相似的两个同事的阅读列表编号有1,3,4,5共4本书.其中1,5这两本书小白已经看过,3,4这两本书哪本可能更适合小白的口味呢?

可以计算这两个同事对这两本书的加权评分并作为小白的可能评分,权重就是他们之间的相似度,具体计算如

下图.通过计算可以看出编号为3的书可能更适合小白的口味.

计算步骤:

1. 先确定第一个同事拥有的阅读列表的图书编号为1,3,5

2. 再确定第二个同事拥有的阅读列表的图书编号为1,3,4,5

3. 小白自己已经拥有的阅读的图书列表是1,2,5[这也是打叉的意义,自己已经有的,不需要再推荐给自己了]

4. 最后剩余的只有编号为3和编号为4的两本书了

5. 计算公式说明,0.75和0.63代表权重,也就是相似值.4,3,5代表的是该用户对这本书的评分.

1. 性能:适用于用户较少的场合,如果用户过多,计算用户相似度矩阵的代价较大

2. 领域:实效性要求高,用户个性化兴趣要求不高

3. 实时性:用户有新行为,不一定需要推荐结果立即变化

4. 冷启动:在新用户对少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度是离线计算的 

新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给其他用户

阅读全文

与图模型协同过滤相关的资料

热点内容
人民牌污水泵怎么鉴别真假 浏览:492
污水除臭一般用什么啊浦东新区 浏览:714
污水处理反硝化碳源 浏览:692
单缸手扶旋耕机柴油滤芯怎么换 浏览:233
净水器进水电磁阀从哪里进水 浏览:360
牵引车机油滤芯怎么换 浏览:575
北美枫香树脂 浏览:895
超滤主要去除水中的什么杂质 浏览:68
汽车换滤芯漏油怎么办 浏览:190
欧派滤芯哪里能买到 浏览:978
大理石水垢怎样清除 浏览:427
什么是明锐空气滤芯 浏览:513
微信扫码空气净化器怎么解锁 浏览:274
烟道除垢方案 浏览:172
阿特兹空气滤芯用什么 浏览:307
柔性树脂版原材料 浏览:277
福建车站饮水机加盟利润怎么样 浏览:912
大众车载空气净化器怎么样 浏览:624
立升净水器滤芯为什么这么贵 浏览:127
小型焊接烟雾净化器多少钱 浏览:733