【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)

重启项目测试:

相关推荐
新缸中之脑2 小时前
Imagerouter.io: 免费图像生成API
人工智能
MM_MS2 小时前
Halcon图像点运算、获取直方图、直方图均衡化
图像处理·人工智能·算法·目标检测·计算机视觉·c#·视觉检测
阿杰学AI2 小时前
AI核心知识77——大语言模型之Joint Training(简洁且通俗易懂版)
人工智能·深度学习·ai·语言模型·rag·联合训练·joint training
DFT计算杂谈2 小时前
VASP+PHONOPY+pypolymlpj计算不同温度下声子谱,附批处理脚本
java·前端·数据库·人工智能·python
星爷AG I2 小时前
9-23 动作意图理解(AGI基础理论)
人工智能·agi
Andy Dennis2 小时前
FTP局域网小网站V2.3——安全、批量、有序,体验全新进化
服务器·flask·ftp工具
九尾狐ai2 小时前
从九尾狐AI实战案例解析AI短视频获客的系统架构与实现方案
人工智能
格林威2 小时前
Baumer相机金属弹簧圈数自动计数:用于来料快速检验的 6 个核心算法,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·堡盟相机
万行2 小时前
SQL进阶&索引篇
开发语言·数据库·人工智能·sql