当前位置: 首页 > news >正文

自然语言处理实战项目8- BERT模型的搭建,训练BERT实现实体抽取识别的任务

大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目8- BERT模型的搭建,训练BERT实现实体抽取识别的任务。BERT模型是一种用于自然语言处理的深度学习模型,它可以通过训练来理解单词之间的上下文关系,从而为下游任务提供高质量的语言表示。它的结构是由多个Transformer编码器组成的,而Transformer编码器是由多个自注意力机制组成的。在训练中,模型通过预测遮盖的单词和判断两个句子之间的关系来提高语言表示的准确性。在实体识别任务中,BERT模型可以作为特征提取器使用,将每个单词的上下文相关的向量表示输入到分类器中完成实体识别。

一、BERT模型的框架

BERT的基础结构是多层的Transformer编码器架构。Transformer是一种自注意力机制,允许模型在不同的词语之间捕获重要的关系。具体而言,BERT使用自注意力头为文本序列中的每个单词生成一个向量表示,同时捕捉了整个句子的上下文信息。这些向量表示可以从底层到更高层进行组合,从而允许模型学习更加复杂的语义结构。

BERT模型有两种主要的预训练模型:
1.BERT-Base:包含12层(Encoder layers)、12个自注意力头(Attention heads)和768个隐藏层大小(Hidden size),总共有约 110M 个参数。
2.BERT-Large:包含 24层(Encoder layers)、16个自注意力头(Attention heads)和1024个隐藏层大小(Hidden size),总共约340M个参数。

 二、BERT的预训练

BERT的预训练主要分为两个阶段:预训练和微调。

2.1 预训练:

在预训练阶段,BERT的创新之举是利用大量无标注文本进行双向训练。在这个阶段,BERT引入了两个预训练任务:掩码语言建模(MLM) 和 下一句预测(NSP)。
 掩码语言建模(MLM):在训练过程中,输入句子中的一部分单词被随机替换为一个特殊的掩码符号(MASK)。模型的目标是根据句子其他部分的上下文信息,预测被掩码的单词。这种训练方式使模型能够学习双向的语义信息。
下一句预测(NSP):这个任务旨在让模型学习理解句子之间的关系。给定一对句子,模型需要预测第二个句子是否紧跟在第一个句子之后。这个任务有助于BERT更好地应对需要理解多个句子关系的任务,如问答和自然语言推理等。

2.2 微调:

在预训练阶段完成后,BERT模型已经学会了丰富的语义表示。然后,在实际的NLP任务中,我们需要对预训练的BERT进行微调。微调阶段只需较少的标注数据就能使模型针对具体任务进行优化。
在微调过程中,通常在BERT模型的顶部添加一个任务相关的神经网络层,如全连接层、卷积层等。然后连同BERT整个模型进行端到端的微调训练。在训练时,利用带标签的数据计算损失,利用梯度下降进行参数更新。经过微调后,BERT能够根据特定任务生成更有针对性的结果。

三、训练BERT实现实体抽取识别的任务

以下是一个使用PyTorch和Hugging Face Transformers库的BERT模型进行中文命名实体识别任务的完整代码,第三方库载入,数据样例导入。

import torch
from torch.utils.data import Dataset, DataLoader
from transformers import BertTokenizer, BertForTokenClassification, AdamW
from sklearn.model_selection import train_test_split
from tqdm import tqdmdef load_data_from_txt(file_path):with open(file_path, "r", encoding="utf-8") as f:lines = f.readlines()data = []for line in lines:line = line.strip()if not line:continuetoken, label = line.split()data.append((token, label))return datafile_path = 'ner_data.txt'
data = load_data_from_txt(file_path)
print(data)

ner_data.txt文件数据样例:

李 B-PER
华 I-PER
山 I-PER
是 O
一 O
个 O
优 O
秀 O
的 O
程 O
序 O
员 O
。 O
阿 B-ORG
里 I-ORG
巴 I-ORG
巴 I-ORG
是 O
一 O
家 O
著 O
名 O
的 O
中 B-LOC
国 I-LOC
公 O
司 O
。 O
陈 B-PER
明 I-PER
在 O
北 B-LOC
京 I-LOC
上 O
了 O
一 O
所 O
大 O
学 O
。 O

模型加载与训练:

# 预处理
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
label_map = {"B-PER": 0, "I-PER": 1, "B-ORG": 2, "I-ORG": 3, "B-EDU":4,"I-EDU":5, "B-LOC":6,"I-LOC":7,"O": 8}
inverse_label_map = {v: k for k, v in label_map.items()}class NERDataset(Dataset):def __init__(self, data, tokenizer, label_map):self.data = dataself.tokenizer = tokenizerself.label_map = label_mapdef __len__(self):return len(self.data)def __getitem__(self, idx):token, label = self.data[idx]input_ids = tokenizer.encode(token, add_special_tokens=False)label_id = self.label_map[label]return torch.tensor(input_ids, dtype=torch.long), torch.tensor(label_id, dtype=torch.long)dataset = NERDataset(data, tokenizer, label_map)
train_data, val_data = train_test_split(dataset, test_size=0.2, random_state=42)
train_loader = DataLoader(train_data, batch_size=1, shuffle=True)
val_loader = DataLoader(val_data, batch_size=1, shuffle=False)# 模型
model = BertForTokenClassification.from_pretrained("bert-base-chinese", num_labels=len(label_map))
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)# 优化器
optimizer = AdamW(model.parameters(), lr=5e-5)# 训练
num_epochs = 8
for epoch in range(num_epochs):model.train()total_loss = 0total_correct = 0total_count = 0for batch in tqdm(train_loader):input_ids, labels = batchinput_ids = input_ids.to(device)labels = labels.to(device)optimizer.zero_grad()outputs = model(input_ids, labels=labels)loss = outputs.lossloss.backward()optimizer.step()total_loss += loss.item()total_correct += (outputs.logits.argmax(-1) == labels).sum().item()total_count += labels.size(0)avg_loss = total_loss / total_countaccuracy = total_correct / total_countprint(f"Epoch {epoch + 1}/{num_epochs}, Loss: {avg_loss:.4f}, Accuracy: {accuracy:.4f}")

运行结果:

100%|██████████| 97/97 [00:39<00:00,  2.47it/s]0%|          | 0/97 [00:00<?, ?it/s]Epoch 1/10, Loss: 1.4691, Accuracy: 0.5979
100%|██████████| 97/97 [00:40<00:00,  2.42it/s]
Epoch 2/10, Loss: 1.3695, Accuracy: 0.6598
100%|██████████| 97/97 [00:39<00:00,  2.48it/s]
Epoch 3/10, Loss: 1.2924, Accuracy: 0.5979
100%|██████████| 97/97 [00:39<00:00,  2.48it/s]0%|          | 0/97 [00:00<?, ?it/s]Epoch 4/10, Loss: 1.3100, Accuracy: 0.6701
100%|██████████| 97/97 [00:37<00:00,  2.59it/s]
Epoch 5/10, Loss: 1.2179, Accuracy: 0.6598
100%|██████████| 97/97 [00:40<00:00,  2.39it/s]0%|          | 0/97 [00:00<?, ?it/s]Epoch 6/10, Loss: 0.9726, Accuracy: 0.6495
100%|██████████| 97/97 [00:39<00:00,  2.46it/s]0%|          | 0/97 [00:00<?, ?it/s]Epoch 7/10, Loss: 1.0536, Accuracy: 0.6186
100%|██████████| 97/97 [00:40<00:00,  2.42it/s]
Epoch 8/10, Loss: 0.9458, Accuracy: 0.6907

相关文章:

自然语言处理实战项目8- BERT模型的搭建,训练BERT实现实体抽取识别的任务

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下自然语言处理实战项目8- BERT模型的搭建&#xff0c;训练BERT实现实体抽取识别的任务。BERT模型是一种用于自然语言处理的深度学习模型&#xff0c;它可以通过训练来理解单词之间的上下文关系&#xff0c;从而为下游…...

pdf怎么合并在一起?软件操作更高效

PDF格式已经成为了许多文档和表格的首选格式。然而&#xff0c;当你需要合并多个PDF文件时&#xff0c;可能会遇到一些麻烦&#xff0c;在本篇文章中&#xff0c;我们将向您介绍一种简单易用的方法来合并PDF文件。 以下是可以用来合并PDF文件的软件&#xff1a; - PDF转换器&a…...

Junit常见用法

一.Junit的含义 Junit是一种Java编程语言的单元测试框架。它提供了一些用于编写和运行测试的注释和断言方法&#xff0c;并且可以方便地执行测试并生成测试报告。Junit是开源的&#xff0c;也是广泛使用的单元测试框架之一 二.Junit项目的创建 &#xff08;1&#xff09;先创…...

c++—内存管理、智能指针、内存池

1. 内存分析诊断工具&#xff1a;valgrind&#xff1b; 2. 内存管理的两种方式&#xff1a; ①用户管理&#xff1a;自己申请的&#xff0c;自己用&#xff0c;自己回收&#xff1b;效率高&#xff0c;但容易导致内存泄漏&#xff1b; ②系统管理&#xff1a;系统自动回收垃圾…...

JAVA使用HTTP代码示例

以下是使用Java发送HTTP请求的示例代码&#xff1a; java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpExample { public static void main(String[] args) { try { …...

【网络协议详解】——电子邮件系统协议(学习笔记)

目录 &#x1f552; 1. 电子邮件系统概述&#x1f552; 2. 简单邮件传送协议SMTP&#x1f552; 3. SMTP协议的命令和响应&#x1f558; 3.1 命令&#x1f564; 3.1.1 HELO&#x1f564; 3.1.2 MAIL FROM&#x1f564; 3.1.3 RCPT TO&#x1f564; 3.1.4 DATA&#x1f564; 3.1.…...

年度发布 | MeterSphere一站式开源持续测试平台发布v2.10 LTS版本

2023年5月25日&#xff0c;MeterSphere一站式开源持续测试平台正式发布v2.10 LTS版本。这是继2022年5月发布v1.20 LTS版本后&#xff0c;MeterSphere开源项目发布的第三个LTS&#xff08;Long Term Support&#xff09;版本。MeterSphere开源项目组将对MeterSphere v2.10 LTS版…...

从 OceanBase 迁移数据到 DolphinDB

OceanBase 是一款金融级分布式关系数据库&#xff0c;具有数据强一致、高可用、高性能、在线扩展、高度兼容 SQL标准和主流关系数据库、低成本等特点&#xff0c;但是其学习成本较高&#xff0c;且缺乏金融计算函数以及流式增量计算的功能。 DolphinDB 是一款国产的高性能分布…...

淘宝商品列表数据接口(支持价格、销量排序)

淘宝商品列表数据接口是淘宝提供的一种可以获取淘宝商品信息的接口。通过该接口&#xff0c;可以获取到具有一定规则的商品信息&#xff0c;例如按照价格排序、按照销量排序等。接口返回的数据格式为JSON格式&#xff0c;可以方便地处理数据。 我们可以通过调用淘宝提供的API&…...

Android 11 版本变更总览

Android 11 版本 Android 11 总览重大隐私权变更行为变更&#xff1a;所有应用行为变更&#xff1a;以 Android 11 为目标平台的应用功能和 API 概览Intent系统广播 intent&#xff08;API 级别 30&#xff09;通用应用 intent&#xff08;API 级别 30&#xff09; Android 11 …...

传染病学模型 | Matlab实现基于SIS传染病模型模拟城市内人口的互相感染及城市人口流动所造成的传染

文章目录 效果一览基本描述模型介绍程序设计参考资料效果一览 基本描述 传染病学模型 | Matlab实现基于SIS传染病模型模拟城市内人口的互相感染及城市人口流动所造成的传染 模型介绍 SIS模型是一种基本的传染病学模型,用于描述一个人群中某种传染病的传播情况。SIS模型假设每个…...

物联网技术如何改变我们的生活:一位资深物联网专家的见解

物联网&#xff08;IoT&#xff09;是指通过网络互联的物理设备、车辆、建筑物以及其他物品&#xff0c;这些物品都内置了传感器、执行器、软件和网络连接器&#xff0c;使它们能够收集和交换数据。物联网技术已经在各个领域产生了深远的影响&#xff0c;包括家庭、医疗、交通、…...

node.js+vue.js大学生在线选课系统的设计与实现93pul

本次设计任务是要设计一个选课系统的设计与实现&#xff0c;通过这个系统能够满足用户对选课信息的需求。系统的主要功能包括&#xff1a;个人中心、学生管理、教师管理、选课信息管理等功能。 管理员可以根据系统给定的账号进行登录&#xff0c;登录后可以进入选课系统的设计与…...

华为OD机试真题 Java 实现【寻找符合要求的最长子串】【2023Q1 200分】

一、题目描述 给定一个字符串 s ,找出这样一个子串: 该子串中的任意一个字符最多出现2次;该子串不包含指定某个字符;请你找出满足该条件的最长子串的长度。 二、输入描述 第一行为要求不包含的指定字符,为单个字符,取值范围[0-9a-zA-Z]。 第二行为字符串s,每个字符范…...

接口测试工具Postman接口测试图文教程

目录 一、前言 二、Postman安装和使用 三、请求方式 四、资金记录接口实例演示 一、前言 在前后端分离开发时&#xff0c;后端工作人员完成系统接口开发后&#xff0c;需要与前端人员对接&#xff0c;测试调试接口&#xff0c;验证接口的正确性可用性。而这要求前端开发进…...

视频编辑软件:迅捷视频工具箱

这是一款功能强大、易于使用的视频编辑工具&#xff0c;支持视频剪辑、视频转换、音频转换、视频压缩、视频水印、字幕贴图等实用功能&#xff0c;可以帮助你制作出高质量的视频作品。&#xff08;传送门&#xff1a;https://www.xunjiepdf.com/xjspgjx&#xff09; 功能简介 …...

网络知识点之-HTTP协议

超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出&#xff1b;而消息内…...

K类函数和KL类函数

Class K \mathcal{K} K function- K \mathcal{K} K类函数 Definition: A continuous function α : [ 0 , a ) → [ 0 , ∞ ) \alpha:[0,a)\rightarrow[0,\infin) α:[0,a)→[0,∞) is said belong to class K \mathcal{K} K if it strictly increasing and α ( 0 ) 0 …...

华为OD机试之完美走位(Java源码)

完美走位 题目描述 在第一人称射击游戏中&#xff0c;玩家通过键盘的A、S、D、W四个按键控制游戏人物分别向左、向后、向右、向前进行移动&#xff0c;从而完成走位。 假设玩家每按动一次键盘&#xff0c;游戏任务会向某个方向移动一步&#xff0c;如果玩家在操作一定次数的键…...

Vue 原始(传统)或特别的视频组件具体实现方法

一、原始的播放器组件&#xff08;传统的视频播放组件&#xff09; 参考链接 1. Vue2视频播放&#xff08;Video&#xff09; 二、自定义视频播放组件&#xff0c;自播放&#xff0c;无控制模式 简单点的理解&#xff0c;就是没有点击就会暂停播放视频&#xff0c;还有忽略…...

前端缓存策略:让你的应用飞起来

前端缓存策略&#xff1a;让你的应用飞起来 一、引言 又到了我这个毒舌工匠上线的时间了&#xff01;今天咱们来聊聊前端缓存策略这个话题。别以为缓存只是后端的事情&#xff0c;前端缓存同样重要。一个好的缓存策略能够大大提高应用的性能和用户体验&#xff0c;让你的应用飞…...

