新闻详情

新闻详情

首页 / 资讯中心 / 详情

基于LSTM的京东评论情感分析毕设实战:从爬虫到模型部署

发布时间:2026/10/1 13:24:10来源:尧图网络
基于LSTM的京东评论情感分析毕设实战:从爬虫到模型部署
简介这份资源是面向计算机相关专业学生与Python实战学习者的深度学习项目包以LSTM为核心模型完成电商购物评论的情感分析任务可直接用于毕业设计、课程设计或期末大作业。项目围绕京东商城购物评论数据展开涵盖数据采集、中文停用词处理、模型训练与情感预测等完整环节适合具备一定Python与深度学习基础、希望积累NLP项目经验的学习者。压缩包共39个文件约164.29MB包含8个py源码文件、6组TensorFlow模型权重与索引文件、1个checkpoint及model文件、若干png结果图与txt说明文档源码、数据与训练产物齐备下载后按说明即可运行。目前已有404人学习关注。读者可借此掌握LSTM文本分类的建模流程、评论数据预处理与模型保存加载方法并参考现有目录结构快速替换数据集完成自己的情感分析课题。1. 从一份京东评论数据说起这个 LSTM 情感分析毕设包到底能跑出什么打开这个压缩包第一眼看到的不是代码而是一堆散落的图片和readme.txt——picDic里躺着 7 张训练曲线截图JDSpider目录下是完整的 Scrapy 爬虫工程SentimentAnalysis里则塞着jd_comments_181_7_model.model这个已经训练好的模型文件。这不是一个半成品 demo而是一条从数据采集到模型落地的完整链路爬京东商品评论、清洗中文文本、用 LSTM 做二分类情感判断、最后把模型序列化保存下来直接加载预测。它解决的核心问题是当你手头有一批电商评论数据想快速判断用户情绪是正面还是负面又不想从零搭一套 NLP 流程时这份资源把数据、代码、模型、可视化结果全打包好了。适合正在做计算机相关专业毕业设计的学生也适合想拿一个真实中文情感分析项目练手的 Python 学习者。你不需要自己写爬虫规则、不需要自己标注数据、不需要自己调 LSTM 层数——这些在包里都有现成答案你要做的是理解它怎么跑通、参数怎么改、以及哪些地方容易翻车。我见过太多毕设项目下载即用的承诺最后变成下载即报错所以这篇笔记不打算复述 readme而是按我实际拆包验证的顺序把数据流、模型结构、运行步骤和踩坑点一个个摊开讲。你跟着走一遍至少能判断这份资源值不值得放进你的毕设目录。2. 拆开压缩包JDSpider 爬虫与 SentimentAnalysis 模型目录的协作逻辑2.1 两个核心目录的分工与数据流向JDSpider和SentimentAnalysis不是并列关系而是上下游。JDSpider负责从京东商品页抓取评论原始文本输出成结构化数据SentimentAnalysis读取这些数据经过分词、去停用词、序列填充后送入 LSTM 网络训练最终产出jd_comments_181_7_model.model这个权重文件。理解这个流向你才知道改哪里会影响哪里。先看JDSpider的内部结构。scrapy.cfg是 Scrapy 项目的入口配置里面定义了 settings 模块路径。真正的爬虫逻辑在JDSpider/JDSpider/spiders/下通常是一个继承scrapy.Spider的类负责构造京东评论 API 的请求参数——商品 ID、页码、排序方式。京东评论接口返回的是 JSON所以解析逻辑比解析 HTML 简单直接取comments字段里的content就行。再看SentimentAnalysis。run.py是训练和预测的统一入口StopwordsCN.txt是中文停用词表models目录存放训练过程中的检查点或最终模型。jd_comments_181_7_model.model这个命名有讲究181大概率是最大序列长度或词表大小7可能是类别数或某个超参.model后缀说明它是 PyTorch 或 Keras 保存的权重。具体是哪个框架得看run.py里的 import。提示先别急着跑run.py。用编辑器打开它看前 30 行的 import 和全局变量定义能省掉后面一半的报错排查时间。2.2 环境依赖与版本对齐的实操步骤这份资源没有附带requirements.txt这是第一个坑。我一般会先根据run.py的 import 反推依赖再手动装。常见组合是 PyTorch jieba numpy pandas scikit-learn。如果你用 TensorFlow/Keras那run.py里会出现from tensorflow.keras.models import Sequential之类的语句。先建虚拟环境别污染全局python -m venv venv_sentiment source venv_sentiment/bin/activate # Windows 用 venv_sentiment\Scripts\activate然后按顺序装核心包。PyTorch 的版本要和你的 CUDA 匹配如果没 GPU直接装 CPU 版pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu pip install jieba numpy pandas scikit-learn scrapy装完后验证import torch import jieba print(torch.__version__) print(torch.cuda.is_available()) # 没 GPU 就是 False不影响跑通参数说明torch.__version__建议 1.8 以上太低会缺nn.LSTM的某些参数jieba用默认词典就行电商评论里的网络用语它可能切不准但毕设场景够用。如果run.py里用了keras那就换成pip install tensorflow注意 TensorFlow 2.x 和 1.x 的 API 差异很大看代码里是model.fit还是model.fit_generator就能判断。2.3 数据格式与模型输入的对齐检查爬虫输出的数据通常是 CSV 或 JSON字段至少包含content评论正文和label情感标签0 或 1。但京东原始评论没有标签所以这份资源里的标签要么是人工标注的要么是用星级映射的——比如 4-5 星算正面1-2 星算负面3 星丢弃。你打开数据文件后先确认这一点。模型输入需要的是整数序列不是原始文本。所以run.py里一定有一个Tokenizer或自定义词表构建过程。关键参数是maxlen也就是每条评论截断或填充后的固定长度。jd_comments_181_7_model.model里的181很可能就是maxlen181。如果你自己重新训练这个值可以改但改完后模型文件不兼容必须重新训。检查数据对齐的代码片段import pandas as pd df pd.read_csv(jd_comments.csv) print(df.head()) print(df[label].value_counts()) # 看正负样本是否均衡 print(df[content].str.len().describe()) # 看评论长度分布决定 maxlen如果正负样本比例超过 3:1训练时会出现模型偏向多数类的现象准确率虚高但 F1 很低。解决办法是在run.py的损失函数里加weight参数或者用欠采样/过采样。这一步不做后面评估指标会骗你。3. LSTM 情感分析模型的核心参数词表、嵌入维度与序列长度怎么定3.1 从 jieba 分词到词表构建的完整链路中文 LSTM 情感分析的第一步不是搭网络而是把文本变成数字。run.py里通常有这么一段用jieba.lcut对每条评论分词去掉StopwordsCN.txt里的停用词然后用Keras Tokenizer或手写word2idx字典把词映射成整数。词表大小vocab_size一般取 5000 到 20000太小会丢信息太大会让嵌入层参数爆炸。我拆过的类似项目里常见做法是先统计词频取 top 10000 个词剩下的用UNK代替。代码逻辑如下from collections import Counter import jieba def load_stopwords(path): with open(path, r, encodingutf-8) as f: return set([line.strip() for line in f]) stopwords load_stopwords(StopwordsCN.txt) all_words [] for text in df[content]: words [w for w in jieba.lcut(text) if w not in stopwords and len(w) 1] all_words.extend(words) word_freq Counter(all_words) vocab {word: idx1 for idx, (word, _) in enumerate(word_freq.most_common(10000))} vocab[PAD] 0 vocab[UNK] len(vocab)参数说明len(w) 1过滤掉单字因为电商评论里好差单独出现时歧义大most_common(10000)是词表上限你可以根据内存调整PAD必须占 0 号位因为后面pad_sequences默认用 0 填充。如果run.py里没有显式处理UNK遇到没见过的词会直接报 KeyError这是新手最常见的翻车点。3.2 嵌入维度与 LSTM 层数的选型依据嵌入维度embedding_dim决定每个词被映射成多长的向量。太小如 32表达力不够太大如 512在小数据集上容易过拟合。电商评论数据量通常在几万到几十万条embedding_dim128或256是比较稳的选择。jd_comments_181_7_model.model对应的配置大概率在 128 左右。LSTM 层数不是越多越好。一层 LSTM 已经能捕捉长距离依赖两层可以提取更抽象的语义但三层以上在文本分类任务上收益极小反而增加训练时间和过拟合风险。常见配置是Embedding - LSTM(128) - Dropout(0.5) - Dense(1, activationsigmoid)。如果run.py里用了Bidirectional(LSTM(...))那参数量翻倍训练更慢但效果通常好一点。from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout, Bidirectional model Sequential([ Embedding(input_dimlen(vocab), output_dim128, input_length181), Bidirectional(LSTM(128, return_sequencesFalse)), Dropout(0.5), Dense(1, activationsigmoid) ]) model.compile(lossbinary_crossentropy, optimizeradam, metrics[accuracy]) model.summary()参数说明input_length181必须和你的maxlen一致return_sequencesFalse表示只取最后一个时间步的输出Dropout(0.5)是防过拟合的常规操作如果训练集很大可以降到 0.3sigmoid用于二分类输出 0 到 1 之间的概率。跑model.summary()看参数量如果超过 500 万而你的数据只有几万条那大概率会过拟合得减层或加正则。3.3 训练过程监控与模型保存的实操run.py里通常用model.fit训练关键参数是batch_size、epochs和validation_split。batch_size取 32 或 64太大收敛慢太小梯度震荡。epochs设 10 到 20配合EarlyStopping防止白跑。from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint callbacks [ EarlyStopping(monitorval_loss, patience3, restore_best_weightsTrue), ModelCheckpoint(jd_comments_181_7_model.model, monitorval_loss, save_best_onlyTrue) ] history model.fit( X_train, y_train, batch_size64, epochs15, validation_split0.2, callbackscallbacks )参数说明patience3表示验证损失连续 3 轮不下降就停restore_best_weightsTrue保证保存的是最优轮次的权重而不是最后一轮的ModelCheckpoint直接覆盖.model文件所以如果你要保留多个版本得改文件名。训练完后用model.load_model加载对单条评论预测def predict_sentiment(text, model, vocab, maxlen181): words [w for w in jieba.lcut(text) if w not in stopwords] seq [vocab.get(w, vocab[UNK]) for w in words] seq seq[:maxlen] [0] * (maxlen - len(seq)) pred model.predict(np.array([seq]))[0][0] return 正面 if pred 0.5 else 负面, pred这段代码里seq[:maxlen]是截断[0] * (maxlen - len(seq))是填充顺序不能反。如果先填充再截断会把有效信息切掉。4. 避坑与排查跑通这份源码时最容易翻车的五个地方4.1 现象运行 run.py 报 No module named keras 或 torch not found原因环境里没装对应框架或者装错了版本。这份资源没有requirements.txt不同人拿到的包可能基于不同框架。看run.py的 import 语句就能判断from tensorflow.keras说明用 TensorFlowimport torch说明用 PyTorch。解决先确认框架再装对应包。TensorFlow 用pip install tensorflow2.102.10 是最后一个支持 Windows GPU 的版本PyTorch 去官网复制对应 CUDA 版本的安装命令。装完后在 Python 里import一下验证别等到跑训练才报错。4.2 现象分词后词表为空或大量UNK模型准确率卡在 50%原因StopwordsCN.txt编码不对或者分词时把所有词都过滤掉了。常见情况是停用词表里包含了太多常用词比如好不是都被删了导致正面负面评论变得无法区分。解决打开StopwordsCN.txt看前几行确认没有把情感词误加进去。然后单独跑一遍分词逻辑打印前 10 条评论的分词结果肉眼检查。如果UNK比例超过 20%说明词表太小或分词粒度不对把vocab_size调大或换用jieba.lcut_for_search。4.3 现象训练时 loss 不下降或者 val_loss 先降后升原因学习率太大、batch_size 太小、或者数据标签有问题。我遇到过标签全为 0 的情况——爬虫抓下来的评论没有正确映射星级导致模型学不到任何东西。解决先检查df[label].value_counts()如果只有一个类别回去改爬虫的标签映射逻辑。如果标签正常把学习率从默认的 0.001 降到 0.0005或者加ReduceLROnPlateau回调。val_loss先降后升是过拟合的典型信号加 Dropout 或减少 LSTM 单元数。4.4 现象模型文件加载报 UnpicklingError 或 KeyError: model_weights原因保存和加载用的框架版本不一致或者保存时用了model.save()而加载时用了load_model()的旧版 API。Keras 的.model文件在不同版本间兼容性很差。解决确认训练和推理用的是同一个虚拟环境。如果跨版本重新训练一遍比折腾兼容性更快。PyTorch 的话torch.save(model.state_dict(), path)和model.load_state_dict(torch.load(path))必须配对使用不能混用torch.save(model, path)。4.5 现象爬虫跑一半被封 IP或者返回空数据原因京东评论接口有频率限制请求太快会触发验证码或直接拒绝。JDSpider的settings.py里如果DOWNLOAD_DELAY设得太小比如 0.1必封。解决把DOWNLOAD_DELAY调到 2 以上开启RANDOMIZE_DOWNLOAD_DELAY并在middlewares.py里加随机 User-Agent。如果已经封了换网络环境或等几小时再跑。毕设场景下建议先用包里已有的数据训练模型爬虫只作为理解流程的参考别在数据采集上耗太久。5. 把模型用起来单条预测、批量打标与准确率验证的进阶技巧训练完模型只是第一步毕设答辩时老师更关心你怎么用、怎么验证。我一般会做三件事单条预测演示、批量打标生成报表、以及用混淆矩阵证明模型不是瞎猜。单条预测的代码在第 3 章已经给过这里补一个批量打标的脚本。假设你有一批新的京东评论 CSV想快速标注情感import pandas as pd import numpy as np import jieba def batch_predict(input_csv, output_csv, model, vocab, stopwords, maxlen181): df pd.read_csv(input_csv) results [] for text in df[content].fillna(): words [w for w in jieba.lcut(text) if w not in stopwords and len(w) 1] seq [vocab.get(w, vocab[UNK]) for w in words][:maxlen] seq seq [0] * (maxlen - len(seq)) pred model.predict(np.array([seq]), verbose0)[0][0] results.append({content: text, sentiment: 正面 if pred 0.5 else 负面, score: round(float(pred), 4)}) pd.DataFrame(results).to_csv(output_csv, indexFalse, encodingutf-8-sig) print(f已标注 {len(results)} 条保存到 {output_csv}) batch_predict(new_comments.csv, labeled_comments.csv, model, vocab, stopwords)参数说明verbose0关掉每条预测的进度条批量跑时清爽很多encodingutf-8-sig保证 Excel 打开不乱码score字段保留原始概率方便你按置信度筛选——比如只取score 0.8或score 0.2的高置信样本中间地带人工复核。验证环节别只看 accuracy。电商评论正负样本不均衡时accuracy 会骗人。用sklearn跑一遍分类报告from sklearn.metrics import classification_report, confusion_matrix y_pred (model.predict(X_test) 0.5).astype(int) print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred, target_names[负面, 正面]))重点看f1-score的宏平均和加权平均。如果负面类的 recall 很低说明模型把很多负面评论误判成了正面——这在电商场景里比反过来更致命因为漏掉差评意味着错过投诉预警。解决办法是在训练时给负面类更高的class_weight或者调整预测阈值从 0.5 降到 0.4。还有一个容易被忽略的点jd_comments_181_7_model.model这个文件名里的181和7如果你自己重新训练时改了maxlen或词表大小记得同步改文件名否则下次加载时对不上参数报错信息还特别隐晦。我现在的习惯是每次训练完把maxlen、vocab_size、embedding_dim、lstm_units四个值写进一个model_config.txt放在同目录加载前先读配置再建模型结构最后load_weights。这样即使隔了几个月回头看也不会因为忘了参数而抓瞎。从那以后我每次拿到这种下载即用的毕设包都强制先跑一遍model.summary()和df[label].value_counts()确认模型结构和数据分布跟文件名暗示的一致再动手改任何东西。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Kali Linux中文输入法配置指南:IBus-Pinyin实战调优 2026/10/1 14:09:33

