Beispiel #1
0
    def __init__(self, args, logger):
        super(GraphSAGE, self).__init__(args, logger)

        self.adj = utils.build_adj(self.graph, self.num_node)

        edge_dist_dict, node_dist_dict = utils.makeDist(
            args.link_file, args.negative_power)
        self.edges_alias_sampler = utils.VoseAlias(edge_dist_dict)
        self.nodes_alias_sampler = utils.VoseAlias(node_dist_dict)

        self.taxo_parent2children, self.taxo_child2parents, self.nodeid2category, self.category2nodeid, self.category2id, self.nodeid2path \
            = utils.read_taxos(args.taxo_file, args.taxo_assign_file, args.extend_label)
        self.root_nodes = [
            i for i in self.root_nodes if i in self.nodeid2category
        ]

        edgedistdict, taxodistdict = self.make_dist()
        self.taxo_edge_alias_sampler = utils.VoseAlias(edgedistdict)
        self.taxo_alias_sampler = utils.VoseAlias(taxodistdict)
        self.num_category = len(self.category2id)
        self.taxo_rootid = self.category2id['root']

        self.print(f"num of category: {self.num_category}")

        if args.rand_init:
            taxo_init_embed = utils.init_embed(self.num_category,
                                               self.embed_dim)
        else:
            taxo_init_embed = self.init_taxo_embed(self.pre_train_embedding)

        self.model = TaxoGCNModel(self.pre_train_embedding, taxo_init_embed,
                                  args.dropout)
        self.model.to(args.device)
Beispiel #2
0
    def __init__(self, args, logger=None):
        super(TaxoGAN_V3, self).__init__(args, logger)

        self.taxo_parent2children, self.taxo_child2parents, self.nodeid2category, self.category2nodeid, self.category2id, self.nodeid2path \
            = utils.read_taxos(args.taxo_file, args.taxo_assign_file)
        self.root_nodes = [
            i for i in self.root_nodes if i in self.nodeid2category
        ]

        self.num_category = len(self.category2id)
        self.taxo_rootid = self.category2id['root']

        self.print(f"num of category: {self.num_category}")

        if args.rand_init:
            taxo_init_embed = utils.init_embed(self.num_category,
                                               self.embed_dim)
        else:
            taxo_init_embed = self.init_taxo_embed(self.pre_train_embedding)

        # build the model
        self.generator = Generator_V3(args.lambda_g, self.pre_train_embedding,
                                      taxo_init_embed, args.lambda_taxo,
                                      self.num_category, args.transform)
        self.discriminator = Discriminator_V3(
            args.lambda_d, self.pre_train_embedding, taxo_init_embed,
            args.lambda_taxo, self.num_category, args.transform)
        self.generator.to(args.device)
        self.discriminator.to(args.device)

        self.taxo_all_score = None
Beispiel #3
0
    def __init__(self, args, logger):
        super(PTE, self).__init__(args, logger)
        edge_dist_dict, node_dist_dict = utils.makeDist(
            args.link_file, args.negative_power)
        self.edges_alias_sampler = utils.VoseAlias(edge_dist_dict)
        self.nodes_alias_sampler = utils.VoseAlias(node_dist_dict)

        self.taxo_parent2children, self.taxo_child2parents, self.nodeid2category, self.category2nodeid, self.category2id, self.nodeid2path \
         = utils.read_taxos(args.taxo_file, args.taxo_assign_file, args.extend_label)

        edgedistdict, taxodistdict = self.make_dist()
        self.taxo_edge_alias_sampler = utils.VoseAlias(edgedistdict)
        self.taxo_alias_sampler = utils.VoseAlias(taxodistdict)
        self.num_category = len(self.category2id)
        self.taxo_rootid = self.category2id['root']

        self.category2level = utils.category2level(range(self.num_category),
                                                   self.taxo_child2parents)
        level2category = defaultdict(list)
        for cate, level in self.category2level.items():
            level2category[level].append(cate)
        self.level2category = dict(level2category)

        self.print(f"num of category: {self.num_category}")

        if args.rand_init:
            taxo_init_embed = utils.init_embed(self.num_category,
                                               self.embed_dim)
        else:
            taxo_init_embed = self.init_taxo_embed(self.pre_train_embedding)

        self.model = TaxoSkipGramModel(self.pre_train_embedding,
                                       taxo_init_embed)
        self.model.to(args.device)
Beispiel #4
0
    def __init__(self, args, logger=None):
        super(TaxoGAN_V1, self).__init__(args, logger)

        self.taxo_parent2children, self.taxo_child2parents, self.nodeid2category, self.category2nodeid, self.category2id, self.nodeid2path \
            = utils.read_taxos(args.taxo_file, args.taxo_assign_file)
        self.root_nodes = [
            i for i in self.root_nodes if i in self.nodeid2category
        ]
        categories = list(self.category2nodeid.keys())
        self.nodeid2neg_category = {
            node:
            [i for i in categories if i not in self.nodeid2category[node]]
            for node in self.root_nodes
        }

        edgedistdict, taxodistdict = self.make_dist()
        self.taxo_edge_alias_sampler = utils.VoseAlias(edgedistdict)
        self.taxo_alias_sampler = utils.VoseAlias(taxodistdict)
        self.num_category = len(self.category2id)
        self.taxo_rootid = self.category2id['root']
        self.category2level = utils.category2level(range(self.num_category),
                                                   self.taxo_child2parents)

        self.print(f"num of category: {self.num_category}")

        if args.rand_init:
            taxo_init_embed = utils.init_embed(self.num_category,
                                               self.embed_dim)
        else:
            taxo_init_embed = self.init_taxo_embed(self.pre_train_embedding)

        max_level = 0
        for _, paths in self.nodeid2path.items():
            for p in paths:
                max_level = max(max_level, len(p))
        self.max_level = max_level

        # build the model
        self.generator = Generator(args.lambda_g, self.pre_train_embedding,
                                   taxo_init_embed, args.lambda_taxo,
                                   max_level + 1, args.transform)
        self.discriminator = Discriminator(args.lambda_d,
                                           self.pre_train_embedding,
                                           taxo_init_embed, args.lambda_taxo,
                                           max_level + 1, args.transform)
        self.generator.to(args.device)
        self.discriminator.to(args.device)
Beispiel #5
0
    def __init__(self, args, logger=None):
        super(TaxoGAN_V2, self).__init__(args, logger)

        self.taxo_parent2children, self.taxo_child2parents, self.nodeid2category, self.category2nodeid, self.category2id, self.nodeid2path \
            = utils.read_taxos(args.taxo_file, args.taxo_assign_file)
        self.root_nodes = [
            i for i in self.root_nodes if i in self.nodeid2category
        ]

        self.num_category = len(self.category2id)
        self.taxo_rootid = self.category2id['root']
        self.category2level = utils.category2level(range(self.num_category),
                                                   self.taxo_child2parents)
        self.levels = [
            self.category2level[i] for i in range(self.num_category)
        ]
        self.level2category = collections.defaultdict(list)
        self.max_level = max(self.levels)
        for i, level in enumerate(self.levels):
            self.level2category[level].append(i)

        self.print(f"num of category: {self.num_category}")

        if args.rand_init:
            taxo_init_embed = utils.init_embed(self.num_category,
                                               self.embed_dim)
        else:
            taxo_init_embed = self.init_taxo_embed(self.pre_train_embedding)

        # build the model
        self.generator = Generator_V2(args.lambda_g, self.pre_train_embedding,
                                      taxo_init_embed, args.lambda_taxo,
                                      self.max_level + 1, args.transform)
        self.discriminator = Discriminator_V2(
            args.lambda_d, self.pre_train_embedding, taxo_init_embed,
            args.lambda_taxo, self.max_level + 1, args.transform)
        self.generator.to(args.device)
        self.discriminator.to(args.device)

        self.taxo_all_score = None
Beispiel #6
0
    def __init__(self, args, logger=None):
        """initialize the parameters, prepare the data and build the network"""
        self.print = logger.info if logger else print
        self.device = args.device

        self.print(f"Reading data from {args.data_dir}")
        self.root_nodes, self.graph, num_link = utils.read_graph(
            args.link_file)
        self.pre_train_embedding, self.id2name, self.name2id = utils.read_nodes(
            args.node_file)
        self.num_node = len(self.id2name)
        self.embed_dim = args.embed_dim

        self.print(f"num of link: {num_link}")
        self.print(f"num of node: {self.num_node}")

        if args.rand_init or not self.pre_train_embedding:
            self.print("randomly initialize node embedding!")
            self.embed_dim = args.embed_dim
            self.pre_train_embedding = utils.init_embed(
                self.num_node, self.embed_dim)

        if 'taxonomy' in args.task:
            self.taxo_parent2children, self.taxo_child2parents, _, self.category2nodeid, self.category2id, _ \
                = utils.read_taxos(args.taxo_file, args.taxo_assign_file, args.extend_label)
            self.taxo_rootid = self.category2id['root']

        self.task_stats = {
            task: {
                'best_acc': -1,
                'acc': []
            }
            for task in args.task.split('|')
        }
        self.stats = {'graph_loss': [], 'taxo_loss': []}
        self.model = None