# SVM_sentiment_analysis **Repository Path**: dpp5258/svm_sentiment_analysis ## Basic Information - **Project Name**: SVM_sentiment_analysis - **Description**: 探索基于svm的情感二分模型搭建 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-07-15 - **Last Updated**: 2026-07-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SVM 情感分析 基于 LinearSVC 的英文电影评论情感二分类模型,使用词袋(Bag of Words)特征,对 IMDB 评论进行正面/负面判断。 ## 环境要求 - Python 3.8+ - 依赖库见 `environment/requirements.txt` ```bash pip install -r environment/requirements.txt python environment/check_env.py # 检查环境是否就绪(含 NLTK 资源下载) ``` ## 项目结构 ``` ├── config/config.py # 全局配置(路径、词汇表大小、SVM 超参数) ├── src/ │ ├── text_to_bow.py # 原始文本 → 词袋特征(构建词汇表、生成 labeledBow.feat) │ ├── preprocess.py # 加载词袋特征,评分转为二分类标签 │ ├── model.py # SVM 模型封装(训练、评估、保存/加载) │ ├── predict.py # 单条/批量预测 │ └── visualize.py # 混淆矩阵、ROC、指标柱状图、样本分布 ├── run.py # 实验主入口:加载数据 → 训练 → 评估 → 可视化 ├── dataset_generate.py # 预处理入口(一键生成词袋特征) ├── data/ │ ├── raw/ # 原始文本(需手动放入) │ │ ├── train/{pos,neg}/ # 训练集 .txt 文件 │ │ └── test/{pos,neg}/ # 测试集 .txt 文件 │ └── processed/ # 自动生成的词袋特征 ├── models/ # 训练好的模型(svm_model.pkl) ├── results/ # 评估指标、预测结果、可视化图表 └── environment/ # 环境检查脚本与依赖列表 ``` ## 快速开始 ### 1. 准备数据 将 IMDB 评论文本文件(`.txt`)按正负样本放入对应目录: ``` data/raw/ ├── train/ │ ├── pos/ # 训练集正面评论 │ └── neg/ # 训练集负面评论 └── test/ ├── pos/ # 测试集正面评论 └── neg/ # 测试集负面评论 ``` ### 2. 生成词袋特征 ```bash python dataset_generate.py ``` 该脚本会:构建词汇表 → 分词清洗(NLTK) → 生成 `labeledBow.feat` 文件。仅需运行一次。 ### 3. 训练与评估 ```bash python run.py ``` 训练完成后会在 `results/` 目录输出: | 文件 | 内容 | |---|---| | `metrics.txt` | 准确率、精确率、召回率、F1 值 | | `predictions.txt` | 测试集预测标签 | | `confusion_matrix.png` | 混淆矩阵热力图 | | `metrics.png` | 评估指标柱状图 | | `roc_curve.png` | ROC 曲线 + AUC | | `sample_distribution.png` | 正负样本分布 | ## 标签映射 原始 IMDB 评分(1-10)到二分类的转换规则: | 原始评分 | 标签 | 含义 | |---|---|---| | ≤ 4 | 0 | 负面 | | 5-6 | — | 中性(跳过) | | ≥ 7 | 1 | 正面 | ## 模型参数 在 `config/config.py` 中可调整: ```python SVM_PARAMS = { "C": 1.0, # 正则化系数 "max_iter": 1000, # 最大迭代次数 "random_state": 42 } VOCAB_SIZE = 89527 # 词汇表大小 ```