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

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro