表示学习-TransE

原理介绍

核心理念

在平面直角坐标系中,向量表示三元组知识(h,r,t)(h,r,t)(h,r,t)。其中hhh表示的是头实体的向量表示;rrr表示的是关系的向量表示;ttt指代的是尾实体的向量表示,如果三元组(h,r,t)(h,r,t)(h,r,t)在向量空间中满足下图关系:

当我们通过如上图的形式表示三元组时,可以从两个方面对已有知识图谱中的知识做处理:

  1. 使用词向量对知识图谱已经有的三元组进行表示;
  2. 对可能潜在的三元组关系进行预测,即在使用词向量表示当前知识图谱的基础上,预测潜在的三元组;

主要流程

TransE的主要方法流程为:
知识图谱(KG)中现存的关系构成关系集,实体构成实体集,模型抽取两个集合来构成三元组。
按照h+r≈th+r\approx th+rt规则做向量运算。
如果近似达到要求,则可以在两个实体间建立联系来补充完善知识图谱,通过这样的方法挖掘、发现实体间的关系,扩大知识网络,实现连接预测。

得分函数

表示学习中,得分函数是比较重要的一部分,TransE的得分函数为:
f(h,r,t)=∣∣h+r−t∣∣L1/L2f(h,r,t) = ||h+r-t||_{L1/L2}f(h,r,t)=∣∣h+rtL1/L2

代码实现

本实验使用的OpenKE库来实现,这里对OpenKE中TransE代码进行解读。

OpenKE包clone

git clone -b OpenKE-PyTorch https://github.com/thunlp/OpenKE

通过git下载OpenKE的github仓库。

TransE代码解读

TransE以及其他多种知识表示模型的模型结构都是存储在 OpenKE/openke/module/model 路径下。
TransE initialize部分
该部分是根据TransE算法,初始化知识图谱的实体集和关系集。

对应代码为:

   def __init__(self, ent_tot, rel_tot, dim = 100, p_norm = 1, norm_flag = True, margin = None, epsilon = None):super(TransE, self).__init__(ent_tot, rel_tot)# 初始化一些基本参数self.dim = dim    # 深度self.margin = margin   # 边缘self.epsilon = epsilonself.norm_flag = norm_flag   #正则化标签self.p_norm = p_norm# 初始化实体和关系的embedding参数self.ent_embeddings = nn.Embedding(self.ent_tot, self.dim)self.rel_embeddings = nn.Embedding(self.rel_tot, self.dim)# 如果margin/epsilon为None,则随机初始化为权重值,否则根据算法更新实体、关系的embeddingif margin == None or epsilon == None:nn.init.xavier_uniform_(self.ent_embeddings.weight.data)nn.init.xavier_uniform_(self.rel_embeddings.weight.data)else:self.embedding_range = nn.Parameter(torch.Tensor([(self.margin + self.epsilon) / self.dim]), requires_grad=False)nn.init.uniform_(tensor = self.ent_embeddings.weight.data, a = -self.embedding_range.item(), b = self.embedding_range.item())nn.init.uniform_(tensor = self.rel_embeddings.weight.data, a= -self.embedding_range.item(), b= self.embedding_range.item())if margin != None:self.margin = nn.Parameter(torch.Tensor([margin]))self.margin.requires_grad = Falseself.margin_flag = Trueelse:self.margin_flag = False

TransE 评分函数
OpenKE代码实现的评分函数,在论文上基础上实现了L1/L2范式的一个选择在里面。

   def _calc(self, h, t, r, mode):# 如果norm_flag为True,则计算机h、r、t的L2范数if self.norm_flag:h = F.normalize(h, 2, -1)r = F.normalize(r, 2, -1)t = F.normalize(t, 2, -1)# 如果mode不是正则化mode,则将向量复原if mode != 'normal':h = h.view(-1, r.shape[0], h.shape[-1])t = t.view(-1, r.shape[0], t.shape[-1])r = r.view(-1, r.shape[0], r.shape[-1])# 根据是不是首次进入batch,不懂得score计算if mode == 'head_batch':score = h + (r - t)else:score = (h + r) - t# 按需求维度将score展开score = torch.norm(score, self.p_norm, -1).flatten()return score

TransE训练步骤
TransE的反向传播流程主要是:获取embedding、计算评分函数、返回分数。

   def forward(self, data):# 获取当前batch的数据三元组batch_h = data['batch_h']batch_t = data['batch_t']batch_r = data['batch_r']mode = data['mode']# 就batch转化为矩阵以便计算h = self.ent_embeddings(batch_h)t = self.ent_embeddings(batch_t)r = self.rel_embeddings(batch_r)# 计算评分函数score = self._calc(h ,t, r, mode)if self.margin_flag:return self.margin - scoreelse:return score

TransE预测
预测就是调用forward函数实现,并计算分数返回结果。

   def predict(self, data):score = self.forward(data)if self.margin_flag:score = self.margin - scorereturn score.cpu().data.numpy()else:return score.cpu().data.numpy()

参考博客与文献

