图卷积网络在推荐系统中的应用lightGCN,配套pytorch的代码解释

注:本文所用到的代码及论文,文章底部有链接,可自行下载

论文部分:

图卷积网络在推荐系统中的应用lightGCN,配套pytorch的代码解释_第1张图片

作者开门见山的指出:特征转换和非线性激活——对协同过滤的性能几乎没有贡献。这篇文章也就是对NGCF的模型进行了精简,所以最好先理解前者才更好的理解后者

如果想回顾一下:可以参考图卷积网络在推荐系统中的应用NGCF(Neural Graph Collaborative Filtering)配套pytorch的代码解释_zhao254014的博客-CSDN博客

言归正传,这篇论文前面都在讲这些繁琐的操作对最后的推荐没啥用,然后显示出lightGCN的好处

图卷积网络在推荐系统中的应用lightGCN,配套pytorch的代码解释_第2张图片

 在LightGCN中,采用了简单的加权和聚合器,放弃了使用特征变换和非线性激活, 同时只聚合连接的邻居,而不集成目标节点本身(即自连接)。

图卷积网络在推荐系统中的应用lightGCN,配套pytorch的代码解释_第3张图片

我们进一步组合在每一层获得的嵌入,以形成最终的表示

这个是新添的:其中αk设置为1/(K+1)效果最好。 

我们执行图层组合以获得最终表示的原因有三个:

(1) 随着层数的增加,嵌入将过度平滑。(对于过渡平滑,我所理解的就是即使是不同类别的结点,在经过多阶处理后也会达到一个相似的值,或者说所有的用户结点都趋于一个值,这不是我们所希望的)

(2) 不同层的嵌入捕获了不同的语义。例如,第一层对具有交互的用户和项目强制平滑,第二层平滑在交互的项目(用户)上有重叠的用户(项目),更高的层捕获更高阶的接近度。因此,将它们结合起来将使表示更加全面。

(3) 将不同层的嵌入与加权和相结合,可以捕捉到图卷积与自连接的效果,这是GCN中的一个重要技巧。 

然后后面的东西就是和NGCF一样了

pytorch代码部分:

90%的代码和NGCF都是一样的,

这里只阐述不同的核心部分:

这里其实就是对NGCF进行删减罢了,去掉特征变换以及激活函数
  

 for k in range(len(self.layers)):   #生成1-3跳embed信息
 # u到u,聚合u所有邻居的消息 
            side_embeddings = torch.sparse.mm(A_hat, ego_embeddings)     
            ego_embeddings = side_embeddings
 #上面的all—embed是一个列表经过三次循环后,包含1-3的embed+自身结点的embed,所以列表索引为4
            all_embeddings += [ego_embeddings]                         
        
        all_embeddings = torch.stack(all_embeddings, 1)          # 所有跳数组合

        all_embeddings = torch.mean(all_embeddings,axis=1, keepdims=False)
        #分用户和物品em
        u_g_embeddings = all_embeddings[:self.n_user, :]     
        i_g_embeddings = all_embeddings[self.n_user:, :]     

        """
        *********************************************************
        look up.
        """
        # 查询此批次1024数据的embed
        u_g_embeddings = u_g_embeddings[users, :]           #此批次用户的embed 
        pos_i_g_embeddings = i_g_embeddings[pos_items, :]      #正样本的embed
        neg_i_g_embeddings = i_g_embeddings[neg_items, :]    #负样本的embed

        return u_g_embeddings, pos_i_g_embeddings, neg_i_g_embeddings

其实lightGCN就是个简化版的NGCF,将一些可有可无的复杂计算给剔除掉,提高模型的处理速度及可读性:

有下面的结果其实不难看出,训练一个epoc仅需要30s左右,而我们在上一篇训练完整版NGCF时一步需要约60s,所以归根结底就是剔除了可有可无的一些复杂计算,我们的测试结果也是跑出了论文中的指标值的99%,总体来说复现的还不错。图卷积网络在推荐系统中的应用lightGCN,配套pytorch的代码解释_第4张图片

Best Iter=[48]@[30959.6] recall=[0.18065 0.25163 0.30306 0.34299 0.37581], precision=[0.05557 0.03917 0.03163 0.02700 0.02380], hit=[0.58859 0.69084 0.74828 0.78542 0.81198], ndcg=[0.15381 0.17604 0.19132 0.20253 0.21136]

好了,至此这篇lightGCN论文也暂时告一段落!!后续其他论文敬请期待

论文及代码获取:

这篇仅更改了NGCF中的前行传播部分,所而更改部分上面代码块中已经全部粘出,所以可以移直接用)

关于NGCF的详细步骤解释:图卷积网络在推荐系统中的应用NGCF(Neural Graph Collaborative Filtering)配套pytorch的代码解释_zhao254014的博客-CSDN博客

论文及代码获取:

torch版:GitHub - gusye1234/LightGCN-PyTorch: The PyTorch implementation of LightGCN

tensorflow版:GitHub - kuandeng/LightGCN

下面网盘这个是我文章中用到的代码,更优先匹配这篇文章

或者网盘获取

链接:https://pan.baidu.com/s/103DlE-aU66wlqOuA2u4PeA 
提取码:715z 
复制这段内容后打开百度网盘手机App,操作更方便哦

你可能感兴趣的:(图神经网络,python,知识图谱,pytorch,推荐算法)