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

NLP_情感分类_预训练加微调方案

文章目录

  • 项目背景
  • 代码
    • 导包
    • 一些模型以及训练的参数设置
    • 定义dataset
    • 定义模型
    • 读取数据
    • 声明训练及测试数据集
    • 将定义模型实例化
    • 打印模型结构
    • 模型训练
    • 测试集效果
  • 同类型项目


项目背景

项目的目的,是为了对情感评论数据集进行预测打标。在训练之前,需要对数据进行数据清洗环节,前面已对数据进行清洗,详情可移步至NLP_情感分类_数据清洗
前面用机器学习方案解决,详情可移步至NLP_情感分类_机器学习方案

下面对已清洗的数据集,用预训练加微调方案进行处理

代码

导包

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from tqdm import tqdm
import pickle
import numpy as np
import gc
import os
from sklearn.metrics import accuracy_score,f1_score,recall_score,precision_score
from transformers import AutoTokenizer, AutoModelForMaskedLM, AutoModel
import torch
import torch.nn as nn
from torch.utils.data import Dataset
import torch.utils.data as D
from tqdm import tqdm
from sklearn.model_selection import train_test_split
import warningswarnings.filterwarnings('ignore')

一些模型以及训练的参数设置

batch_size = 128
max_seq = 128
Epoch = 2
lr = 2e-5
debug_mode = False                #若开启此模式,则只读入很小的一部分数据,可以用来快速调试整个流程
num_workers = 0                    #多线程读取数据的worker的个数,由于win对多线程支持有bug,这里只能设置为0
seed = 4399
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
MODEL_PATH =  'pre_model/' #'juliensimon/reviews-sentiment-analysis'  #预训练权重的目录 or 远程地址
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)   

定义dataset

class TextDataSet(Dataset):def __init__(self, df, tokenizer, max_seq=128, debug_mode = False):self.max_seq = max_seqself.df = dfself.tokenizer = tokenizerself.debug_mode = debug_modeif self.debug_mode:self.df = self.df[:100]def __len__(self):return len(self.df)def __getitem__(self,item):sent = self.df['text'].iloc[item]enc_code = self.tokenizer.encode_plus(sent,max_length=self.max_seq,pad_to_max_length=True,truncation=True)input_ids = enc_code['input_ids']input_mask = enc_code['attention_mask']label = self.df['label'].iloc[item]return (torch.LongTensor(input_ids), torch.LongTensor(input_mask), int(label))

定义模型

class Model(nn.Module):def __init__(self,MODEL_PATH =None):super(Model, self).__init__()self.model = AutoModel.from_pretrained(MODEL_PATH)self.fc = nn.Linear(768, 2)def forward(self, input_ids, input_mask):sentence_emb = self.model(input_ids, attention_mask = input_mask).last_hidden_state # [batch,seq_len,emb_dim]sentence_emb = torch.mean(sentence_emb,dim=1)out = self.fc(sentence_emb)return out

读取数据

df = pd.read_csv('data/sentiment_analysis_clean.csv')
df = df.dropna()

声明训练及测试数据集

train_df, test_df = train_test_split(df,test_size=0.2,random_state=2024)#声明数据集
train_dataset = TextDataSet(train_df,tokenizer,debug_mode=debug_mode)
test_dataset = TextDataSet(test_df,tokenizer,debug_mode=debug_mode)#注意这里的num_workers参数,由于在win环境下对多线程支持不到位,所以这里只能设置为0,若使用服务器则可以设置其他的
train_loader = D.DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=num_workers)test_loader = D.DataLoader(test_dataset, batch_size=batch_size, shuffle=False, num_workers=num_workers)

将定义模型实例化

model = Model(MODEL_PATH)

打印模型结构

model

在这里插入图片描述

模型训练

