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

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的使用在此处就不再赘述了,若有需要可自行搜索教程!

相关文章:

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

(PyTorch)BERT文本分类:七种模型架构 🌟 1. 介绍 使用BERT完成文本分类任务(如情感分析,新闻文本分类等等)对于NLPer已经是很基础的工作了!虽说已迈入LLM时代,但是BERT…...

两步在 Vite 中配置 Tailwindcss

第一步:安装依赖 npm i -D tailwindcss tailwindcss/vite第二步:引入 tailwindcss 更改配置 // src/main.js import tailwindcss/index// vite.config.js import vue from vitejs/plugin-vue import tailwindcss from tailwindcss/viteexport default …...

【vmware虚拟机安装教程】

以下是在VMware Workstation Pro上安装虚拟机的详细教程: 准备工作 下载VMware Workstation Pro 访问VMware官网下载并安装VMware Workstation Pro(支持Windows和Linux系统)。安装完成后,确保已激活软件(试用版或正式…...

文字转语音(三)FreeTTS实现

项目中有相关的功能,就简单研究了一下。 说明 FreeTTS 是一个基于 Java 的开源文本转语音(TTS)引擎,旨在将文字内容转换为自然语音输出。 FreeTTS 适合对 英文语音质量要求低、预算有限且需要离线运行 的场景,但若需…...

string类详解(上)

文章目录 目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件 2. 为什么学习string类3. 标准库中的string类3.1 string类3.2 string类的常用接口说明 目录 STL简介为什么学习string类标准库中的string类string类的模拟实现现代版写法的String类写时拷贝 1. STL简介 …...

Visual Studio Code使用ai大模型编成

1、在Visual Studio Code搜索安装roo code 2、去https://openrouter.ai/settings/keys官网申请个免费的配置使用...

外贸跨境订货系统流程设计、功能列表及源码输出

在全球化的商业环境下,外贸跨境订货系统对于企业拓展国际市场、提升运营效率至关重要。该系统旨在为外贸企业提供一个便捷、高效、安全的订货平台,实现商品展示、订单管理、物流跟踪等功能,满足跨境业务的多样化需求。以下将详细阐述外贸订货…...

TraeAi上手体验

一、Trae介绍 由于MarsCode 在国内由于规定限制,无法使用 Claude 3.5 Sonnet 模型,字节跳动选择在海外推出 Trae,官网:https://www.trae.ai/。 二、安装 1.下载安装Trae-Setup-x64.exe 2.注册登录 安装完成后,点击登…...

深入解析 vLLM:高性能 LLM 服务框架的架构之美(一)原理与解析

修改内容时间2.4.1处理请求的流程,引用更好的流程图2025.02.11首发2025.02.08 深入解析 vLLM:高性能 LLM 服务框架的架构之美(一)原理与解析 深入解析 vLLM:高性能 LLM 服务框架的架构之美(二)…...

thingboard告警信息格式美化

原始报警json内容: { "severity": "CRITICAL","acknowledged": false,"cleared": false,"assigneeId": null,"startTs": 1739801102349,"endTs": 1739801102349,"ackTs": 0,&quo…...

redis解决高并发看门狗策略

当一个业务执行时间超过自己设定的锁释放时间,那么会导致有其他线程进入,从而抢到同一个票,所有需要使用看门狗策略,其实就是开一个守护线程,让守护线程去监控key,如果到时间了还未结束,就会将这个key重新s…...

Python函数的函数名250217

函数名其实就是一个变量,这个变量就是代指函数而已函数也可以被哈希,所以函数名也可以当作集合中的元素,也可作为字典的key值 # 将函数作为字典中的值,可以避免写大量的if...else语句 def fun1():return 123 def fun2():return 4…...

Unity 获取独立显卡数量

获取独立显卡数量 导入插件包打开Demo 运行看控制台日志 public class GetGraphicCountDemo : MonoBehaviour{public int count;// Start is called before the first frame updatevoid Start(){count this.GetIndependentGraphicsDeviceCount();}}...

JAVA生产环境(IDEA)排查死锁

使用 IntelliJ IDEA 排查死锁 IntelliJ IDEA 提供了强大的工具来帮助开发者排查死锁问题。以下是具体的排查步骤: 1. 编写并运行代码 首先,我们编写一个可能导致死锁的示例代码: public class DeadlockExample {private static final Obj…...

如何正确安装Stable Diffusion Web UI以及对应的xFormers

本文是我总结的步骤,验证了几次保证是对的。因为正确的安装 Stable Diffusion Web UI 以及对应的 xFormers 实在是太麻烦了,官方和网上的步骤都是残缺和分散的,加上国内网络速度不理想,所以需要一些额外步骤,之前研究出…...

机器学习_14 随机森林知识点总结

随机森林(Random Forest)是一种强大的集成学习算法,广泛应用于分类和回归任务。它通过构建多棵决策树并综合它们的预测结果,显著提高了模型的稳定性和准确性。今天,我们就来深入探讨随机森林的原理、实现和应用。 一、…...

机器学习基本篇

文章目录 1 基本概念2 基本流程2.0 数据获取2.1 预处理2.1.0 认识数据认识问题2.1.1 不平衡标签的处理a.随机过采样方法 ROS,random over-samplingb. SMOTE synthetic minority Over-Sampling Technique2.2 缺失值处理2.3 数据清洗2.3.0离散特征编码2.3.1 连续特征处理归一化标…...

vue2.x与vue3.x生命周期的比较

vue2.x 生命周期图示: new Vue() | v Init Events & Lifecycle | v beforeCreate | v created | v beforeMount | v mounted | v beforeUpdate (when data changes) | v updated | v beforeDestroy (when vm.…...

接口测试及常用接口测试工具(Postman/Jmeter)

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口&#xf…...

[论文阅读] SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

文章目录 一、前言二、主要贡献三、Introduction四、Methodology4.1 Motivation :4.2Framework Overview.** 一、前言 通信作者是香港理工大学 & OPPO研究所的张磊教授,也是图像超分ISR的一个大牛了。 论文如下 SeeSR: Towards Semantics-Aware Rea…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...