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

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解