news 2026/9/11 13:02:17

用自己的数据做情感分析:CNN-for-Sentence-Classification-in-Keras切换到本地RT-Polarity数据集完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用自己的数据做情感分析:CNN-for-Sentence-Classification-in-Keras切换到本地RT-Polarity数据集完整教程

用自己的数据做情感分析:CNN-for-Sentence-Classification-in-Keras切换到本地RT-Polarity数据集完整教程

【免费下载链接】CNN-for-Sentence-Classification-in-KerasConvolutional Neural Networks for Sentence Classification in Keras项目地址: https://gitcode.com/gh_mirrors/cn/CNN-for-Sentence-Classification-in-Keras

CNN-for-Sentence-Classification-in-Keras 是一个用卷积神经网络(CNN)做句子级情感分类的 Keras 项目,常用来训练影评情感分析模型。它默认读取内置的 IMDB 数据集,但只要你把一行参数从keras_data_set改成local_dir,就能切换到项目自带的本地RT-Polarity 数据集(Rotten Tomatoes 影评,正负样本各 5331 条),甚至换成你自己整理的数据。本教程带新手一步步完成这次切换,并讲清整个训练流程。

一、项目能做什么:一个基于 Keras 的 CNN 情感分类器

这个项目复现了经典论文《Convolutional Neural Networks for Sentence Classification》(Yoon Kim, 2014),核心能力是:

  • 二分类情感分析:判断一条影评是正面还是负面
  • 三种模型形态可选(见 sentiment_cnn.py 第 36 行的model_type参数):
模型类型Embedding 层说明
CNN-rand随机初始化训练最简单,IMDB 上可达 88-90%
CNN-non-staticWord2Vec 预训练效果最好,Embedding 随训练更新
CNN-staticWord2Vec 预训练输入直接用词向量,IMDB 上约 85%

原始论文的 PDF 已随项目放在 docs/1408.5882v2.pdf,想深入了解卷积核、滑窗池化的原理可以翻一翻。

二、环境准备:克隆仓库与安装依赖 🛠️

首先获取项目代码:

git clone https://gitcode.com/gh_mirrors/cn/CNN-for-Sentence-Classification-in-Keras

然后安装依赖。根据 README.md 的说明,需要Keras和深度学习后端(README 推荐 Theano,TensorFlow 后端理论上也支持),另外 w2v.py 中用到了gensim来训练 Word2Vec,sentiment_cnn.py 中用到numpy

pip install keras gensim numpy # 再按官方文档安装一个深度学习后端(Theano 或 TensorFlow)

💡 小提醒:这个项目年代较早,如果你用的是 Keras 2.x / TensorFlow 2.x,keras.layers.merge等旧式导入可能报错,建议按报错信息把导入语句改成新版写法即可,逻辑不变。

三、认识本地数据集:RT-Polarity 文件在哪里 📂

项目的 data/ 目录里放着两份 RT-Polarity 数据集文件,每行一条影评:

  • data/rt-polarity.pos— 正面影评,5331 条
  • data/rt-polarity.neg— 负面影评,5331 条

数据加载逻辑全部在 data_helpers.py 中,流程非常清晰:

  1. 读取load_data_and_labels()从上面两个文件按行读取文本,生成[0,1](正面)和[1,0](负面)的标签
  2. 清洗分词clean_str()把标点拆开、转小写,比如don'tdo n't
  3. 补齐对齐pad_sentences()<PAD/>把所有句子补到同一长度
  4. 建词汇表build_vocab()统计词频,建立"词 → 索引"和"索引 → 词"的双向映射
  5. 向量化build_input_data()把句子变成整数索引矩阵,喂给神经网络

想用你自己的数据?很简单:把语料整理成同样格式——一行一条文本,正面样本写入.pos文件、负面样本写入.neg文件,替换data/目录下的两个文件即可,代码不用改任何一行。

四、关键一步:把 data_source 切换为 local_dir 🎯

打开主脚本 sentiment_cnn.py,第 38-39 行就是数据源开关:

# Data source data_source = "keras_data_set" # keras_data_set|local_dir

"keras_data_set"改成"local_dir",就完成了切换。改完之后代码会自动走本地数据分支(第 76-89 行),行为如下:

  • 调用data_helpers.load_data()读取data/下的 RT-Polarity 文件
  • 随机打乱全部 10662 条数据
  • 90% 训练 / 10% 测试自动切分
  • sequence_length会自动适配本地数据的实际长度(第 98-100 行),无需手动设置

另外别忘了确认第 36 行的model_type。对于本地这种中小规模数据,推荐先用CNN-rand(不依赖 Word2Vec,跑通最快),跑通后再尝试CNN-non-static

五、训练流程拆解:从文本到模型的 5 个阶段

切换数据源后直接运行即可:

