深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)【上篇】

news2024/11/17 7:50:15

在这里插入图片描述
【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等

在这里插入图片描述
专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等

本专栏主要方便入门同学快速掌握相关知识。后续会持续把深度学习涉及知识原理分析给大家,让大家在项目实操的同时也能知识储备,知其然、知其所以然、知何由以知其所以然。

声明:部分项目为网络经典项目方便大家快速学习,后续会不断增添实战环节(比赛、论文、现实应用等)

专栏订阅:

  • 深度学习入门到进阶专栏
  • 深度学习应用项目实战篇

深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)

1.命名实体识别介绍

**命名实体识别(Named Entity Recoginition, NER)**旨在将一串文本中的实体识别出来,并标注出它所指代的类型,比如人名、地名等等。具体地,根据MUC会议规定,命名实体识别任务包括三个子任务:

  • 实体名:人名、地名、机构名等
  • 时间表达式:日期、时间、持续时间等
  • 数字表达式:百分比、度量衡、钱、基数等

我们来看这句话,百度于2021年3月23日正式回香港上市,这句话中"百度"是个机构名,"香港"是个地名,"2021年3月23日"是个日期,命名实体识别任务能够通过建模的方式来帮助我们自动地发现这些实体。

命名实体识别是一项比较关键的NLP任务,具有广泛的应用场景,例如在对话意图理解(NLU)中,通过提取出相应的实体词,能够帮助系统更加准确地理解用户的需求,比如根据用户的问题提取出"天气",“北京”,"今天"这样的词汇,大概率就能知道用户在问些什么;在微博场景中,应用命名实体识别提取出微博短文中重要的实体词,也有利于微博信息的汇总,或者事件热度的统计。

NER任务一般会被建模成序列标注任务,也就是说,模型的输入是待识别的一串文本序列,模型的输出就是该文本序列对应的标签序列,不同于文本分类任务,这是一种序列到序列的任务。我们来举个例子:

B-PersonI-PersonOOB-OrganizationI-OrganizationI-OrganizationI-OrganizationOO

这句话中的每个字分别对应着一个标签, 模型的输入就是上边的文本,模型的输出就是下面的标签序列,我们通过这样的标签序列就能识别出原始文本中的实体。
具体地,上边这串文本中,“姚明"对应着Person实体,其中"姚"字是"Person"实体的起始字,所以设置标签为"B-person”,其中标签前边的B代表Begin这个单词;“明"字是"Person"实体的中间字,所以设置标签为"I-Person”,其中标签前边的I代表Intermediate这个单词。 “中国篮协"对应这Organization实体,相应标签"B-Organization"和"I-Organization"的解读和Person实体是一致的。最后的标签"O"代表"other”,表示其他实体类型的标签。

看到这里,相信你已经知道,本节的NER任务要建模完成一件什么事情了,即建模一个序列到序列的模型来找出文本中蕴含的实体。

2.BiLSTM+CRF实现命名实体识别

BiLSTM + CRF是一种经典的命名实体识别(NER)模型方案,这在后续很多的模型improvment上都有启发性。如果你有了解NER任务的兴趣或者任务,或者完全出于对CRF的好奇,建议大家静心读一读这篇文章。

本篇文章会将重点放到条件随机场(CRF)上边,因为这是实现NER任务很重要的一个组件,也是本篇文章最想向你推荐的特色。但是如果你 对长短时记忆网络(LSTM)也不是很熟悉,那你也不用担心,笔者会去解释LSTM的用法,它的输入和输出等等内容,以保证你可以顺畅的读下去,领悟到这个模型的精髓。

2.1使用BiLSTM+CRF实现NER

为方便直观地看到BiLSTM+CRF是什么,我们先来贴一下BiLSTM+CRF的模型结构图,如图1所示。

image-20210415131622638

图1 使用BiLSTM+CRF实现NER

图1可以看到,在BiLSTM上方我们添加了一个CRF层。具体地,在基于BiLSTM获得各个位置的标签向量之后,这些标签向量将被作为发射分数传入CRF中,发射这个概念是从CRF里面带出来的,后边在介绍CRF部分会更多地提及,这里先不用纠结这一点。

