笔者之前写过一些论文的讲解文章,都是按照论文的基本顺序:摘要、介绍、相关工作、方法、实验和总结的顺序。这星期在实验室论文分享上,分享了《Extracting Multiple-Relations in One-Pass with Pre-Trained Transformers》这篇文章,突然有了想法,如果一味的按照论文的顺序写一些类似于“翻译”的博客,也没有什么价值。不如按照自己的思路,能把别人讲懂了,比什么都强。这篇博客,我按照我自己理解的逻辑,来给大家讲解这篇文章,以后的文章也都按照这样的思路,希望对大家有所帮助,对自己也是一个学习记录和加深理解的过程!

论文链接:Extracting Multiple-Relations in One-Pass with Pre-Trained Transformers


1.背景

这篇论文是由腾讯和IBM实验室合作发表在2019年ACL会议的一篇文章,名为:《利用预训练Transformers做一次性编码抽取出多个关系》(《Extracting Multiple-Relations in One-Pass with Pre-Trained Transformers》) ,属于关系抽取类的文章。

关系抽取简单来说就是从一句话中抽取出三元组(实体1,关系,实体2),举个例子:

东北大学坐落于沈阳市。---抽取出---->(东北大学,位于,沈阳市)    ps:这里类似于‘位于’这样的关系是会给出的

那么,抽取出这样的三元组会有什么作用呢?例如,我们可以根据这样的三元组,构建出基于三元组的知识图谱,如下图所示:

基于这样的知识图谱我们可以有很多的下游应用,比如说:搜索引擎、问答系统等等。

2.论文解决的问题

以上是对关系抽取概念的简单介绍,既然,该论文属于关系抽取领域,那么我们就来看一看它是从关系抽取的那个方向和问题出发的。首先,我们有如图所示的一张关系表:

关系表
位于
校长
所属专辑

........

有这样的一句话:“赵继 担任沈阳市 东北大学 校长”。这就句话中红色字体标出的(赵继、沈阳市、东北大学)三个实体已经给出,并且已知赵继和东北大学有某种关系,东北大学和沈阳市有某种关系,论文中要做的就是说在已知一句话和东北大学、赵继有关系推断出是校长这个关系,同理,已知东北大学和沈阳市,推断出位于这个关系。简单来说是一个关系分类问题;这个任务的特点就是说一句话中有多对已知的实体,并且有多个未知的推断出的关系。

2.1以往解决方法

对于这种一句话有多对已知实体,并且需要推出对应多个未知关系的问题,以往的解决方法是:将一句话对应的多个关系,强拆分为一句话只对应一个关系。如下图所示:

如上图所示,在“赵继担任沈阳市东北大学校长”这句话中,‘(赵继、东北大学、校长)’为一个样例,‘(东北大学、沈阳市、位于)’为一个样例。分别对两个样例进行编码然后进行关系分类。这种做法被叫做SRE(Sample Relation Extract)范式,即简单关系抽取范式。

那么这种简单的关系抽取范式有什么缺点呢?首先,设想一句话中如果有10中或者100种这样的关系,那么我们就要将“赵继担任沈阳市东北大学校长”这句话存储10次或者100次,这就造成了第一个问题即:存储空间的浪费;其次,对“赵继担任沈阳市东北大学校长”这句话要编码和分类很多遍,这样又造成了另一个问题即:计算资源的浪费

2.2理想范式

那么,我们对于以上问题的理想范式是什么样的?怎样能解决存储资源和计算资源的呢?首先该范式的存储结构应该是下图所示样子:

在上图所示的存储结构中,特点是类似于“赵继担任沈阳市东北大学校长”这种文本只在训练集中存储一次,并且存储结构包含了一句话中的所有实体对及其对应的关系。然后对改存储结构进行编码,分类出所有的范式。这种理想的范式又叫做MRE(Multiple Relation Extract)范式 ,即多关系抽取范式。

所以,综上所述,该论文要解决的问题是:如何在这种MRE范式存储的结构上,用预训练transformers通过一次性编码提取出多关系问题。

3.方法

首先,论文提出的方法整体架构如下图所示:

