ConvKB代码:A Novel Embedding Model for Knowledge Base Completion Based on Convolutional Neural Network

知识图谱的几个经典模型:TransE、Trans R、ComplEx、ConvKB :::info 💡 这几个模型都是KG表示的经典模型,关于如何对三元组建模Embedding。以下第一个表格是关于各类建模方法中,关系是否能满足一些特性进行的汇总。 ::: 对称性:例如朋友关系。如果有h(r , t),一定有h(t , r); 反对称性:例如购买关系与出售关系。如果有h1(r, t) ,一定有h2(t ,r); 【h1和 h2是相反方向的一对向量】 传递性:例如亲属关系,父亲的父亲是爷爷。如果有h1(r , t) 和h2(t, y),一定有h3(r , y) 一对N:例如教学关系,一个老 阅读详情

1 介绍

本篇论文以卷积的方式对知识图谱进行补全,其方法采用CNN的形式进行知识图谱补全,将三元组统一处理,进行评估,评估出得分最高的一组,该方法在论文ConvE的基础上进行改进,其在逻辑实现的过程中十分简单,通过相应的模型图即可知道其原理。

2 模型

2.1 模型图

在这里插入图片描述

2.2 模型解释

  • 将三元组进行embedding,将 ( h , r , t ) (h, r, t) (h,r,t)三元组转化为 ( v h , v r , v t ) \left(\boldsymbol{v}_{h}, \boldsymbol{v}_{r}, \boldsymbol{v}_{t}\right) (vh​,vr​,vt​)三元组的向量形式, 向量的维度为K维。
  • 对三元组进行拼接,形成一个matrix, A = [ v h , v r , v t ] ∈ R k × 3 \boldsymbol{A}=\left[\boldsymbol{v}_{h}, \boldsymbol{v}_{r}, \boldsymbol{v}_{t}\right] \in \mathbb{R}^{k \times 3} A=[vh​,vr​,vt​]∈Rk×3。
  • 对matrix进行卷积, ω ∈ R 1 × 3 \omega \in \mathbb{R}^{1\times3} ω∈R1×3作为卷积核
  • 对卷积产生的向量进行concat,对拼接的向量进行全链接,判断正确与否
  • 其公式如下[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XM8RAGK4-1646914998519)(C:\Users\Home-PC\AppData\Roaming\Typora\typora-user-images\image-20220310200922633.png)]

2.3 损失函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eiAUXQJe-1646914998524)(C:\Users\Home-PC\AppData\Roaming\Typora\typora-user-images\image-20220310201016779.png)]
softplus函数: S o f t p l u s ( x ) = l o g ( 1 + e x ) Softplus(x)=log(1+e^x) Softplus(x)=log(1+ex),图像参考:机器学习中的数学——激活函数(十):Softplus函数, 如图:
在这里插入图片描述
对于损失函数的解释,在训练时,对数据正负例进行取反操作,使正例损失函数值趋近于0,负例的损失函数不断减少。

3 核心代码

完整代码

