论文浅尝 | GPT-RE:基于大语言模型针对关系抽取的上下文学习

笔记整理:张廉臣,东南大学硕士,研究方向为自然语言处理、信息抽取
链接:https://arxiv.org/pdf/2305.02105.pdf
1、动机
在很多自然语言处理任务中,上下文学习的性能已经媲美甚至超过了全资源微调的方法。但是,其在关系抽取任务上的性能却不尽如人意。以GPT-3为例,一些基于GPT-3的上下文学习抽取方法在关系抽取任务上不理想的效果主要来自于两个方面:① 检索演示示例中实体、关系的相关度较低;② 大语言模型具有将NULL例子错误分类成为预定义关系类型的强烈倾向。造成①的原因主要是以上方法通过随机选择或基于句子表示的K近邻法检索演示示例。这会导致演示示例实体、关系的相关度低;造成②的原因主要是相对于符合预定义类型的示例,NULL示例的复杂度更高,该类型是包含各种未定义的关系的集合。针对以上问题,该论文提出了结合实体感知检索策略和事实标签诱导策略的GPT-RE,以提高基于大语言模型的上下文学习在关系抽取任务上的性能。
2、贡献
该论文的主要贡献包括:
1)提出了实体感知检索策略和事实标签诱导策略,实体感知检索策略能够在演示检索中结合实体信息,获取更适合关系抽取任务的表示;事实标签诱导策略能够引导大语言模型输出更理想的结果;
2)通过实验验证了结合以上两种策略的基于大语言模型的上下文学习框架能够在关系抽取任务中取得很好的效果,在测试数据集上的性能已经赶上甚至超过了现有全监督基线模型;
3、方法

图1 GPT-RE框架
GPT-RE是一个使用GPT-3的基于上下文学习的关系抽取框架,其具体方法如下:
3.1 提示构建:
GPT-RE的提示主要包括三部分,分别是:①任务描述和关系预定义类型,②小样本演示示例,③输入样本。提示包含的任务描述和关系预定义类型是对关系抽取的任务描述和其相关的关系预定义类型的一个简洁概括,模型会根据这部分的内容输出预定义的关系类型,若测试样本不属于任何预定义关系类型,模型会输出NULL标签。小样本演示示例是输入模型的演示示例,其中,每条样例包含文本和该文本中所包含的关系,演示示例可以通过后续推理过程进一步的丰富。输入样本为一条文本,GPT-3的任务就是输入文本中实体对所对应的关系。
3.2 实体感知演示检索:
因为演示示例在表示空间中接近测试样本可以使模型表现出更好的性能,最近的一些工作使用K近邻法选出与测试样本句子表示最相近的演示示例。但是,由于句子表示和关系抽取之间的差异,原始上下文的表示在关系抽取任务中不足以完全作为检索演示示例的标准,该论文提出了两种新的获取表示方法提升检索演示示例的质量。
3.2.1 实体提示句子表示:
首先,考虑到实体信息在关系抽取任务中的重要性,作者利用实体对信息重建原始上下文。其具体做法是在原文中加入描述原文中实体对关系类型的内容。在计算句子相似度时,作者使用了最新的健壮模型SimCSE来计算句子之间的相似度。
3.2.2 微调关系表示:
由于关系表示在很多情况下天然地包含了实体表示的信息,与将实体信息加入到上下文中相比,更直接的解决方法是从微调模型中提取关系表示用于检索演示示例。作者认为这种方法可以潜在地弥补GPT-3在关系抽取任务中的局限性。虽然基于GPT-3的上下文学习只使用有限的演示示例,但预训练模型的微调过程可以在整个训练集上进行。这种方法有两个优点:首先,直接使用适应关系抽取任务的关系表示可以显著提高整体检索质量;其次,由于微调后的模型可以准确识别NULL类型,因此过度预测NULL问题将得到缓解。
3.3 事实标签诱导推理:
最近的工作表明,逻辑提示可以引导大语言模型获得理想输出。在该论文中,作者让GPT-3通过相应的事实关系标签来生成每个演示示例的推理逻辑过程。例如,给定一个选定的示例,作者首先基于该示例文本提出一个提示,然后利用GPT-3生成推理上下文中实体对之间关系类型的逻辑线索。最后,作者通过将生成的线索与原始示例结合起来增强演示示例。
4、实验
该论文使用了三个开放领域关系抽取数据集和一个科学领域关系抽取数据集共四个数据集作为实验数据,分别为:Semeval 2010 task 8, TACRED, ACE05和SciERC。基于以上四个数据集的对比方法共分为两大类,第一类为传统的微调基线模型,如PURE;第二类是基于GPT-3的基线模型,如GPT-Random等。该论文对比了以上基线模型和GPT-RE在使用不同表示检索演示示例时的性能,并对比了是否加入实施标签诱导推理提示时GPT-RE的性能差异,其主实验结果如下图所示:

图2 实验结果
此外,该论文也进行了一系列消融实验和在低资源场景下的实验,具体实验结果请参照原论文。
实验结果表明:① 在检索演示示例时,使用适合特定任务的句子表示是有必要的,无论是使用GPT-RE_SimCSE还是GPT-RE_FT都取得了比GPT-Sent更好的效果;② GPT-RE_FT表现出的性能表明,基于GPT-3的上下文学习有潜力在关系抽取上取得很好的效果,甚至已经在Semeval和SciERC上取得了SOTA效果;③ 相比于GPT-RE_SimCSE,推理模块对GPT-RE_FT的加成更小,这说明GPT-RE_FT获得的演示示例在本实验中质量更高。同时,小样本时推理模块会使模型具有更好的性能。
5、总结
总的来说,该论文探索了GPT-3 上下文学习在关系抽取任务上的潜力。针对GPT-3在此任务上存在的问题,该论文提出了两个策略弥补了基于GPT-3框架和目前SOTA基线模型的差距,实验结果表明,GPT-RE在三个数据集上显著优于微调基线模型,并在Semeval和SciERC上实现了SOTA效果。同时,作者对GPT-3如何克服现有困难,如NULL标签的影响等进行了详细的实例分析,以上工作对后续研究具有比较大的意义。
OpenKG
OpenKG(中文开放知识图谱)旨在推动以中文为核心的知识图谱数据的开放、互联及众包,并促进知识图谱算法、工具及平台的开源开放。

