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

news2024/9/23 7:23:48

 本文主要讲解了论文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 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java的IO流-转换流

乱码问题 package com.itheima.d2;import java.io.*; import java.nio.charset.StandardCharsets;public class Test4 {public static void main(String[] args) {try (//1、创建一个文件字符输入流与源文件接通//Reader fr new FileReader("IO\\src\\itheima04.txt"…

学会这套HttpRunner(17):实现参数化传递,测试开发都直呼内行

参数化实现及重复执行 参数化测试&#xff1a;在接口测试中&#xff0c;为了实现不同组数据对同一个功能模块进行测试&#xff0c;需要准备多组测试数据对模块进行测试的过程。 在httprunner中可以通过如下方式实现参数化&#xff1a; 1、在YAML/JSON 中直接指定参数列表 2、…

创建自定义日志筛选器

Windows的事件查看器中的日志包含了很多信息&#xff0c;但是系统自带的筛选器只能筛选固定的字段和内容。有时候想根据某个事件中的用户名或者IP筛选的时候就没办法了。此时需要创建自定义筛选器来实现。 首先找到希望筛选的日志&#xff0c;调整成详细的XML视图。 这里面就有…

海外代理IP如何找到靠谱的?

现在市面上有很多代理服务商&#xff0c;大家可以根据自己的需求选择一个适合自己业务的的IP代理服务商&#xff0c;现在也有一些免费的&#xff0c;但如果力求稳定安全&#xff0c;还是选择付费的。 这里提醒一句&#xff0c;在买代理IP时最好找这种可以免费试用的&#xff0…

城市生命线丨桥梁健康监测系统应用详情

现代城市当中&#xff0c;桥梁的重要性以及危险性是最高的&#xff0c;因此&#xff0c;对于桥梁的安全健康监测就会变得更加的重要&#xff0c;在科技发展的今天&#xff0c;新型基础设施已经能够准确、实时的监测桥梁的安全和健康。 WITBEE万宾助力建设更健康&#xff0c;智慧…

transformer学习资料

一、NLP 自然语言处理 NLP 是机器学习在语言学领域的研究&#xff0c;专注于理解与人类语言相关的一切。NLP 的目标不仅是要理解每个单独的单词含义&#xff0c;而且也要理解这些单词与之相关联的上下文之间的意思。 常见的NLP 任务列表&#xff1a; 对整句的分类&#xff1…

大数据时代,怎样通过日志分析保护我们的数据!

在今天的大数据时代&#xff0c;大量的数据被生成和存储。对于IT行业来说&#xff0c;日志文件是宝贵的信息财富。 通过合理的日志分析和解读&#xff0c;可以帮助企业提高运维效率、加强安全防护、改进产品质量和优化用户体验&#xff0c;本文将深入探讨日志分析在IT中的重要性…

excel-gen.js 导出excel 功能

目录 概要 整体架构流程 html部分&#xff1a; js部分&#xff1a; json部分&#xff1a; 小结 概要 功能会使用到如下插件&#xff1a; jszip.min.js FileSaver.js jquery.min.js excel-gen.js highcharts.js exporting.js export_data.js 主要是highcharts图表…

WhatsApp新营销全解:如何才能真正留住你的客户

WhatsApp营销这件事上&#xff0c;从获取线索、留存客户、成交转化到复购推荐的整个流程中&#xff0c;方方面面的因素影响着最终的转化效果。今天开始&#xff0c;我们会在公众号内新增WhatsApp新营销全解系列&#xff0c;结合前人踩过的坑和成功经验&#xff0c;来为大家说说…

彻底删除的文件如何恢复?分享正确方法!

“求救&#xff01;我在清理电脑的过程中&#xff0c;把一些比较久远的文件彻底删除了。但是我突然想起好像有些非常重要的数据也一同被删掉了&#xff0c;这可怎么办&#xff1f;有方法恢复彻底删除的文件么&#xff1f;” 在日常使用电脑的过程中&#xff0c;很多用户或许都会…

海外IP代理如何助力跨境电商?

黑五作为下半年年度尤为重要的一个节日&#xff0c;是各大商家的必争之地&#xff0c;那么海外代理是如何帮助跨境商家做好店铺管理和营销呢&#xff1f; 为什么跨境人都关注海外代理&#xff0c;下面我们来进行介绍。 一、什么是海外代理 海外代理就是我们所说的&#xff1a…

如何写好一篇软文?怎样写软文比较有吸引力?

软文&#xff0c;即柔性广告&#xff0c;是一种通过文字、图片等形式&#xff0c;将广告信息融入到内容中&#xff0c;以达到宣传、推广、营销目的的文章。企业和品牌每天都会在互联网上投放大量软文&#xff0c;软文起到润物细无声的作用&#xff0c;可以在无形中影响用户心智…

手写promis(1)

目录 前言 核心功能--构造函数 核心功能--状态及原因 then方法 成功和失败回调 异步及多次调用 异步任务--核心api Promise.then: queueMicrotask: MutationObserver: setImmediate: setTimeout: 异步任务---函数封装 前言 Promise&#xff08;承诺&#xff09;…

虾皮台湾站点如何选品

在互联网时代&#xff0c;电商平台成为了越来越多人购物的首选。虾皮作为台湾地区最大的电商平台之一&#xff0c;为商家提供了良好的销售渠道。然而&#xff0c;在虾皮上选择适合的商品对于商家来说并不容易。本文将介绍如何通过虾皮选品工具-知虾来查看台湾地区各大类目的热销…

预包装食品备案与食品经营许可证两者的关系

在食品行业中&#xff0c;预包装食品备案和食品经营许可证是两个重要的概念。它们之间存在一定的关系&#xff0c;但又不完全相同。本文将详细介绍两者的定义、区别和联系。 一、预包装食品备案 预包装食品备案&#xff0c;是指对预包装食品的生产者或进口商进行备案登记的一种…

scapy No such device exists (No such device exists)

使用python编写一个小的网络程序时&#xff0c;程序如下&#xff1a; import scapy.all as scapydef scan(ip):arp_request ARP(pdstip)arp_request.show()broadcast scapy.Ether(dst "ff:ff:ff:ff:ff:ff")arq_request_broadcast broadcast/arp_requestanswered,…

5.什么是Spring的依赖注入(DI)?IOC和DI的区别是什么

很多人把IOC和DI说成一个东西&#xff0c;笼统来说的话是没有问题的&#xff0c;但是本质上还是有所区别的,希望大家能够严谨一点&#xff0c; IOC和DI是从不同的角度描述的同一件事&#xff0c;IOC是从容器的角度描述&#xff0c;而DI是从应用程序的角度来描述&#xff0c;也…

kernel32.dll丢失都有什么解决办法,帮助大家解决kernel32.dll丢失的问题

kernel32.dll丢失是电脑中常出现的情况&#xff0c;今天就想和大脚聊聊这个kernel32.dll 文件&#xff0c;这个文件它的功能是干什么的&#xff0c;如果电脑中kernel32.dll 丢失都有什么解决办法&#xff0c;帮助大家解决kernel32.dll丢失的问题&#xff0c;本篇文章给大家提供…

LINUX入门篇【7】--git提交指令以及代码调试工具gdb

前言&#xff1a; 我们今天来介绍一下我们工具篇的最后两个工具&#xff0c;即git提交指令以及代码调试工具gdb,再结合前面的知识点&#xff0c;我们就可以基本完成我们VS上的基本的功能&#xff1a;编写&#xff0c;调试&#xff0c;编译&#xff0c;执行程序的这些过程。 1…

SpringDoc基础配置和集成OAuth2登录认证教程

本期内容 学会通过注解和Java代码的方式添加SpringDoc配置。在swagger-ui提供的页面上提供OAuth2登录认证&#xff0c;在集成Security的情况下便捷获取access_token并在请求时按照OAuth2规范携带。 为什么集成OAuth2登录认证&#xff1f; 现在大部分教程是在swagger-ui页面添…