这些发射分数(标签向量)传入CRF之后,CRF会据此解码出一串标签序列。那么问题来了,从图1最上边的解码过程可以看出,这里可能对应着很多条不同的路径,例如:

  • B-Person, I-Person, O, …, I-Organization
  • B-Organization, I-Person, O, …, I-Person
  • B-Organization, I-Organization, O, …, O

CRF的作用就是在所有可能的路径中,找出得出概率最大,效果最优的一条路径,那这个标签序列就是模型的输出。

我们来总结一下,使用BiLSTM+CRF模型架构实现NER任务,大致分为两个阶段:使用BiLSTM生成发射分数(标签向量),基于发射分数使用CRF解码最优的标签路径。

2. 回归CRF建模原理本身

本节将开始聚焦在CRF原理本身进行讲解,力图为读者展现一个清楚明白,基础本质的CRF。那现在开始这趟学习之旅吧,相信你一定会有所收获。

2.1 线性CRF的定义

通常我们会使用线性链CRF来建模NER任务,所以本实验将聚焦在线性链CRF来探讨。那什么是线性链CRF呢,我们来看下李航老师在《统计学习方法》书中的定义:

X = [ x 1 , x 2 , . . . , x n ] , Y = [ y 1 , y 2 , . . . , y n ] X=[x_1, x_2, ..., x_n],Y=[y_1, y_2, ..., y_n] X=[x1,x2,...,xn]Y=[y1,y2,...,yn] 均为线性链表示的随机变量序列,若在给定随机变量序列的 X X X的条件下,随机变量序列 Y Y Y的条件概率分布 P ( Y ∣ X ) P(Y|X) P(YX)构成条件随机场,即满足马尔可夫性:

P ( y i ∣ X , y 1 , . . . , y i − 1 , y i + 1 , . . . , y n ) = P ( y i ∣ X , y i − 1 , y i + 1 ) i = 1 , 2 , . . . , n ( 在 i = 1 和 n 时只考虑单边 ) \begin{align} P(y_i|X, y_{1},...,y_{i-1},y_{i+1},...,y_n) &= P(y_i|X,y_{i-1},y_{i+1}) \\ i &= 1,2,...,n (在i=1和n时只考虑单边) \end{align} P(yiX,y1,...,yi1,yi+1,...,yn)i=P(yiX,yi1,yi+1)=1,2,...,n(i=1n时只考虑单边)

则称 P ( Y ∣ X ) P(Y|X) P(YX)线性链条件随机场

同学们看到这个定义,或许会有些疑惑,但是不用着急,我们来探讨下这个定义。图2展示了一种经典的线性链CRF的结构图,从这张结构图来理解这个定义,主要包含两个点:

  1. 确保输入序列 X X X和输出序列 Y Y Y是线性序列
  2. 每个标签 y i y_i yi的产生,只与这些因素有关系:当前位置的输入 x i x_i xi y i y_i yi直接相连的两个邻居 y i − 1 y_{i-1} yi1 y i + 1 y_{i+1} yi+1,与其他的标签和输入没有关系。

这样的定义,其实帮助我们减小了建模CRF的代价。

image-20210415163224153

图 2 一种经典的线性链CRF结构图

2.2 发射分数和转移分数

上边我们探讨了线性链CRF的定义以及它的一种经典图结构,接下来我们继续回到我们建模的命名实体任务上来。

图2中, x = [ x 0 , x 1 , . . . , x i , . . . , x n ] x=[x_0, x_1, ... , x_i, ... , x_n] x=[x0,x1,...,xi,...,xn]代表输入变量,对应到我们当前任务就是输入文本序列, y = [ y 0 , y 1 , . . . , y i , . . . , y n ] y=[y_0, y_1, ..., y_i, ..., y_n] y=[y0,y1,...,yi,...,yn]代表相应的标签序列,

其中,每个输入 x i x_i xi均对应着一个标签 y i y_i yi,这一步对应的就是发射分数,它指示了当前的输入 x i x_i xi应该对应什么样的标签;在每个标签 y i y_i yi之间也存在连线,它表示当前位置的标签 y i y_i yi向下一个位置的标签 y i + 1 {y_{i+1}} yi+1的一种转移。举个例子,假设当前位置的标签是"B-Person",那下一个位置就很有可能是"I-Person"标签,即标签"B-Person"向"I-Person"转移的概率会比较大。

这里我们带出了建模CRF过程中两个重要的概念:发射分数和转移分数,下边我们来看看他们是什么。

2.2.1 发射分数

前边我们在第2节已经提到过发射分数了,即BiLSTM后产生的标签向量。如果大家对这部分内容已经很熟悉,完全可以跳过这部分。图3以矩阵的形式展示了发射分数的生成过程。

image-20210415165023310

图3 发射分数的矩阵计算解释

当给定的文本序列 x = [ x 1 , x 2 , x 3 , . . . , x n ] x=[x_1, x_2, x_3,..., x_n] x=[x1,x2,x3,...,xn]映射为对应词向量之后,将会得到一个shape为 [ n , e m b e d d i n g _ s i z e ] [n, embedding\_size] [n,embedding_size]的词向量矩阵 e m b s embs embs,其中每对应一个字词(图5样例只使用了4个词),例如 x 0 x_0 x0对应的词向量是 [ e 00 , e 01 , e 02 , e 03 ] [e_{00}, e_{01}, e_{02}, e_{03}] [e00,e01,e02,e03]

然后将 e m b s embs embs传入BiLSTM后,每个词的位置都会产生一个上下文向量,所有的向量组合之后会得到一个向量矩阵 c o n t e x t _ v e c t o r context\_vector context_vector,其中每行代表对应单词经过BiLSTM后的上下文向量。

这里的每个位置的上下文向量可以用来指导当前位置应该输出的标签信息,但这里有个问题,这个输出向量的维度并不是标签的数量,它不能直接用来指示应该输出什么标签。一般的做法是在后边加一层线性层,将这个上下文向量的维度映射为标签的数量,这样的话就会生成前边所讲的标签向量,其中的每个元素分别对应着相应标签的分数,根据这个分数可以用来指导最终标签的输出。

具体地,线性层这里只是做了这样的一个线性变换: y = X W + b y = XW+b y=XW+b,显然,这里的 X X X就是 c o n t e x t _ v e c t o r context\_vector context_vector y y y是相应的 e m i s s i o n _ s c o r e emission\_score emission_score W 和 b W和b Wb是线性层的可学习参数。
前边提到, c o n t e x t _ v e c t o r context\_vector context_vector的shape为 [ n , c o n t e x t _ s i z e ] [n,context\_size] [ncontext_size],那么线性层的 W W W的shape应该是 [ c o n t e x t _ s i z e , t a g _ s i z e ] [context\_size, tag\_size] [context_size,tag_size],经过以上公式的线性变换,就可以得到发射分数 e m i s s i o n _ s c o r e emission\_score emission_score,其中每个字词对应一行的标签分数(图3中只设置了三列,代表一共有3个标签),例如, x 0 x_0 x0对第一个标签的分数预测为 t 00 t_{00} t00,对第二个标签的分数预测为 t 01 t_{01} t01,对第三个标签的分数预测为 t 02 t_{02} t02,依次类推。

2.2.2 转移分数

下面我们来聊聊转移分数,这个转移分数表示一个标签向另一个标签转移的分数,分数越高,转移概率就越大,反之亦然。图4展示了记录转移分数的矩阵。

image-20210416134414071

图4 转移分数矩阵图

让我们从列到行地来看下这个转移矩阵 T T T,B-Person向I-Person转移的分数为0.93,B-Person向I-Organization转移的分数为0.02,前者的分数远远大于后者。I-Person向I-Person转移的概率是0.71,I-Organization向I-Organization转移的分数是0.95,因为一个人或者组织的名字往往包含多个字,所以这个概率相对是比较高的,这其实也是很符合我们直观认识的。

假设我们现在有个标签序列:B-Person, I-Person, O, O,B-Organization, I-Organization。那么这个序列的转移分数可按照如下方式计算:

