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)
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
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)
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)
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
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