news 2026/7/28 16:35:57

【AI大模型舆情分析】微博舆情分析可视化系统(pytorch2+基于BERT大模型训练微调+flask+pandas+echarts) 实战(上)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【AI大模型舆情分析】微博舆情分析可视化系统(pytorch2+基于BERT大模型训练微调+flask+pandas+echarts) 实战(上)

大家好,我是锋哥。最近发布一条【AI大模型舆情分析】微博舆情分析可视化系统(pytorch2+基于BERT大模型训练微调+flask+pandas+echarts)高级实战。分上下节。

实战简介:

前面的2026版【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts+爬虫) 二次开发,前面课程舆情分析用得是snowNLP,我们现在改用基于BERT开源大模型微调,来实现舆情分析,提高舆情分析的准确率。重点讲解基本BERT大模型实现舆情分析,二分类问题。

视频教程和源码领取:

链接:https://pan.baidu.com/s/1_NzaNr0Wln6kv1rdiQnUTg
提取码:0000

微博舆情分析可视化系统 - 项目准备

基于python微博舆情分析可视化系统(flask+pandas+echarts) 项目源码本地运行下。

登录页面,我们改下小标题,加个LLM

登录后,进入系统主页面:

BERT大模型实现舆情分析功能

大模型开发环境准备-PyTorch和transformers库

首先新建model目录,把Bert-base-chinese粘贴到model目录下。

我们大模型训练尽可能的基于GPU的,CUDA要安装下。

然后我们要安装Pytorch2和transformers库:

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126
pip install transformers -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

环境测试代码:

import torch from transformers import pipeline print(torch.cuda.is_available()) # 通过pipeline 加载模型 model = pipeline(task="text-classification", # 任务类型 二分类 model="Bert-base-chinese", # 模型名称 device=0 # 使用GPU ) # 调用模型预测 result = model("小明是好学生") print(result)

运行结果:

BERT大模型情感分析功能封装(使用AutoModel自动模型方式)

新建llm目录,里面再新建weibo.py文件

代码实现:

import torch from transformers import AutoTokenizer, AutoModelForSequenceClassification # 使用设备GPU device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print(device) # 加载分词器 tokenizer = AutoTokenizer.from_pretrained('../model/Bert-base-chinese') # 加载模型 model = AutoModelForSequenceClassification.from_pretrained('../model/Bert-base-chinese') print(model) # 情感分析 def data_classfication(data): # 准备输入数据 input_ids = tokenizer.encode( text=data, # 输入文本 return_tensors='pt', # 返回PyTorch张量 truncation=True, # 截断超过长度的输入文本 max_length=20, # 最长长度 padding="max_length" # 填充短的输入文本 ).to(device) # 评估模型 model.eval() model.to(device) # 模型预测 output = model(input_ids) print(output) # 获取预测结果 logits = output.logits print(logits) predication = torch.argmax(logits, dim=-1) print(predication) sentiment = predication.item() # 把张量转成数字 print(sentiment) sentiment_label = "正面" if sentiment == 1 else "负面" return sentiment_label if __name__ == '__main__': result = data_classfication("开心") print("预测结果:", result)

运行结果:

使用BERT大模型对微博热词进行情感分析

找到视图层业务逻辑代码:

我们修改下:

# 改成使用大模型进行舆情分析 sentiments = data_classfication(defaultHotWord)

启动就直接报错了

原因是加载模型用得是相对路径,我们调用封装方法的时候,相对路径又变了。所以我们企业级开发,一般不用相对路径,只用绝对路径,由于开发环境,测试环境,线上环境模型路径会变,所以我们一般都会把路径放到配置文件里面去,方便修改路径。

我们在项目根目录下新建config.py

配置下模型路径:

# 定义模型路径 model_path = 'D:\python_pro\weiboLLMProject2\model'

接下来,weibo.py里把相对路径,改成绝对路径,使用config.py里的model_path属性;

改成:

# 加载分词器 tokenizer = AutoTokenizer.from_pretrained(config.model_path + "/Bert-base-chinese") # 加载模型 model = AutoModelForSequenceClassification.from_pretrained(config.model_path + "/Bert-base-chinese") print(model)

运行测试系统,可以了。不过情感分析的准确率很有限,等后面VIP课程,我们使用增量微调训练后的模型,准确率能上到90%以上。

使用BERT大模型对微博文章内容进行情感分析

找到微博舆情分析后端视图业务逻辑代码:

改成:

# 改成使用大模型进行舆情分析 sentiments = data_classfication(article[1])

重启项目测试:

