论文浅尝 | 通过对比学习优化用于命名实体识别的双编码器

news2024/11/23 15:41:35

5e97ff87329c2082b0db63591eb6f740.png

笔记整理:陆星宇,东南大学硕士,研究方向为自然语言处理

链接:https://arxiv.org/abs/2208.14565

动机

命名实体识别(NER)是识别与命名实体相关的文本片段并将其分类到预定义的实体类型(如人物、位置等)的任务。作为信息提取系统中的基本组件,NER已被证明对各种下游任务如关系抽取、指代消解和细粒度观点挖掘有益。

以往的工作主要将NER作为序列标记或跨度分类来处理,存在许多局限性,例如难以用序列标注处理嵌套NER,基于跨度分类的学习和推理十分复杂,对监督数据中的噪声十分敏感。此外,现有的工作将所有非实体标记的跨度统一作为反例,当训练数据的标记不完整时,可能会引入假反例。

贡献

文章的主要贡献如下:

(1) 将NER视为一种表示学习问题,提出了一种用于命名实体识别的高效双编码器,并在通用和医疗领域的多个数据集上取得了SOTA结果。

(2) 引入了一种新的动态阈值损失,其学习针对候选实体的动态阈值以区分实体跨度和非实体跨度;

方法

1、模型结构

模型的总体架构如图1所示,实体类型编码器和文本编码器是同构且完全解耦的Transformer模型。在向量空间中,锚点(橙色标识)表示来自实体类型编码器的特殊标记[CLS]。通过对比学习,其最大化锚点与正标记(Jim)之间的相似性,并最小化锚点与负标记之间的相似性。虚线灰色圆圈(由锚点与文本编码器中的[CLS]之间的相似性限定)表示将实体标记与非实体标记分开的阈值。

df798a0ee6117fc97815071f5929830c.png

图 1:模型总体架构

实体类型嵌入:实体类型编码器的目标是生成实体类型嵌入,作为向量空间中对比学习的锚点。在这项工作中,关注预定义的实体类型集合  ,其中每个实体由一段自然语言描述,并使用  表示第k个实体类型的token序列。对于给定的实体类型  ,其使用BERT作为实体类型编码器(BERTE),并添加一个额外的线性层来计算相应的实体类型嵌入:

f3dfcb39f9cae0ec85d3ac83a026eb76.png

文本token嵌入:与实体类型嵌入类似,再次使用BERT作为文本编码器(BERTT),并简单地使用最终的隐藏层状态作为文本token表示:

9bbfbc5c4e6126172441e99d986f1a44.png

2、损失函数

本部分介绍了命名实体识别的对比学习损失函数。假设一个跨度(i,j)是输入文本中的连续token序列,其起始标记位于位置i,结束标记位于位置j。相似度函数为 τ ,其中 τ 是一个标量参数。

基于跨度的目标:按下面的公式获取跨度(i,j)的向量表示:

25b779b7d886149af502e073836fe18e.png

其中  ,  是文本token嵌入,  ,  是一个可学习的线性层,  表示向量串联,  是一个可学习的跨度宽度嵌入  的第  行。基于此,基于跨度的互信息神经估计(infoNCE)可以被定义为

9c30b5376ba273556f1c537d09c16314.png

其中跨度  属于实体类型  ,  是所有输入文本中所有不属于  的可能跨度,  是实体类型嵌入。

基于位置的目标:基于跨度的目标的一个局限性是它以相同的方式惩罚所有反例,即使它们是部分正确的跨度,例如与正确实体跨度具有相同的起始或结束标记的跨度。直觉上,预测部分正确的跨度比完全错误的跨度更可取。因此,作者提出了基于位置的对比学习目标。具体而言,其使用附加线性层来计算  的两个额外的实体类型嵌入,  ,  ,其中  ,  分别是开始和结束位置的类型嵌入,  来自实体类型编码器。相应地,可以使用两个附加的线性层来计算开始和结束标记的相应token嵌入,  ,  ,其中  是文本token嵌入。使用  ,  作为锚点,然后通过对比学习定义了两个基于位置的损失函数:

a2ac18e14fae9f63ecdd1f29d56ce73e.png

其中  ,  是输入文本中不属于实体类型k的任何跨度的起始/结束位置的两个集合。与基于跨度的目标相比,基于位置的目标的主要区别来自相应的负面集,其中起始和结束位置彼此独立。换句话说,基于位置的目标可以潜在地帮助模型做出更好的起始和结束位置预测。

非实体情况的阈值设置:尽管上述定义的对比学习目标可以有效地将正面跨度推向其在向量空间中对应的实体类型,但在测试时,模型可能无法决定跨度应该多接近才能预测为正面。换句话说,该模型无法正确地将实体跨度与非实体跨度分开。为解决这个问题,作者使用特殊标记[CLS]与实体类型之间的相似度作为动态阈值。直观上,[CLS]的表示阅读整个输入文本并总结上下文信息。

为了学习阈值,作者选择通过额外的自适应学习目标扩展了原始对比学习目标,用于非实体情况。具体而言,对于开始损失,增强的开始损失定义为:

06487e8892b84f5a9dc0161d1199f2b8.png

增强的结束损失可以以相似的形式定义。对于跨度损失,作者使用跨度嵌入  来获取增强的跨度损失:

9745d0bea633ab14fb33d120dcc21eb5.png

注意,作者使用了一个单一的标量参数 β 来平衡三个目标的自适应阈值学习和原始的对比学习。

训练:最后,作者通过结合之前讨论的三个增强对比学习,考虑一个多任务对比学习形式,这使得总体训练目标如下所示:

febbef609e7fcbaff574be1346e507f1.png

其中 α,γ,λ 都是标量参数。

3、推理策略

在推理期间,模型枚举所有长度小于L的可能跨度,并基于每种实体类型的起始/结束/跨度情况计算三个相似度得分。考虑两种预测策略:联合位置-跨度和仅跨度预测。在联合位置-跨度情况下,对于实体类型  ,其剪枝掉具有起始或结束相似得分低于学习阈值的跨度,即  或  。然后,只有那些跨度相似度得分高于跨度阈值的跨度被预测为正数,即  。对于仅跨度策略,其只依赖跨度相似度得分,并将所有合格的跨度保留为最终的预测结果。实验发现仅跨度推理更加有效,因为联合推理更容易受到注释工作的影响。

实验

作者在有监督和远程监督两种设置下评估了该方法。

有监督的NER结果表1呈现了该方法与所有先前方法在三个嵌套NER数据集(ACE2004、ACE2005和GENIA)上评估的比较。方法在所有三个数据集上均达到了SOTA性能。表2将该方法与BLURB基准测试中的所有先前提交进行比较。

cc18c3c96f1c441f73eb9858d068bf83.png

表 1:有监督的嵌套NER

cd4afa8ed0126b51e39a30302fd7d782.png

表 2:有监督的扁平NER

76902e7f8d0415ce5188bb65d93c538a.png

表 3:远程监督NER

比较两种设置,可以观察到远程监督结果仍然与有监督结果存在超过10个点的差距,表明有进一步降低假反例噪声的潜力。

总结

作者提出了一个使用对比学习的双编码器框架来进行NER,将文本和实体类型分别映射到相同的向量空间中。为了将实体跨度与非实体跨度分开,作者引入了一种新的对比损失来共同学习跨度识别和实体分类。在监督和远程监督设置下的实验表明了该方法的有效性和鲁棒性。作者进行了广泛的分析来解释其方法的成功并揭示增长机会。未来的方向包括进一步改进低性能类型并在自监督零样本设置中应用。


OpenKG

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

bdf94a305c39d40a79a8c477cd54e625.png

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

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

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

相关文章

MegEngine 使用小技巧:用 mperf 进行安卓 opencl 算子的 roofline 分析

前言 roofline 分析是一种简单评估当前计算任务对当前平台计算/访存能力的利用情况的方法,可以帮助分析算子的优化方向和优化潜力。mperf 实现了安卓 mali/adreno 两种 gpu 平台的 roofline 分析能力,下面以 mali 平台为例,简单介绍一下操作步…

【操作系统】什么是用户态和内核态?用户态和内核态是如何切换的?

【操作系统】什么是用户态和内核态?用户态和内核态是如何切换的? 参考资料: 用户态到内核态切换 什么是用户态和内核态? 「操作系统」什么是用户态和内核态?为什么要区分 一、什么是用户态和内核态? 1.1、…

案例23:基于Java宿舍管理系统设计和实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

Echarts的x轴调整间隔,可以用 xAxis数组子项的axisLabel.interval

Echarts的x轴调整间隔,可以用 xAxis数组子项的axisLabel.interval https://echarts.apache.org/zh/option.html#xAxis.axisLabel.interval xAxis.axisLabel.interval auto 默认值是’auto’ 可设置为 : number 或 Function 数字或函数 坐标轴刻度标签的显示间隔,…

逍遥自在学C语言 | for循环详解