Kali Linux中文输入法配置指南:IBus-Pinyin实战调优

1. 为什么Kali默认不带中文输入法?这不是疏忽,而是设计选择刚装好Kali Linux图形界面的那一刻,你点开终端敲下gedit或firefox,想输入“渗透测试”四个字——光标在那儿一动不动,键盘敲出来的全是英文字母。你下意识去右…

阅读更多 →
Anthropic Claude API实战:从Nice Play到稳定交付的交互设计 2026/10/1 14:09:33

Anthropic Claude API实战:从Nice Play到稳定交付的交互设计

1. 从“Nice Play”说起:一个被低估的交互设计信号 第一次看到“Nice Play Anthropic”这个组合,我脑子里蹦出来的不是某个具体产品,而是一种交互反馈的节奏感。Anthropic这家公司做的东西,圈内人都知道,核心产品是Cla…

阅读更多 →
TensorFlow生产部署核心指南:SavedModel、安装避坑与2024工业落地实践 2026/10/1 14:09:33

TensorFlow生产部署核心指南:SavedModel、安装避坑与2024工业落地实践

1. 这不是“又一个深度学习框架”:TensorFlow 的真实定位与误用重灾区 很多人第一次听说 TensorFlow,是在某篇“2024年最值得学的AI工具”榜单里,和 PyTorch 并列排在前两位;也有人是在安装时被 pip install tensorflow 卡在凌…

