PURE:A Frustratingly Easy Approach for Entity and Relation Extraction

news2025/1/20 18:39:28

原文链接:

https://aclanthology.org/2021.naacl-main.5.pdf

ACL 2021

介绍

         对于命名实体识别和关系提取,最近的研究要么在这两个任务上使用一个预训练结构,要么通过共享表征来进行多任务学习。作者认为实体模型和关系模型在上下文表征中学到了不同的信息,共享它们的表征会降低性能,因此探索了pipeline模型在该领域上的潜力。

        作者将现有的联合模型分为两类:结构化预测多任务学习。1)结构化预测方法将这两项任务放到一个统一的框架中,将原本的两个任务变成一个待解决的全局优化问题,并且在推理的时候使用束搜索或者强化学习来进行联合解码;2)多任务学习部分的模型建立两个模型用于实体识别和关系抽取,通过共享参数来进行优化。

方法

         如下图所示,作者提出的方法主要包括两个模型:Entity modelRelation model。其中Entity model首先对输入的句子中的每一个span实体类型进行预测。在Relation model中对每一对候选实体独立地进行处理,插入额外的marker token,来强调主体、客体及其类型。

Entity model

        实体模型是一个标准的跨区域(span-based)模型。对于输入的每个token(x_{t}),使用预训练语言模型(如Bert)来得到一个包含上下文的表征X_{t}。一个跨度 s_{i}\subseteq S的表征 h_{e}(s_{i})的定义如下所示,其中 \phi (s_{i })表示学到的具有跨度特征的embedding。

         h_{e}(s_{i})被送入到一个前馈神经网络来预测实体类型的分数。

Relation mode

        关系模型就是预测输入的每对span之间的关系。作者认为这些表征都只能获取到每个独立实体周围的上下文特征,不能捕捉到这对span之间的关系,因此在不同的span上共享上下文表征可能是次优的。

        与其它独立地处理每对span,并在输入层插入typed marker来强调主体、客体以及它们之间关系的模型不同。如上图中Relation mode中所示,具体的:

X表示输入的序列,一对主客体spans s_{i}s_{j}的类型分别是e_{i}e_{j}。定义文本marker <S:e_{i}></S:e_{i}><O:e_{j}></O:e_{j}> ,将其插入到主体和客体的起始位置。\hat{X}表示修改后的序列:

        将\hat{X}作为输入送入到第二个预训练好的encoder,用\hat{x_{t}}表示输出的表征,将两个起始位置的输出进行concate,来得到跨度对的表征。

        最后将这个表征送入到一个前馈神经网络来预测关系类型的分数。

        虽然使用额外的标记来强调主客体的方法不是一个很大的创新点,因为在之前的关系分类任务中,该方法就已经被提及。但是大多数的关系分类任务只关注与在输入序列中给定的主客体对,其有效性还没有在端到端的设置中得到评估,而且之前端到端的模型仅通过使用辅助loss的方法来将实体关系信息映射到关系模型中。

Cross-sentence context

        目前存在不少工作使用cross-sentence来提高模型的性能,由于预训练模型能够独立的捕获到较远范围内的信息,作者在实体模型和关系模型中仅通过一个固定大小的窗口来获取上下文的cross-sentence,即输入一个有n个词的句子,分别用前后文中的(W-n)/2个词来增加输入。

Training & inference

        对于实体模型和关系模型,使用特定任务损失来对预训练模型进行微调,并两个模型都使用交叉熵损失:

         其中e_{i}^{*}r_{i,j}^{*}分别表示s_{i}的真实类别和s_{i} s_{j}的真实关系。

Differences from DYGIE++ 

        作者还与DYGIE++模型进行了对比,存在以下差异:

        1)对实体模型和关系模型分别使用分开的encoder,而不是通过多任务学习的方式。

        2)关系模型中的上下文表征通过使用text marker针对每一对span

        3)对于cross-sentence,没有应用图传播和束搜索等方法,仅通过扩展其他额外信息来进行融合。

        因此作者提出的模型更简单,并且效果也不错。

Efficient Batch Computations

        由于本文提出的模型对于每对span都是独立地插入实体标记,但作者想要在同一句子中的不同span,只进行一次计算,于是在原始模型上进行了两个修改来实现近似计算。

        1)不再将实体标记直接插入到原始句子中,而是将marker的位置编码与相应span的开始结束token联系起来。

        2)在注意力层增加了一个约束,使得文本token只关注文本token而不去关注mark token,而实体marker token能够关注所有的文本token 以及同一个span的四个mark 标记。这样一来,就能重复利用所有文本token的计算,即只需运行一次关系模型就能对同一句子中的多span进行批量处理。如图1中c部分所示,将所有mayker标记添加到句子末尾,形成批量处理一系列span的输入。

实验

对比实验 

        作者提出的PURE与其他模型的在ACE05、ACE04、SciERC三个数据集中进行实验,结果如下所示:

         可以看出作者提出的PURE比之前的模型在各个数据集上表现都要好,在使用cross-sentence后,更是得到了进一步的提高。对于实体识别,作者提出的模型在这三个数据集上分别有1.4%、1.7%、1.4%的提升,表明cross-sentence信息对于实体模型是有帮助的,并且预训练的transformer encoder 能够独立地从大文本中捕获较长范围内的信息。比起之前使用全局特征和复杂的网络结构实现的最好效果,作者提出的模型更加简单,并且在三个数据集上都有了较大的提升。

        对文中提出的近似计算进行了实验,结果如下所示:

        可以看出近似计算的速度提高了10倍左右,并且F1最多下降了1.2%。

消融实验

        对输入的不同变体(即使用不同的marker 形式)进行了实验,结果如下所示:

        不同的marker token比标准的text表征效果要好,表明针对不同的spans学习不同表征的重要性。

         联合模型的一个主要论点就是,将两个任务之间的交互进行建模能够得到更好的效果。作者对本文提出的模型是否也存在这样的情况进行了实验,结果如下所示。

        结果表明只是简单的共享encoder会损害两个任务上的F1,作者认为这是1因为两个任务拥有不同的输入形式,要求不同的特征。因此使用两个单独的encoder能够更好的学习特定任务的特征。

        对cross-sentence中的窗口W的大小进行了实验,结果如下所示:

        在实体模型中,w=300时,效果最好;关系任务中,w=100效果最好。

缓解误差传播的尝试

        pipeline模型存在误差传播的问题,在本文的模型中,训练关系模型使用正确的实体,在推理时使用实体模型预测出的实体,这可能会导致训练和测试之间的矛盾。作者尝试了一些方法来解决这个问题:

        1)首先研究在训练阶段也使用预测的实体是否能够缓解这个问题,作者使用十倍的交叉验证,结果该方法还损害了模型的性能,作者猜测是因为在训练过程中引入了额外的噪音。(实验具体结果如后所示)

        2)考虑在训练和测试时,在关系模型中使用更多span。主要是因为目前的pipline方法,如果正确的实体并不够完整(就是没有推理出来的多),关系模型就没办法得到所有可能的关系。使用束搜索时,系数为0.4时效果最好。因此还探索了几种不同关系模型中的span编码方式。结果如下所示,可以看见这些改变都没有带来什么提升。

总结 

        本文作者提出了一个pipeline的模型PURE,相对于之前的jointly模型更加简单高效,(也算是为pipeline扳回一局吧)。感觉全文的创新点好像不是很突出(个人拙见),但是实验部分比较完善的,争对pipeline的传播误差问题,也尝试了两种方法,虽然好像并没有什么效果,但是感觉作者的工作还量还挺多的。

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

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

相关文章

kotlin的abstract抽象类与interface接口建模按钮android点击事件处理

kotlin的abstract抽象类与interface接口建模按钮android点击事件处理 例如&#xff1a; abstract class View {private var listener: OnClickListener? nullprivate var enabled: Boolean falseconstructor() {println("view constructor")}fun setClickListen…

用法详解!postman接口自动化如何进行环境变量

目录 前言&#xff1a; 1.设置环境变量 2.设置全局变量 3.检查response body中是否包含某个string 4.检测JSON中的某个值是否等于预期的值 5.转换XML body为JSON对象 6.检查response body是否与某个string相等 7.测试response Headers中的某个元素是否存在(如:Content-…

自然语言处理: N-Gram实战

自然语言处理: 第一章N-Gram 一. 理论 定义: 语言模型在wiki的定义是统计式的语言模型是一个几率分布&#xff0c;给定一个长度为 m 的字词所组成的字串 W1 , W2 &#xff0c; &#xff0c;Wn &#xff0c;派几率的字符串P(S) P(W1 , W2 , &#xff0c;Wn &#xff0c; )而其…

web audio音效播放器/音乐播放器

这是一个基于Web Audio API、HTML和CSS构建的高级网页音频播放器。它允许用户播放音频文件、控制播放、可视化音频&#xff0c;并应用音频效果和过滤器。 Github仓库&#xff1a; https://github.com/sonichen/Web-Based-Audio-Player 希望大家多多star 环境 操作系统&#…

Android逆向解析加壳与脱壳技术

加壳 加壳是指在 APK 文件中插入额外的代码或数据&#xff0c;使得原始代码难以被分析和反编译。通常加壳是为了保护软件的知识产权或者防止逆向工程。下面是 Android 加壳的一般流程&#xff1a; 选择加壳工具&#xff1a;选择合适的加壳工具进行加壳&#xff0c;比如市面上…

【SpringCloud-1】注册中心-Eureka

springcloud微服务&#xff0c;相对于dubbo这种SOA架构&#xff0c;提供了一站式的全套解决方案&#xff0c;什么意思呢&#xff1f;就是说springcloud不需要依赖其他组件&#xff0c;自己提供了全套的 常规项目需要使用的技术和解决问题的方案。 比如dubbo需要依赖zk作为注册…

一文读懂二叉树

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 什么是二叉树 二叉树是一种由节点&#xff08;Node&#xff09;组成的数据结构&#xff0c;每个节点最多有两个子节点。它具有良好的层次结构&#xff0c;便于搜索和…

