NLP关系抽取和事件抽取

news2024/11/16 5:52:05

关系抽取

在这里插入图片描述

关系抽取又称实体关系抽取,以实体识别为前提,在实体识别之后,判断给定文本中的任意两个实体是否构成事先定义好的关系,是文本内容理解的重要支撑技术之一,对于问答系统,智能客服和语义搜索等应用都十分重要。

在这里插入图片描述

当前深度学习方法在关系抽取任务上取得了很好的效果,这是由于深度学习可以自动抽取文本特征。深度学习做关系抽取的方法有很多,诸如基于卷积神经网络的关系抽取和基于预训练模型的关系抽取等。其中基于卷积神经网络的方法是最典型的方法之一。

基于卷积神经网络的关系抽取算法

卷积神经网络应用到关系抽取领域中的一个核心算法是PCNN算法。首先通过单词的词嵌入和位置嵌入把句子转换成向量表示,然后通过卷积神经网络的卷积操作和池化操作提取句子向量的特征向量,最终进行关系预测。

PCNN算法由输入模块、卷积模块、池化模块和分类模块四个模块组成,模型结构如下:
在这里插入图片描述
词向量:计算机无法识别人类文字,所以我们利用word2vec等词向量构建工具将句子中的每个词语转化成低维实值向量,使得计算机可以理解识别每个单词。

位置向量:位置向量代表句子中每个词语与实体对的相对位置,单词was到实体Bob和Canada的相对距离分别为1和-3。
在这里插入图片描述
特征抽取:特征抽取是抽取句子中的主要特征来表示句子的语义信息。由于输入句子的长度不统一,头尾实体之间的关系信息可能分布在句子的任何地方,这就意味着必须要从句子中抽取不同的局部特征来预测目标实体对所属的关系类型。在卷积神经网络中,卷积操作是获取这些局部特征的常用方法。

分段池化:常用的池化操作有最大池化、平均池化和全局池化等,以最大池化为例,抓住每一个特征向量中最具有代表性的特征,而对于分段池化操作,根据两个给定的实体的位置,将卷积后的句子特征向量分成三个片段,进而对每个片段执行最大池化操作。
在这里插入图片描述

关系分类:将每条句子的特征向量输入到softmax分类器中进行关系分类。计算出该特征属于不同关系的概率,筛选出概率最高的关系即为该句子中实体对的关系。
在这里插入图片描述

基于损失函数做反向传播优化:使用随机梯度下降(SGD)技术来最大化对数似然J(θ)。在这里插入图片描述
通过使用反向传播算法来优化神经网络中不同层神经元的参数。在这里插入图片描述

基于远程监督的关系抽取

起因:上面基于监督的关系抽取存在问题:很多领域都存在标注语料不足,人工标注成本过高、费时费力的问题。
策略:是否可以通过自动化的方法快速标注语料。
方法:远程监督

远程监督基于的基本假设是:如果从知识图谱中可获取三元组R(E1,E2)(注:R代表关系,El、E2代表两个实体),且El和E2共现于句子S中,则S表达了E1和E2间的关系R,标注为训练正例。

远程监督存在的问题:远程监督假设一个实体对只对应一种关系,但实际上实体对间可以同时具有多种关系。

小样本关系抽取

起因:很多领域都存在标注语料不足,人工标注成本过高、费时费力的问题。
策略:是否能够在少量标注语料的情况下实现满足性能要求的关系抽取。
方法:小样本关系抽取

小样本学习任务:小样本的训练集中包含了很多的类别,每个类别中有多个样本。在训练阶段,会在训练集中随机抽取C个类别,每个类别K个样本,构建一个task,作为模型的支撑集(support set)输入;再从这C个类中剩余的数据中抽取一批(batch)样本作为模 型的预测对象,查询集(Query set)。即要求模型从C*K个数据中学会如何区分这C个类别,这样的任务被称为C-way K-shot问题。

联合抽取

广义上讲,关系抽取任务分为了两个子任务 :实体抽取任务和关系抽取任务。实体抽取任务与命名实体识别的作用相似,关系抽取任务实质在于对抽取出的实体进行关系分类, 是一个分类任务,基于这种方式的关系抽取称为流水线(Pipeline)方法。

联合抽取,也称为端到端抽取,所谓端到端是指在不对输入文本进行改造的情况下,直接将原始文本送入模型进行训练,并输出最终结果。联合抽取是将 Pipeline 中的两个子任务模型合并为一个任务模型,在此模型中同时抽取出实体及其关系。