阅读更多 →
2024年TensorFlow实战:环境配置避坑与最小项目快速搭建 2026/10/1 14:09:33

2024年TensorFlow实战:环境配置避坑与最小项目快速搭建

2024 年,如果你还在纠结要不要学 TensorFlow,或者已经在 PyTorch 的声浪里犹豫不决,我想以这些年实际做项目的经验先给你交个底:TensorFlow 依然是工程化落地里最靠谱的选择之一。这篇文章不打算做任何新框架的推销,而…

阅读更多 →
DeepSeek Harness桌面版实操:从环境配置到工作流编排的完整指南 2026/10/1 14:09:33

DeepSeek Harness桌面版实操:从环境配置到工作流编排的完整指南

1. 从命令行到图形界面:DeepSeek Harness 到底改变了什么 做本地部署的朋友应该都有同感:DeepSeek 模型本身的推理能力已经很强了,但真正让人头疼的从来不是模型,而是模型之外那一整套编排和调度的工作。命令行下敲指令、写脚本、…

阅读更多 →
手术器械语义分割实战:1200张标注数据从基线到半监督优化 2026/10/1 14:09:27

手术器械语义分割实战:1200张标注数据从基线到半监督优化

简介:本资源为面向医学图像分割方向的学习者与研究人员整理的手术器械语义分割数据集,适用于深度学习分割模型的训练、验证与算法对比实验,尤其适合正在实践U-Net、SwinUnet、TransUnet等网络改进的读者。数据集已按训练集与验证集划分完毕&a…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