NLP | SimKGC论文详解及项目实现

 本文主要讲解了论文SimKGC:基于预训练语言模型的简单对比KGC的论文总结以及项目实现。

论文题目:2022_SimKGC: Simple Contrastive Knowledge Graph Completion with Pre-trained Language Models

论文地址:2022.acl-long.295.pdf (aclanthology.org)

代码地址:intfloat/SimKGC: ACL 2022, SimKGC: Simple Contrastive Knowledge Graph Completion with Pre-trained Language Models (github.com)

1.论文主要内容

更多可参考【1】

  • KG通常由三元组(h,r,t)组成,其中h是头实体,r是关系,t是尾实体。
  • 受对比学习的启发,引入三种类型的负采样来提升基于文本的KGC方法
    • 批内负采样(IB)
    • 批前负采样(PB)
    • 自我负采样(SN)
  • 如果两个实体在知识图谱中通过一条短路径连接,两个实体更有可能相互关联。但是基于文本的KGC方法严重依赖语义匹配,而在一定程度上忽略了这种拓扑偏差,因此本文提出一种简单的重排策略(提高头实体的k跳邻居的分数),来缓解此类现象。

                      

2.项目实现

2.0.环境配置

[我的:Ubuntu20.04+torch2.0.0+cuda11.6]

git clone https://github.com/intfloat/SimKGC
cd SimKGC
pip install scipy

2.1.下载数据集

代码中使用了三种数据集

本文只使用一种,也就是wn18rr。项目中提供了脚本文件进行下载并进行数据处理。

bash scripts/preprocess.sh WN18RR

 会生成json文件

其中entities.json为实体字典,relations.json为关系,

2.2.训练模型 

训练模型并指定输出目录

OUTPUT_DIR=./checkpoint/wn18rr/ bash scripts/train_wn.sh

 如果运行出错请参考【PS1】,成功的话会打印模型结构参数等

默认是50个epoch,

checkpoint 保存为mdl文件

2.3.验证

bash scripts/eval.sh ./checkpoint/wn18rr/model_last.mdl WN18RR

 评价标准为MRR【3】

只训练了18个epoch,结果与论文中相似~

3.代码详解

3.1.models.py

 使用模型CustomBertModel

使用bert的预训练权重,微调模型,返回知识图谱三要素的向量(logits,labels,hr_vector, tail_vector,head_vector)

3.2.trainer.py

输入:head_id, relation, tail_id

round()

使用方法:round(number,digits)

digits>0,四舍五入到指定的小数位
digits=0, 四舍五入到最接近的整数
digits<0 ,在小数点左侧进行四舍五入
如果round()函数只有number这个参数,等同于digits=0
四舍五入规则:

要求保留位数的后一位<=4,则舍去3,如5.214保留小数点后两位,结果是5.21
要求保留位数的后一位“=5”,且该位数后面没有数字,则不进位,如5.215,结果为5.21
要求保留位数的最后一位“=5”,且该位数后面有数字,则进位,如5.2151,结果为5.22
要求保留位数的最后一位“>=6”,则进位。如5.216,结果为5.22

3.3.evaluate.py

定义平均秩和mrr的算法

3.4.triplet.py

知识图谱中三元组定义,实体id,实体名,实体描述都为字符串。

在实体字典中,包含了EntityDict,LinkGraph的基础定义。

3.5.proprocess.py

定义了三个数据集的数据预处理方法

过程中遇到的问题与解决【PS】

【PS1】RuntimeError: Failed to import transformers.models.bert.modeling_bert because of the following error (look up to see its traceback):too many values to unpack (expected 4)

系统默认模型 

修改/SimKGC/scripts/train_wn.sh 脚本文件后

显示ValueError: too many values to unpack (expected 4)

参考CUDA setup · Issue #95 · TimDettmers/bitsandbytes (github.com)

#先查看自己nvcc版本
nvcc --version

#根据自己的版本去修改
git clone https://github.com/TimDettmers/bitsandbytes
cd bitsandbytes
CUDA_VERSION=116 make cuda11x
python setup.py install

 运行后就好使啦~