保姆级教程:在Quartus Prime 18.0中手把手配置NCO IP核并完成Modelsim仿真

保姆级教程&#xff1a;在Quartus Prime 18.0中手把手配置NCO IP核并完成Modelsim仿真 数字信号处理是FPGA开发中的核心技能之一&#xff0c;而数控振荡器&#xff08;NCO&#xff09;作为生成精确频率信号的关键IP核&#xff0c;在通信系统、雷达信号处理等领域有着广泛应用。…...

AI 编程 Harness 框架深度拆解(非常详细),6 大框架从入门到精通,收藏这一篇就够了!

AI 会写&#xff0c;不等于 AI 能稳定交付。 前段时间我们都在说 Vibe Coding&#xff0c;大家都知道是氛围编程的意思&#xff0c;但是现在也有叫“直觉编程”。什么叫直觉编程&#xff0c;就是完全不用管其它的&#xff0c;想到什么就做什么&#xff0c;主打一个靠直觉写代码…...

SeaTunnel Web安装踩坑记:从MySQL驱动到Hazelcast配置,我都经历了什么

SeaTunnel Web安装踩坑记&#xff1a;从MySQL驱动到Hazelcast配置&#xff0c;我都经历了什么 那天下午&#xff0c;当我第一次尝试在Linux服务器上部署SeaTunnel Web时&#xff0c;完全没想到会开启一段长达6小时的"排雷之旅"。作为一款强大的数据集成平台&#xff…...

uniapp组件-Card卡片:从基础到高级应用全解析

1. 初识uni-app Card卡片组件 第一次接触uni-app的Card卡片组件时&#xff0c;我正为一个电商项目发愁。产品经理要求实现商品列表的卡片式布局&#xff0c;既要有图片展示&#xff0c;又要有价格和购买按钮。当时尝试自己写CSS实现&#xff0c;结果各种兼容性问题让我头疼不已…...

Docker 入门到进阶:容器化部署 Nginx + MySQL + WordPress 实战(附 Dockerfile、docker-compose.yml 详解)

前言在云原生时代&#xff0c;Docker 已成为开发与运维人员的必备技能。本文将带你从零开始&#xff0c;系统学习 Docker 核心概念与实战技巧&#xff0c;最终使用 Docker Compose 一键部署一套高可用的 WordPress 站点&#xff0c;其中包含 Nginx 作为反向代理、MySQL 作为数据…...

PowerToys Image Resizer:三步解决全场景图片批量处理难题

PowerToys Image Resizer&#xff1a;三步解决全场景图片批量处理难题 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/Power…...

即插即用模块-特征增强篇:FEM模块在遥感小目标检测中的实战解析

1. 遥感小目标检测的痛点与FEM模块的诞生 在遥感图像分析领域&#xff0c;小目标检测一直是个让人头疼的问题。想象一下&#xff0c;你要在卫星拍摄的城市图像中找到那些只有几十个像素大小的车辆&#xff0c;或者在广袤的农田中识别出微小的灌溉设备。这些目标不仅尺寸小&…...

Legacy-iOS-Kit全流程指南:让iPad mini 2重获新生的系统降级实践

Legacy-iOS-Kit全流程指南&#xff1a;让iPad mini 2重获新生的系统降级实践 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS…...

GIS数据处理避坑指南:如何一键批量转换KMZ/KML并保留所有字段(附工具下载)

GIS数据处理实战&#xff1a;KMZ/KML批量转换与属性保留全流程解析 在GIS数据处理工作中&#xff0c;KMZ和KML格式的批量转换是一个高频需求&#xff0c;但许多用户在实际操作中常遇到属性丢失、坐标系错乱等问题。我曾在一个城市交通规划项目中&#xff0c;因为转换后的属性字…...