用于推荐系统的知识图谱对比学习

该博客介绍了如何通过随机删除边创建两个子知识图谱(KG)来实现KG增强。在每个子KG中,利用GCN模型聚合项目邻域信息,并计算不同视图间的项目表示相似度。具体方法包括使用RGAT进行关系感知的聚合。这种方法旨在提高推荐系统的稳定性和性能,参考了Yang等人关于知识图谱对比学习的研究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KG增强,随机生成两个子KG

    def get_kg_views(self):
        kg = self.gcn_model.kg_dict
        view1 = drop_edge_random(kg, world.kg_p_drop,
                                 self.gcn_model.num_entities)
        view2 = drop_edge_random(kg, world.kg_p_drop,
                                 self.gcn_model.num_entities)
        return view1, view2

在两个子KG中分别聚合项目的邻域信息并计算项目表示的相似度:

    def item_kg_stability(self, view1, view2):
        kgv1_ro = self.gcn_model.cal_item_embedding_from_kg(view1)
        kgv2_ro = self.gcn_model.cal_item_embedding_from_kg(view2)
        sim = self.sim(kgv1_ro, kgv2_ro)
        return sim

选择信息聚合的方式:

    def cal_item_embedding_from_kg(self, kg: dict = None):
        if kg is None:
            kg = self.kg_dict

        if world.kgcn == "RGAT":
            return self.cal_item_embedding_rgat(kg)
        elif (world.kgcn == "NO"):
            return self.embedding_item.weight

RGAT关系感知聚合方法:

    def cal_item_embedding_rgat(self, kg: dict):
        item_embs = self.embedding_item(
            torch.IntTensor(list(kg.keys())).to(
                world.device))  # item_num, emb_dim
        item_entities = torch.stack(list(
            kg.values()))  # item_num, entity_num_each
        item_relations = torch.stack(list(self.item2relations.values()))
        entity_embs = self.embedding_entity(
            item_entities)  # item_num, entity_num_each, emb_dim
        relation_embs = self.embedding_relation(
            item_relations)  # item_num, entity_num_each, emb_dim
        # w_r = self.W_R[relation_embs] # item_num, entity_num_each, emb_dim, emb_dim
        # item_num, entity_num_each
        padding_mask = torch.where(item_entities != self.num_entities,
                                   torch.ones_like(item_entities),
                                   torch.zeros_like(item_entities)).float()
        return self.gat.forward_relation(item_embs, entity_embs, relation_embs,
                                         padding_mask)
    def forward_relation(self, item_embs, entity_embs, w_r, adj):
        x = F.dropout(entity_embs, self.dropout, training=self.training)
        x = torch.cat([
            att.forward_relation(item_embs, x, w_r, adj) for att in self.layers
        ],
                      dim=1)
        x = self.out(x)
        x = x + item_embs
        x = F.dropout(x, self.dropout, training=self.training)
        return x

参考论文:  Yang Y, Huang C, Xia L, et al. Knowledge Graph Contrastive Learning for Recommendation[J]. arXiv preprint arXiv:2205.00976, 2022.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值