def _define_embed_graph(self): with tf.name_scope('triple_placeholder'): self.pos_hs = tf.placeholder(tf.int32, shape=[None]) self.pos_rs = tf.placeholder(tf.int32, shape=[None]) self.pos_ts = tf.placeholder(tf.int32, shape=[None]) self.neg_hs = tf.placeholder(tf.int32, shape=[None]) self.neg_rs = tf.placeholder(tf.int32, shape=[None]) self.neg_ts = tf.placeholder(tf.int32, shape=[None]) self.pos_es = tf.placeholder(tf.int32, shape=[None]) self.pos_as = tf.placeholder(tf.int32, shape=[None]) self.pos_vs = tf.placeholder(tf.int32, shape=[None]) self.neg_es = tf.placeholder(tf.int32, shape=[None]) self.neg_as = tf.placeholder(tf.int32, shape=[None]) self.neg_vs = tf.placeholder(tf.int32, shape=[None]) self.joint_ents = tf.placeholder(tf.int32, shape=[None]) with tf.name_scope('triple_lookup'): phs = tf.nn.embedding_lookup(self.ent_embeds, self.pos_hs) prs = tf.nn.embedding_lookup(self.rel_embeds, self.pos_rs) pts = tf.nn.embedding_lookup(self.ent_embeds, self.pos_ts) nhs = tf.nn.embedding_lookup(self.ent_embeds, self.neg_hs) nrs = tf.nn.embedding_lookup(self.rel_embeds, self.neg_rs) nts = tf.nn.embedding_lookup(self.ent_embeds, self.neg_ts) pes = tf.nn.embedding_lookup(self.ent_embeds_ce, self.pos_es) pas = tf.nn.embedding_lookup(self.attr_embeds, self.pos_as) pvs = tf.nn.embedding_lookup(self.char_embeds, tf.nn.embedding_lookup(self.value_id_char_ids, self.pos_vs)) nes = tf.nn.embedding_lookup(self.ent_embeds_ce, self.neg_es) nas = tf.nn.embedding_lookup(self.attr_embeds, self.neg_as) nvs = tf.nn.embedding_lookup(self.char_embeds, tf.nn.embedding_lookup(self.value_id_char_ids, self.neg_vs)) pvs = n_gram_compositional_func(pvs, self.args.literal_len, self.args.batch_size, self.args.dim) nvs = n_gram_compositional_func(nvs, self.args.literal_len, self.args.batch_size * self.args.neg_triple_num, self.args.dim) ents_se = tf.nn.embedding_lookup(self.ent_embeds, self.joint_ents) ents_ce = tf.nn.embedding_lookup(self.ent_embeds_ce, self.joint_ents) with tf.name_scope('triple_loss'): self.triple_loss = get_loss_func(phs, prs, pts, nhs, nrs, nts, self.args) self.triple_optimizer = generate_optimizer(self.triple_loss, self.args.learning_rate, opt=self.args.optimizer) self.triple_loss_ce = get_loss_func(pes, pas, pvs, nes, nas, nvs, self.args) self.triple_optimizer_ce = generate_optimizer(self.triple_loss_ce, self.args.learning_rate, opt=self.args.optimizer) cos_sim = tf.reduce_sum(tf.multiply(ents_se, ents_ce), 1, keep_dims=True) self.joint_loss = tf.reduce_sum(1 - cos_sim) self.optimizer_joint = generate_optimizer(self.joint_loss, self.args.learning_rate, opt=self.args.optimizer)
def _define_embed_graph(self): with tf.name_scope('triple_placeholder'): self.pos_hs = tf.placeholder(tf.int32, shape=[None]) self.pos_rs = tf.placeholder(tf.int32, shape=[None]) self.pos_ts = tf.placeholder(tf.int32, shape=[None]) self.neg_hs = tf.placeholder(tf.int32, shape=[None]) self.neg_rs = tf.placeholder(tf.int32, shape=[None]) self.neg_ts = tf.placeholder(tf.int32, shape=[None]) with tf.name_scope('triple_lookup'): phe = tf.nn.embedding_lookup(self.ent_embeds, self.pos_hs) pte = tf.nn.embedding_lookup(self.ent_embeds, self.pos_ts) pre = tf.nn.embedding_lookup(self.rel_embeds, self.pos_rs) pht = tf.nn.embedding_lookup(self.ent_transfer, self.pos_hs) ptt = tf.nn.embedding_lookup(self.ent_transfer, self.pos_ts) prt = tf.nn.embedding_lookup(self.rel_transfer, self.pos_rs) nhe = tf.nn.embedding_lookup(self.ent_embeds, self.neg_hs) nte = tf.nn.embedding_lookup(self.ent_embeds, self.neg_ts) nre = tf.nn.embedding_lookup(self.rel_embeds, self.neg_rs) nht = tf.nn.embedding_lookup(self.ent_transfer, self.neg_hs) ntt = tf.nn.embedding_lookup(self.ent_transfer, self.neg_ts) nrt = tf.nn.embedding_lookup(self.rel_transfer, self.neg_rs) with tf.name_scope('projection'): phe = self._calc(phe, pht, prt) pte = self._calc(pte, ptt, prt) nhe = self._calc(nhe, nht, nrt) nte = self._calc(nte, ntt, nrt) with tf.name_scope('triple_loss'): self.triple_loss = get_loss_func(phe, pre, pte, nhe, nre, nte, self.args) self.triple_optimizer = generate_optimizer(self.triple_loss, self.args.learning_rate, opt=self.args.optimizer)
def _define_embed_graph(self): with tf.name_scope('triple_placeholder'): self.pos_hs = tf.placeholder(tf.int32, shape=[None]) self.pos_rs = tf.placeholder(tf.int32, shape=[None]) self.pos_ts = tf.placeholder(tf.int32, shape=[None]) self.neg_hs = tf.placeholder(tf.int32, shape=[None]) self.neg_rs = tf.placeholder(tf.int32, shape=[None]) self.neg_ts = tf.placeholder(tf.int32, shape=[None]) self.aligned_ents1 = tf.placeholder(tf.int32, shape=[None]) self.aligned_ents2 = tf.placeholder(tf.int32, shape=[None]) with tf.name_scope('triple_lookup'): phs = tf.nn.embedding_lookup(self.ent_embeds, self.pos_hs) prs = tf.nn.embedding_lookup(self.rel_embeds, self.pos_rs) pts = tf.nn.embedding_lookup(self.ent_embeds, self.pos_ts) nhs = tf.nn.embedding_lookup(self.ent_embeds, self.neg_hs) nrs = tf.nn.embedding_lookup(self.rel_embeds, self.neg_rs) nts = tf.nn.embedding_lookup(self.ent_embeds, self.neg_ts) ents1 = tf.nn.embedding_lookup(self.ent_embeds, self.aligned_ents1) ents2 = tf.nn.embedding_lookup(self.ent_embeds, self.aligned_ents2) with tf.name_scope('triple_loss'): self.triple_loss = get_loss_func(phs, prs, pts, nhs, nrs, nts, self.args) self.triple_optimizer = generate_optimizer(self.triple_loss, self.args.learning_rate, opt=self.args.optimizer) with tf.name_scope('align_loss'): self.align_loss = tf.reduce_sum( tf.reduce_sum(tf.pow(ents1 - ents2, 2), 1)) self.align_optimizer = generate_optimizer(self.align_loss, self.args.learning_rate, opt=self.args.optimizer)
def _define_embed_graph(self): with tf.name_scope('triple_placeholder'): self.pos_hs = tf.placeholder(tf.int32, shape=[None]) self.pos_rs = tf.placeholder(tf.int32, shape=[None]) self.pos_ts = tf.placeholder(tf.int32, shape=[None]) self.neg_hs = tf.placeholder(tf.int32, shape=[None]) self.neg_rs = tf.placeholder(tf.int32, shape=[None]) self.neg_ts = tf.placeholder(tf.int32, shape=[None]) with tf.name_scope('triple_lookup'): phs = tf.nn.embedding_lookup(self.ent_embeds, self.pos_hs) prs = tf.nn.embedding_lookup(self.rel_embeds, self.pos_rs) pts = tf.nn.embedding_lookup(self.ent_embeds, self.pos_ts) nhs = tf.nn.embedding_lookup(self.ent_embeds, self.neg_hs) nrs = tf.nn.embedding_lookup(self.rel_embeds, self.neg_rs) nts = tf.nn.embedding_lookup(self.ent_embeds, self.neg_ts) with tf.name_scope('triple_loss'): self.triple_loss = get_loss_func(phs, prs, pts, nhs, nrs, nts, self.args) self.triple_optimizer = generate_optimizer(self.triple_loss, self.args.learning_rate, opt=self.args.optimizer) with tf.name_scope('seed_links_placeholder'): self.labeled_entities1 = tf.placeholder(tf.int32, shape=[None]) self.labeled_entities2 = tf.placeholder(tf.int32, shape=[None]) self.unlabeled_entities1 = tf.placeholder(tf.int32, shape=[None]) self.unlabeled_entities2 = tf.placeholder(tf.int32, shape=[None]) with tf.name_scope('seed_links_lookup'): labeled_embeds1 = tf.nn.embedding_lookup(self.ent_embeds, self.labeled_entities1) labeled_embeds2 = tf.nn.embedding_lookup(self.ent_embeds, self.labeled_entities2) unlabeled_embeds1 = tf.nn.embedding_lookup(self.ent_embeds, self.unlabeled_entities1) unlabeled_embeds2 = tf.nn.embedding_lookup(self.ent_embeds, self.unlabeled_entities2) with tf.name_scope('sup_mapping_loss'): mapped_12 = tf.nn.l2_normalize(tf.matmul(labeled_embeds1, self.mapping_mat_1)) mapped_21 = tf.nn.l2_normalize(tf.matmul(labeled_embeds2, self.mapping_mat_2)) map_loss_12 = tf.reduce_sum(tf.reduce_sum(tf.pow(labeled_embeds2 - mapped_12, 2), 1)) map_loss_21 = tf.reduce_sum(tf.reduce_sum(tf.pow(labeled_embeds1 - mapped_21, 2), 1)) with tf.name_scope('semi_sup_mapping_loss'): semi_mapped_121 = tf.nn.l2_normalize(tf.matmul(tf.matmul(unlabeled_embeds1, self.mapping_mat_1), self.mapping_mat_2)) semi_mapped_212 = tf.nn.l2_normalize(tf.matmul(tf.matmul(unlabeled_embeds2, self.mapping_mat_2), self.mapping_mat_1)) map_loss_11 = tf.reduce_sum(tf.reduce_sum(tf.pow(unlabeled_embeds1 - semi_mapped_121, 2), 1)) map_loss_22 = tf.reduce_sum(tf.reduce_sum(tf.pow(unlabeled_embeds2 - semi_mapped_212, 2), 1)) self.mapping_loss = self.args.alpha_1 * (map_loss_12 + map_loss_21) + \ self.args.alpha_2 * (map_loss_11 + map_loss_22) self.mapping_optimizer = generate_optimizer(self.mapping_loss, self.args.learning_rate, opt=self.args.optimizer)
def _define_embed_graph(self): with tf.name_scope('triple_placeholder'): self.pos_hs = tf.placeholder(tf.int32, shape=[None]) self.pos_rs = tf.placeholder(tf.int32, shape=[None]) self.pos_ts = tf.placeholder(tf.int32, shape=[None]) self.neg_hs = tf.placeholder(tf.int32, shape=[None]) self.neg_rs = tf.placeholder(tf.int32, shape=[None]) self.neg_ts = tf.placeholder(tf.int32, shape=[None]) with tf.name_scope('triple_lookup'): phs = tf.reshape( tf.nn.embedding_lookup(self.ent_embeds, self.pos_hs), [-1, self.args.dim, 1]) prs = tf.nn.embedding_lookup(self.rel_embeds, self.pos_rs) pts = tf.reshape( tf.nn.embedding_lookup(self.ent_embeds, self.pos_ts), [-1, self.args.dim, 1]) nhs = tf.reshape( tf.nn.embedding_lookup(self.ent_embeds, self.neg_hs), [-1, self.args.dim, 1]) nrs = tf.nn.embedding_lookup(self.rel_embeds, self.neg_rs) nts = tf.reshape( tf.nn.embedding_lookup(self.ent_embeds, self.neg_ts), [-1, self.args.dim, 1]) p_matrix = tf.reshape( tf.nn.embedding_lookup(self.rel_matrix, self.pos_rs), [-1, self.args.dim, self.args.dim]) n_matrix = tf.reshape( tf.nn.embedding_lookup(self.rel_matrix, self.neg_rs), [-1, self.args.dim, self.args.dim]) phs = tf.reshape(tf.matmul(p_matrix, phs), [-1, self.args.dim]) pts = tf.reshape(tf.matmul(p_matrix, pts), [-1, self.args.dim]) phs = tf.nn.l2_normalize(phs, 1) pts = tf.nn.l2_normalize(pts, 1) nhs = tf.reshape(tf.matmul(n_matrix, nhs), [-1, self.args.dim]) nts = tf.reshape(tf.matmul(n_matrix, nts), [-1, self.args.dim]) nhs = tf.nn.l2_normalize(nhs, 1) nts = tf.nn.l2_normalize(nts, 1) with tf.name_scope('triple_loss'): self.triple_loss = get_loss_func(phs, prs, pts, nhs, nrs, nts, self.args) self.triple_optimizer = generate_optimizer(self.triple_loss, self.args.learning_rate, opt=self.args.optimizer)