[1] https://angxiao.blog.csdn.net/article/details/122223457
[2] https://zhuanlan.zhihu.com/p/508508180
[3] https://blog.csdn.net/minggelin1997/article/details/109024359
/article/details/122223457
[2] https://zhuanlan.zhihu.com/p/508508180
[3] https://blog.csdn.net/minggelin1997/article/details/109024359
[4] TransE paper

知识图谱表示 | TransE原理简介与代码解读相关推荐

  1. 知识图谱——TransH模型原理

    知识图谱--TransH模型原理 1 从TransE到TransH模型 在之前的文章知识图谱--TransE模型原理中,我们介绍了TransE模型的基本原理,对于TransE模型而言,其核心思想为: ...

  2. 【python】psnr原理简介及代码实现

    写在前面 psnr作为图像质量评价指标,在很多图像领域如图像超分辨率.图像压缩.图像去噪等都有广泛的应用. PSNR(峰值信噪比) 简介 Peak signal-to-noise ratio(简称PS ...

  3. 【论文笔记】 知识图谱 之 TransE算法(Translating Embedding)

    最近对知识图谱比较感兴趣,觉得这会是未来整个人工智能领域的发展方向.知识图谱是对人类知识的结构化总结,试想以后所有我们知道的不知道的事情都能通过知识图谱串在一起,形成一个云图书馆.那么知识图谱是如何建 ...

  4. 知识图谱:Konwledge Graph简介

    一.概念 Konwledge Graph来源于2012年谷歌提出的,用于增强其搜索引擎功能的知识库. 本质上,知识图谱是一种揭示实体之间关系的语义网络,可以对现实世界的事物及其相互关系进行形式化地描述 ...

  5. 知识图谱最新论文清单(附论文解读)

    精选 6 篇来自 EMNLP 2018.ISWC 2018.NAACL 2018.ACL 2018 和 IJCAI 2018 的知识图谱相关工作,带你快速了解知识图谱领域最新研究进展. EMNLP 2 ...

  6. STM32学习心得三十四:外部SRAM原理及实验代码解读

    记录一下,方便以后翻阅~ 主要内容: 1) IS62WV51216简介: 2) FSMC简介及相关寄存器介绍: 3) 相关实验代码解读. 参考手册: <STM32中文参考手册_V10>-第 ...

  7. 编译原理语义分析代码_Pix2Pix原理分析与代码解读

    原理分析: 图像.视觉中很多问题都涉及到将一副图像转换为另一幅图像(Image-to-Image Translation Problem),这些问题通常都使用特定的方法来解决,不存在一个通用的方法.但 ...

  8. BART原理简介与代码实战

    写在前面 最近huggingface的transformer库,增加了BART模型,Bart是该库中最早的Seq2Seq模型之一,在文本生成任务,例如摘要抽取方面达到了SOTA的结果. 本次放出了三组 ...

  9. 知识图谱之NELL数据集简介

    1 NELL数据集简介 来源:NELL 1.1 目录结构 train_tasks.json dev_tasks.json test_tasks.json ent2ids relation2ids pa ...

最新文章

  1. 2019年一线大厂20个长问mongo面试题和答案
  2. php mysql 修改密码_设置及修改MySQL root用户密码
  3. TObject简要说明-对象的创建流程
  4. 如何使用spring配合mybatis配置多个数据源并应用?
  5. iView 实战系列教程(21课时)_2.iView 实战教程之导航、路由、鉴权篇
  6. Mongodb 分片与副本集
  7. 2019入门级云主机选型测试报告
  8. 软件外包的话居然会有这样的后果...
  9. Jquery 屏蔽右键菜单,识别右键事件
  10. pycharm快捷键之①“上下移动某一行“②参数提示
  11. 剑指offer系列之五十四:按之字形顺序打印二叉树
  12. HFSS15.0 安装破解说明
  13. 华为Metn40有没有鸿蒙系统,华为matex2测评_华为matex2上手测评
  14. .glusterfs_如何在Ubuntu 20.04上使用GlusterFS创建冗余存储池
  15. 非常完美的PDF转换成Word转换器完全免费破解版(亲测好用)
  16. LHG 弹层问题汇总
  17. 一种获取公网ip地址并发送邮件至指定邮箱的实现方法
  18. 混沌图像加密matlab,基于复合混沌系统的彩色图像加密算法及Matlab实现
  19. 豆瓣9.1分:软件开发的201个原则
  20. 怎样翻译文本?这三种翻译方法我经常使用

热门文章

  1. Windows下安装PyQt5完整教程
  2. Python入门初学者“百钱买百鸡”问题
  3. python过京东app图形验证勾股定理_拼图验证勾股定理及勾股定理中的数学思想
  4. 两数相除-kotlin
  5. mongodb客户端操作(MongoRepository)
  6. 面向新工科人才培养的AI双师教学设计
  7. 智慧公安重点人员管控,情报研判分析系统开发解决方案
  8. Android -- 全局变量
  9. Pycharm从一个断点运行到下一个断点
  10. 基于几何中位数的通道剪枝——Filter Pruning via Geometric Median