推荐系统_各种方法的损失计算过程

本文详细介绍了推荐系统中不同算法的损失计算过程,包括基于朴素贝叶斯的BPR算法,XDeepFM的线性层、DNN层和CIN层,LightGCN的图卷积网络,RippleNet和KGAT的知识图谱融合,以及GRU和BERT的序列模型。每种算法的损失计算涉及正负样本的构建、不同模型的特征表示和损失函数的应用,如BPRLoss、BCELoss和L2Loss等。
摘要由CSDN通过智能技术生成

如何构造一个更好的语义特征向量是各个推荐算法的核心。

除了用户购买商品的记录文件,我们还有两类文件,即用户属性文件(性别,年龄,职业等),商品属性文件(发行日期,种类等),一个商品属性中的种类可以有多个值,即商品及属于这一种类也属于另一种类。

1:BPR
最基本的推荐算法是基于朴素贝叶斯思想(BPR)的协同过滤算法,在这个算法里面用到两种数据,即用户和购买商品矩阵。根据每个用户及其购买的商品,我们可以构造正样本,即用户购买过的商品为正样本,用户未购买的样本为负样本。
首先将用户(944维)和商品(1683维)(都为整型)用nn.embeddind()模块表示成向量(94464,168364)。只有通过转换成高维的向量,这样才能更好的拥有语义信息,通过计算损失,反向传播,不断更新其中的语义信息。
如何构建负样本?在这里我们为每一个正样本构建一个负样本,即每一个用户和其购买的一个商品构成正样本,那么这个用户和其未购买的商品就构成了负样本。在这里,我们首先将每个用户购买的所有的商品聚集到一起,这样我们就得到了944个集合,每个集合代表的是用户所购买的所有商品。之后我们采用批量采样的模型,每次采样2048个。在这2048个样本中包括用户ID以及其对应的正样本,之后我们根据用户ID集合拷贝一份,对每个ID进行负采样,首先随机生成2048个从1到1683之间的数字,然后打乱顺序。这些生成的数字暂时假定为“负样本”,我们根据数组ID以此判断所生成的“负样本”是否合法,对于每个用户ID我们判断生成的“负样本”是否在正样本集合中,如果在正样本集合中,我们保存用户ID所对应的数组ID,统计数量,对于这些在正样本集合的“负样本”,我们在随机生成一批次。重复上面过程,只到统计数量为0。表明所有生成的负样本符合条件。
通过上面的操作我们就得到了2048条数据,每条数据包括用户ID,正商品ID,负商品ID。我们将用户ID正商品ID,就得到了正样本评分,我们将用户ID负商品ID,就得到了负样本评分。我们将正样本评分和负样本评分放入BPRLoss()函数中,BPRLoss()函数工作原理,正样本评分-负样本评分,然后取sigmoid,之后取log,然后再取均值,然后再去负号。这样就得到了损失,之后我们将损失方向传播,利用优化器,就完成了一次参数的更新。这样我们经过N次批次操作将所有训练数据训练完成,参数也更新完成。

2:XdeepFM
根据用到的数据类别不同,我们可以将用到用户购买商品的记录文件,用户属性文件,商品属性文件的推荐算法记为XdeepFM, 此算法也是因子分解机算法。

对于上面的三个文件,数据分为三类,整型,浮点型,和序列型。
对于整型数据可以直接利用nn.embedding()变成64维度,可以对应行号索引,对于序列型,比如电影种类,如何进行embedding(), 首先我们获取每个商品的种类,取最大种类为每个商品种类的长度,将种类长度不足的商品padding成最大种类的商品长度,以方便下面的计算。之后我们我们创造一个masking矩阵,矩阵的长为最大商品种类数量,宽为商品数。之后我们将总的商品种类embedding()成64维。根据每个商品所对应的种类,获取embedding()后的向量,然后将这个向量和masking向量相乘。之后在对相乘之后的向量相加求均值,最大值,最小值,总和。这样我们就表示出了序列型所对应的embedding()。对于浮点型数据,比如时间戳,一个批次2048个,我们先同时初始化相同的64位矩阵,即这2048个时间戳表示的一样,我们拿初始化后的时间戳乘上原始的时间戳即可得到表征后的时间戳。
请添加图片描述
xDeepFM的数据输入:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值