python sentiment_cnn.py

背后的完整流程是这样的:

  1. 文本 → 整数序列:由 data_helpers.py 完成(见上一节)
  2. Word2Vec 预训练(仅CNN-non-static/CNN-static):w2v.py 中的train_word2vec()用 gensim 在当前语料上训练词向量,参数由embedding_dim=50min_word_count=1context=10控制。训练好的模型会缓存到models/目录(文件名形如50features_1minwords_10context),第二次运行直接加载,不会重复训练
  3. 构建 CNN 网络:Embedding 层 → Dropout(0.5) → 两个Conv1D分支(核大小 3 和 8,各 10 个卷积核)→ 滑窗 MaxPooling → 拼接 → Dropout(0.8) → 全连接层(50) → Sigmoid 输出概率
  4. 权重初始化CNN-non-static会把 Word2Vec 词向量写入 Embedding 层
  5. 开始训练batch_size=64num_epochs=10,损失函数为二元交叉熵,优化器 Adam

训练结束时控制台会逐 epoch 打印训练集与测试集的 loss 和 accuracy,测试集准确率就是最终效果。

📌 想单独预训练词向量,也可以直接运行python w2v.py(脚本自带入口),它会提前生成models/下的 Word2Vec 缓存文件。

六、常见问题与调参清单 ✅

遇到下面这些情况,对照处理即可:

现象原因与解法
启动报Unknown data sourcedata_source拼写错误,只能是keras_data_setlocal_dir
导入word2vec报错未安装 gensim,执行pip install gensim
本地数据上精度不理想试试把num_epochs调到 15-20,或把embedding_dim提到 100
想换自己的数据只要保持"一行一条、.pos 正样本 / .neg 负样本"格式,直接替换 data/ 下的文件
训练太慢优先用CNN-rand,跳过 Word2Vec 阶段

主要超参数都集中在 sentiment_cnn.py 顶部的 "Parameters section"(第 33-58 行),一目了然:

  • embedding_dim = 50— 词向量维度,越大表达能力越强、越吃内存
  • filter_sizes = (3, 8)— 卷积核大小,对应捕捉 3 词和 8 词窗口内的 n-gram 特征
  • batch_size = 64/num_epochs = 10— 训练节奏
  • dropout_prob = (0.5, 0.8)— 两处 Dropout,防止过拟合

写在最后

整个切换过程的核心只有一行:把data_source"keras_data_set"改为"local_dir"。项目作者已经替你把 RT-Polarity 数据的加载、清洗、切分全部封装在 data_helpers.py 里,你只要准备好数据文件,就能专注在"用 CNN 做情感分析"这件事本身。跑通本地数据之后,换上你自己标注的正负样本,就拥有了一个属于自己的情感分类模型。

【免费下载链接】CNN-for-Sentence-Classification-in-KerasConvolutional Neural Networks for Sentence Classification in Keras项目地址: https://gitcode.com/gh_mirrors/cn/CNN-for-Sentence-Classification-in-Keras

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 4:48:19

员工Skills是什么:企业AI技能沉淀与落地指南

最近在技术社区里&#xff0c;越来越多人在讨论一个现象&#xff1a;一些公司开始给员工做“skills”了。这个词最近频繁出现在 Claude Code、Codex、Cursor 这些 AI 编程工具和 Agent 框架里&#xff0c;也出现在企业内训、技术分享和人力资源管理的话题中。很多团队想搞明白&…

作者头像 李华
网站建设 2026/9/1 20:52:42

4 步跑通 WiFi 密码字典攻击:Wifi-Brute 快速安装与上手笔记

4 步跑通 WiFi 密码字典攻击&#xff1a;Wifi-Brute 快速安装与上手笔记 【免费下载链接】Wifi-Brute A tool to crack a wifi password with a help of wordlist. This may take long to crack a wifi depending upon number of passwords your wordlist contains. Also it is…

作者头像 李华
网站建设 2026/8/31 10:08:36

modbus-esp8266多实例与多线程实战:ESP32并发Modbus通信指南

modbus-esp8266多实例与多线程实战&#xff1a;ESP32并发Modbus通信指南 【免费下载链接】modbus-esp8266 Most complete Modbus library for Arduino. A library that allows your Arduino board to communicate via Modbus protocol, acting as a master, slave or both. Sup…

作者头像 李华
网站建设 2026/8/30 21:02:11

Platypus:把 Shell 和 Python 脚本打包成能双击启动的 macOS 应用

Platypus&#xff1a;把 Shell 和 Python 脚本打包成能双击启动的 macOS 应用 【免费下载链接】Platypus Create native macOS applications from command line scripts. 项目地址: https://gitcode.com/gh_mirrors/pl/Platypus 每次写完脚本&#xff0c;最后一步往往最…

作者头像 李华