NLP学习笔记04:情感分析实践练习实现说明

NLP学习笔记04:情感分析实践练习实现说明

作者:Ye Shun

日期:2026-04-15

一、说明

这份文档对应《NLP学习笔记04:情感分析------从词典方法到 BERT》中的三个实践练习,我已经分别实现成了三份独立脚本放在压缩包中,方便学习和运行。

对应文件如下:

  • NLP学习笔记04_实践练习01_VADER电影评论.py
  • NLP学习笔记04_实践练习02_机器学习方法比较.py
  • NLP学习笔记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

依赖

  • nltk
  • scikit-learn

注意

如果本地没有对应 NLTK 资源,脚本会尝试自动下载:

  • movie_reviews
  • vader_lexicon

如果当前环境无法联网,就需要你手动准备这些资源。

三、练习2:比较不同机器学习方法

目标

分别使用朴素贝叶斯、SVM 和逻辑回归训练情感分类器,并通过交叉验证比较它们的性能差异。

实现内容

  • 使用 movie_reviews 作为数据集
  • 使用 TF-IDF 作为文本表示方法
  • 训练三类模型:
    • MultinomialNB
    • LinearSVC
    • LogisticRegression
  • 使用 5 折交叉验证比较 accuracy 和 f1_macro
  • 自动选出最佳模型,并在留出测试集上再评估一次

文件

  • NLP学习笔记04_实践练习02_机器学习方法比较.py

运行方式

bash 复制代码
python NLP学习笔记04_实践练习02_机器学习方法比较.py

依赖

  • nltk
  • scikit-learn

四、练习3:BERT 方面级情感分析

目标

使用预训练 BERT 模型,在 SemEval 2014 餐厅评论数据集上进行微调,实现一个可以同时提取方面词并判断情感极性的端到端系统。

实现思路

这次实现没有采用"先提取方面、再单独分类"的流水线,而是采用了一个联合标签方案:

  • O
  • B-POS, I-POS
  • B-NEG, I-NEG
  • B-NEU, I-NEU
  • B-CONF, I-CONF

也就是说,一个 BERT Token Classification 模型可以同时完成:

  • 方面抽取
  • 情感极性判断

这是一种真正的端到端实现方式。

文件

  • NLP学习笔记04_实践练习03_BERT方面级情感分析.py

支持的数据格式

脚本默认读取 SemEval 2014 Restaurant Reviews 的 XML 文件,例如:

  • Restaurants_Train_v2.xml
  • Restaurants_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.json
  • span_metrics.json
  • sample_predictions.json

其中:

  • token_metrics.json 是 token 级别指标
  • span_metrics.json 是端到端方面抽取 + 情感判断的 span 级指标
  • sample_predictions.json 保存部分预测样例,方便人工检查

依赖

  • torch
  • transformers
  • numpy
  • accelerate

注意

这个练习比前两个复杂很多,常见前提包括:

  • 需要本地有 SemEval 2014 数据集
  • 需要本地能加载预训练 BERT 模型
  • 训练过程最好有 GPU,但 CPU 也能跑,只是会更慢

如果当前环境不能联网下载模型,建议提前把 bert-base-uncased 下载到本地,再把 --model-name 改成本地目录。

五、建议的学习顺序

建议按下面的顺序练习:

  1. 先跑练习1,理解词典法怎么做情感分析
  2. 再跑练习2,对比传统机器学习模型的性能差异
  3. 最后做练习3,理解端到端方面级情感分析的完整流程

这样会更容易看清楚情感分析技术的演进路径:

  • 词典规则
  • 传统机器学习
  • 预训练语言模型

六、最后说明

由于当前很多环境都可能存在:

  • Python 路径异常
  • 无法联网下载 NLTK 资源
  • 无法联网下载 BERT 模型
  • 缺少 torch 或 transformers

所以这三份脚本都尽量写成了"有清晰依赖提示、结构完整、可直接复用"的形式。即便当前环境不能立即跑通,后续换到正常 Python 环境里,也可以直接使用。

相关推荐
敬往事一杯酒哈7 小时前
海康 AGV 导航读码器学习
学习
qq_284274058 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
qq_284274059 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
IT研究所10 小时前
AI-ITR平台如何减少客户问题反复升级?
大数据·运维·人工智能·低代码·自然语言处理·安全架构·企微
Titan202410 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
小雪崩11 小时前
嵌入式学习 day64:字符设备驱动
学习
深圳老胡12 小时前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
个 人 练 习 生12 小时前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
坤坤子吖12 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
乐橙开放平台12 小时前
智慧连锁客流检测和离岗检测怎么对接
大数据·人工智能·笔记·物联网·自动化·音视频·智能家居