点击阅读原文,进入 OpenKG 网站。
相关文章:
论文浅尝 | GPT-RE:基于大语言模型针对关系抽取的上下文学习
笔记整理:张廉臣,东南大学硕士,研究方向为自然语言处理、信息抽取 链接:https://arxiv.org/pdf/2305.02105.pdf 1、动机 在很多自然语言处理任务中,上下文学习的性能已经媲美甚至超过了全资源微调的方法。但是…...
Rust语言:告诉编译器允许存在未使用的代码(Rust保留未使用的实现)
Rust告诉编译器允许存在未使用的代码(Rust保留未使用的实现) Rust的Lint工具clippy clippy是一个Rust的Lint工具,旨在帮助开发者发现并改进代码中的潜在问题。它提供了许多静态代码分析的规则和建议,以提高代码质量和可读性。其中就包括检查未使用的代…...
Winform数据绑定
简介# 在C#中提起控件绑定数据,大部分人首先想到的是WPF,其实Winform也支持控件和数据的绑定。 Winform中的数据绑定按控件类型可以分为以下几种: 简单控件绑定列表控件绑定表格控件绑定 绑定基类# 绑定数据类必须实现INotifyPropertyChanged…...
DeprecationWarning: currentThread() is deprecated, use current_thread() instead
解决方案: # auto_commit not getattr(threading.currentThread(), testing, False) #阙辉注释 auto_commit not getattr(threading.current_thread(), testing, False) #阙辉新增...
2024届 C++ 刷题 笔试强训 Day 03
选择题 01 以下程序的输出结果是() #include <stdio.h> void main() {char a[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p;int i;i 8;p a i;printf("%s\n", p - 3); }A 6 B 6789 C ‘6’ D 789 题目解析: 题目中定义了一个…...
linux用git拉取我云端以及git处理冲突
拉取后切换一个跟云端分支(dev)一样的 git branch --set-upstream-toorigin/dev dev 之后就同步了 A在dev分支写了iii,提交 B在dev分支写了hhh,提交,冲突 怎么修改,B把云端的拉下来,随便改改就行...
Learn OpenGL 17 立方体贴图
立方体贴图 我们已经使用2D纹理很长时间了,但除此之外仍有更多的纹理类型等着我们探索。在本节中,我们将讨论的是将多个纹理组合起来映射到一张纹理上的一种纹理类型:立方体贴图(Cube Map)。 简单来说,立方体贴图就是一个包含了…...
【四 (6)数据可视化之 Grafana安装、页面介绍、图表配置】
目录 文章导航一、Grafana介绍[✨ 特性]二、安装和配置1、安装2、权限配置(账户/团队/用户)①用户管理②团队管理③账户管理④看板权限 3、首选项配置4、插件管理①数据源插件②图表插件③应用插件④插件安装方式一⑤安装方式二 三、数据源管理1、添加数…...
jvm 堆
Java虚拟机(JVM)中的堆是运行时数据区的一个主要部分,它用于存放对象实例和数组。它是所有Java线程共享的一块内存区域,是垃圾收集器管理的主要区域,因此也被称作垃圾收集堆(Garbage-Collected Heap&#x…...
Jenkins通知目标服务器拉取Harbor镜像部署
1.告诉目标服务器拉取哪个镜像 2.判断当前有没有正在运行此容器,有就删除 3.接着查看拉取的镜像目标服务器上是否已存在,有就删除 4.拉取Harbor镜像 5.运行容器 目标服务器编写脚本 创建个部署脚本 vim deploy.sh告诉目标服务器Harbor地址、仓库、镜像…...
Android 13.0 系统中framework中关于Activitity的生命周期的源码讲解
1.前言 在13.0的系统rom定制化开发中,在framework中对activitity的生命周期的掌握和了解也是非常重要的,这样有利于在启动某个app的activity的页面的时候,可以 监听到是在启动 resume stop的过程,也好进行相关的功能开发,接下来就分析下Activity的相关生命周期的代码 2.…...
常见的几个Python技术难题
大家在日常开发中有没有遇到一些难题呢?计划后面出几期专题针对性的解决。大家如果有其它问题可以在评论区给出哈。 以下是几个Python技术难题的例子: 并发和多线程编程:Python的全局解释器锁(GIL)限制了多线程的并行…...
【探索Linux】—— 强大的命令行工具 P.28(网络编程套接字 —— 简单的UDP网络程序模拟实现)
阅读导航 引言一、UDP协议二、UDP网络程序模拟实现1. 预备代码⭕makefile文件⭕打印日志文件⭕打开指定的终端设备文件,并将其作为标准错误输出的目标文件描述符 2. UDP 服务器端实现(UdpServer.hpp)3. UDP 客户端实现(main函数&a…...
【MATLAB源码-第165期】基于matlab的科莫多巨蜥算法(KMA)机器人栅格路径规划,输出做短路径图和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 科莫多巨蜥算法(Komodo Mlipir Algorithm,简称KMA)是一种受到印尼科莫多岛上独特生物——科莫多巨蜥启发的创新算法。尽管这个算法的名称听起来很有趣,但实际上它并不是一个公认…...
【Linux】项目部署CPU彪高如何定位
1.查看所有CPU占比 使用top指令获取彪高进程的PID 2.输出进程的信息 ps H -eo pid,tid,%cpu | grep 1313 3.查看线程的信息 jstack tid nid都是十六进制的 4.进制转换 将 tid的十进制转为十六进制 找到nid 可以定位到具体位置 5.关闭程序 ps -ef | grep java kill -9 jav…...
第十二届蓝桥杯大赛软件赛决赛C/C++ 研究生组-纯质数
直接判断数据过大 相对而言,由2,3,5,7组成的数更少,则先筛选出由2,3,5,7组成的数,再判断这些数中的质数个数即可 #include <iostream> using namespace std; int main() {printf("1903");…...
MyBatis面试简答题
以下是一份MyBatis的高难度简答题,共20题: 请解释MyBatis中#{}和${}的区别,并举例说明它们在实际应用中的使用场景。 MyBatis的Mapper接口是如何与XML映射文件关联的? 如何在MyBatis中实现动态SQL?请列举几种常见的动态SQL元素并解释其作用。 描述MyBatis中的ResultMap的作…...
lua 中的元表
a{ age0, __tostringfunction() { }, __callfunction() { }, } b{} a.__indexa{}//将a表中的__index指向自己 setmetatable(a,b)//将b设置为a的元表; __tostring 当子表a被当做字符串使用时会调用原表b中的__tostring方法, __call 当子表a被当做字符串使用时…...
c语言综合练习题
1.编写程序实现键盘输入一个学生的学分绩点 score(合法的范围为:1.0—5.0),根据学生的学分绩点判定该学 生的奖学金的等级,判定规则如下表所示。 #include <stdio.h>int main() {float score;printf("请输入学生的学分…...
相机拍照与摄影学基础
1.相机拍照 相机可能形状和大小不同,但基本功能相同,包括快门速度、光圈和感光度,这些是摄影的通用概念。即使是一次性相机也是基于这三个理念工作的。不同类型相机在这三个概念上的唯一区别是你可以控制这些功能的程度。这三个参数被称为相…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