class ConvKB(nn.Module):
    def __init__(self, config):
        super(ConvKB,self).__init__()
        self.config = config
        self.device = device
        #进行实体和关系embedding
        self.ent_embeddings = nn.Embedding(config.ent_num, config.dim)
        self.rel_embeddings = nn.Embedding(config.rel_num, config.dim)
        self.bn_1 = nn.BatchNorm2d(1)
        self.conv = nn.Conv2d(1, config.out_channels, (1, 3))#采用1x3的卷积核
        self.bn_2 = nn.BatchNorm2d(self.config.out_channels)
        self.dropout1 = nn.Dropout(0.5)
        self.non_linearity = nn.ReLU()
        #全连接层,将dim*out_channel数据进行线性变换
        self.fc_layer1 = nn.Linear((config.dim)*config.out_channels,1)
        #定义损失函数
        self.criterion = nn.Softplus()
        
        #加载embedding的参数,如果没有则采用nn.init.xavier_uniform_方式进行初始化
    def init(self, ent2vec, rel2vec):
        self.ent_embeddings.weight.data.copy_(torch.from_numpy(ent2vec))
        self.rel_embeddings.weight.data.copy_(torch.from_numpy(rel2vec))
        nn.init.xavier_uniform_(self.fc_layer1.weight.data)
        #nn.init.xavier_uniform_(self.fc_layer2.weight.data)
        nn.init.xavier_uniform_(self.conv.weight.data)

    
    def _calc(self, h, r, t):
        h = h.unsqueeze(1)#batch*1*dim
        r = r.unsqueeze(1)
        t = t.unsqueeze(1)
        
        conv_input = torch.cat([h, r, t], dim = 1)# batch*3*dim
        #print(conv_input.shape)
        conv_input = conv_input.transpose(1, 2)#batch*dim*3
        conv_input = conv_input.unsqueeze(1)#batch*1*dim*3,增加维度1是因为CNN需要通道为1
        out_conv = self.bn_1(conv_input)
        out_conv = self.conv(out_conv)
        out_conv = self.bn_2(out_conv)
        out_conv = self.non_linearity(out_conv)
        out_conv = out_conv.view(-1,(self.config.dim)*self.config.out_channels)
        input_fc = self.dropout1(out_conv)
        score = self.fc_layer1(input_fc)
        score = score.squeeze(1)#注意这里,在调试时没有注意,导致训练出错,难以检测出来
        return score
    
    def loss(self, score, regul, labels):
        #损失函数,取反,使正列趋近于0,负例不断优化,逐渐变小
        return torch.mean(self.criterion(-1*score*labels))+self.config.lambd*regul
        
    
    def forward(self, h, r, t, labels):
        h_embed = self.ent_embeddings(h)
        r_embed = self.rel_embeddings(r)
        t_embed = self.ent_embeddings(t)
        
        score = self._calc(h_embed, r_embed, t_embed)
        
        #正则化
        l2_reg = torch.mean(h_embed**2) + torch.mean(r_embed**2) + torch.mean(t_embed**2)
        
        for W in self.conv.parameters():
            l2_reg += W.norm(2)
        for W in self.fc_layer1.parameters():
            l2_reg += W.norm(2)
        
        return self.loss(score,l2_reg, labels)  
    #预测函数,与_calc函数类似
    def predict(self, h, r, t):
        h_embed = self.ent_embeddings(h)
        r_embed = self.rel_embeddings(r)
        t_embed = self.ent_embeddings(t)
        
        
        score = self._calc(h_embed, r_embed, t_embed)
        return score.cpu().data.numpy()
多模态知识表示学习_ConvKB模型资料.rar 原文pdf & Code 立即下载

相关推荐

matlab代码实现卷积

matlab自带conv函数求代码,同样可根据卷积的性质,代码实现函数的卷积

论文阅读 ConvKB

A Novel Embedding Model for Knowledge Base Completion Based on Convolutional Neural Network 基于卷积神经网络的知识库补全嵌入模型 发表于:NAACL-HLT 2018 摘要:本文提出了一种新的用于知识库完成的嵌入模型——ConvKB。我们的模型ConvKB通过使用卷积神经网络改进了最先进的模型,从而可以捕获实体和知识库中的关系之间的全局关系和过渡特征。在ConvKB中,每个三元组(头实体、关系、尾实体)表示为一个3列

qq_41669355的博客 3600

UG NX 12.0零基础实战:从草图绘制到三维建模全流程解析

本文详细解析UG NX 12.0从草图绘制到三维建模的全流程,适合零基础用户快速掌握这款工业设计软件。内容涵盖界面设置、基础操作、草图技巧、拉伸旋转建模、布尔运算等核心功能,并通过机械零件实战案例演示完整设计流程,帮助读者系统学习UG NX 12.0的工业设计应用。

weixin_29261711的博客 1166

知识推理——CNN模型总结(一)

记录一下我看过的利用CNN实现知识推理的论文。

missyoudaisy的博客 1926

手把手教你用USBasp给Arduino UNO烧写程序(ICSP模式,含BootLoader选择指南)

本文详细介绍了如何使用USBasp编程器通过ICSP模式为Arduino UNO烧写程序,包括硬件连接、软件配置、Hex文件处理和BootLoader选择指南。内容涵盖从新手入门到高级优化的全流程,帮助开发者高效完成烧写任务,特别适合需要修复BootLoader或进行量产烧写的用户。

weixin_33958381的博客 364

EtherCat 从站开发中遇到的问题分享

EtherCat从站 AX58100

yu_arius的博客 2058

多模态知识表示系列——ConvKB模型学习

A Novel Embedding Model for Knowledge Base Completion Based on Convolutional Neural Network 引用格式: GB/T7714:Nguyen D Q , Nguyen T D , Nguyen D Q , et al. A Novel Embedding Model for Knowledge Base Completion Based on Convolutional Neural Network[C]// Procee

KH的博客 1677

内存管理(二)——内存分段

内存分段

weixin_43844995的博客 2693

基于神经网络的知识图谱推理模型 (ConvE、ConvKB、ConvR、InteractE)