参考文献

【1】【精选】知识图谱顶会论文(ACL-2022) ACL-SimKGC:基于PLM的简单对比KGC_simkgc: simple contrastive knowledge graph complet_Cheng_0829的博客-CSDN博客

【2】论文浅尝 | SimKGC:基于预训练语言模型的简单对比知识图谱补全-CSDN博客 

【3】Mean reciprocal rank - Wikipedia 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/168432.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源集群管理系统对比分析:Kubernetes 与 Apache Mesos

集群管理系统是关键的软件解决方案&#xff0c;可以在互连机器网络中有效分配和利用计算资源。毫无疑问&#xff0c;它们通过确保可扩展性、高可用性和有效的资源管理在现代计算中发挥着至关重要的作用&#xff0c;这使得它们对于运行复杂的应用程序、管理数据中心以及进一步增…

java 实现发送邮箱,复制即用,包含邮箱设置第三方登录授权码获取方法

application.yml spring:profiles:active: dev # active: test#邮件附件上传文件大小限制servlet:multipart:max-file-size: 50MB #单个文件大小限制max-request-size: 100MB #总文件大小限制&#xff08;允许存储文件的文件夹大小&#xff09;mail:default-encoding: UTF…

Java集合大总结——Set的简单使用

Set的简单介绍 Set接口是Collection的子接口&#xff0c;Set接口相较于Collection接口没有提供额外的方法。Set 集合不允许包含相同的元素&#xff0c;如果试把两个相同的元素加入同一个 Set 集合中&#xff0c;则添加操作失败。Set集合支持的遍历方式和Collection集合一样&am…

设计模式系列:三、责任链设计模式

一、概述 责任链模式是一种行为设计模式&#xff0c;它允许多个对象处理一个请求&#xff0c;从而避免了请求的发送者和接收者之间的耦合关系。 优点是把任务划分为一个一个的节点&#xff0c;然后按照节点之间的业务要求、顺序&#xff0c;把一个个节点串联起来&#xff0c;…

单链表相关面试题--4.输入一个链表,输出该链表中倒数第k个结点

