SemEval等数据集SOTA又刷新啦!! Downstream Model Design of Pre-trained language Model for Relation Extraction

本文主要是介绍SemEval等数据集SOTA又刷新啦!! Downstream Model Design of Pre-trained language Model for Relation Extraction,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Downstream Model Design of Pre-trained language Model for Relation Extraction》该论文是华为在2020自然语言处理顶会ACL上发表的一片文章。论文所提出的REDN模型在SemEval 2010 task 8、NYT以及WebNLG上完成SOTA结果。个人认为该篇论文的创新点还是比较好的,构思非常的巧妙。

 

目录

 1 背景

2 与其他工作的对比

 3 方法

3.1 编码器

3.2  关系计算层

3.3 损失函数

个人拙见:


 1 背景

基于神经网络有监督的关系抽取在一定程度上取得了成功。然而,由于复杂关系的存在,它们没有能达到一个良好的水平。这里所说的复杂关系是指:1.远距离的长尾关系; 2.单个句子中有多种关系; 3.实体重叠共享关系(SEO、EPO);另外,预训练语言模型(PLMS)在多种任务上通过finetune得到了很好的结果。但是,关系抽取并不是其定义的标准任务。预训练语言模型一定可以用在关系抽取任务当中,但有必要设计下游任务,甚至是损失函数来处理复杂关系。现如今用神经网络做关系抽取的方法总结如下:

  • 从编码器获取文本的嵌入式表示向量。例如Glove、Word2Vec、Bert等等;
  • 利用神经网络进一步处理文本嵌入的特征,得到新的向量表示;
  • 根据新的向量表示,利用softmax等等的分类器进行分类训练;

这种方法由于上文提到的复杂关系的存在,没有达到很好的效果。最近基于transformers预训练模型的出现,为该问题提供了新的解决思路。通过大量的网络进行自监督训练其初始化参数,然后结合多个下游任务微调来修复特殊任务的方法。然而关系抽取不在其定义的下游任务当中。该篇论文所解决的问题就是:

  1. 利用基于transformers的预训练语言模型BERT做关系抽取任务。并且将上下文信息添加到实体向量表示中,以处理远距离的关系问题;
  2. 计算多个核(非对称信息)。不同的核矩阵可能存在不同的信息。有助于同实体对的多重关系;
  3. 使用Sigmoid分类来代替softmax,该机制考虑的是实体重叠问题。并且使用每一实体对向量的平均概率作为关系分类的最终分数。这种机制允许在重叠实体上预测多个关系;
  4. 提出了新的损失函数,解决该范式优化问题;

 Note:这里大家可能对上面的复杂关系有些不理解,在这里做一个样例补充!!

远距离长尾关系:这个理解比较简单,就是在一个很长的句子中提取一个关系,通常长的句子的特征提取是比较困难的;

单句子中多关系:这种情况就是在一句话中存在两个或两个以上实体,他们之间有多种关系;

实体重叠共享关系:这里还是要重点说一下该关系,其包括SEO和EPO,如下图所示:

所谓EPO就是指同一实体对共享多种关系,在上图中,‘Quentin Tarantino’与‘Django Unchained’同时共享‘Act_in’和‘Direct_movie’这两个关系;而SEO就是单个实体与其他不同的实体共享多个关系,例如‘Wasington’即是‘USA’的‘Capital_of’又是‘Jackie R.Brown’的‘Birth_place’。

2 与其他工作的对比

这里分别与基于CNN、基于GNN、基于Pre-trained的方法分别进行对比:

  • CNN-Based:CNN只能捕获局部的信息,对于上文提到的长距离的关系分类效果做的不是很显著;

  • GNN-Basd:首先GNN的输入一般为句子的依存句法分析树,可能会存在由于pipeline所带来的错误传递。另外紧就语法层面是一些浅层的信息,不能有效的表达词与词之间的关系;

  • Pre-trained Language Model:这种发法取得了一定的成功,但是没有充分利用语言模型信息,把句子表示成一维向量而不是一个矩阵,用矩阵的向量表示信息应该更加丰富;

 3 方法

论文所提出的方法这里分两个部分来介绍,一个网络结构,二是损失函数。论文提出的方法架构如下图所示:

图中有很多符号,这里进行符号说明:

符号意义
E_w每个单词的Embedding表示
E_pE_w经过一个self-attention的转换
E_a全文表示的嵌入即[cls]的词嵌入
P_i关系i相关的句子表示矩阵

损失函数部分,首次用Sigmoid激活函数,通过计算P_i,利用实体掩码来构造矩阵M,用它来保存句子中实体对的信息。根据每个实体对是否是第i个关系的实例标签,使用P_i每个实体区域的平均值来计算其二进制交叉上(Binary Cross Entropy)损失。其总损失为所有关系的损失和。(此处不懂没关系,后面有详细说明<-. ->)

3.1 编码器

利用Bert的倒数第二层E_w初始化词嵌入,通过一个transformer层得到句子表示E_p,公式表示为:

                                                                                   E_p = Transformer(E_w){\color{Red} }

这里E_p ,E_w \in R^{(l\times h)};为了更好的捕获全文信息,讲CLS的向量加入到E_w中,得到向量E_b

                                                                                               E_b = E_w + E_a

3.2  关系计算层

利用非对称核内积方法计算E_pE_p之间的相似性:

                                                                                     S_i = F_i(E_b,E_p)

这里注意:F_i(X,Y)=XW_{hi}\cdot (YW_{ti})^T,其中,S_i \in R^{l\times l}W_{hi}, W_{ti} \in R^{h\times h}S_i即可以视为每个单词在关系i上的概率分数,即S_{imn}位置元素(m,n)表示两个位置的单词之间存在第i种关系的可能性。最后,使用Sigmoid函数将S_i归一化到(0,1)之间。

3.3 损失函数

P_i的一个问题是它描述的是单词之间的关系,而不是实体之间的关系,所以使用实体掩码矩阵来解决这个问题。对于每个实体对位置信息已经知道。假设文本中所以实体对集合:S:{(x,y)};假设(B_x,E_x)为实体x的其实位置,因此,构造了一个掩码矩阵M\in R^{l\times l}。数学表示如下:

类似的,我们可以构造label矩阵,Y_i\in R^{l\times l}

这里的实体掩码实际上就是将不是实体的单词盖住,保留实体的单词,例如下图所示:

上图所示,表示的第i个关系矩阵,粉色部分就是被实体掩码遮住的部分,白色的部分即是实体的位置。而红色代表的是横向和纵向实体有第i种关系。 这样以来就可以计算第i关系的损失函数:

                                                                                                 L_i = BCE_{avg}(P_{i}*M, Y_i)

注意这里:

 总的损失函数为:

                                                                                                                L_r = \sum L_i

个人拙见:

该篇论文在基于预训练模型BERT下,finetune了关系抽取任务,利用transformers的倒数第二层和最后一层的隐藏层信息,采用和以往一维特征不同的二维矩阵表示特征。并且设计了新的损失函数来优化该范式的参数。在SemEval 2010 task 8、NYT、以及WebNLG数据集上得到了SOTA结果。本人的自己的一些想法,该论文还是创新点十足的,但是论文需要有多少关系,就要有多少个关系矩阵,个人认为在时间上造成了一定的负担,在内存上也产生了一定的负担。是一种以空间和时间换效率的方法。但是利用矩阵信息来做分类,改善实体重叠的问题非常值得借鉴。与吉林大学今年新发表的ACL论文《A Novel Cascade Binary Tagging Framework for Relational Triple Extraction》改善实体重叠问题上,有一定的相似的想法,但是做法不同!!(仅个人观点,大佬勿喷!!)。


论文链接:Downstream Model Design of Pre-trained Language Model for Relation Extraction Task

github链接:REDN Model Code

这篇关于SemEval等数据集SOTA又刷新啦!! Downstream Model Design of Pre-trained language Model for Relation Extraction的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/334973

相关文章

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

Nacos日志与Raft的数据清理指南

《Nacos日志与Raft的数据清理指南》随着运行时间的增长,Nacos的日志文件(logs/)和Raft持久化数据(data/protocol/raft/)可能会占用大量磁盘空间,影响系统稳定性,本... 目录引言1. Nacos 日志文件(logs/ 目录)清理1.1 日志文件的作用1.2 是否可以删除

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp