用自己的数据做情感分析: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-static | Word2Vec 预训练 | 效果最好,Embedding 随训练更新 |
CNN-static | Word2Vec 预训练 | 输入直接用词向量,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 中,流程非常清晰:
- 读取:
load_data_and_labels()从上面两个文件按行读取文本,生成[0,1](正面)和[1,0](负面)的标签 - 清洗分词:
clean_str()把标点拆开、转小写,比如don't→do n't - 补齐对齐:
pad_sentences()用<PAD/>把所有句子补到同一长度 - 建词汇表:
build_vocab()统计词频,建立"词 → 索引"和"索引 → 词"的双向映射 - 向量化:
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背后的完整流程是这样的:
- 文本 → 整数序列:由 data_helpers.py 完成(见上一节)
- Word2Vec 预训练(仅
CNN-non-static/CNN-static):w2v.py 中的train_word2vec()用 gensim 在当前语料上训练词向量,参数由embedding_dim=50、min_word_count=1、context=10控制。训练好的模型会缓存到models/目录(文件名形如50features_1minwords_10context),第二次运行直接加载,不会重复训练 - 构建 CNN 网络:Embedding 层 → Dropout(0.5) → 两个
Conv1D分支(核大小 3 和 8,各 10 个卷积核)→ 滑窗 MaxPooling → 拼接 → Dropout(0.8) → 全连接层(50) → Sigmoid 输出概率 - 权重初始化:
CNN-non-static会把 Word2Vec 词向量写入 Embedding 层 - 开始训练:
batch_size=64,num_epochs=10,损失函数为二元交叉熵,优化器 Adam
训练结束时控制台会逐 epoch 打印训练集与测试集的 loss 和 accuracy,测试集准确率就是最终效果。
📌 想单独预训练词向量,也可以直接运行
python w2v.py(脚本自带入口),它会提前生成models/下的 Word2Vec 缓存文件。
六、常见问题与调参清单 ✅
遇到下面这些情况,对照处理即可:
| 现象 | 原因与解法 |
|---|---|
启动报Unknown data source | data_source拼写错误,只能是keras_data_set或local_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),仅供参考