chatgpt赋能python:Python如何将IP地址转换为整数

Python如何将IP地址转换为整数 在计算机网络中&#xff0c;IP地址是一个包含32位的二进制数字&#xff0c;通常由四个8位二进制数字&#xff08;即“点分十进制”&#xff09;表示。但在某些情况下&#xff0c;需要将IP地址转换为整数&#xff0c;例如在网络编程中检查网络连接…

C语言:编写代码,演示多个字符从两端移动,向中间汇聚

题目&#xff1a; 给出第一个字符串&#xff0c;如&#xff1a;"welcome to school!!!!!"&#xff0c; 设置第二个字符串&#xff1a;"######################"&#xff0c; 两字符串字符数相等。 从第二个字符串两端开始移动&#xff0c;向中间汇聚&#…

Python 中判定整数

直接数值判定&#xff0c;表达式判定。 (本笔记适合学会 Python 基本数据类型&#xff0c;可以“融会贯通”的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#…

IGP协议对SR-MPLS的扩展

目录 OSPF对于SR-MPLS的扩展 OSPF对邻接SID做了细分 10类LSA定义的TLV类型 10类LSA定义的TLV的报文格式 ISIS对SR-MPLS的扩展 ISIS对邻接SID做了细分 ISIS定义的Sub-TLV的类型 ISIS定义的Sub-TLV的报文格式 OSPF对于SR-MPLS的扩展 OSPF为了支持SR-MPLS通过新…

Vue.js 3.x Composition APIs 及简单使用

文章目录 Vue 3.0 和 2.x 的区别源码组织方式packages 目录结构 不同构建版本Composition API 设计动机设计动机Options API Demo:Composition API Demo:对比&#xff1a; 性能提升响应式系统升级编译优化优化打包体积 ViteESModuleVite as Vue-CLIVite 特点 Composition APICo…

NLP学习笔记三-数据处理基础

NLP学习笔记三-数据处理基础 NLP设计的处理处理技术也比较多&#xff0c;我们简单介绍一部分&#xff1a; 1.Tokenization NLP当中的Tokenization&#xff0c;博主以前无论是在文章中还是在代码中都能经常看到&#xff0c;这在自然语言处理中也是比较常用的技术。 Tokenizati…

ASEMI代理英飞凌TLD2314EL参数,LED驱动器TLD2314EL

编辑-Z TLD2314EL参数描述&#xff1a; 型号&#xff1a;TLD2314EL 电源电压VS&#xff1a;40V 输出电压VOUTx&#xff1a;40V 状态电压VST&#xff1a;6V 输出电流IOUTx&#xff1a;130 mA 结温Tj&#xff1a;-40~ 150℃ 储存温度Tstg&#xff1a;-55~ 150℃ 正常工作…

要不是和阿里P7聊过,我也不知道自己是个棒槌

前几天和一个朋友聊面试&#xff0c;他说上个月同时拿到了测试开发岗位腾讯和阿里的offer&#xff0c;最后选择了阿里。 阿里内部将员工一共分为了14个等级&#xff0c;P6是资深工程师&#xff0c;P7是技术专家。 其中P6和P7就是一个分水岭了&#xff0c;P6是最接近P7的不持股…

# Windows 专业版安装 Hyper-V

Windows 专业版安装 Hyper-V 文章目录 Windows 专业版安装 Hyper-V检查要求硬件要求安装方式使用 PowerShell 启用 Hyper-V使用 CMD 和 DISM 启用 Hyper-V通过设置启用 Hyper-V 角色 创建虚拟机Hyper-v 管理器创建Hyper-V Quick Create 完整官网地址&#xff1a;Windows 10 上的…

SpringCloud-Gateway的详细讲解以及完整的示意图和代码-下

目录 二说Gateway 路由配置 创建com/springcloud/config/GateWayRoutesConfig.java 测试 动态路由 示意图 代码实现 测试 注意事项和细节 代码 Predicate/断言 基本介绍 Route Predicate Factories 解读 Route Predicate 实例 After Route Predicate 测试 B…

tamper脚本编写与mitmdump

tamper脚本编写与mitmdump 0x01 前提 ​ 注入点在登录框处&#xff0c;但是目标每次都会先校验验证码&#xff0c;而验证码会在返回包中以json格式出现。 0x02 编写tamper脚本 由于目标的验证码在response中回显出来了&#xff0c;所以我们可以利用tamper脚本去读取验证码&a…

Python:SVOREX

公式看懂了就写导数。写完导数撸码 Car数据集上对比: 在Car数据集上,SVOREX稍微胜出。 """ SVOREX author: Daniel He at CQUPT 2023-06-08 """ import xlwt import xlrd import numpy as np import pandas as pd import matplotlib.pylab a…

17.16按摩师

目录 一、题目 二、分析代码 一、题目 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09; 二、分析代码 class Solution { public:int massage(vector<int>& nums) {int nnums.size();// vector<int>dp(n,0);// if(n<0)// return 0;// if(n1…