A Novel Cascade Binary Tagging Framework for Relational Triple Extraction(论文研读与复现)
A Novel Cascade Binary Tagging Framework for Relational Triple Extraction
Zhepei Wei,Jianlin Su, Yue Wang, Yuan Tian, Yi Chang
(ACL 2020)
研究背景:
以往的方法大多将关系建模为实体対上的一个离散的标签,这也是一种非常符合直觉的做法:首先通过命名实体识别(Named Entity Recognition, NER)确定出句子中所有的实体,然后学习一个关系分类器在所有的实体对上做RC,最终得到我们所需的关系三元组。然而这种Formulation在多个关系三元组有重叠的情况下会使得关系分类成为一个极其困难的不平衡多分类问题,导致最终抽取出的关系三元组不够全面和准确。
本文的解决思路:
在本文中我们提出了一个新的Formulation,以一种新的视角来重新审视经典的关系三元组抽取问题,
并在此基础上实现了一个不受重叠三元组问题困扰的CasRel标注框架(Cascade Binary Tagging Framework)来解决RTE任务。
CasRel框架最核心思想:把关系(Relation)建模为将头实体(Subject)映射到尾实体(Object)的函数,而不是将其视为实体对上的标签。
具体来说,我们不学习关系分类器:
而是学习关系特定的尾实体标注器:
每个标注器都将在给定关系和头实体的条件下识别出所有可能的尾实体。
在这种框架下,关系三元组抽取问题就被分解为如下的两步过程:首先,我们确定出句子中所有可能的头实体; 然后针对每个头实体,我们使用关系特定的标注器来同时识别出所有可能的关系和对应的尾实体。
CASREL框架:

CASREL模型由BERT编码层模块、主体标记模块、特定关系下客体的标记模块三个模块构成。
新的目标函数:训练目标,就是尽可能使公式(1)的值最大。
D:训练的句子集合
_j:可能的三元组
s∈ _j:表示在三元组Tj中的主体;
_j | s :表示主体是s的三元组Tj;
(r,o)∈ _j | s:表示主体是s的三元组_j中的(r,o)对;
R:表示所有可能的关系;
R\ _j | s: 表示除了主体是s的三元组外的所有关系;
o∅:表示一个空的客体;
这样表示的优点:
1、直接从三元组的级别进行优化。
2、不做任何重叠实体的假设,通过精心设计来解决重贴三元组的问题。
3、公式(3)提供了一种新的思路,就是使用s和r的映射函数来预测o是什么,而不是传统的s和o来进行分类。
BERT encoder:

S:输入词的独热编码
_:表示embedding表
_p:表示句子中p位置的位置向量
Trans:表示一个transformer的encoder层
Cascade Decoder:
在经过BERT encoder之后,需要decoder提取三元组。
通过两个级联步获取三元组:
1、先标记处句子中所有的主体
2、对于每个标记的主体,检查所有关系是否存在与主体相关的客体。
因此,级联解码层包含了两个模块:
1、主体标记模块
2、给定一组特定于关系的客体标记模块
Cascade Decoder——Subject Tagger:

_^(_):表示第i个token是subject起始位置的概率
_^(_):表示第i个token是subject的结束位置的概率
σ 为函数

这一步优化的目标是给出一个句子表示x:
I{z}=1 if z为真,否则I{z}=0;
_^:表示第i个token的t标记的值;
t只有两种情况:start_s和end_s;
这个公式的意思就是说优化的目标是:如果实际_^为真,
那么说明我们应使得_^的概率尽可能大,否则,使得_^尽可能小。
对于句子中多个subject的检测,采用最近的start-end对来进行主体检测。
Cascade Decoder —— Relation-specific Object Taggers:

_^:表示subject tagger模块下的第k个主体的编码表示向量。
_^ :由多个token组成的情况:如果subject是多个token构成的,那么取它们的平均值作为新的_^

优化目标:

I{z}=1 if z为真,否则I{z}=0;
_^:表示第i个token的t标记的值;
t只有两种情况:start_s和end_s;
如果当前的映射函数r下不存在object,
那么对于所有的_^都设置为0。

整体的目标函数:

对公式(3)计算log可知,目标函数J(Θ)为:

实验结果:

CASREL框架在公开数据集上效果提升很大。
论文复现:
作者在GitHub开源了模型的keras源码。
本人用pytorch重新复现了该模型,在NYT数据集上10个epoch之后F1就达到了82%,效果很不错。