criterion = nn.CrossEntropyLoss()
model = model.to(device)
optimizer = torch.optim.AdamW(model.parameters(), lr=lr, betas=(0.5, 0.999))
scaler = torch.cuda.amp.GradScaler()
#*****************************************************train*********************************************
for epoch in range(Epoch):model.train()correct = 0total = 0for i, batch_data in enumerate(train_loader):(input_ids, input_mask, label) = batch_datainput_ids = input_ids.to(device)input_mask = input_mask.to(device)label = label.to(device)optimizer.zero_grad()with torch.cuda.amp.autocast():logit = model(input_ids, input_mask)loss = criterion(logit, label)scaler.scale(loss).backward()scaler.step(optimizer)scaler.update()_, predicted = torch.max(logit.data, 1)total += label.size(0)correct += (predicted == label).sum().item()if i % 10 == 0:acc = 100 * correct / totalprint(f'Epoch [{epoch+1}/{Epoch}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item():.4f}, Accuracy: {acc:.2f}%')

在这里插入图片描述

测试集效果

#*****************************************************Test*********************************************
correct = 0
total = 0
with torch.no_grad():model.eval()for batch_data in test_loader:(input_ids, input_mask, label) = batch_datainput_ids = input_ids.to(device)input_mask = input_mask.to(device)label = label.to(device)outputs = model(input_ids, input_mask)_, predicted = torch.max(outputs.data, 1)total += label.size(0)correct += (predicted == label).sum().item()print('#'*30+'Test Accuracy:{:7.3f} '.format(100 * correct / total)+'#'*30)print()

在这里插入图片描述



同类型项目

阿里云-零基础入门NLP【基于机器学习的文本分类】

阿里云-零基础入门NLP【基于深度学习的文本分类3-BERT】
也可以参考进行学习


学习的参考资料:
深度之眼

相关文章:

NLP_情感分类_预训练加微调方案

文章目录 项目背景代码导包一些模型以及训练的参数设置定义dataset定义模型读取数据声明训练及测试数据集将定义模型实例化打印模型结构模型训练测试集效果 同类型项目 项目背景 项目的目的,是为了对情感评论数据集进行预测打标。在训练之前,需要对数据…...

全网最适合入门的面向对象编程教程:36 Python的内置数据类型-字典

全网最适合入门的面向对象编程教程:36 Python 的内置数据类型-字典 摘要: 字典是非常好用的容器,它可以用来直接将一个对象映射到另一个对象。一个拥有属性的空对象在某种程度上说就是一个字典,属性名映射到属性值。在内部&#…...

DataWind看板绘制案例

摘要​: 1. 在不清楚DataWind看板怎么画的情况,可以先把表格给实现了,然后找几个有价值的数据进行看板实现 2. 还是不知道怎么画的情况,就去模仿其他人的案例; 3. 多看看DataWind提供的函数用法,就可以把表达式的使用运用起来了;​ 飞书官方文档:https://www.volcen…...

Golang | Leetcode Golang题解之第335题路径交叉

题目&#xff1a; 题解&#xff1a; func isSelfCrossing(distance []int) bool {n : len(distance)// 处理第 1 种情况i : 0for i < n && (i < 2 || distance[i] > distance[i-2]) {i}if i n {return false}// 处理第 j 次移动的情况if i 3 && di…...

C# 在Word中插入或删除分节符

在Word中&#xff0c;分节符是一种强大的工具&#xff0c;用于将文档分成不同的部分&#xff0c;每个部分可以有独立的页面设置&#xff0c;如页边距、纸张方向、页眉和页脚等。正确使用分节符可以极大地提升文档的组织性和专业性&#xff0c;特别是在长文档中&#xff0c;需要…...

基于STM32+Qt设计的无人超市收银系统(206)

文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】上位机设计思路1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要【5】国内外技术发展现状1.4 开发工具的选择【1】设备端开…...

开源免费的表单收集系统TDuck

TDuck&#xff08;填鸭表单&#xff09;是一款开源免费的表单收集系统&#xff0c;它基于Apache 2.0协议开源&#xff0c;用户可以随时下载源码&#xff0c;自由修改和定制&#xff0c;也可以参与到项目的贡献和反馈中。TDuck表单系统不仅支持私有化部署&#xff0c;还提供了丰…...

Python 生成器、迭代器、可迭代对象 以及应用场景

Python 生成器&#xff08;Generators&#xff09; 生成器是一种特殊的迭代器&#xff0c;它使用 yield 语句来逐次产生数据&#xff0c;而不是一次性在内存中生成数据。这意呀着生成器提供了一种懒加载&#xff08;lazy evaluation&#xff09;的方式&#xff0c;非常适合处理…...