现有的联合抽取模型总体上分为两大类 : 共享参数的联合抽取模型、联合解码的联合抽取模型。

共享参数的联合抽取模型

通过两个子模型之间的参数共享实现联合,使用不同的解码方式得到实体或者关系。

共享参数可以加强子模型之间的交互,主要是共享词嵌入层、共享编码层,之后一般遵从两个子任务本身的特点而使用各自的模型,如对于实体抽取常使用 LSTM+CRF 获取序列标注结果 ;而对于关系抽取子任务多使用 CNN 进行特征提取,最后使用 Softmax 进行关系分类。
在这里插入图片描述

联合解码的联合抽取模型

使用一种解码方式同时得到实体及关系。联合解码能实现实体之间、实体与关系、关系之间的交互。

使用序列标注的方式来进行联合抽取, 即直接提取实体及其关系,而不是分别识别实体和关系。使用序列标注进行联合抽取的核心思想是将关系与实体同时标注,既实体是“带有关系的实体”,可将关系抽取任务转换成序列标注任务,常见的标注方式主要有总体 BIOES 标注、总体 BIES 标注、总体 BIO 标注等。

事件抽取

基本概念: 事件作为信息的一种表现形式,是指特定的人、物,在特定的时间、地点相互作用的客观事实。如什么人,在什么地方,做了什么事。事件抽取的目的是从非结构化的自然语言文本中抽取出能够准确表述述事件发生的结构化文本。
在这里插入图片描述
ACE 2005 是目前应用最广泛的事件抽取数据集,涉及英语、汉语和阿拉伯语三种语言的训练数据。 ACE 2005标注了句子中的事件触发词、事件类型、事件元素及对应的元素角色,并定义了8个事件类型,共33个子事件类型,不同的事件类型包含不同的事件元素角色。
子任务:

1.事件检测

检测文本中包含的事件并对其进行分类,传统的事件检测方法为识别文本中事件触发词,然后对触发词进行分类。
事件检测的主要研究方法有基于模板匹配和基于机器学习两大类。
在这里插入图片描述

基于动态多池化卷积神经网络的事件检测模型包括词嵌入学习、词汇级特征提取、句子级特征提取和事件分类四个模块,模型结构如下:
在这里插入图片描述
输入:词汇级特征和句子级特征。其中,词汇级特征表示是由词嵌入向量首尾逐个拼接形成的;句子级特征包括上下文词向量特征(CWF)和句子中各单词与候选触发词之间的相对距离构成的位置特征向量(PF)。
卷积操作:通过卷积核在句子级特征上进行卷积操作来获取整个句子的语义,并将其压缩到特征图中。
动态多池化:此操作以候选触发词为界,将卷积操作得到的特征图分割为两个部分,然后在每段特征图上分别进行最大池化,然后将所有的池化结果进行拼接得到特征向量。
分类:将动态多池化得到的特征向量和词汇级特征表示进行拼接,得到新的特征向量,然后利用全连接层和Softmax分类器得到事件的分类结果。

采用 DMCNN的方式实现事件检测:
下面是基于Pytorch的DMCNN事件检测的具体实现代码,整体结构是以词向量表示的句子上下文作为输入,然后通过卷积和动态多池化操作得到句子级特征,并与词汇级特征进行拼接输入到分类器,最后使用交叉熵损失函数计算损失,调整模型参数。

def forward(self): 
	x = torch.cat((self.char_lookup(self.char_inputs), self.pf_lookup(self.pf_inputs)), dim=-1)     #x: 句子级特征向量
	y = self.char_lookup(self.lxl_inputs).view(self.config.batch_t, -1)     #y 词汇级特征向量
	x = torch.tanh(self.conv(x.permute(0, 2, 1)))     # 经过卷积操作之后得到的特征向量
	x = x.permute(0, 2, 1) 
	x = self.pooling(x)     # 动态多池化操作得到的特征向量

self.conv = nn.Conv1d(self.config.char_dim+self.config.pf_t, self.config.feature_t, self.config.window_t,  bias=True) # 卷积 
self.L = nn.Linear(2*self.confifig.feature_t + 3*self.confifig.char_dim, self.confifig.num_t, bias=True) # 全连接层 
self.loss = nn.CrossEntropyLoss() 	# 交叉熵损失函数 
def pooling(self, conv): 	#动态多池化
	mask = np.array([[0, 0], [0, 1], [1, 0]]) 
	mask_emb = nn.Embedding(3, 2).cuda() 
	mask_emb.weight.data.copy_(torch.from_numpy(mask)) 
	mask = mask_emb(self.masks) # conv [batch, sen-2, feature] mask [batch, sen-2, 2] 
	pooled, _ = torch.max(torch.unsqueeze(mask*100, dim=2) + torch.unsqueeze(conv, dim=3), dim=1) 
	pooled -= 100 
	pooled = pooled.view(self.config.batch_t, -1) #torch.Size([170, 400]) 
	return pooled

