论文笔记 EMNLP 2018|Jointly Multiple Events Extraction via Attention-based Graph Information Aggregation_hlee-top的博客-程序员宅基地

技术标签: NLP  nlp  深度学习  论文  事件抽取  

1 简介

论文题目:Jointly Multiple Events Extraction via Attention-based Graph Information Aggregation
论文来源:EMNLP 2018
论文链接:https://arxiv.org/pdf/1809.09078.pdf
代码链接:https://github.com/lx865712528/EMNLP2018-JMEE

1.1 动机

  • 多个事件同时存在相同的句子中,抽取它们比抽取一个单独的事件更加困难,因为不同的事件可能互相有联系。在ACE2005数据集中,此类数据占26.2%(1042/3978)
  • 以前的序列模型对于捕捉长的依赖关系是不高效的。

1.2 创新

  • 提出了一个事件抽取框架JMEE,基于句法结构,以加强信息的流动和改善多个事件在同一个句子中的情况。使用GCN学习句法上下文表示,然后使用 self-attention mechanism联合抽取触发词和论元。
  • 使用 self-attention mechanism聚集多个相互联系的事件之间的信息,并根据实验证明在事件抽取中是有用。

2 背景知识

  • 使用依存分析等语法资源表示的shortcut arcs可以建立不同事件之间的联系,同时和序列相比,shortcut arcs可以减少两个事件触发词之间的转移过程。如下图,killed和barrage正常需要6步转移,但是在依存分析的shortcut arcs中仅仅需要三步。
    在这里插入图片描述
  • 论文提出的模型使用联合抽取,以避免误差传播。
  • 同时,该论文在句子级别中抽取事件。原因有三个:1. 对于ace数据集中的33个事件类型,在文档级别的共现分布与句子级别类似(如下图)。2. 在句子级别中,有很多现成的工具,可以提供语言资源,如依存分析、语义角色标注、AMR parsing graphs等。3. 相比在不同句子中的事件,在相同句子中的事件有更加明确的关系。
    在这里插入图片描述

3 方法

如下图,整个框架包括4个部分,分别是word representation、Syntactic Graph Convolution Network、Self-Attention Trigger Classification、Argument Classification。
在这里插入图片描述

3.1 word representation

每个token由下面4种向量拼接。

  • 词编码向量,由Glove提供。
  • 词性编码,随机生成。
  • 位置编码,随机生成。
  • 实体类型编码,句子中的实体使用BIO标注,若一个token具有多个实体类型,则其值取各个实体类型的和。

3.2 Syntactic Graph Convolution Network

该模块的输入为句子的句法解析树。在句法解析树上添加反向边和自环,第k层结点v的句法图卷积公式如下所示,其中K(u,v)为(u,v)边的类型,N(v)是v结点的邻居结点。
在这里插入图片描述
句法解析树由Stanford Parser工具产生,大约产生50种不同的关系,增加一层GCN的参数,和当前的数据规模不匹配,为了减少参数,使用下面公式来定义关系,共有三种类型。
在这里插入图片描述
不同类型的边在下游任务中具有不同的信息,同时生成的句法解析树也是有噪声的,因此增加一个门控机制,控制不同边的权重。
在这里插入图片描述
增加门控机制后,句法GCN的计算公式为
在这里插入图片描述
同时,由于k层的GCN聚集信息为K步,有时两个触发词之间的距离小于K,为了防止信息过度传播,加入highway units。公式如下
在这里插入图片描述
同时由于GCN的层数会限制捕捉附近信息的能力,而使用序列结构可以帮助附近信息的流通,而不增加GCN的层数。因此使用LSTM和GCN相结合,先将词向量经过LSTM处理后,在送入第一层GCN。公式如下:
在这里插入图片描述

3.3 Self-Attention Trigger Classification

对于聚合得到的信息,传统的事件抽取通常使用max-pooling或者它的变体。但是,在本模型中,max-pooling趋于产生相识的结果。同时,预测一个token的触发词标签,通常也要考虑其他的触发词候选者。为了联合相同句子的不同事件,使用self-attention机制聚合信息。
位置为i的self-attention分数由下面公式计算,norm为正则化操作
在这里插入图片描述
在这里插入图片描述
最后,将向量Ci接入全连接层和softmax来预测触发词的类别。公式如下:
在这里插入图片描述

3.4 Argument Classification

使用候选触发词向量Ti和实体向量Ej,经过全连接层来预测论元的类别。其中yai,j是第j个实体在第i个触发词的事件中扮演的角色。
在这里插入图片描述
对于错误的触发词,它的所有论元角色都是OTHER。

3.5 Biased Loss Function

由于ACE 2005的数据稀疏问题,顶下联合的损失函数如下。N是句子的数量,np, tp, ep分别是第p个句子中的token的数量、抽取得到的候补触发词和实体。I(yti)是标志函数,如果yti不是O,它将输出一个固定的大于1的数α,否则为1。β是一个超参数类似α。
在这里插入图片描述

4 实验

数据集为ACE 2005 ,使用Stanford CoreNLP处理数据,包括分词,分句,词性标注和生成依存分析树。实验结果如下图
在这里插入图片描述
同时将数据集分为1/1(一个句子中只有一个触发词或者一个论元只有一个角色)和1/N(除1/1的其余数据),以验证模型在多个事件中的效果。
在这里插入图片描述
self-attention机制的可视化效果,如下图。
在这里插入图片描述

5 总结

  • 引入了句法解析树的信息,使用GCN编码,提高了在多事件情况下的效果。
  • 通过偏差损失函数,联合抽取触发词和论元。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/o11oo11o/article/details/119618242

智能推荐

黑马程序员——java之IO体系中File类、编码问题、对象序列化_file 编码-程序员宅基地

------------android培训、java培训、期待与您交流! -------------知识点总结1、File类的由来、三种常见的构造方法。文件也有自己对应的属性信息,比如所在目录、文件类型、大小、建立修改日期。Java通过面向对象的方法对其进行封装,方便对其进行操作。File(String pathname)File(File pare_file 编码

【FAQ】如何部署全局git commit-msg hook,不用每个仓克隆了再去一次次拷贝?-程序员宅基地

问题:git和gerrit对接,git commit的时候都提示“missing Change-Id in commit message footer”。知道是因为change-id搞的鬼,也知道从gerrit上或者其他地方拷个commit-msg脚本儿,放到.git/hooks目录下就完事儿了。但是,每次重新克隆时,就有得再来一遍拷贝动作,很低效。注:单仓拷贝,不用repo。

axios访问服务器响应头两种方法_暴露请求头-程序员宅基地

在token匹对不通过的时候在response响应头中加了一个字段flaghttpServletResponse.addHeader("FLAG", "-1");这样前台是访问不到flag的解决思路:暴露请求头中的某些字段方法一:cros中统一暴露public class CorsConfig { /** 允许任何域名使用 允许任何头 允许任何方法(post、get等) */ private CorsConfiguration buildC_暴露请求头

DVB开发之升级介绍-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ..._dvb nit升级

setState_setstate()-程序员宅基地

setState()方法通过一个队列机制实现state更新,当执行setState()的时候,会将需要更新的state合并之后放入状态队列,而不会立即更新this.state(可以和浏览器的事件队列类比)。如果我们不使用setState而是使用this.state.key来修改,将不会触发组件的re-render。如果将this.state赋值给一个新的对象引用,那么其他不在对象上的state将不会被放入状态队列中,当下次调用setState()并对状态队列进行合并时,直接造成了state丢失。原文链接:_setstate()

dubbo的RPC调用原理_dubbo request id作用-程序员宅基地

大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。而一旦踏入公司尤其是大型互联网公司就会发现,公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队负责。这时就会遇到两个问题:1)要搭建一个新服务,免不了需要依赖他人的服务,而现在他人的服务都在远端,怎么调用?2)其它团队要使用我们..._dubbo request id作用

随便推点

【秋招之操作系统及计算机网络】-程序员宅基地

2023秋招八股之操作系统、计算机网络、数据库部分。

原生JS实现轮播图_原生js写出一个轮播图-程序员宅基地

原生Js实现轮播图文章目录原生Js实现轮播图前言一、轮播图是什么?二、Html+Css1.html结构2.css三、 Js1.做出鼠标移动到轮播图区域中箭头显示的效果2.动态生成圆圈3.点击箭头让图片动起来4.实现点击圆圈的时候图片变换5.解决点击箭头时,图片与圆圈不匹配的问题6.自动播放功能end:animate动画函数总结前言最近决心重新学习一次js,打牢基础,先从最常见的轮播图开始。一、轮播图是什么?顾名思义,就是轮流播放的图片,多应用在电商平台的海报,当我们进入一个网页中,轮播图一般是是最_原生js写出一个轮播图

Jupyter Notebook 快捷键使用指南-程序员宅基地

Jupyter Notebook 快捷键使用指南May 4, 2017 |  Python |  python jupyterJupyter Notebook 是一个交互式笔记本程序, 其有丰富的快捷键来便捷的完成工作。Notebook 有两种键盘输入模式。即命令模式和编辑模式,这与 Vim 有些类似。在编辑模式下,可以往单元中键入代码或文本,此时单元格被绿色的框线包围,且命令模式下的快捷键...

第十二周 项目一:阅读程序(2)_linan_141的博客-程序员宅基地

问题及代码: 预计运行结果:实际运行结果:知识点总结:学习心得:

C语言中程序的基本模块是,c语言程序中的基本功能模块为什么?-程序员宅基地

c语言程序中的基本功能模块为“函数”。一个C语言程序可以由一个主函数和若干个函数构成;一个大的应用程序一般应该分为多个程序模块,每一个模块用来实现一个功能,而模块的功能是由函数完成的。教程推荐:《c语言教程视频》c语言程序中的基本功能模块为“函数”。一个 C语言程序可以由一个主函数和若干个函数构成。一个大的应用程序一般应该分为多个程序模块,每一个模块用来实现一个功能。实现这些模块功能的可以叫做子程..._c程序的基本功能块是____ ,它在程序中可以有一个或多个,但只能有一个

python将图片转换为mat格式_python 读取图片转为mat-程序员宅基地

import cv2import numpy as npimport h5pyimport mathimport globimport osimport scipy.io as iodef save_to_mat(img,output_name): new_data_path = os.path.join(os.getcwd(),"matType") if not..._python 读取图片转为mat