BERT文本分类(PyTorch和Transformers)畅用七个模型架构

(PyTorch)BERT文本分类:七种模型架构

🌟 1. 介绍

使用BERT完成文本分类任务(如情感分析,新闻文本分类等等)对于NLPer已经是很基础的工作了!虽说已迈入LLM时代,但是BERT这类较小的传统预训练模型的作用同样不可小觑,常常在某些场景下达到出乎意料的效果。本文介绍了一个利用BERT完成文本分类的开源项目,项目源码 Bert-Text-Classification。项目包含了7条基线,每条基线运行起来所需的显存都很小,用来作baseline非常的不错。

为方便下载:夸克网盘链接,大家也可直接进入GitHub地址访问项目(同时给作者点个🌟哈哈哈)
另外,当前很多的BERT文本分类项目都是很老的包了,可能在配置环境时会出现问题。但本项目使用的包在当前主流的服务器上肯定可以配置成功!按照本项目的依赖文件去安装肯定不会出问题!

🔍 2. 模型架构解析

模型类型模型描述适用场景
BertOrigin标准BERT实现基线对比实验
BertATT动态注意力机制增强长文本关键信息提取
BertLSTMRNN时序建模能力融合序列依赖性强的任务
BertCNN局部特征提取器设计短文本模式识别
BertDPCNN深度金字塔卷积架构层次化特征学习
BertRCNNRNN-CNN混合架构上下文敏感的分类任务
BertCNNPlus全局-局部特征融合机制需要综合语义理解的场景

🛠 3. 快速开始

话不多说,直接开始复现步骤(作者已按照以下步骤完成复现,若遇到问题,欢迎在评论区提出,或者在GitHub的issue中提出,issue中提出问题会有邮件通知作者)

3.1 环境要求

  • Python 3.8
  • 依赖安装:pip install -r requirements.txt
# 创建conda环境
conda create -n bert2text python=3.8
# 安装依赖
cd xx/xx/Bert-Text-Classification
pip install -r requirements.txt

3.2 数据准备

  • 文本分类数据集,包含训练集、验证集、测试集
  • 单条数据格式:label \t text,如:
  • 0	我爱北京天安门
    1	这个电影真好看
    
  • 数据集存放路径:data/,数据集文件名:train.tsvdev.tsvtest.tsv

源码中的数据集因版权,只保留了前100条数据,若需要情感二分类SST2的完整数据集,可通过链接 SST2 访问下载。若是自己的数据集,请自行按照以上格式修改(注意分类类别需自行转换为数字标签)!比如:0对应“消极”,1对应“积极"

3.3 模型训练和评估

0️⃣ 修改相应的运行文件的配置信息,如run_STT2.py

# 数据集路径
data_dir = "./data/SST2"
# 标签列表
label_list = ["0", "1"] # SST2数据集标签列表(SST2是情感二分类数据集)
# 所需运行的模型名称列表
model_name_list = ["BertOrigin", "BertATT", "BertCNN", "BertCNNPlus", "BertDPCNN", "BertRCNN", "BertLSTM"] # 运行七条基线模型
# 模型保存路径、缓存保存路径、日志保存路径
output_dir = "./sst2_output/"
cache_dir = "./sst2_cache/"
log_dir = "./sst2_log/"
# BERT预训练模型路径,中文数据集使用"bert-base-chinese",英文数据集使用"bert-base-uncased"
model_name_or_path = "XXXX/XXX/bert-base-uncased"

需要运行几条基线,就在model_name_list 中保留哪几个模型的名称。中文文本分类需要使用中文版的BERT。

1️⃣ 运行训练脚本:

# 注意修改执行的数据集脚本名称,如运行SST2数据集时,run.sh中应该是python3 run_SST2.py
CUDA_VISIBLE_DEVICES=0 bash run.sh

# run.sh中的参数说明:
max_seq_length:句子截断长度
num_train_epochs:训练轮数
do_train:是否训练
gpu_ids:使用的GPU编号,注意单卡训练时,gpu_ids为0
gradient_accumulation_steps:梯度累积步数
print_step:打印训练信息的步数(验证频率)
early_stop:早停步数,即验证集准确率连续early_stop次不再提升时,停止训练。当设置很大时,相当于关闭了早停功能。
train_batch_size:训练批次大小

第一次跑可以直接使用默认配置,看是否能运行成功。若爆显存可修改max_seq_length和train_batch_size大小。