2.事件元素抽取

从文本中发现事件触发词,并判断元素扮演的角色。事件元素抽取可以分为基于模式匹配和基于机器学习的方法。
事件触发词:表示事件发生的核心词,多为动词或者名词;
事件元素:事件的参与者,如人物、时间、地点等。

基于序列标注的事件元素抽取方法首先将句子中的每个字输入词嵌入模块得到字向量,然后输入到双向长短期记忆神经网络(Bi-LSTM)输出句子中的字在每个标签上的预测分值,最后通过条件随机场(CRF)得到最终的预测标签。模型结构如下:
在这里插入图片描述
词嵌入向量:将句子中的每个字转化为字向量的形式,作为下一层的输入。
Bi-LSTM模块:将句子中每个字的字嵌入向量作为双向LSTM的输入,然后将正向和反向LSTM输出的隐藏状态进行拼接,得到完整的隐藏状态序列,作为句子的特征向量。
CRF模块:CRF层的作用是增加约束规则来降低预测结果错误的概率。例如,句子中的第一个字的标签总是以标签 B-X 或 O 开始,而不是 I-X,这是因为句子开始的第一个字不可能是扮演某个角色的词的中间部分 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

研究一段WPF 3D 机械臂代码

网上下一段代码&#xff0c;运行如下&#xff1b;显示了一个3D机械臂&#xff1b; xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"&#xff0c;这是WPF命名空间&#xff0c;一般写在xaml头部&#xff0c;它的是这样的&#xff0c;<Viewport3D…

vue 数据手写分页算法,定时展示

我们在业务之中&#xff0c;其实会常常用到一些数据的分段展示 &#xff0c; 比如数据量过大导致echarts无法展示&#xff0c;我们就可以将数据进行算法分页 &#xff0c; 然后套用定时器实时更新分段数据&#xff1b; 例子展示 &#xff1a; 将下列数组截取成每页5条数据的分…

鞋子商店APP源码和设计报告

实 验 报 告 课程名称 实验名称 指导教师 专业 班级 学号 姓名 一、需求分析 1.需求分析 随着互联网和手机技术的蓬勃发展&#xff0c;网购已经成为许多人&#xff0c;尤其是年轻人的主要消费方式&#xff0c;这就对手机购物APP产生了大量的需求&#xff0c;商品的展…

01入门-ThreadLocal详解-并发编程(Java)

文章目录1 简介2 基本使用2.1 常用方法2.2 小案例3 ThreadLocal与Sycronized4 应用场景4.1 转账案例构建4.2 问题4.3 解决5 后记1 简介 官方JDK源码关于ThreadLocal描述&#xff1a;ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问&#xff08;通过get和…

【opensips】客户端的注册

opensips的注册能力 opensips可以通过registrar模块实现注册的能力&#xff0c; 所有的账户信息默认是在opensips的subscibe表中&#xff0c; 默认的subscibe表结构如上图&#xff0c; id是主键&#xff0c;username是账户名domain是opensips的域名password是密码email_addre…

ChatGPT 全网最新开通账号教程

&#x1f986;博主介绍&#xff1a;小黄鸭技术 &#x1f308;擅长领域&#xff1a;Java、实用工具、运维 &#x1f440; 系列专栏&#xff1a;&#x1f4e2;开发工具 Java之路 八股文之路 &#x1f4e7;如果文章写作时有错误的地方&#xff0c;请各位大佬指正&#xff0c;一起进…

掌握Redis的Sentinel哨兵原理,助你拿到25k的offer

— — | M1 |---------| R1 | | S1 | | S2 | — — Configuration: quorum 1 master宕机&#xff0c;s1和s2中只要有1个哨兵认为master宕机就可以进行切换&#xff0c;同时会在s1和s2中选举出一个执行故障转移. 但此时&#xff0c;需要majority&#xff0c;也就是大多数…

微信小程序开发笔记 进阶篇⑥——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之后)

文章目录一、前言二、前端代码wxml三、前端代码js四、后端java五、程序流程六、参考一、前言 大部分微信小程序开发者都会有这样的需求&#xff1a;获取小程序用户的手机号码。但是&#xff0c;因为小程序用户的手机号码属于重要信息&#xff0c;为了安全&#xff0c;所以需要如…

细粒度图像分类论文研读-2022

文章目录TransFG: A Transformer Architecture for Fine-grained RecognitionAbstractintroductionMethodVision transformer as feature extractorImage SequentializationPatch EmbeddingTransFG ArchitecturePart Selection ModuleConstrastive feature learningViT-FOD&…

从理论走向实战,阿里高工熬夜整理出的 Spring 源码速成笔记太香了

不知道大家面试的时候有没有被问到过 Spring 相关问题&#xff08;循环依赖、事务、生命周期、传播特性、IOC、AOP、设计模式、源码&#xff09;&#xff1f;反正我这个小学弟前段时间就来私信我说自己面试挂在了 Spring 这一块。&#xff08;原谅我不厚道地笑了&#xff0c;如…

毕设选题推荐基于python的django框架的自媒体社推广平台系统

&#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设老哥&#x1f525; &#x1f496; 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; Java实战项目专栏 Python实…

安卓APP源码和设计报告——运动健身教学

实 验 报 告 课程名称 实验名称 指导教师 专业 班级 学号 姓名 目 录 一、设计背景31. 需求分析32. 课题研究的目的和意义3二、系统需求分析与开发环境31. 系统功能需求32.系统界面需求43.开发环境4三、系统设计4四、系统测试51.脑模拟器测试6五、总结与展望6六、重要…

YoloV7目标检测(Pytorch版)【详解】

文章目录一、网络结构1、总体网络结构&#xff08;backbone&#xff09;2、主干网络介绍&#xff08;backbone&#xff09;2.1 多分支模块堆叠2.2 下采样网络结构2.3 整个backbone代码3、FPN特征金字塔二、预测结果的解码一、网络结构 1、总体网络结构&#xff08;backbone&am…

【组件开发实践】云巧流程组件对接实践

1. 用户需求 假设A系统有如下员工请假审批流场景&#xff1a; 员工请假小于等于3天&#xff0c;只需主管直接审批&#xff1b;大于3天需要主管先审批&#xff0c;审批通过后再由二级主管进行审批。当员工请假审批流节后后&#xff0c;需要通知A系统进行业务处理&#xff08;例…

Tomcat的IO模型

Tomcat支持一下几种IO模型&#xff1a; 支持的IO模型 特点 BIO 同步阻塞式IO&#xff0c;每一个请求都会创建一个线程&#xff0c;对性能开销大&#xff0c;不适合高并发场景。 NIO 同步非阻塞式IO&#xff0c;基于多路复用Selector监测连接状态通知线程处理&#xff0c;…

<C++>多态

文章目录1. 概念2. 多态的定义和实现2.1 多态的构成条件2.2 虚函数2.3 虚函数的重写2.4 虚函数重写的两个例外&#xff1a;2.5 C11 override和final2.6 重载、覆盖(重写)、隐藏(重定义)的对比3. 抽象类3.1 概念3.2 接口继承和实现继承3. 多态的原理3.1 虚函数表3.2 多态的原理3…

S2SH小区物业管理系统计算机专业毕业论文java毕业设计网站

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《S2SH小区物业管理系统》该项目采用技术&#xff1a;jsp struts2springhibernatecssjs等相关技术&#xff0c;项目含有源码、文档、配套开发软件…

java EE初阶 — wait 和 notify

文章目录1.wait 和 notify1.1 wait()方法1.2 notify()方法1.3 notifyAll()方法1.wait 和 notify 线程最大的问题是抢占式指向&#xff0c;随机调度。而写代码的时候&#xff0c;确定的东西会比较好。 于是就有程序猿发明了一些办法&#xff0c;来控制线程之间的执行顺序。 虽…

火山引擎 RTC 助力抖音百万并发“云侃球”

动手点关注干货不迷路1. 背景及技术挑战从电视看直播到手机电脑看直播&#xff0c;直播技术的发展让观众可以随时、随地观看自己喜欢的比赛&#xff0c;并且在看比赛时通过发送表情、发文字进行互动。但表情、文字承载的信息量较小、沟通效率低&#xff0c;我们无法像线下一起看…

一大波节日来袭,App Store节日营销请注意!

11 月已经过去&#xff0c;在过去的 11 月里&#xff0c;我们经历了万圣节、双 11、世界杯、感恩节、黑色星期五等非常重要的营销节点。 在新的 12 月&#xff0c;我们将迎来世界杯闭幕、双12、平安夜、圣诞节等重要营销机遇。在未来&#xff0c;我们还会迎来新春营销的重要机…