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)
Beispiel #2
0
 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)
Beispiel #3
0
    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)
Beispiel #4
0
 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)
Beispiel #5
0
 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)