ConvE是一种使用嵌入上的 2D 卷积来预测知识图中缺失链接的模型,在学习及提取实体及关系的语义特征方面具有很强的优势。,dropout随机丢弃,防止过拟合,通常表示某种加权或融合。。通过这样处理,可以捕获源实体、目标实体和关系 r 之间的复杂交互关系。除此之外,该模型提出了1-N评分方法,采用一对 (s, r) 并针对所有实体 o 对其进行评分 ,使得模型的评测速度相比1-1评分方法提升了300倍。

weixin_54387067的博客 1438

基于Python爬虫+词云图+情感分析对某东上完美日记的用户评论分析

随着互联网和社交媒体的发展,用户评论成为了消费者表达自己意见和情感的主要途径之一。对于企业来说,深入了解用户对其产品或服务的看法可以帮助他们更好地了解市场需求、产品改进的方向,以及消费者的情感倾向。因此,对用户评论进行分析已经成为了市场研究和商业决策的重要手段之一。

m0_64336780的博客 1万+

OAI-5G开源通信平台实践(一)-安装 部署及RFsimulator基本测试

OAI (Open Air Interface) 是目前开源5G/4G项目中最完善、最成熟的一个,并且仍然在持续更新。其包含基站、终端及核心网网元的代码,可基于x86\arm+射频卡搭建实际硬件平台,也可在x86平台上对rf\phy等层进行模拟,做各网元协议栈的单独测试验证。本文总结了x86平台下,oai的安装及运行方式。包括NTN分支和主分支的rf simulator、nos1、端到端部署等场景的验证流程,同时总结了验证过程中遇到的问题及解决方法。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 2963

基于卷积神经网络的KBC

基于卷积神经网络的KBC 原文: A Novel Embedding Model for Knowledge Base Completion Based on Convolutional Neural Network 摘要 本篇文章是将图片卷积的概念扩展并应用于知识图谱点的嵌入表示,简单来说,是对知识图谱中的每一个三元组组合而成的嵌入矩阵(vh,vr,vt)∈Rk×3,(v_h,v_r,v_t)\in R^{k \times 3},(vh​,vr​,vt​)∈Rk×3,k表示的是嵌入向量的维度,与不同的1×

ruichuang2的博客 1031

【首发独家】华为OD机试 - 服务中心选址、服务中心的最佳位置(C 语言解题)

最近更新的博客 华为 od 2023 | 什么是华为 od,od 薪资待遇,od 机试题清单 华为 OD 机试真题大全,用 Python 解华为机试题 | 机试宝典 【华为 OD 机试】全流程解析+经验分享,题型分享,防作弊指南 华为 od 机试,独家整理 已参加机试人员的实战技巧 本篇华为 OD 机试题解:服务中心选址、服务中心的最佳位置

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

ConvR:Adaptive Convolution for Multi-Relational Learning

关于卷积的知识图谱补全: ConvE:Convolutional 2D Knowledge Graph Embeddings ConvKB代码:A Novel Embedding Model for Knowledge Base Completion Based on Convolutional Neural Network ConvR论文:点击 1 介绍 本论文的思想是在ConvE论文的基础上进行改进,进行知识图谱补全。ConvE成功实现实体和关系之间的交互,但是实体和关系之间的交互非常少,仅仅只有百分

REfusing的博客 3627

环境配置与基础教程:当前大厂主流套路:使用 MLflow 全链路管理 YOLO 实验参数、指标与模型版本

YOLO26与MLflow结合实现高效实验管理 YOLO26通过移除DFL模块和实现无NMS端到端推理,在CPU推理速度上提升43%,同时简化了模型导出流程。MLflow 3.10/3.11版本新增多工作区支持、成本追踪和安全序列化等功能,为机器学习实验提供全生命周期管理。两者结合可解决传统"截图+Excel"式实验管理的痛点,实现参数追踪、指标对比和模型版本控制的自动化。 关键优势: YOLO26架构优化带来显著性能提升 MLflow提供实验到生产的全链路管理 原生集成简化了计算机视觉

ZXSXJ的博客 190

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

InteractE: Improving Convolution-Based Knowledge Graph Embeddings by Increasing Feature Interactions

其它关于卷积知识图谱补全: ConvR:Adaptive Convolution for Multi-Relational Learning ConvE:Convolutional 2D Knowledge Graph Embeddings ConvKB代码:A Novel Embedding Model for Knowledge Base Completion Based on Convolutional Neural Network 1 介绍 1.1 引言 本篇论文是对于论文ConvE的模型进行改进,

REfusing的博客 4348

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

8.16+8.18 知识图谱嵌入技术研究综述-知网-张天成、田雪、孙相会等-软件学报.2023,34(01)-最新的知识图谱嵌入模型

