⌈ 传知代码 ⌋ 命名实体识别

💛前情提要💛

本文是传知代码平台中的相关前沿知识与技术的分享~

接下来我们即将进入一个全新的空间,对技术有一个全新的视角~

本文所涉及所有资源均在传知代码平台可获取

以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦!!!

以下内容干货满满,跟上步伐吧~


📌导航小助手📌

  • 💡本章重点
  • 🍞一. 概述
  • 🍞二. 主要目标
  • 🍞三. 论文介绍
  • 🍞四. 数据处理
  • 🍞五.核心逻辑
  • 🫓总结


💡本章重点

  • 命名实体识别

🍞一. 概述

实体识别任务(Named Entity Recognition,简称NER)是自然语言处理(NLP)中的一个基本任务,旨在从文本中识别和分类命名实体。命名实体通常包括专有名词,如人名、地名、组织名等。

下图展示了一个简单的实体抽取任务,在句子中抽取出来阿里巴巴(组织名)、马云(人名)和杭州(地名)三个实体。

在这里插入图片描述


🍞二. 主要目标

NER 的主要目标是找到文本中有意义的实体,并将其归类到预定义的类别中。以下是一些常见的类别:

人名(Person):例如“乔布斯”、“马云”。

地名(Location):例如“纽约”、“长城”。

组织名(Organization):例如“微软”、“联合国”。

应用

命名实体识别是自然语言处理领域的一个重要的任务,它在很多具体任务上有着自己的应用:

  • 信息抽取:从大量文档中自动提取有价值的信息。
  • 问答系统:帮助系统更准确地理解问题并返回相关答案。
  • 文本摘要:在生成文本摘要时识别出关键实体以保留重要信息。
  • 推荐系统:通过识别用户偏好的实体来提供个性化推荐。

🍞三. 论文介绍

本文的工作启发于论文BERT-BiLSTM-CRF Chinese Resume Named Entity Recognition Combining Attention Mechanisms

https://dl.acm.org/doi/abs/10.1145/3652628.3652719

技术方法

在这里插入图片描述

BERT编码

首先,将输入的中文文本通过预训练的 BERT 模型进行编码,生成每个字的上下文表示。BERT模型通过其双向Transformer架构,能够捕捉文本中每个字与其前后文之间的复杂关系,从而生成高质量的字级别表示,有助于后续的特征提取和实体识别。

BiLSTM特征提取

接下来,将 BERT 输出的特征向量输入到双向长短时记忆网络(BiLSTM)中,以捕捉序列中的前后依赖关系。BiLSTM网络能够从两个方向处理序列数据,即从前向后和从后向前。使得模型可以充分利用上下文信息,对每个字在整个序列中的位置和角色进行更准确的建模,从而提取出更丰富的特征表示。

注意力机制

在 BiLSTM 层之后,引入注意力机制,以便模型能够聚焦于更相关的特征。注意力机制通过计算序列中各个字之间的相关性权重,使模型能够动态地调整对不同位置的字的关注程度。

CRF标注

最后,将经过注意力机制处理的特征向量输入CRF层,进行全局序列标注,输出最终的实体识别结果。CRF是一种用于序列标注的概率图模体型,它考虑了标注序列的全局依赖关系,从而在预测每个字的标签时,不仅依赖于当前字的特征,还综合考虑其邻近字的标注情况。

论文提出的BERT-BiLSTM-Att-CRF模型在中文数据集上取得了较好的识别效果。

结合论文提出的框架,本文新增了一个LoRA层,用来优化模型

LoRA

神经网络包含许多密集层执行矩阵乘法。这些层中的权重矩阵通常是满秩的。当适应特定下游任务时,研究表明:预训练语言模型拥有较低的内在维度,也就是说,存在一个极低维度的参数,对它进行微调,和在全参数空间中进行微调,训练效果是相近的。受此启发,在参数更新过程中,应当也存在一个相对较低的“本征秩”。对于预训练的权重矩阵,通过低秩分解来约束其更新。在涉及到矩阵相乘的模块,增加一个新的通路,通过前后两个矩阵A,B相乘,第一个矩阵A负责降维,第二个矩阵B负责升维,中间层维度为r,从而来模拟本征秩。


🍞四. 数据处理

数据来源

本文所用的训练数据是MSRA-NER数据集。

MSRA-NER是由微软亚洲研究院标注的新闻领域的实体识别数据集。该数据集包含5万多条中文实体识别标注数据,实体类别分为人物、地点、机构三类。

数据集包含训练集46364个句子,验证集4365个句子。

格式举例如下:

中 共 中 央 致 中 国 致 公 党 十 一 大 的 贺 词 各 位 代 表 、 各 位 同 志 : 在 中 国 致 公 党 第 十 一 次 全 国 代 表 大 会 隆 重 召 开 之 际 , 中 国 共 产 党 中 央 委 员 会 谨 向 大 会 表 示 热 烈 的 祝 贺 , 向 致 公 党 的 同 志 们 致 以 亲 切 的 问 候 !
B-ORG I-ORG I-ORG I-ORG O B-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG O O O O O O O O O O O O O O B-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG O O O O O O O B-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG I-ORG O O O O O O O O O O O O O B-ORG I-ORG I-ORG O O O O O O O O O O O O

数据标注

采用BIO标注方式对获得的文本句子进行标注

BIO数据标注方式是命名实体识别(NER)任务中常用的一种标注方法。BIO代表三种标签:B(Begin),I(Inside)和O(Outside),用于标记文本中每个词属于某个命名实体的开头、内部或外部。以下是对BIO标注方式的详细介绍:

BIO标签定义

B(Begin):表示命名实体的开始。一个实体的第一个词标注为B-<实体类型>。
I(Inside):表示命名实体的内部。属于同一个实体的后续词标注为I-<实体类型>。
O(Outside):表示不属于任何命名实体的词。

例如,B-ORG表示组织实体的开头,I-ORG表示组织实体的内部。下图展示了一个标注好的例子,其中未标注的字段都是无实体(O)。

在这里插入图片描述


🍞五.核心逻辑

BaLC模型

自定义attention层,bert模型、LSTM模型、CRF模型调用pytorch库中的相关模型,使用BERT预训练的语言模型对输入文本进行字符级编码,获得动态词向量,然后使用双向长短期记忆(BiLSTM)网络提取全局语义特征,然后使用注意力机制分配权重,更好地捕捉关键特征,最后使用条件随机场(CRFs)输出全局最优标记序列。具体定义如下:

import torch.nn as nn
from transformers import BertPreTrainedModel, BertModel, BertConfig
from torchcrf import CRF
import math
import torchclass Self_Attention(nn.Module):def __init__(self, input_dim, dim_k, dim_v):super(Self_Attention, self).__init__()self.q = nn.Linear(input_dim, dim_k)self.k = nn.Linear(input_dim, dim_k)self.v = nn.Linear(input_dim, dim_v)self._norm_fact = 1 / math.sqrt(dim_k)def forward(self, x):Q = self.q(x)  K = self.k(x) V = self.v(x) atten = torch.bmm(Q, K.permute(0, 2, 1)) * self._norm_fact  # Q * K.T()atten = nn.Softmax(dim=-1)(atten)output = torch.bmm(atten, V)  return outputclass BERT_BiLSTM_ATT_CRF(nn.Module):def __init__(self, bert_model, hidden_dropout_prob, num_labels, hidden_dim=128):super(BERT_BiLSTM_ATT_CRF, self).__init__()self.bert = BertModel.from_pretrained(bert_model)bert_config = BertConfig.from_pretrained(bert_model)self.dropout = nn.Dropout(hidden_dropout_prob)self.bilstm = nn.LSTM(input_size=bert_config.hidden_size, hidden_size=hidden_dim, num_layers=1, bidirectional=True, batch_first=True)out_dim = hidden_dim* 2self.hidden2tag = nn.Linear(in_features=out_dim, out_features=num_labels)self.attention = Self_Attention(128, 128, 128)self.crf = CRF(num_tags=num_labels, batch_first=True)def forward(self, input_ids, tags, token_type_ids=None, attention_mask=None):outputs = self.bert(input_ids, token_type_ids=token_type_ids, attention_mask=attention_mask)sequence_output = outputs[0]  sequence_output, _ = self.bilstm(sequence_output)  sequence_output = self.dropout(sequence_output)sequence_output = self.attention(sequence_output)sequence_output = self.hidden2tag(sequence_output) outputs = self.crf(sequence_output , tags, mask=attention_mask.byte())return outputs

LoRA结构

在这里插入图片描述

    for layer in model.bert.encoder.bert_layer_groups:layer.bert_layers[0].attention.query = LinearLora(layer.bert_layers[0].attention.query,rank=8,alpha=16)layer.bert_layers[0].attention.key = LinearLora(layer.bert_layers[0].attention.key,rank=8,alpha=16)model.to(device)

实现方式

首先下载Bert预训练模型,然后收集自己要训练的数据集,放入文件中,修改源码中的路径名称。

运行train.py函数,开始训练,可以自行调整训练中的epoch等参数,其中训练的时候会调用测试函数进行输出。

演示效果

运行train.py函数,可以看到模型开始训练,在模型训练结束后,会根据测试集的结果生成测试的结果

           precision    recall  f1-score   supportB-LOC     0.9257    0.8245    0.8721      2871I-LOC     0.8894    0.8796    0.8845      4370B-ORG     0.8625    0.7800    0.8192      1327B-PER     0.9513    0.9021    0.9261      1972I-PER     0.9254    0.9521    0.9386      3845O     0.9913    0.9917    0.9915    150935I-ORG     0.8631    0.9255    0.8932      5640
avg/total     0.9804    0.9803    0.9802    170960

运行demo.py可以根据输入的句子,进行实体识别,例如:

sentence = "在 唐 胜 利 康 复 回 乡 前 一 天 , 北 京 博 爱 医 院 院 长 吴 弦 光 代 表 医 院 向 唐 胜 利 及 其 父 亲 赠 送 编 织 机 。"
output =[['<START>', 'O', 'B-PER', 'I-PER', 'I-PER', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-LOC', 'B-ORG', 'B-ORG', 'B-ORG', 'B-ORG', 'B-ORG', 'O', 'O', 'B-PER', 'I-ORG', 'I-ORG', 'O', 'O', 'B-LOC', 'B-ORG', 'O', 'B-PER', 'I-PER', 'I-PER', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '<END>']]

可以看出,模型能识别句子中的实体,并按照BIO标注返回结果


🫓总结

综上,我们基本了解了“一项全新的技术啦” 🍭 ~~

恭喜你的内功又双叒叕得到了提高!!!

感谢你们的阅读😆

后续还会继续更新💓,欢迎持续关注📌哟~

💫如果有错误❌,欢迎指正呀💫

✨如果觉得收获满满,可以点点赞👍支持一下哟~✨

【传知科技 – 了解更多新知识】

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3组件传值---vue组件通过属性,事件和provide,inject进行传值

通过属性传值&#xff08;父传子&#xff09; vue的组件具有props自建属性&#xff08;自定义名称&#xff0c;类似于class&#xff0c;id的属性&#xff09;&#xff0c;通过这个属性&#xff0c;父组件可以向子组件传递参数&#xff0c;从而实现组件之间的信息传递&#xff0…

深入探讨npm、Yarn、pnpm和npx之间的区别

前端生态系统是一个快速发展的领域&#xff0c;充满了各种工具和技术。对于开发人员来说&#xff0c;跟上这些创新可能是一项艰巨的挑战。 在本文中&#xff0c;我们将深入探讨npm、Yarn、pnpm和npx之间的区别&#xff0c;帮助你理解每个工具的不同之处。 包管理器比较 npm …

原码一位乘法(计算机组成原理)

算法原理 每次将1位乘数所对应的部分积与原部分积的“累积和”相加&#xff0c;并移位 设置寄存器 存放部分积累积和、乘积高位存放被乘数存放乘数、乘积低位 法则 乘积的数值位俩数绝对值之积&#xff1b;符号位 位 俩数符号位进行异或&#xff0c;即 p x ⊕ y 步骤 设…

你认识nginx吗,nginx是做什么的,nginx可以做什么 --1)nginx介绍

一.Nginx 介绍 Nginx&#xff08;发音同engine x&#xff09;是一个异步框架的 Web 服务器&#xff0c;也可以用作反向代理&#xff0c;负载平衡器 和 HTTP 缓存。该软件由 Igor Sysoev 创建&#xff0c;并于2004年首次公开发布。同名公司成立于2011年&#xff0c;以提供支持。…

【原型模式】详解

一.概念 原型模式是一种创建型设计模式&#xff0c;它的主要思想是通过复制现有对象来创建新对象&#xff0c;而不是通过实例化一个类来创建。在原型模式中&#xff0c;我们称被复制的对象为原型&#xff08;Prototype&#xff09;&#xff0c;新创建的对象为克隆体&#xff0…

Redis缓存(笔记一:缓存介绍和数据库启动)

目录 1、NoSQL数据库简介 2、Redis介绍 3、Redis(win系统、linux系统中操作) 3.1 win版本Redis启动 3.2 linux版本Redis启动 1、NoSQL数据库简介 技术的分类&#xff1a;&#xff08;发展史&#xff09; 1、解决功能性的问题&#xff1a;Java、Jsp、RDBMS、Tomcat、HTML、…

IC开发——VCS基本用法

1. 简介 VCS是编译型verilog仿真器&#xff0c;处理verilog的源码过程如下&#xff1a; VCS先将verilog/systemverilog文件转化为C文件&#xff0c;在linux下编译链接生成可执行文件&#xff0c;在linux下运行simv即可得到仿真结果。 VCS使用步骤&#xff0c;先编译verilog源…

【计算机毕业设计】388微信小程序足球赛事及队伍管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

开发一个comfyui的自定义节点-支持输入中文prompt

文章目录 目标功能开发环境实现过程翻译中文CLIP编码拓展仓库地址完整代码目标功能 目前comfyui的prompt提示词输入节点 CLIP Text Encode 只支持输入英文的prompt,而有时候我们需要自己制定一些prompt,所以就得将我们想要的提示词翻译为英文后再复制粘贴到该节点的输入框中…

Java的JDK环境变量配置(Windows)

只写了需要配置的环境变量 注&#xff1a;从JDK1.5开始&#xff0c;配置Java环境变量时&#xff0c;不再需要配置CLASSPATH&#xff0c;只需要配置JAVA_HOME和Path 1、配置JAVA_HOME 找到自己的JDK位置&#xff0c;我这里是 C:\dev\java\jdk-17.0.119在环境变量-系统变量中&…

ubuntu系统下安装mysql的步骤详解

一、下载安装包 下载地址&#xff1a; https://dev.mysql.com/downloads/repo/apt 跳转到这个页面&#xff1a; 直接点击Download。 直接点击最下面的开始下载安装包即可。 二、将安装包下载到ubuntu系统中 先将用户切换成root用户&#xff0c;把下载好的安装包复制到桌面上&…

互联网简史-分久必合,合久必分

六一儿童节&#xff0c;给孩子们讲讲互联网的历史。 任何当代技术都是古老技术的重组&#xff0c;这是真的。我从电话网络开始&#xff0c;两幅图完事。电波可以承载语音作为最开始&#xff0c;后面的事自然而然&#xff1a; 说实话&#xff0c;网络这种事&#xff0c;它的 …

各大平台取消一年期免费SSL证书后,如何申请超长期免费SSL证书

一&#xff1a;为什么一定要用SSL证书 SSL证书是一种提供网络安全的协议&#xff0c;主要作用是提供对用户和服务器的认证以及确保传送的数据进行加密和隐藏&#xff0c;从而保证数据的完整性和安全性。网站安装SSL证书后就可以实现HTTPS访问&#xff0c;消除网站访问不安全提…

从0开始制作微信小程序

目录 前言 正文 需要事先准备的 需要事先掌握的 什么是uniapp 平台应用的分类方式 什么是TypeScript 创建项目 项目文件作用 源码地址 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1…

一、大模型推理

https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://github.com/hiyouga/LLaMA-Factory/blob/main/examples/README_zh.md 安装 v7.1 https://github.com/hiyouga/LLaMA-Factory/releases/tag/v0.7.1 git clone --depth 1 https://github.com/hiyoug…

TS38.300中的切换流程(很一般)

本文根据3GPP R18 TS 38.300第9.2.3节整理 切换(Handover)是移动终端(UE)进入RRC_CONNECTED状态后在不同服务小区(Cell)之间保持与网络联系唯一手段&#xff0c;期间首先通过控制面(C-Plane)进行无线测量、切换协商及触发等&#xff1b;为此3GPP在TS38.300中定义如下。 RAN系统…

【六一儿童节】的科技奇幻旅程:解锁【机器学习】与【人工智能】的无限创意

目录 一、机器学习与人工智能简介 二、六一儿童节的特殊意义 三、项目概述&#xff1a;智能绘画助手 四、技术栈和工具 五、数据准备 六、模型训练 1. 数据预处理 2. 构建和训练模型 七、智能绘画助手的实现 1. 搭建Flask应用 2. 客户端界面 八、扩展功能与优化 1…

【算法】贪心算法——柠檬水找零

题解&#xff1a;柠檬水找零(贪心算法) 目录 1.题目2.题解3.参考代码4.证明5.总结 1.题目 题目链接&#xff1a;LINK 2.题解 分情况讨论 贪心算法 当顾客为5元时&#xff0c;收下当顾客为10元时&#xff0c;收下10元并找回5元当顾客为20元时&#xff0c;收下20元并找回10…

Fastjson 反序列化漏洞[1.2.24-rce]

漏洞复现环境搭建请参考 http://t.csdnimg.cn/vSaaw kali切换jdk版本请参考 Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客 漏洞原理 Fastjson提供的com.sun.rowset.JdbcRowSetImpl类下的dataSourceName方法支持传入一个RMI/LDAP源&#xff0c;支持远程调用。…

基础—SQL—DQL(数据查询语言)聚合函数

一、引言 一般情况下&#xff0c;我们在进行分组查询的时候&#xff0c;一般配合着聚合函数来进行操作&#xff0c;所以先了解和学习聚合函数再学习和操作分组查询。 二、DQL—聚合函数 1、介绍 聚合函数指的是讲一列数据作为一个整体&#xff0c;进行纵向的计算。 2、常见…