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(论文研读与复现)的更多相关文章

  1. Adding Cues (线索、提示) to Binary Feature Descriptors for Visual Place Recognition 论文阅读

    对于有想法改良描述子却无从下手的同学还是比较有帮助的. Abstract 在这个文章中我们提出了一种嵌入continues and selector(感觉就是analogue和digital的区别)线 ...

  2. 《Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases》论文总结

    Aurora总结 说明:本文为论文 <Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relation ...

  3. 人工智能论文解读精选 | PRGC:一种新的联合关系抽取模型

    NLP论文解读 原创•作者 | 小欣   论文标题:PRGC: Potential Relation and Global Correspondence Based Joint Relational ...

  4. 目标检测 | 经典算法 Cascade R-CNN: Delving into High Quality Object Detection

    作者从detector的overfitting at training/quality mismatch at inference问题入手,提出了基于multi-stage的Cascade R-CNN ...

  5. NeurIPS 2019 Spotlight | Cascade RPN,结构的艺术带来极致的提升

    论文提出Cascade RPN算法来提升RPN模块的性能,该算法重点解决了RPN在迭代时anchor和feature不对齐的问题,论文创新点足,效果也很惊艳,相对于原始的RPN提升13.4%AR 论文 ...

  6. 使用valgrind检查内存

    Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,是公认的最接近Purify的产品,它包含一个内核——一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务——调试 ...

  7. EF级联删除

    引言     在主表中指定Key,子表中指定Required后,并不会在数据库中生成级联删除的外键.那怎么才能使EF在数据中生成级联删除的外键? SQLServer数据库中级联删除功能配置界面: 上图 ...

  8. iOS安全相关学习资料

    https://github.com/zhengmin1989/iOS_ICE_AND_FIRE  (冰与火代码) http://weibo.com/zhengmin1989?is_hot=1 (蒸米 ...

  9. linux下内存泄露检测工具Valgrind介绍

    目前在linux开发一个分析实时路况的应用程序,在联合测试中发现程序存在内存泄露的情况. 这下着急了,马上就要上线了,还好发现了一款Valgrind工具,完美的解决了内存泄露的问题. 推荐大家可以使用 ...

  10. [转贴] C++内存管理检测工具 Valgrind

    用C/C++开发其中最令人头疼的一个问题就是内存管理,有时候为了查找一个内存泄漏或者一个内存访问越界,需要要花上好几天时间,如果有一款工具能够帮助我们做这件事情就好了,valgrind正好就是这样的一 ...

随机推荐

  1. 《SQL与数据库基础》11. 索引

    目录 索引 概述 结构 B-Tree B+Tree Hash 思考 分类 语法 SQL性能分析 SQL执行频率 慢查询日志 profile详情 explain执行计划 索引失效情况 范围查询 索引列运 ...

  2. jQuery默认选中下拉框的某个值

    $("#quaterSelect").val("0");//id为quaterSelect的下拉框默认选中value是0的option选项

  3. mpi转以太网连接200plc以太网监控同时与步科触摸屏通信

    西门子PLC200 226PLC转以太网通过PPI-ETH-XD1.0集中采集不占用编程口同时与步科触摸屏通信 现有设备及联网要求客户车间内有6台纺机设备,控制系统采用西门子PLC,型号为CPU226 ...

  4. Linux系列教程——Linux发展介绍、Linux系统安装、查看Linux内核版本和系统版本、Centos7安装jdk1.8

    文章目录 1 Linux发展介绍 零 什么是Linux 一 Linux前身 二 Linux诞生 三 开源文化 四 Linux系统特点 五 Linux分支 2 Linux系统安装 Linux虚拟机安装 ...

  5. Python - 读取CSV文件发现有重复数据,如何清洗以及保存为CSV文件,这里有完整的过程!!!! 片尾有彩蛋

    语言:Python 功能: 1.清洗CSV文件中重复数据. 2.保存为CSV文件 大体流程: 1.首先观察CSV文件中的数据布局格式如何? 2.通过csv包读取数据.并根据规则使用continue,来 ...

  6. Python+SVM

    # !/usr/bin/env python # encoding: utf-8 # SVM算法 支持向量机 from sklearn import svm import numpy as np fr ...

  7. C#学习笔记--复杂数据类型、函数和结构体

    C#基础 复杂数据类型 特点:多个数据变量地一个集合体,可以自己命名 种类:枚举.数组和结构体 枚举:整型常量的集合 数组:任意变量类型的顺序存储的数据集合 结构体:任意变量类型的数据组合成的数据块 ...

  8. C#桶排序算法

    前言 桶排序是一种线性时间复杂度的排序算法,它将待排序的数据分到有限数量的桶中,每个桶再进行单独排序,最后将所有桶中的数据按顺序依次取出,即可得到排序结果. 实现原理 首先根据待排序数据,确定需要的桶 ...

  9. js数据结构--散列表

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  10. 再见,Spring!你好,Solon!

    Solon 是什么框架? Java 生态级应用开发框架.从零开始构建,有自己的标准规范与开放生态(历时五年,具备全球第二级别的生态规模).与其他框架相比,解决了两个重要的痛点:启动慢,费内存. 解决痛 ...