马斯克对欧盟的反应

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

uniapp + 安卓APP + H5 + 微信小程序实现PDF文件的预览和下载

文章目录 uniapp 安卓APP H5 微信小程序实现PDF文件的预览和下载1、用到的技术及插件2、简述操作&#xff1a;下载预览 3、上代码&#xff1a;(主要是写后端&#xff0c;前端不大熟&#xff0c;我感觉写的还凑活&#xff0c;不对的请指正嘻嘻)4、注意的问题 uniapp 安卓APP…...

Elasticsearch 8 RAG 技术分享

作者&#xff1a;来自 Elastic 中国区首席架构师 Jerry 本文由 Elastic 中国区首席架构师 Jerry Zhu 在【AI 搜索 TechDay】上的分享整理而成。【AI 搜索 TechDay】 是 Elastic 和阿里云联合主办的 AI 技术 Meetup 系列&#xff0c;聚焦企业级 AI 搜索应用和开发者动手实践&am…...

根据字典值回显,有颜色的

背景 本项目以若依前端vue2版本为例&#xff0c;项目中有根据字典值回显文本的函数selectDictLabel&#xff0c;但是有时候我们需要带颜色的回显&#xff0c;大概这样的 用法 <template v-slotscope><dict-label :options"dangerLevelOptions" :value&qu…...

多台PC网络ADB连接同一台RK3399 Android7.1.2设备

在RK3399 Android7.1.2上面&#xff0c;进行网络ADB调试时&#xff0c;如果多台电脑连接同一台Android设备&#xff0c;第一台连接上的能正常操作&#xff0c;之后连接的看到设备状态为OFFLINE&#xff0c;分析了下ADBD相关代码&#xff0c;发现在ACCEPT Client的时候没有区分别…...

前端黑科技:使用 JavaScript 实现网页扫码功能

在数字化时代&#xff0c;二维码已经渗透到我们生活的方方面面。从移动支付到产品溯源&#xff0c;二维码凭借其便捷性和高效性&#xff0c;成为了信息传递的重要载体。而随着前端技术的不断发展&#xff0c;我们甚至可以使用 JavaScript 在网页端实现二维码扫描功能&#xff0…...

【人工智能】全景解析:【机器学习】【深度学习】从基础理论到应用前景的【深度探索】

目录 1. 人工智能的基本概念 1.1 人工智能的定义与发展 1.1.1 人工智能的定义 1.1.2 人工智能的发展历史 1.2 人工智能的分类 1.2.1 弱人工智能 1.2.2 强人工智能 1.2.3 超人工智能 1.3 人工智能的关键组成部分 1.3.1 数据 1.3.2 算法 1.3.3 计算能力 2. 机器学习…...

MySQL与PostgreSQL语法区别

1. 数据类型差异 a. 整型 ● MySQL中的text数据类型最大存储容量为64KB&#xff0c;PostgreSQL中的text类型没有此限制。 ● MySQL中使用tinyint、mediumint和int表示不同大小的整数&#xff0c;PostgreSQL使用smallint、int和bigint。 b. 浮点数类型 ● MySQL提供了float和…...

vue2+OpenLayers 天地图上凸显出当前地理位置区域(4)

凸显出当前区域 需要当前地方的json数据 这个可以在阿里的这个阿里 看下效果图 遮盖层的逃命都是可以调的 引入 下面一段代码 import sx from "/views/json/sx1.json"; // 下载的json import GeoJSON from "ol/format/GeoJSON"; // ol的一些方法 imp…...

基于Python、Django开发Web计算器

1、创建项目 创建Django项目参照https://blog.csdn.net/qq_42148307/article/details/140798249&#xff0c;其中项目名为compute&#xff0c;并在该项目下创建一个名为app的应用&#xff0c;并且进行基本的配置。 2、导入Bootstrap前端框架 Bootstrap的使用参照https://blo…...

高性能并行计算面试-核心概念-问题理解