A Novel Cascade Binary Tagging Framework for Relational Triple Extraction(论文研读与复现)的更多相关文章
- Adding Cues (线索、提示) to Binary Feature Descriptors for Visual Place Recognition 论文阅读
对于有想法改良描述子却无从下手的同学还是比较有帮助的. Abstract 在这个文章中我们提出了一种嵌入continues and selector(感觉就是analogue和digital的区别)线 ...
- 《Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases》论文总结
Aurora总结 说明:本文为论文 <Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relation ...
- 人工智能论文解读精选 | PRGC:一种新的联合关系抽取模型
NLP论文解读 原创•作者 | 小欣 论文标题:PRGC: Potential Relation and Global Correspondence Based Joint Relational ...
- 目标检测 | 经典算法 Cascade R-CNN: Delving into High Quality Object Detection
作者从detector的overfitting at training/quality mismatch at inference问题入手,提出了基于multi-stage的Cascade R-CNN ...
- NeurIPS 2019 Spotlight | Cascade RPN,结构的艺术带来极致的提升
论文提出Cascade RPN算法来提升RPN模块的性能,该算法重点解决了RPN在迭代时anchor和feature不对齐的问题,论文创新点足,效果也很惊艳,相对于原始的RPN提升13.4%AR 论文 ...
- 使用valgrind检查内存
Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,是公认的最接近Purify的产品,它包含一个内核——一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务——调试 ...
- EF级联删除
引言 在主表中指定Key,子表中指定Required后,并不会在数据库中生成级联删除的外键.那怎么才能使EF在数据中生成级联删除的外键? SQLServer数据库中级联删除功能配置界面: 上图 ...
- iOS安全相关学习资料
https://github.com/zhengmin1989/iOS_ICE_AND_FIRE (冰与火代码) http://weibo.com/zhengmin1989?is_hot=1 (蒸米 ...
- linux下内存泄露检测工具Valgrind介绍
目前在linux开发一个分析实时路况的应用程序,在联合测试中发现程序存在内存泄露的情况. 这下着急了,马上就要上线了,还好发现了一款Valgrind工具,完美的解决了内存泄露的问题. 推荐大家可以使用 ...
- [转贴] C++内存管理检测工具 Valgrind
用C/C++开发其中最令人头疼的一个问题就是内存管理,有时候为了查找一个内存泄漏或者一个内存访问越界,需要要花上好几天时间,如果有一款工具能够帮助我们做这件事情就好了,valgrind正好就是这样的一 ...
随机推荐
- OpenLDAP 自助修改密码系统
一.创建docker-compose文件 root@xx:~# mkdir self-service-password root@xx:~# cd self-service-password root ...
- Docker部署cas
一.首先安装cas镜像 1.拉取cas docker镜像 docker pull apereo/cas 2.启动容器: docker run --name cas -p 8443:8443 -p 8 ...
- rnacos实现raft和类distro协议,支持集群部署
1. rnacos 简介 rnacos是一个用rust实现的nacos服务. rnacos是一个轻量. 快速.稳定.高性能的服务:包含注册中心.配置中心.web管理控制台功能,支持单机.集群部署. r ...
- u-boot启动流程
U-Boot(Universal Bootloader)是一个通用的开源引导加载程序,通常用于嵌入式系统中,负责引导操作系统或加载 Linux 内核等任务.U-Boot的启动流程可以概括为以下几个关键 ...
- C静态库的创建与使用--为什么要引入静态库?
C源程序需要经过预处理.编译.汇编几个阶段,得到各自源文件对应的可重定位目标文件,可重定位目标文件就是各个源文件的二进制机器代码,一般是.o格式.比如:util1.c.util2.c及main.c三个 ...
- virsh domxxx命令
1. 摘要信息类 1.1 dominfo 获取配置等摘要信息 [root@hyperhost ~]# virsh dominfo --domain centos7.6 Id: 1 Name: cent ...
- YbtOJ 「图论」第3章 最短路径
例题1.单源最短路径 dij 板子.(w36557658 原版 dij 代码! code #include<cmath> #include<queue> #include< ...
- CF671D Roads in Yusland 题解
题目链接 题目要求我们求出选出若干条路径并最小化花费,如果这是在链上,我们可以考虑直接枚举每条路径的右端点 dp,那树呢?把路径剖分整个覆盖的集合就不一定连续了,没法 dp,况且题目里给了很强的条件: ...
- HTTP工具类文件request.js的完善和优化
request.js 在现代前端项目中通常被称为一个HTTP请求工具或HTTP工具类文件.它的主要作用是对项目中用到的HTTP请求进行统一的配置和处理. 应用示例: // 查询用户列表 export ...
- python实现汉诺塔的图解递归算法
写在前面 工作闲来无事,看了python,写了一个汉诺塔. 还是蛮喜欢python这门语言的,很简洁. 正文 一.起源: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候 ...