论文浅尝 | 学会使用上下文学习来进行命名实体识别

news2024/11/23 12:42:39

e0ac0053c7bef306fc7e2725c7baf818.png

笔记整理:王润哲,东南大学硕士,研究方向为大模型

链接:https://aclanthology.org/2023.acl-long.764.pdf

1. 动机

实体关系是知识图谱中不可或缺的一层重要信息,它们描述了实体之间的语义关系,这种连接使得知识图谱能够表达更为丰富的知识信息。然而现实生活中的命名实体识别(NER)任务往往受限于实体类别数量大,相关数据标注差等问题。

为此本文利用上下文学习技术,将命名实体识别能力融入大规模的预训练语言模型,实现了一种可以有效完成命名实体识别任务的方法,这种方法甚至可以仅利用少数演示实例实现即时识别新的实体类型。和先前采用微调的方法相比,本文提出的方法不需要代价较高的重训练过程,并且可以不用调整模型参数就实现即时识别新实体类型。与基于度量的方法相比,此方法可以动态地利用指令和演示中需要的信息,而不是局限于固定的度量空间。

2. 贡献

(1)提出了一种可以只使用少量实例就能即时有效识别新实体类型的上下文NER模型。

(2)设计了一种元函数预训练算法,它可以将预训练语言模型建模为元函数并将上下文NER能力注入预训练语言模型。

(3)如何将上下文能力注入小模型中是大模型时代NLP的重要研究方向,本文的研究有益于未来工作的新方向。

3. 方法

3.1 上下文命名实体识别

在上下文学习中,模型会从指令和演示实例中阅读到目标实体类型的信息,然后提取目标类型的实体,这样就可以实现即时提取新关系类型,而不需要重新训练模型。本文中NER任务被转化为序列到序列的生成式任务,其中输入序列包含指令、演示实例以及目标文本,输出序列为目标实体及其类型。图1是一个抽取示例。指令是指包含目标实体的序列,用于引导模型的抽取,如图1中绿色部分所示。演示实例主要有两个作用,一个是可以提供目标类型的相关知识,另一个是用于规范模型的输出格式,如图1中蓝色部分所示。最后黄色的部分是目标文本,指定模型的抽取任务在该文本上进行。输出中实体及其类型用is连接,is前为实体,is后为其对应的类型,输出采用这种自然语言的表示形式可以更好地利用预训练语言模型的文本生成能力。

e61a78647b492ab2701f8e608268fa1f.png

图1 NER任务示例

鉴于上文中给定的任务形式,本文采用编码器-解码器结构的模型(例如T5)作为主要功能模块。

3.2 元函数预训练

尽管像GPT-3这类规模较大的预训练语言模型具有上下文学习的能力,这样的能力并不能总保持在可控的状态。此外,NER任务不像分类和问答任务那样,与这些预训练语言模型原生的预训练任务并不一致,需要更加复杂的片段抽取和类型判别。因此本文在这部分介绍了一种算法,可以将上下文NER能力注入预训练语言模型,并使其保持可控、可预测状态,具体的做法为:1.通过元函数损失来优化预训练语言模型,让输入中包含的隐式抽取模式能够接近显式微调过的实体抽取模型。2.通过抽取损失优化预训练语言模型,从而使上下文NER可以有效定位并分类实体。

在展开介绍元函数预训练之前,文章还介绍了一些预训练的设定。首先是数据处理,本文提出在构建数据集的过程中,加入一些NIL数据来模拟真实世界中那些并不能抽取到目标实体的情况,同时提出将实体类型匿名化处理,不直接使用原始的类型名,这种方式可以很好地提升上下文学习能力。整个预训练部分的损失函数被定义为:

0df482366f767e0ed001745895b6fc71.png

其中,α为元函数损失的系数,元函数损失和抽取损失都将在后文中介绍。

元函数预训练的流程如图2所示,可以看到额外引入了一个在演示实例上预训练好的抽取函数,后续尽可能地缩短两个抽取函数之间的差距,从而实现对该部分模型的优化。

c1141d7f455c0f8bbffd3e9fd5970d92.png

图2 元函数预训练流程图

符号化的表示上述过程,即给定指令I,演示实例D以及输入文本T,首先将它们输入编码器,得到其特征:

05dea4997ceaed1a0971229e67465048.png

按照本文的做法,这里会忽略实例D的特征,选取I和T的特征作为隐式抽取函数的特征,即:

f9ba0499e3bfacc7c9301d334bd16dac.png

为了得到微调后函数的特征,这里文章提出在原先的编码器基于给出的演示示例进行一次梯队下降,并用这个微调过的编码器在同样的输入上进行编码,从而得到该函数的特征,即:

d55254cf11f9ffacefca1d4bb6b379d2.png

按照文章的假设,这里即把  理想抽取函数的特征,因此元函数的损失可以定义为  和  之间的距离:

a9186c0b2111ca8c19d8bb07e68fb241.png

其中  代表欧氏距离。需要注意的是,计算这个损失函数的梯度时,  会被视为常量。因此,这个元函数的损失可以用下式计算:

48d0b6bc8a1a70cdf00b0bd53595ca28.png

其中 θ 为编码器的参数,  代表输入,计算出的这个梯度将被用于更新编码器的参数。

除了元函数损失,文章提出还需要利用一个抽取损失来预训练语言模型。给定指令I,演示实例D以及输入文本T,序列到序列形式的实体抽取函数会直接逐字自回归地建模生成概率。因此可以将抽取损失表示为:

58b1c5511ede15a89f2fa5b64477b383.png

其中 θ 为模型的参数, θ 的梯度可以表示为:

7a25f3a6e3a7bf52ae0839a84cdf435f.png

为了训练模型的实体抽取能力,本文设计了两个预训练抽取任务,包含一个实体抽取任务以及一个伪抽取语言建模任务。实体抽取任务用来训练模型从文本中抽取实体的能力,任务包含了上下文NER设定(指令+实例+文本)以及传统NER设定(指令+文本)。伪抽取语言建模任务是用于减小实体抽取任务和原始的语言建模任务之间的差距,该任务通过将一些并非抽取任务的语料转化为类似抽取任务的训练数据,训练模型抽取实体并预测实体类型的能力。

4. 实验

4.1 对比实验

对比实验部分,选择在CoNLL03等四个数据集上进行少样本的NER抽取,用于对比的基线模型包含两种,一种是预训练语言模型,如T5,GPT等,另一种为预训练的NER模型(少样本方法), 下表为实验结果,评估指标为Micro-F1值:

表1 对比实验结果表

0279e1efa3facb1f6171e3a310dc79a4.png

从实验结果可以看出,少样本NER任务即使是对于预训练好的大规模语言模型仍然具有挑战性,这可能是由于语言建模任务和NER任务的差别较大。而本文提出的模型MetaNER可以达到很好的上下文NER性能,基本在所有测试的数据集上都有较大的性能提升。

此外,表格结果可以看出本文提出的上下文NER方法更加鲁棒。对比预训练的NER模型,本文的方法在一些数据领域跨度较大的情况下提升更加明显,例如在NCBI-disease以及SEC-filings两个数据集上。结果证明元函数预训练方法的确能够有效地将上下文学习能力注入预训练语言模型中,无论是MetaNER-base还是MetaNER的整体表现都更加理想。

4.2 消融实验

作者还对元函数预训练、伪抽取语言模型预训练以及实体类型匿名化处理做了消融实验,按照这个顺序,实验结果如下表所示:

表2 消融实验结果表

6d396505ca59bc3c18a9d4f47b400b9d.png

结果表明,元函数预训练对于提升模型的上下文学习能力有非常关键的作用,这也是本文一个非常核心的思想。为了进一步验证该部分的效果,作者从数据集中采样了1000个样本,计算元函数和替代抽取函数之间特征的差异,结果如图3所示,可以看出元函数的特征已经非常接近微调过的抽取函数。

41b8713cb0039b78d28665db90c3bf16.png

图3 特征对比图

此外,实验结果还表明,伪抽取语言建模任务和类型匿名化都对模型上下文NER的能力有提升,其中类型匿名化主要是通过防止模型对类型名字过拟合从而提升上下文NER能力的。

5. 总结

本文介绍了一种基于上下文学习的NER方法,它将预训练语言模型建模为元函数,从而将上下文NER能力注入预训练语言模型中,实现模型即使识别新类型实体的效果,实验结果表明这个方法可以有效提升模型上下文NER的能力。上下文学习能力是一种非常有效的能力,未来其他NLP任务也可以尝试探索基于上下文学习的解决方法。


OpenKG

OpenKG(中文开放知识图谱)旨在推动以中文为核心的知识图谱数据的开放、互联及众包,并促进知识图谱算法、工具及平台的开源开放。

934d4fd00f6194e5a0f2e6c951aa2910.png

点击阅读原文,进入 OpenKG 网站。

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

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

相关文章

【填坑指南】PHP8报:Unable to load dynamic library ‘zip.so’ 错误

1.原因分析 这种情况多数发生在PHP安装时因为各种原因失败后,残余的库与最后安装的PHP版本不兼容导致的。 2.我的路径 一开始我按照以前摸索出来的安装PHP7.3的成功经验来编译方法安装PHP8.3,发现以前的套路已经失效了。反复重装PHP8.3失败后&#xf…

Visual Studio 安装程序无法执行修复或更新

一.问题场景 出现问题的场景:当你的VS已经安装但是无法在工具中下载新组件或者卸载了当时一直无法安装。 二.问题原因 如果计算机上的 Visual Studio 实例已损坏,则可能会出现此问题。 三.解决方法 如果之前尝试修复或更新 Visual Studio 失败&…

Qt5离线安装包无法下载问题解决办法

Qt5离线安装包无法下载问题解决办法 文章目录 Qt5离线安装包无法下载问题解决办法1、前言2、Qt5安装包下载办法 更多精彩内容👉个人内容分类汇总 👈👉Qt开发经验 👈 1、前言 Qt安装包官方下载地址 Qt5离线安装包目前在国内已经被墙…

Meta即将推出4000亿的Llama 3 超级AI模型,或将改写大语言模型竞争格局!|TodayAI

2024年4月,科技巨头Meta发布了其最新的AI大型语言模型——Llama 3,该模型基于一个至少比前代产品Llama 2大七倍的数据集,展现出前所未有的性能。在最初发布时,Llama 3提供了8B和70B两种参数规模的版本,并迅速超越了Goo…

SpringBoot新手快速入门系列教程十一:自动生成API文档,Springboot3.x集成SpringDoc

本次项目我们用Maven来做,最近发现gradle其实很多项目的支持比较差,所以项目还是用Maven来新建项目。对比了市面上的几种API生成第三方库,只有springdoc 是能够按照文档就能部署出来的。 官网: OpenAPI 3 Library for spring-bo…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(八)-通过无人机进行无线接入

引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…

C++基础(二十):常见C++11的新特性

1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C 语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。语言的发展就像是练功打怪…

gd32发送数据,定义参数,接收中断

void usart_receive_data(uint8_t ucch) {usart_data_receive(UART3); } void usart_send_data(uint8_t ucch) {usart_data_transmit(UART3,(uint8_t)ucch);while(usart_flag_get(UART3,USART_FLAG_TBE) RESET); } 这是在c文件中定义函数,之后在h文件中声明&#…

记录些Redis题集(2)

Redis 的多路IO复用 多路I/O复用是一种同时监听多个文件描述符(如Socket)的状态变化,并能在某个文件描述符就绪时执行相应操作的技术。在Redis中,多路I/O复用技术主要用于处理客户端的连接请求和读写操作,以实现高并发…

eProsima Fast DDS getting started

系列文章目录 文章目录 系列文章目录preface**对象与数据结构**● Publish-Subscriber模块● RTPS模块**配置Attributes** Discovery传输控制前言0、安装cmake安装相关源码安装:- A foonathan_memory_vendor- C fastcdr- D tinyxml2- E asio- F openssl- G fastrtps…

贪心:交换论证法

目录 切蛋糕的最小总开销 切蛋糕的最小总开销 交换论证: 设横切的开销为 h,如果先横切,设需要横切 cnt_h 次。 设竖切的开销为 v,如果先竖切,设需要竖切 cnt_v 次。 先横切,再竖切,那么竖切…

模拟电路再理解系列(3)-共射极放大电路

1.三极管 共射极放大电路的主要器件是三极管,先来梳理一下这个经常见到的元器件 结构 三极管的三个极:基极,集电极,发射极 基极流经的电流来控制集电极和发射极之间的导通和关闭,之前看过一个形象的比喻&#xff0c…

51单片机9(使用左移实现流水灯编程)

一、序言:下面我们来给大家介绍一下这个流水灯,流水灯如何来实现?我们依然使用这个工程来完成它。 1、那要使用实现这个流水灯,那我们只需要让D1到D8逐个的点亮,那同样要实现它足够的点亮,也会涉及到延时&…

windows10 安装Anaconda

文章目录 1. 下载2. 安装3. 配置环境变量4. 检查是否安装成功 1. 下载 官网下载 https://www.anaconda.com/download 下载的最新版本,要求python的版本也高一些 清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 所有版本在这个网…

在 PostgreSQL 里如何实现数据的分布式事务的回滚和补偿机制?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 里如何实现数据的分布式事务的回滚和补偿机制一、分布式事务的概念与挑战(一…

书生大模型实战营-入门岛-第二关

Python实现wordcount def wordcount(text):words text.split()ans{}for word in words:if word not in ans: ans[word] 1 else: ans[word] 1 return ans text """Hello world! This is an example. Word count is fun. Is it fun to cou…

【日常记录】【CSS】display:inline 的样式截断

文章目录 1. 案例2. css属性:box-decoration-break参考地址 1. 案例 现在有一篇文章,某些句子,是要被标记的,加一些css 让他突出一下 可以看到,在最后,断开了,那如若要让 断开哪里的样式 和 开始…

@google/model-viewer 导入 改纹理 (http-serve)

导入模型 改纹理 效果图 <template><div><h1>鞋模型</h1><model-viewerstyle"width: 300px; height: 300px"id"my-replace-people"src"/imgApi/Astronaut.glb"auto-rotatecamera-controls></model-viewer>&…

【棋盘上的战舰】python刷题记录

目录 小前言 思路&#xff1a; 上代码 lucky ending 小前言 经过漫长的停更周期-----1个月 我决定铁血回归&#xff01;&#xff01;&#xff01; 思路&#xff1a; 两层for循环暴力最快了这种小小范围题&#xff0c;主要是第一行和第一列的边界处理&#xff0c;我分为…

STM32MP135裸机编程:定时器内核时钟频率计算方法

0 工具准备 STM32MP13xx参考手册 1 定时器内核时钟频率计算方法 1.1 定时器分组 STM32MP135的定时器按照时钟源不同分成了三组&#xff0c;如下&#xff1a; APB1: APB2: APB6&#xff1a; 1.2 定时器内核时钟频率计算方法 APB1DIV是APB1的分频系数&#xff0c;APB2DIV、…