使用BERT大模型对微博舆情分析以及可视化操作

找到数据可视化微博舆情分析后端视图层业务逻辑代码,包括柱状图,树形图,饼状图。代码都需要修改;

代码修改:

@pb.route('sentimentAnalysis') def sentimentAnalysis(): """ 舆情数据分析 :return: """ xHotBarData = ['正面', '负面'] yHotBarData = [0, 0] # 只读取前100条 df = pd.read_csv('./fenci/comment_fre.csv', nrows=100) for value in df.values: # 情感分析 # stc = SnowNLP(value[0]).sentiments # if stc > 0.6: # yHotBarData[0] += 1 # elif stc < 0.2: # yHotBarData[2] += 1 # else: # yHotBarData[1] += 1 # 使用大模型进行情感分析 sentiment_label = data_classfication(value[0]) if sentiment_label == '正面': yHotBarData[0] += 1 else: yHotBarData[1] += 1 hotTreeMapData = [{ 'name': xHotBarData[0], 'value': yHotBarData[0] }, { 'name': xHotBarData[1], 'value': yHotBarData[1] }] commentPieData = [{ 'name': '正面', 'value': 0 }, { 'name': '负面', 'value': 0 }] articlePieData = [{ 'name': '正面', 'value': 0 }, { 'name': '负面', 'value': 0 }] commentList = commentDao.getAllComment() for comment in commentList: # 情感分析 # stc = SnowNLP(comment[1]).sentiments # if stc > 0.6: # commentPieData[0]['value'] += 1 # elif stc < 0.2: # commentPieData[2]['value'] += 1 # else: # commentPieData[1]['value'] += 1 # 使用大模型进行情感分析 sentiment_label = data_classfication(comment[1]) if sentiment_label == '正面': commentPieData[0]['value'] += 1 else: commentPieData[1]['value'] += 1 articleList = articleDao.getAllArticle() for article in articleList: # 情感分析 # stc = SnowNLP(article[1]).sentiments # if stc > 0.6: # articlePieData[0]['value'] += 1 # elif stc < 0.2: # articlePieData[2]['value'] += 1 # else: # articlePieData[1]['value'] += 1 # 使用大模型进行情感分析 sentiment_label = data_classfication(article[1]) if sentiment_label == '正面': articlePieData[0]['value'] += 1 else: articlePieData[1]['value'] += 1 df2 = pd.read_csv('./fenci/comment_fre.csv', nrows=15) xhotData15 = [x[0] for x in df2.values][::-1] yhotData15 = [x[1] for x in df2.values][::-1] return render_template('sentimentAnalysis.html', xHotBarData=xHotBarData, yHotBarData=yHotBarData, hotTreeMapData=hotTreeMapData, commentPieData=commentPieData, articlePieData=articlePieData, xhotData15=xhotData15, yhotData15=yhotData15)

重启项目测试:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/26 7:07:05

基于JavaWeb的网上书城网站的设计与实现 开题报告(2)

目录 研究背景与意义系统功能模块技术选型数据库设计示例系统特色预期成果 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 研究背景与意义 随着电子商务的快速发展&#xff0c;网上书城成为用户购书的重…

作者头像 李华
网站建设 2026/7/26 7:06:03

【读书笔记】《演讲的本质》

MIT传奇教授Patrick Winston的演讲课&#xff1a;如何在关键时刻让人真正听你说话 一个残酷的事实 90%的人不是不会说话&#xff0c;而是一开口就让人走神。他们逻辑完整,内容正确,PPT精美,但台下的人却在想&#xff1a;中午吃什么?手机有没有消息?这人什么时候讲完? Patric…

作者头像 李华
网站建设 2026/7/26 9:54:15

基于Simulink的根轨迹法控制器设计与仿真建模示例

目录 手把手教你学Simulink 一、引言:为什么工程师仍要学“根轨迹法”? 二、理论基础:根轨迹法核心思想 1. 闭环特征方程 2. 根轨迹绘制法则(简要) 三、示例系统:位置伺服系统 1. 被控对象传递函数 四、MATLAB 中绘制根轨迹 步骤1:定义系统并绘图 步骤2:分析根…

作者头像 李华
网站建设 2026/7/27 14:54:07

day73(2.1)——leetcode面试经典150

127. 单词接龙 127. 单词接龙 这个跟昨天的题还是有点不一样的&#xff0c;这个如果按照昨天的方法&#xff0c;会超时&#xff0c;因为时间已经到了50000 题目&#xff1a; 题解&#xff1a; class Solution {public int ladderLength(String beginWord, String endWord, …

作者头像 李华