TransR的实体链接代码解析

TransR: 实体和关系分开嵌入(Learning Entity and Relation Embeddings for Knowledge Graph Completion)

 

问题:一个实体是多种属性的综合体,不同关系关注实体的不同属性。直觉上一些相似的实体在实体空间中应该彼此靠近,但是同样地,在一些特定的不同的方面在对应的关系空间中应该彼此远离。
方案:将实体和关系嵌入到不同的空间中,在对应的关系空间中实现翻译。

损失函数

训练集的格式

杭州,中国,省会
重庆,中国,省会
台湾,中国,省会
加州,美国,省会
杭州电子科技大学,杭州,大学
浙江大学,杭州,大学
北京大学,北京,大学
复旦大学,上海,大学
磁器口,重庆,景点
西湖,杭州,景点
故宫,北京,景点

头实体字典构造

{'unk': 0, '台湾': 3, '西湖': 10, '加州': 4, '北京大学': 7, '故宫': 11, '磁器口': 9, '复旦大学': 8, '重庆': 2, '杭州电子科技大学': 5, '杭州': 1, '浙江大学': 6}

尾实体字典构造

{'重庆': 6, '美国': 2, '中国': 1, '杭州': 3, '北京': 4, 'unk': 0, '上海': 5}

关系字典构造:

{'景点': 3, '省会': 1, '大学': 2, 'unk': 0}

data -> id

[[[1], [1], [1]],

[[2], [1], [1]],

[[3], [1], [1]],

[[4], [2], [1]],

[[5], [3], [2]],

[[6], [3], [2]],

[[7], [4], [2]],

[[8], [5], [2]],

[[9], [6], [3]],

[[10], [3], [3]],

[[11], [4], [3]]]

关键程序代码:

 def __trans(self):
        with tf.variable_scope("trans") as scope:
            self.Mr = tf.get_variable(
                name="Mr",
                shape=[self.size_of_entity, self.size_of_relation]
            ) #Mr矩阵的大小[实体维度的大小,关系维度的大小]

            self.head = tf.reshape(self.head, shape=[-1, self.size_of_entity])
            self.tail = tf.reshape(self.tail, shape=[-1, self.size_of_entity])
            self.relation = tf.reshape(self.relation, shape=[-1, self.size_of_relation])

            self.hr = tf.matmul(self.head, self.Mr)
            self.tr = tf.matmul(self.tail, self.Mr)
            self.r = self.relation

            fr = self.hr + self.r - self.tr
            self.logits = tf.reduce_sum(fr * fr, axis=1)
            self.loss = tf.reduce_sum(self.logits)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值