对于每个三元组(h, r, t),对应的 k 维嵌入三元组(h, r, t)表示为一个 k × 3 的输入矩阵,将该输入矩阵馈送到卷积层,在卷积层中使用对应形状的不同过滤器提取嵌入三元组的相同维度条目之间的全局关系。这些过滤器在输入矩阵的每一行上重复操作,以产生不同的特征映射。ConvE 是用于链接预测最简单的多层卷积体系结构,可以通过多层非线性特征学习表达语义信息,并且该模型具有很高的参数利用率,可以在参数分别减少了 8×和 17×的前提下,得到与DistMult和 R-GCN模型相同的性能。

weixin_45883486的博客 601

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

论文浅尝 | BoxE:一种基于Box的知识图谱表示学习模型

笔记整理 |耿玉霞,浙江大学直博生。研究方向:知识图谱,零样本学习等。论文链接: https://arxiv.org/pdf/2007.06267.pdf本文是发表在NeurIPS 2...

开放知识图谱 2219

2021.1知识图谱表示与推理综述(自己总结)

知识图谱表示与推理综述     知识图谱作为一种结构化的知识形式,受到了学术界和工业界的广泛关注,是人工智能的研究方向之一。近年来,知识表示与推理受到人类问题求解的启发,将知识表示为智能系统,以获得解决复杂任务的能力。知识图谱包含数万甚至上亿的事实,如Freebase[1]、DBpedia[2]和YAGO[3],描述整个图谱,通常以以下形式进行定义:(E,R,O)(E,R,O)(E,R,O),其中,EEE 是实体集合, RRR 是关系集合,OOO 是观察到事实的三元组集合,每个三元组以(h,r,t)(h,r

weixin_43253562的博客 4640

convE模型

知识补全模型中的convE模型的详细介绍,包括模型代码,得分函数、损失函数等

m0_45878612的博客 7205

SimplE:SimplE Embedding for Link Prediction in Knowledge Graphs+代码

文章目录1 介绍1.1 知识图谱1.2 知识图谱补全方法1.3知识图谱补全(Knowledge Graph Completion,KGC)1.4 关系分类2 模型2.1 双线性模型2.2 核心公式2.3 负采样2.4 损失函数2.5 评价MRRMRHITS@n3 [代码](https://github.com/baharefatemi/SimplE)3.1 数据处理模块 dataset.py3.2 模型模块 model.py3.3 训练模块 Trainer.py3.4 测试模块 Test.py3.5 评价

REfusing的博客 2050

知识图谱嵌入模型 (KGE) 的总结和比较

知识图谱嵌入(KGE)是一种利用监督学习来学习嵌入以及节点和边的向量表示的模型。它们将“知识”投射到一个连续的低维空间,这些低维空间向量一般只有几百个维度(用来表示知识存储的内存效率)。向量空间中,每个点代表一个概念,每个点在空间中的位置具有语义意义,类似于词嵌入。一个好的KGE 应该具有足够的表现力来捕获 KG 属性,这些属性解决了表示关系的独特逻辑模式的能力。并且KG 可以根据要求添加或删除一些特定属性。以下是常见的KGE 模型在捕获关系类型方面的比较,我们将对这些常见的模型进行比较。

deephub 6753

2024-2-26 Covid预测项目改进代码总结

自己编写一个mseLoss函数,loss即nn的均方差loss函数,定义一个正则项,以下原理解释来自chatgpt:在反向传播过程中,梯度下降算法不仅要考虑原始损失函数的梯度,还要考虑正则化项的梯度。这导致在更新模型参数时,大的参数将受到更大的惩罚,从而限制了模型参数的增长。在初始化中增加if语句,如果要选中所有特征,col idx为所有列(此时已去除第一列),否则选出k列,使用选择函数时,传入参数feature为data的第一列到倒数第二列,label为最后一列,k为初试的维度,column为第一行。

m0_61346642的博客 549

(小白易懂)知识图谱嵌入论文复现:ConvE代码调试记录

(小白易懂)知识图谱嵌入论文复现:ConvE代码调试记录

bubu_的博客 3012

tensorflow_convolution代码解析

## 构建多层卷积神经网络 softmax模型在MNIST上只有91%正确率,而卷积神经网络会达到大概99.2%的准确率,还是比较让人满意。 ### 权重初始化 为了创建这个模型,我们需要创建大量的权重和偏置项。这个模型中的权重在初始化时应该加入少量的噪声来打破对称性以及避免0梯度。由于...

259
上一篇: A Neighborhood-Attention Fine-grained Entity Typing for Knowledge Graph Completion:AttEt
下一篇: pytorch 常用函数总结
Re:fused
博客等级 码龄9年 474粉丝 162原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值