S e q t = T I − P e r s o n , B − P e r s o n + T O , I − P e r s o n + T O , O + T O , B − O r g a n i z a t i o n + T B − O r g a n i z a t i o n , I − O r g a n i z a t i o n Seq_t = T_{I-Person,B-Person} + T_{O,I-Person} + T_{O,O} + T_{O,B-Organization} + T_{B-Organization, I-Organization} Seqt=TIPerson,BPerson+TO,IPerson+TO,O+TO,BOrganization+TBOrganization,IOrganization

这个转移分数矩阵是CRF中的一个可学习的参数矩阵,它的存在能够帮助我们显示地去建模标签之间的转移关系,提高命名实体识别的准确率。

2.3 其余内容见下一篇文章(字数限制)

更多文章请关注公重号:汀丶人工智能

3. 3 推荐!实体、关系、属性抽取实战项目合集(含智能标注)

实体、关系、属性抽取实战项目合集(含智能标注)

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

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

相关文章

GPT问题记录

如何遍历切片 1.for循环 package mainimport "fmt"func main(){s : []int{1,2,3,4}for i : 0; i < len(s); i{fmt.Printf("s[%d]%d\n",i,s[i])} } 运行结果 2.range 关键字 package mainimport "fmt"func main() {s : []int{1,2,3,4,5}for in…

苹果公布Apple Vision Pro头显的六种交互手势

苹果 Vision Pro 头显的交互&#xff0c;并不依赖物理控制器&#xff0c;而是通过追踪眼球和手势来交互虚拟物体。苹果设计师在近日的开发者会议中&#xff0c;概述了 Vision Pro 头显可以使用的交互手势。 Tap&#xff1a; 同时点击拇指和食指会向头戴显示设备发出信号&…

【.net core】图片压缩

使用SkiaSharp组件实现功能&#xff0c;组件下载在nuget中安装最新版本至项目 功能实现类&#xff1a; using SkiaSharp; using System; using System.Collections.Generic; using System.IO; using System.Text;namespace YiSha.Util {public static class ImageCompression{…

瑞吉外卖功能完善

文章目录 获取源码1、后台管理——菜品起售停售前端请求数据分析编写方法 2、后台管理——菜品删除前端请求数据分析编写方法 3、后台管理——修改套餐前端请求分析方法一&#xff1a;完成点击修改时数据的回显方法二&#xff1a;修改套餐 4、后台管理——启停售套餐前端请求分…

全国PMO专业人士年度盛会︱2023第十二届PMO大会将于8月在京召开

企业要基业长青就必须持续保持组织活力。企业的内外部环境不会一成不变&#xff0c;顺应变化及时调整变革避免组织出现僵化低效才能在激烈的市场竞争中存活下来。PMO从成立到逐渐发挥越来越强的作用本身即是一种组织变革的过程&#xff0c;从这个意义上来说PMO因组织变革而生&a…

epson L350打印机拆解

卡扣固定 搓纸轮 送纸器

数据库的基本知识---入门前必读

目录 一.认识数据库 二.数据库的分类 三.SQL介绍 3.1SQL是什么 3.2.SQL语言使用方式 总结 &#x1f63d;个人主页&#xff1a;tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 &#x1f308;梦的目标&#xff1a;努力学习&#xff0c;打败数据库&#xff0c;拼搏一…

echarts 按需引入解决打包体积过大问题

问题&#xff1a;由于服务器网速特别慢大概100kb打包文件过大导致第一次加载静态文件时特别慢&#xff0c;优化echarts 原先引入的方式和使用&#xff08;导致体积过大&#xff09;&#xff1a; // 引入 echarts 核心模块&#xff0c;核心模块提供了 echarts 使用必须要的接口…

10. Java对象内存布局和对象头

10.1 面试题 ● 说下JUC&#xff0c;AQS的大致流程 ● CAS自旋锁&#xff0c;是获取不到锁就一直自旋吗&#xff1f;CAS和synchronized区别在哪里&#xff0c;为什么CAS好&#xff0c;具体优势在哪里&#xff1f; ● sychronized底层是如何实现的&#xff0c;实现同步的时候用到…

idea导入java web项目带jar

可参考&#xff1a;idea导入Javaweb项目_小黑cc的博客-CSDN博客 配置tomcat 加载项目jar依赖 最后点ok&#xff0c;tomcat启动 jsp页面的项目&#xff0c;必须要加载这两个jar包

windows 服务程序和桌面程序集成(二)服务程序

系列文章目录链接&#xff1a; windows 服务程序和桌面程序集成&#xff08;一&#xff09;概念介绍windows 服务程序和桌面程序集成&#xff08;二&#xff09;服务程序windows 服务程序和桌面程序集成&#xff08;三&#xff09;UDP监控工具windows 服务程序和桌面程序集成&…

OpenLayers.js 入门教程:打造互动地图的入门指南

theme: smartblue 本文简介 戴尬猴&#xff0c;我是德育处主任 本文介绍如何使用 OpenLayers.js (后面简称 ol)。ol 是一个开源 JavaScript 库&#xff0c;可用于在Web页面上创建交互式地图。 ol能帮助我们在浏览器轻松地使用地图功能&#xff0c;例如地图缩放、地图拖动、地图…

双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的应用

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到&#xff0c;要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时&#xff0c;提到要把减污降碳协同增效作为促…

数字电子电路绪论

博主介绍&#xff1a;一个爱打游戏的计算机专业学生 博主主页&#xff1a;夏驰和徐策 所属专栏&#xff1a;程序猿之数字电路 1.科技革命促生互联网时代 科技革命对互联网时代的兴起产生了巨大的推动作用。以下是一些科技革命对互联网时代的促进因素&#xff1a; 1. 计算机技…

赢涛智慧工单 v2.4.3 公众号模块版

适用于&#xff1a;入驻加盟、运价查询、申请返礼、工单售后、商标注册、执照申请、汽车保养、年审代办、材料申请、流程审批、贷款申请、废品回收、投诉建议、业务登记、在线督导、购房申请、设备维修、门店报修、信息申请、材料提交、合作咨询、党群服务、入党申请、补贴申领…

内网隧道代理技术(三)之使用SSH端口转发

使用SSH端口转发 SSH介绍 SSH通过网络远程访问主机提供保护&#xff0c;可以对客户端和服务端之间的数据传输进行压缩和加密&#xff0c;有身份验证、SCP、SFTP、和端口转发的功能 SSH转发常用的参数介绍&#xff1a; 参数作用-C请求压缩所有数据-D动态转发、即socks代理-f…

np.meshgrid()与网络表格

目录 数组是如何绘制表格的&#xff1f;分别绘制X和Y图像绘制等高线 数组是如何绘制表格的&#xff1f; 我们先将两个数组传入np.meshgrid()&#xff0c;查看该函数是如何绘制网格的。 import numpy as npx np.linspace(-2, 2, 5) y np.linspace(-2, 2, 5)X, Y np.meshgri…

【无标题】储能电池IEC62619认证 IEC62619测试什么内容

储能电池IEC62619认证 IEC62619测试什么内容 作为专业的民营三方检测、认证服务型的&#xff0c;同时已获得CNAS、CMA、NVLAP、MICOM、A2AL、CPSC、IC、EMSD、NATA、SABS、KOSTEC、 lNSPECCO、E-mark、TUV、CETECOM、EUROFINS、PHOENIX、HOENIX、KTC、ITS、SAA、UL等20多个国内…

在webpack中配置bable

一、什么是bable Babel是一个JavaScript**编译工具**&#xff0c;主要用于在旧浏览器或过时的JavaScript语言版本中转换新的或标准的JavaScript语法和功能。它的主要作用是解决跨浏览器的兼容性问题&#xff0c;让我们能够使用最新的JavaScript特性&#xff0c;而不必担心它们…

一个轻量级Web蜜罐(附下载地址)

Loki 0x01 Why 目标: 抓漏洞. 大概是没有找到啥子开源的符合我预期的蜜罐吧&#xff0c;所以自己动手写了。 0x02 What 想做什么样的蜜罐? 1.便于维护,随开随用,配置简单。 2.Web低仿真即可,且只抓Web流量。 3.不同端口指向不同的页面,响应头配置等。 0x03 How SpringB…