目录 1.什么是并行计算&#xff1f;高性能从哪些方面体现&#xff1f; 2.CPU常见的并行技术 3.GPU并行 4.并发与并行 5.常见的并行计算模型 6.如何评估并行程序的性能&#xff1f; 7.描述Am达尔定律和Gustafson定律&#xff0c;并解释它们对并行计算性能的影响 8.并行计…...

java-activiti笔记

版本&#xff1a;activiti7 <dependency><groupId>org.activiti</groupId><artifactId>activiti-json-converter</artifactId><version>7.0.0.Beta2</version><exclusions><exclusion><groupId>org.mybatis</g…...

TEdit地图编辑器:从新手到专家的泰拉瑞亚世界创作指南

TEdit地图编辑器&#xff1a;从新手到专家的泰拉瑞亚世界创作指南 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also lets you ch…...

Fast-GitHub:3个技巧让国内开发者告别GitHub龟速时代

Fast-GitHub&#xff1a;3个技巧让国内开发者告别GitHub龟速时代 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 你是否曾经因为Gi…...

如何快速掌握LeRobot:从零开始部署机器人AI的完整实践指南

如何快速掌握LeRobot&#xff1a;从零开始部署机器人AI的完整实践指南 【免费下载链接】lerobot &#x1f917; LeRobot: Making AI for Robotics more accessible with end-to-end learning 项目地址: https://gitcode.com/GitHub_Trending/le/lerobot 想要将最先进的A…...

【AI智能体】OpenClaw 本地 数字员工 Windows 快速搭建方法

OpenClaw&#xff08;小龙虾&#xff09;是一款备受开发者关注的开源本地 AI 智能体&#xff0c;凭借本地运行、零代码操作、自动执行电脑任务等特点快速普及。它不只是对话 AI&#xff0c;更是能够直接操控系统的自动化工具&#xff0c;可根据自然语言指令完成任务拆解、工具调…...

GPTMessage项目拆解:SwiftUI+Combine集成OpenAI与Hugging Face API实战

1. 项目概述与核心价值最近在折腾一个挺有意思的Side Project&#xff0c;一个叫GPTMessage的iOS/macOS应用。简单来说&#xff0c;它把ChatGPT的聊天能力、DALLE的图像生成&#xff0c;还有Hugging Face上的一些模型&#xff08;比如图像描述、Stable Diffusion&#xff09;给…...

易连EDI-EasyLink大文件传输测试报告

一、引言 在企业级数据交换场景中&#xff0c;大文件传输的稳定性和效率始终是核心关注点。随着供应链协同深化&#xff0c;企业之间在公网进行交换的数据早已超越传统订单、发票等结构化短报文&#xff0c;逐步扩展到&#xff1a;产品主数据&#xff08;含高清图片/3D模型&am…...

西门子S7-300/400跨网段数据交换:DP/DP Coupler模块的Step7组态避坑指南

西门子S7-300/400跨网段数据交换实战&#xff1a;DP/DP Coupler组态深度解析与故障排查 在工业自动化系统中&#xff0c;多套PLC之间的数据交互是常见需求。当这些PLC分布在不同Profibus-DP网络时&#xff0c;西门子DP/DP Coupler模块成为实现跨网段通讯的关键组件。然而&#…...

ARM A64指令集架构解析与优化实践

1. A64指令集架构概述A64指令集作为ARMv8-A架构的64位执行状态核心&#xff0c;采用固定32位长度编码设计&#xff0c;这种设计在指令获取和流水线处理上具有显著优势。与传统的变长指令集相比&#xff0c;固定长度编码使得指令预取和译码阶段更加高效&#xff0c;尤其适合现代…...

基于微信小程序的家政服务预约系统(30291)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告/任务书&#xff09;远程调试控屏包运行一键启动项目&…...

别再全网搜了!企业微信后台三步找到你的CorpID和Secret(附AccessToken一键生成工具)

企业微信开发实战&#xff1a;3分钟获取CorpID与Secret的终极指南 第一次接触企业微信API开发时&#xff0c;最让人头疼的莫过于找不到CorpID和Secret这两个关键凭证。官方文档信息分散&#xff0c;后台界面又不够直观&#xff0c;很多开发者在这个环节浪费了大量时间。本文将…...