2️⃣ 测试模型:

# 训练完成后,模型保存在`output_dir`目录下,如`./sst2_output/BertOrigin/`,包含模型文件、词表文件、配置文件等。
# 移除`run.sh`中的`do_train`参数,运行测试脚本
CUDA_VISIBLE_DEVICES=0 bash run.sh

在源码的设置中,其实每训练一个epoch后,都在测试集上进行了预测,同时记录了对应的结果。所以做不做步骤2其实都可以。保存的结果在./sst2_output/BertXXX/BertXXX/metric_info_for_test.json中。记录的指标包含:

{
       "epoch": 1,
       "auc": 0.5,
       "accuracy": 66.69859514687101,
       "P_macro_avg": 44.97381885071993,
       "R_macro_avg": 45.84622325341583,
       "F1_macro_avg": 44.36622804917629,
       "P_weighted_avg": 63.133033572230936,
       "R_weighted_avg": 66.69859514687101,
       "F1_weighted_avg": 63.44510333347591
   }

注意,若分类类别大于2,则AUC指标设置为0.5不变。

3.4 训练监控

可通过TensorBoard查看训练日志,日志路径示例:./sst2_log/
tensorboard的使用在此处就不再赘述了,若有需要可自行搜索教程!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ComfyUI流程图生图原理详解

一、引言 ComfyUI 是一款功能强大的工具,在图像生成等领域有着广泛应用。本文补充一点ComfyUI 的安装与配置过程遇到的问题,并深入剖析图生图过程及相关参数,帮助读者快速入门并深入理解其原理。 二、ComfyUI 的安装与配置中遇到的问题 &a…

本地部署DeepSeek集成VSCode创建自己的AI助手

文章目录 安装Ollama和CodeGPT安装Ollama安装CodeGPT 下载并配置DeepSeek模型下载聊天模型(deepseek-r1:1.5b)下载自动补全模型(deepseek-coder:1.3b) 使用DeepSeek进行编程辅助配置CodeGPT使用DeepSeek模型开始使用AI助手 ✍️相…

硬件学习笔记--40 电磁兼容试验-4 快速瞬变脉冲群试验介绍

目录 电磁兼容试验-快速瞬变脉冲群试验介绍 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验-快速瞬变脉冲群试验介绍 驻留时间是在规定频率下影响量施加的持续时间。被试设备(EUT)在经受扫频频带的电磁影响量或电磁干扰的情况下,在…

c++ 多线程知识汇总

一、std::thread std::thread 是 C11 引入的标准库中的线程类&#xff0c;用于创建和管理线程 1. 带参数的构造函数 template <class F, class... Args> std::thread::thread(F&& f, Args&&... args);F&& f&#xff1a;线程要执行的函数&…

XSS 常用标签及绕过姿势总结

XSS 常用标签及绕过姿势总结 一、xss 常见标签语句 0x01. 标签 <a href"javascript:alert(1)">test</a> <a href"x" onfocus"alert(xss);" autofocus"">xss</a> <a href"x" onclickeval(&quo…

基于SSM的农产品供销小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、农户功能模块&#xff1a;用户管理、农户管理、产品分类管理、农产品管理、咨询管理、订单管理、收藏管理、购物车、充值、下单等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试…

未授权访问成因与防御

1、未授权访问根因 2、检查步骤 3、修复建议 1、更新组件至安全版本 2、加强访问策略限制&#xff0c;限制用户访问 3、定期进行漏扫和渗透测试发现威胁及时修复 4、漏洞概览 Elasticsearch未授权访问漏洞 Hadoop未授权访问漏洞 Jenkins未授权访问 MongoDB未授权访问 Zoo…

策略模式-小结

总结一下看到的策略模式&#xff1a; A:一个含有一个方法的接口 B:具体的实行方式行为1,2,3&#xff0c;实现上面的接口。 C:一个环境类&#xff08;或者上下文类&#xff09;&#xff0c;形式可以是&#xff1a;工厂模式&#xff0c;构造器注入模式&#xff0c;枚举模式。 …

16.React学习笔记.React更新机制

一. 发生更新的时机以及顺序## image.png props/state改变render函数重新执行产生新的VDOM树新旧DOM树进行diff计算出差异进行更新更新到真实的DOM 二. React更新流程## React将最好的O(n^3)的tree比较算法优化为O(n)。 同层节点之间相互比较&#xff0c;不跨节点。不同类型的节…

SpringBoot通过文件监听实现MQ加密数据异步转发

一、前言 假设在两个局域网中&#xff0c;生产者和消费者进行通信 使用同步方式&#xff0c;mq偶尔会因为网络策略等问题导致消息发送失败&#xff0c;那么这条数据就丢失了 这时可以使用异步方式&#xff0c;将数据在生产端存一份&#xff0c;网通时发&#xff0c;网断时存 …

windows10本地的JMeter+Influxdb+Grafana压测性能测试,【亲测,避坑】

一、环境&#xff0c;以下软件需要解压、安装到电脑上。 windows10 apache-jmeter-5.6.3 jdk-17.0.13 influxdb2-2.7.11 grafana-enterprise-11.5.1二、配置Influxdb&#xff0c;安装完默认连接http://localhost:8086/。打开连接&#xff0c;配置如下。 1、配置bucket&#x…

excel如何拆分为1000行一个的文件

方法一&#xff1a;使用hpctb 打开文件&#xff0c;点“行分表”就行了。如图: 一步完成&#xff0c;不需要安装环境&#xff0c;也不需要专业知识&#xff0c;也不需要“神”一样的ai。 方法二&#xff1a;使用Python 安装库&#xff08;如未安装&#xff09; pip install p…

docker nginx 配置文件详解

在平常的开发工作中&#xff0c;我们经常需要访问静态资源&#xff08;图片、HTML页面等&#xff09;、访问文件目录、部署项目时进行负载均衡等。那么我们就会使用到Nginx&#xff0c;nginx.conf 的配置至关重要。那么今天主要结合访问静态资源、负载均衡等总结下 nginx.conf …

分布式 IO:矿山砂石装备高效控制的新引擎

在砂石与矿山行业这片充满挑战与机遇的领域&#xff0c;装备的高效运行和精准控制一直是企业追求的核心目标。随着科技的飞速发展&#xff0c;明达技术推出的MR30分布式 IO 模块作为一种先进的控制技术&#xff0c;正逐渐崭露头角&#xff0c;为砂石、矿山装备的升级改造带来了…

微信小程序配置3 配置sass

1. 在config。json文件里面的setting配置“sass” 2. 改你需要的页面后缀名为scss。 3.查看页面即可看到样式。

VS Code 通知中一直显示“Reactivating terminals...”的问题解决

VS Code 通知中一直显示“Reactivating terminals...”的问题解决 问题截图解决方案修复截图相关链接 问题截图 解决方案 点击顶部放大镜(&#x1f50d;) -> 输入尖括号(>) -> 然后搜索(Python: Clear Workspace Interpreter Setting) -> 最后点击即可 修复截图…

小白学网络安全难吗?需要具备哪些条件?

作为一名零基础小白&#xff0c;想要转行IT学习一门新技术&#xff0c;且上手难度低、就业前景好、薪资待遇高、入行门槛低&#xff0c;网络安全是最值得的选择&#xff0c;掌握它之后你可以获得一份收入不错的工作。那么零基础学网络安全好学吗?以下是具体内容介绍。 首先&am…

服务器,交换机和路由器的一些笔记

服务器、交换机和路由器是网络中常用的设备&#xff0c;它们的本质区别和联系如下&#xff1a; 本质区别 功能不同 服务器&#xff1a;就像一个大型的资料仓库和工作处理中心&#xff0c;主要用来存储和管理各种数据&#xff0c;比如网站的网页数据、公司的办公文档等&#x…

untiy3D为游戏物体制作简单的动画

1.创建一个物体挂载动画组件Animator 2.创建一个动画控制器 3.动画控制器挂载到Animator组件 4.创建动画窗口>动画 入口默认执行left 执行效果 20250212_151707 脚本控制动画 鼠标点击是切换到动画t using System.Collections; using System.Collections.Generic; usi…

2、k8s 二进制安装(详细)

k8s 二进制安装 IP规划初始化部署 etcd 集群在 etcd01 节点上操作准备cfssl证书生成工具&#xff0c;加权生成etcd证书上传etcd软件包启动 etcd 服务 部署 Master 组件部署 Worker Node 组件node 节点安装 docker部署组件 部署 CNI 网络组件部署 flannel简介部署 部署 Calico简…