栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965596.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号