首先模型的输入包括:一个文本(.....in south suburbs of .....),有关系实体对的起始位置(south suburbs(3,4),bagh #dad(6,7));将这样的数据存储结构送入到类似于bert的预训练模型当中,得到每一个单词的隐藏层向量,然后每个实体进行pool(池化),池化后将有关系的实体对送到线性层进行分类,得到了关系的结果,如图中所示包含每个关系和每个实体对;

论文中提出了两点创新的地方,第一个就是图中红色框出的Structure Prediction(预测结构),另一个就是修改了bert的self-attention层,即Entity-aware Self-attention(加入实体意识的自注意力层)。接下来,我们讨论一下,这两个部分是如何实现的。

3.1Structure Prediction

预测结构比较简单,主要包括两个部分:第一是一个pool(池化)操作,第二个是线性层,如下图所示:

每一个实体不可能全是一个字,有的实体是两个字或两个字以上,那么就要经过一个平均池化操作。例如图中实体“医生”,在经过BERT后,得到了两个隐藏层向量,然后对这两个隐藏层进行加和平均,得到了实体e_i的输出向量o_i,同理,会得到实体e_j的输出向量o_j,将o_io_j两个向量进行拼接然后送入线性层中,然后做softmax操作,得到各关系的概率值,数学公式如下:

{\color{Orange} }P(r_{ij}|x,e_i,e_j) = softmax(W^L[o_i:o_j]+b)

3.2 Entity-aware Self-attention

这里的实现实在Self-attetion的基础上进行修改得到的机制,那么既然是在Self-attention上的修改,我们就举一个例子来看,修改前和修改后的操作有什么不同之处:

首先有这样一句话:in south suburbs of bagh #dad and Iraqillery artillery fired

计算单词south对单词in的贡献Self-attention是如何做的呢,计算过程如下图所示:

首先,根据单词south的隐藏层向量h_{south} 与一个W^Q矩阵做点乘得到Q_{south}矩阵,一样的办法,对单词in的隐藏层向量h_{in}分别进行与W^K,W^V矩阵的点乘,得到K_in,V_in矩阵,然后进行最终的self-attention计算。

那么Entity-aware Self-attention是如何操作的呢?与Self-attention的对比如下图所示:

与Self-attention的对比,首先计算Q_{south}矩阵是不变的,在计算K_in,V_in矩阵是,多出了红色框圈出的部分a_{south\_in}^K,a_{south\_in}^V,以后的计算也是相同的,a_{south\_in}^K,a_{south\_in}^V就是论文中所说的实体意识。接下来,我们就看看a_{south\_in}^K,a_{south\_in}^V是如何计算出来的:

我们以a_{south\_in}^V为例,首先论文定义了新的position embedding:\{w_{-k}^V,.......,w_{0}^V,.......w_{k}^V\},这里k是一个超参数,代表两个单词之间的最大距离。那么问题来了,两个单词的距离应该怎么计算呢,文章给出了单词之间距离的计算函数定义:

d(i,j)=min(max(-k,(i-j)),k)

这个函数比较简单,就是取最大然后在取最小,目的就是为了将两个单词的值域控制在(-k,k)之间,这样可以到position embedding去找到单词距离对应的位置向量。那么位置向量的作用是什么呢?它当然就是为了计算a_{south\_in}^V而服务的。下面这个具体的操作流程,会更形象的说明这个计算过程,如下图所示:

首先判断单词south是否属于实体,如果属于的话进行下面的赋值操作,如果单词in是实体的话,那么进行下面的赋值操作。这两个赋值操作的唯一不同之处就在于颠倒了两个单词的位置下标。如果两个单词都不属于实体的话,就将a_{south\_in}^V赋值成0向量。在对每个单词都做完这样的操作后,我们会得到一个正方形的a^V矩阵,如下图所示:

我们知道Self-attention所计算出的矩阵表示每个单词对该单词的表示意义的贡献程度。而我们上图中计算出来的矩阵的意义我认为是表示了每个单词距离每个实体的距离信息,将这一信息加入到了Self-attention机制当中,在训练中得到了更好的结果。

4.实验对比

很久前文分析,我们知道论文要解决的问题是要解决存储资源浪费问题和计算资源浪费问题。这里主要介绍两个较为重要的实验:

上图的实验时基于ACE2005数据集, 这里的(bc,cts,wl)是各个领域的缩写,例如wl是weblog(微博)的缩写;首先,黑色字体粗体部分标出的所示,论文中的方法在各个领域的F1值都达到了最好的效果,并且在Multi-Relation和Single-Relation两个任务来看,模型在两个任务上没有太大的变化,并且都达到了最好的效果。而其他基于bert的模型,在Single-Relation任务上的表现都要比在Multi-Relation的表现要好。同时在时间方面:

如上图所示,在时间方面,论文的模型训练时间也较之前的模型大幅度减少。这样就解决的上文中提到的资源存储问题和计算资源问题。

另外的实验是将论文中预测结构的Linear层,分别替换为MLP,Biaff层,这两个结构都是要比Linear要复杂的结构:

我们可以看到, 结果并没有提升,也就是说,如果预训练模型足够强大的情况下,上面没有必要加更加复杂的结构,这样会增加更多的参数,提升过拟合的风险。

5.总结

对该论文总结如下:

  1. 基于预训练模型BERT,提出了一次编码提取出多个关系的模型;

  2. 模型中加入了预测结构( structured prediction)和实体意识的自注意力机制( entity-aware );

  3. 在多个数据集达到最佳效果,并且节省了存储空间和计算资源;

Extracting Multiple-Relations in One-Pass with Pre-Trained Transformers [论文研读]相关推荐

  1. G1D9-APT论文(TTPDrrillRPUKGCS)Pre准备安全论文lab1

    开心!!今天白天没有课类,现在0755,开始学习啦!!! 上午打算看一下APT论文,准备一下晚上的pre~ 一.APT (一)TTPDrill(预计30min) 1.先把昨天的问题copy过来 1.本 ...

  2. AI基础架构Pass Infrastructure

    AI基础架构Pass Infrastructure • Operation Pass o OperationPass : Op-Specific o OperationPass : Op-Agnost ...

  3. [ACL2017]Going out on a limb:Joint Extraction of Entity Mentions and Relations without Depende...

    本文声称是第一个神经网络联合模型, 同时抽取实体,关系以及关系类型.在解析句子中每一个词时,同时输出实体标签和关系标签. 另外在特征部分只使用了word_embedding, 没有用POS和depen ...

  4. Adapting Meta Knowledge Graph Information for Multi-Hop Reasoning over Few-Shot Relations

    Adapting Meta Knowledge Graph Information for Multi-Hop Reasoning            over Few-Shot Relations ...

  5. 2020年 ICLR 国际会议最终接受论文(poster-paper)列表(三)

    来源:AINLPer微信公众号(点击了解一下吧) 编辑: ShuYini 校稿: ShuYini 时间: 2020-02-21     2020年的ICLR会议将于今年的4月26日-4月30日在Mil ...

  6. 【论文笔记-NER综述】A Survey on Deep Learning for Named Entity Recognition

    本笔记理出来综述中的点,并将大体的论文都列出,方便日后调研使用查找,详细可以看论文. 神经网络的解释: The forward pass com- putes a weighted sum of th ...

  7. Gradient Boosting, Decision Trees and XGBoost with CUDA ——GPU加速5-6倍

    xgboost的可以参考:https://xgboost.readthedocs.io/en/latest/gpu/index.html 整体看加速5-6倍的样子. Gradient Boosting ...

  8. Python之pip:Python语言中的pip的简介、安装、使用方法之详细攻略

    Python之pip:Python语言中的pip的简介.入门.使用方法之详细攻略 目录 pip的简介 pip的安装 1.Linux之Ubuntu系统安装pip3 pip的使用方法 1.pip命令集合 ...

  9. 【2021最新综述】Deep Neural Approaches to Relation Triplets Extraction:A Comprehensive Survey

    [2021最新综述]Deep Neural Approaches to Relation Triplets Extraction:A Comprehensive Survey 1 Introducti ...

最新文章

  1. PHP通过DOM操作XML
  2. 波音公司计划利用 3D 打印技术制作模块化卫星
  3. 畅享云游戏,AWS云峰会邀你零距离体验强化学习!
  4. EAFP vs LBYL
  5. HDU - 1251 统计难题(字典树)
  6. jpa语法错误_JPA陷阱/错误
  7. Android官方开发文档Training系列课程中文版:OpenGL绘图之环境配置
  8. JBookManager v1.00.2008314 (编辑管理您的Jar电子书)
  9. 云端之战:Google Cloud 的多云战略和甲骨文的数据库云
  10. 两个子线程不冲突_多线程操作可见性
  11. SAP License:定义在制品和结果分析过账OKG8
  12. ThinkPHP5中的助手函数
  13. C++ cmake 命令用法
  14. 计算机模拟泊松分布,R语言进行数值模拟:模拟泊松回归模型的数据
  15. TKG 1.5.1 的 BYOH 集群部署
  16. 机票售票系统/飞机票购票系统的设计与实现
  17. qt学习(七)Sockt-TCP-UDP-BOARDCAST-MULI-CAST
  18. opencv学习之(三)-LBP算法的研究及其实现
  19. 求出 2 到 n 之间 (含 n)的所有素数。
  20. 简述计算机在医院药学工作中的应用,[生物医药论文精品a]计算机在药学工作中的应用...

热门文章

  1. Android实现一键开启自由窗口、分屏、画中画模式——分屏模式
  2. FileZilla文件下载的目录
  3. 2022年Gartner新兴技术、人工智能技术成熟度曲线概述
  4. MFC 时钟 计算器 日期天数计算
  5. java espresso车架_Espresso 学习
  6. 人工智能对我们的影响(随便谈谈)
  7. springboot 第十九节 starter and muti_datasource 多数据源
  8. 基于生物特征信息的身份识别(指纹、面部识别的方式和原理)的使用问题的思考
  9. eclipse 编译Android,如何用eclipse编写android程序
  10. QT实现图片缩放的同时标记指定坐标