NLP学习笔记04:情感分析实践练习实现说明
作者:Ye Shun
日期:2026-04-15
一、说明
这份文档对应《NLP学习笔记04:情感分析------从词典方法到 BERT》中的三个实践练习,我已经分别实现成了三份独立脚本放在压缩包中,方便学习和运行。
对应文件如下:
NLP学习笔记04_实践练习01_VADER电影评论.pyNLP学习笔记04_实践练习02_机器学习方法比较.pyNLP学习笔记04_实践练习03_BERT方面级情感分析.py
二、练习1:VADER 电影评论情感分析
目标
使用 NLTK 的 VADER 情感词典,在 movie_reviews 电影评论数据集上进行情感分类,并测试准确率。
实现内容
- 自动加载
movie_reviews数据集 - 自动加载
vader_lexicon - 使用 VADER 对测试集文本进行情感打分
- 输出准确率、分类报告和混淆矩阵
文件
NLP学习笔记04_实践练习01_VADER电影评论.py
运行方式
bash
python NLP学习笔记04_实践练习01_VADER电影评论.py
依赖
nltkscikit-learn
注意
如果本地没有对应 NLTK 资源,脚本会尝试自动下载:
movie_reviewsvader_lexicon
如果当前环境无法联网,就需要你手动准备这些资源。
三、练习2:比较不同机器学习方法
目标
分别使用朴素贝叶斯、SVM 和逻辑回归训练情感分类器,并通过交叉验证比较它们的性能差异。
实现内容
- 使用
movie_reviews作为数据集 - 使用
TF-IDF作为文本表示方法 - 训练三类模型:
MultinomialNBLinearSVCLogisticRegression
- 使用 5 折交叉验证比较
accuracy和f1_macro - 自动选出最佳模型,并在留出测试集上再评估一次
文件
NLP学习笔记04_实践练习02_机器学习方法比较.py
运行方式
bash
python NLP学习笔记04_实践练习02_机器学习方法比较.py
依赖
nltkscikit-learn
四、练习3:BERT 方面级情感分析
目标
使用预训练 BERT 模型,在 SemEval 2014 餐厅评论数据集上进行微调,实现一个可以同时提取方面词并判断情感极性的端到端系统。
实现思路
这次实现没有采用"先提取方面、再单独分类"的流水线,而是采用了一个联合标签方案:
OB-POS,I-POSB-NEG,I-NEGB-NEU,I-NEUB-CONF,I-CONF
也就是说,一个 BERT Token Classification 模型可以同时完成:
- 方面抽取
- 情感极性判断
这是一种真正的端到端实现方式。
文件
NLP学习笔记04_实践练习03_BERT方面级情感分析.py
支持的数据格式
脚本默认读取 SemEval 2014 Restaurant Reviews 的 XML 文件,例如:
Restaurants_Train_v2.xmlRestaurants_Test_Gold.xml
脚本会自动解析:
- 句子文本
- 方面词
term - 情感极性
polarity - 字符级起止位置
from/to
运行示例
bash
python NLP学习笔记04_实践练习03_BERT方面级情感分析.py ^
--train-file data\Restaurants_Train_v2.xml ^
--test-file data\Restaurants_Test_Gold.xml ^
--model-name bert-base-uncased ^
--output-dir outputs\absa_bert
输出内容
训练完成后,会在输出目录下保存:
- 微调后的模型
token_metrics.jsonspan_metrics.jsonsample_predictions.json
其中:
token_metrics.json是 token 级别指标span_metrics.json是端到端方面抽取 + 情感判断的 span 级指标sample_predictions.json保存部分预测样例,方便人工检查
依赖
torchtransformersnumpyaccelerate
注意
这个练习比前两个复杂很多,常见前提包括:
- 需要本地有 SemEval 2014 数据集
- 需要本地能加载预训练 BERT 模型
- 训练过程最好有 GPU,但 CPU 也能跑,只是会更慢
如果当前环境不能联网下载模型,建议提前把 bert-base-uncased 下载到本地,再把 --model-name 改成本地目录。
五、建议的学习顺序
建议按下面的顺序练习:
- 先跑练习1,理解词典法怎么做情感分析
- 再跑练习2,对比传统机器学习模型的性能差异
- 最后做练习3,理解端到端方面级情感分析的完整流程
这样会更容易看清楚情感分析技术的演进路径:
- 词典规则
- 传统机器学习
- 预训练语言模型
六、最后说明
由于当前很多环境都可能存在:
- Python 路径异常
- 无法联网下载 NLTK 资源
- 无法联网下载 BERT 模型
- 缺少
torch或transformers
所以这三份脚本都尽量写成了"有清晰依赖提示、结构完整、可直接复用"的形式。即便当前环境不能立即跑通,后续换到正常 Python 环境里,也可以直接使用。