# 舆情分析系统 **Repository Path**: agent-dev-team/sentiment-analysis-system ## Basic Information - **Project Name**: 舆情分析系统 - **Description**: 基于BERT微调的中文舆情分析系统,含1000条JSON测试集与微调前后准确率对比评估。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-13 - **Last Updated**: 2026-08-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # sentiment-analysis-system 舆情分析系统 > 一个独立的**舆情分析系统**,从 HuggingFace 实战中抽离「舆情分析 + 模型微调」主线。核心价值在于:**亲手把通用中文 BERT 微调成领域舆情分类器**,并用一份 **1000 条** 规范测试集量化「微调前 / 微调后」的准确度差异。 --- ## 一、项目简介 本系统聚焦两件事:**模型微调(Fine-tuning)** 与 **评估(Evaluation)**。 - **模型微调**:基于 `bert-base-chinese` 做二分类微调,让预训练模型学会判别「消极 / 积极」舆情。 - **评估**:提供 **1000 条** 纯留出测试集 `test_set.json`(独立于训练集),对模型做严谨评估;并额外提供 **对比脚本**,直观验证微调前后准确度的提升。 > 本系统的价值不在于「调用现成大模型」,而在于**亲手微调**并用规范测试集量化效果。 --- ## 二、核心特性 ### 2.1 模型微调(Fine-tuning) 用标注数据微调一个轻量 BERT 分类头,而非用 Prompt 让大模型临时判断: - 预训练底座:`bert-base-chinese` - 任务:舆情二分类(`num_labels=2`,0=消极 / 1=积极) - 框架:`transformers.Trainer` + `DataCollatorWithPadding` - 训练:小学习率 `2e-5`、3 个 epoch、按 epoch 保存最优权重 微调脚本 `finetune.py` 覆盖:加载独立训练语料 `train_set.json` → 分词 → 加载模型 → 配置 `TrainingArguments` → 训练 → 保存权重。 ### 2.2 评估(Evaluation) 提供两个脚本,构成全方位的评估能力: - `evaluate.py`:用 1000 条测试集评估微调后模型,输出整体准确率、各类别精确率 / 召回率 / F1、宏平均。 - `compare.py`:**对比「微调前」与「微调后」的舆情分析准确度**,输出准确率与宏平均 F1 的对比及提升幅度,是本项目评估环节的重点。 --- ## 三、项目结构 ```text sentiment-analysis-system/ ├── pyproject.toml # 依赖源(uv 项目模式) ├── data_generator.py # 生成 train_set.json 与 test_set.json(两份互不重叠) ├── finetune.py # 模型微调脚本(核心:Fine-tuning,仅用 train_set) ├── evaluate.py # 评估脚本(核心:Evaluation,仅用 test_set) ├── compare.py # 微调前/后准确度对比脚本(核心:Evaluation) ├── train_set.json # 2000 条独立训练语料(仅用于微调) ├── test_set.json # 1000 条纯留出测试集(仅用于评估,与训练集零重叠) └── models/ # 微调后模型权重输出目录(运行后生成) └── sentiment-bert-finetuned/ ``` --- ## 四、数据集格式(train_set.json / test_set.json) 本项目将 **训练集与测试集严格隔离**,杜绝数据泄漏(训练样本绝不在评估时出现): - `train_set.json`:独立训练语料(**2000 条**),仅用于 `finetune.py` 微调。 - `test_set.json`:纯留出测试集(**1000 条**),仅用于 `evaluate.py` / `compare.py` 评估。 两者由不同随机种子生成,并已剔除全部逐条相同的样本(实测重叠 **0 条**)。 `test_set.json` 是一个 **JSON 列表**,每一个列表项是一个对象: - **`对话`**:待测试数据,按「一行行」描述,模拟舆情分析 / 客服系统的真实会话。 - **`舆情`**:标签字段,取值 `0` 或 `1`(`0`=消极,`1`=积极),作为评估的标注真值。 - **`id`**:自增序号,便于评估时溯源。 ```json [ { "对话": [ "用户:下单一周了保温杯还没发货。", "客服:抱歉给您带来困扰,您可申请退货退款。", "用户:明明页面还写着送,这不是虚假宣传吗!" ], "舆情": 0, "id": 1 }, { "对话": [ "用户:请问这款吹风机现在有现货吗?", "客服:您好,今天下单明天就能发货。", "用户:好的,那我直接下单了。" ], "舆情": 1, "id": 2 } ] ``` > 当前 `test_set.json` 共 **1000 条**,正负样本各 **500 条**,分布均衡。 --- ## 五、环境准备(uv 项目模式) ```bash pip install uv # 安装 uv(如未安装) uv sync # 创建虚拟环境并安装锁定版本 ``` --- ## 六、运行流程 ### 步骤一:生成数据集(可选,已自带 train_set.json 与 test_set.json) ```bash uv run python data_generator.py ``` 生成两份**互不重叠**的数据:2000 条 `train_set.json`(训练)与 1000 条 `test_set.json`(评估)。 ### 步骤二:模型微调 ```bash uv run python finetune.py ``` 微调完成后,模型权重保存在 `models/sentiment-bert-finetuned/`。 ### 步骤三:评估微调后模型 ```bash uv run python evaluate.py ``` ### 步骤四:对比微调前 / 微调后准确度(重点) ```bash uv run python compare.py ``` 脚本会输出类似: ```text 测试集规模: 1000 条 >> 微调前 准确率: 0.50xx | 宏平均F1: 0.49xx >> 微调后 准确率: 0.96xx | 宏平均F1: 0.96xx 微调带来 准确率提升: +0.46xx (+46.xx%) 微调带来 宏平均F1提升: +0.47xx (+47.xx%) ``` --- ## 七、仓库地址 🔗 项目地址:[https://gitee.com/agent-dev-team/sentiment-analysis-system](https://gitee.com/agent-dev-team/sentiment-analysis-system) --- ## 八、依赖清单 | 包 | 约束 | 用途 | |----|------|------| | `transformers` | `>=4.30.0` | 模型 / Tokenizer / Trainer | | `torch` | `>=2.0.0` | 训练与推理后端 | | `datasets` | `>=2.19.1` | 数据集加载与处理 | | `evaluate` | `>=0.4.6` | 评估指标 | | `modelscope` | `>=1.25.0` | 魔搭社区模型托管(可选) | | `numpy` | `>=1.24.0` | 数值计算 |