前言 C语言中的循环结构时,for循环是最常用的一种。它允许重复执行一段代码,直到满足特定条件为止。 本文将详细介绍for循环的用法,并提供相关的可编译运行的C代码示例。 一、人物简介 第一位闪亮登场,有请今后会一直教我们C语…

生产·成本

短期生产成本 给定生产技术,管理者必须选择如何生产(即使用什么样的要素组合)使生产成本最小。 衡量成本 边际成本 长期成本与规模 长期平均成本(LAC)和长期边际成本(LMC) 规模经济 随着产…

【Web网站服务】Apache网页优化

Apache网页优化 一、网页压缩1.1网页压缩步骤 二、网页缓存三、隐藏版本信息五、Apache防盗链 一、网页压缩 在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的…

chatgpt赋能python:Python如何拆分list

Python如何拆分list 在Python编程中,我们经常需要对list进行拆分操作。拆分list可以帮助我们更好地处理数据,以便进一步进行分析、计算或可视化呈现。本文将介绍Python中如何拆分list,并且提供一些常用的拆分方式。 按固定大小进行拆分 我…

【AIGC】12、DINO | 针对 DETR-like 检测器的提升

文章目录 一、背景二、方法2.1 Contrastive DeNoising Training2.3 Mixed Query Selection2.4 Look Forward Twice 三、效果 论文:DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 代码:https://github.com/IDEACVR/…

【JUC基础】15. Future模式

目录 1、前言 2、什么是Future 2.1、传统程序调用 3、JDK中的Future 3.1、Future相关API 3.2、FutureTask 3.2.1、FutureTask实现 3.2.2、FutureTask相关API 3.3、CompletableFuture 3.3.1、thenApply 3.3.2、异步任务编排之thenCompose() 3.3.3、异步任务编排之th…

南京市某高校计算机科学与技术专业性能测试与Loadrunner—考试试卷分析

XXX科技学院试卷 20 /20 学年 第 学期 课程所属部门: 课程名称: 课程编号: 考试方式:(A、B、开、闭)卷 使用班级: …

数据安全--16--数据采集阶段安全防护措施

本博客地址:https://security.blog.csdn.net/article/details/131033616 一、引子 数据安全采集阶段的防护措施主要是从三个方面来开展的,第一个是从个人数据主体采集方面,第二个是从外部机构采集方面,以上两个方面基本涵盖了数…

读改变未来的九大算法笔记05_数字签名

1. 数字签名”(Digital Signature) 1.1. 单词数字化(digital)意味着其“由数字字符串组成” 1.2. 任何数字化的东西都能被拷贝 1.3. “签名”的全部意义在于能被读取,但不能被除了作者的任何人拷贝(也就…

linux(信号产生中)理论部分

1.实际执行信号的处理动作称为信号递达 2.信号从产生到递达之间的状态,称为信号未决(Pending) 3.进程可以选择阻塞某个信号的 ----------------------------------------------------------------------------------------------------------…

【JavaSE】Java(五十一):核心要点总结

文章目录 1. String str "love"; 和 String str new String("love);一样吗?2. 如何将字符串反转3. String类的常用方法有哪些?4. new String("sn") new String("ow")会创建几个对象? 1. String str “love”; 和…

「C/C++」C/C++ Lamada表达式

✨博客主页:何曾参静谧的博客 📌文章专栏:「C/C」C/C程序设计 相关术语 Lambda表达式:是C11引入的一种函数对象,可以方便地创建匿名函数。与传统的函数不同,Lambda表达式可以在定义时直接嵌入代码&#xff…

JSON与storage

JSON JSON由来 ◼ 在目前的开发中,JSON是一种非常重要的数据格式,它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据格式。 ◼ JSON的全称是JavaScript Object Notation(JavaScript对象符号)&#xff1a…

苹果震撼发布首款头显,搭配强悍Mac和iOS 17等全新产品,价值25000元!

🌷 博主 libin9iOak带您 Go to New World.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发…

随机过程与排队论(一页纸总结)

参数为 λ 的泊松过程的点间间距是相互独立的随机变量,且服从均值为 1/λ 的 指数 分布。 病人以每小时3人的泊松流到达医院,设该医院只有一个医生服务且容量为无穷,医生服务的时间服从指数分布,并且平均服务一个病人为30分钟&am…

内联函数 C/C++

代码&#xff1a; file1.c #include<stdio.h>void spam(double v); void masp(double w);inline static double square(double); double square(double x) { printf("%s %s %d\n", __FILE__, __func__, __LINE__);return x * x; } int main() {double q …