/* 解题思路&#xff1a; 快慢指针法 fast, slow, 首先让fast先走k步&#xff0c;然后fast,slow同时走&#xff0c;fast走到末尾时&#xff0c;slow走到倒数第k个节点。 */ class Solution { public:ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {struct Lis…

AppLink定时调度操作

RestCloud AppLink定时调度操作 定时调度可以让我们更加快速了解到数据的变动以作出更好的决策&#xff0c;接下来通过AppLink平台配置定时调度的操作。 1.登录RestCloud AppLink 2.点击授权管理 3.点击应用认证菜单 4.新建拼多多授权认证 基础定时调度配置 1.拉取一个定时器…

Linux内核调试篇——获取内核函数地址的四种方法(一文解决)

在内核调试中&#xff0c;经常需要知道某个函数的地址&#xff0c;或者根据函数地址找到对应的函数&#xff0c;从而进行更深一步的debug。 下面介绍四种获取内核函数地址的方法&#xff1a; 1、System.map 在编译Linux内核时&#xff0c;会产生一个内核映像文件System.map&…

英飞凌TC3xx的LMU SRAM保护机制(一)

目录 1.基本概述 2.理解Master Tag ID 3.LMU memory保护使能 4.测试结果分析 5.小结 1.基本概述 在英飞凌TC3xx中&#xff0c;每个CPU除了有自己的DLMU外&#xff0c;在SRI总线还挂着几块SRAM&#xff0c;这几块SRAM由LMU(Local Memory Unit)进行权限控制。…

微服务学习|Gateway网关:网关作用、快速入门、路由断言工厂、路由过滤器配置、全局过滤器、过滤器执行顺序、跨域问题处理

为什么需要网关 网关功能: 1.身份认证和权限校验 2.服务路由、负载均衡 3.请求限流 网关的技术实现 在SpringCloud中网关的实现包括两种:gateway、zuul Zuul是基于Servlet的实现&#xff0c;属于阻塞式编程。而SprinaCloudGateway则是基于Spring5中提供的WebFlux&#xf…

RHCE之WEB服务器作业

目录 一、实验要求 1.1 网站需求&#xff1a; 1.2 要求&#xff1a; 二、实验步骤 2.1 下载mod_ssl模块&#xff0c;关闭firewall 2.2 链接本机IP与域名 2.3 创建网页目录 2.4 建立该网站 ​编辑 2.5 创建两位学生信息 2.6 实施数据加密 三、实验结果 一、实验要求…

Leetcode刷题详解——打家劫舍 II

1. 题目链接&#xff1a;213. 打家劫舍 II 2. 题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻…

火电安全事故vr模拟仿真培训强交互更真实

VR消防&#xff0c;利用VR虚拟现实技术&#xff0c;将VR和消防教育融合在一起达到寓教于乐的效果&#xff0c; VR消防教育是对于家中、校园内、大型商场、公司办公室等情景产品研发的消防安全培训类VR系统软件&#xff0c;根据互动体验、互动、视角实际操作、视听觉系统多度自然…

什么是域欺骗?域欺骗的主要类型有哪些?

域欺骗是指网络犯罪分子假冒网站名称或电子邮件域来欺骗用户。域欺骗的目的是将恶意电子邮件或网络钓鱼网站伪装成合法电子邮件或网站&#xff0c;诱使用户与之交互。域欺骗就像骗子一样&#xff0c;向人们展示伪造的凭据以获得信任&#xff0c;然后再利用其获得好处。 域欺骗…

photoshop插件开发入门(java,android,ios)

photoshop给我们提供了一个服务&#xff0c;让我们可以通过java或者c#等语言发送JavaScript等脚本给photoshop&#xff0c;让photoshop自动帮我们处理图片。这里的资料主要是如何连接photoshop&#xff0c;如果开发和调试JavaScript脚本。 photoshop 学习资料和sdk&#xff08…

网络工程师网络配置经典例题(一)附有详细注释

一、配置管理IP和Telnet 配置设备管理IP地址后&#xff0c;可以通过管理IP远程登录设备。 &#xff08;1&#xff09;配置管理IP地址 <HUAWEI> system-view [HUAWEI] vlan 5 //创建交换机管理VLAN 5 [HUAWEI-VLAN5] management-vlan [HUAWEI-VLAN5…

一篇博客读懂双向链表

目录 一、双向带头循环链表的格式 二、链表的初始化和销毁 2.1链表的初始化 2.2链表的销毁 三、链表的检查与准备 3.1链表的打印 3.2创建新结点 四、链表增删查改 4.1尾插 4.2尾删 4.3头插 4.4头删 4.5查找 4.6任意位置前插入 4.7删除任意位置 一、双向带…

emq Neuron工业协议采集使用

emq Neuron工业协议采集使用 Neuron 简介 EMQ X Neuron 是运行在各类物联网边缘网关硬件上的工业协议商业化网关软件&#xff0c;支持一站式接入和解析数十种工业协议&#xff0c;并转换成 MQTT 协议接入工业物联网平台。用户可以通过基于 Web 的管理控制台可以实现在线的网关…

leetcode刷题日记:202. Happy Number( 快乐数)和203. Remove Linked List Elements(移除链表元素)

202. Happy Number( 快乐数) 这一题的解决与之前的循环链表比较类似&#xff0c;因为如果不是快乐数的话&#xff0c;在数字变化的过程中必然遇到了数字变换的循环&#xff0c;所以我们需要在变换的过程中判断是否遇到了循环&#xff0c;判断是否在一个序列中存在循环&#xf…

[uni-app] uni.showToast 一闪而过问题/设定时间无效/1秒即逝

toast一闪就消失 1.猜测频繁点击导致 – 排除 2.猜测再定时器内导致-- 排除 3.和封装的接口调用一起导致 - 是改原因 深挖发现: axios封装中, 对loading/hindloading进行了配置, 看来是 showToast 与 loading等冲突导致的 wx.hideLoading(Object object) 解决办法 再封装的…