项目关键词:BERTopic、NMF、电商评论分析、低分评论归因、主题聚类、真实数据集、Python 可视化、HTML 报告、CSDN 源码资源包
适用场景:NLP 课程设计、电商运营分析、客户反馈挖掘、文本聚类项目、数据分析项目展示、二次开发
摘要
电商评论分析不能只停留在“好评率、差评率、平均评分”这些表层指标上。真正有业务价值的问题是:低分评论集中在什么原因上,哪些主题最影响用户体验,典型原始评论怎么快速定位,结果能不能直接导出为图表和报告。
本文基于bertopic_ecommerce_review_analyzer项目,使用公开真实数据集Women’s E-Commerce Clothing Reviews的电商服装评论子集重新跑通完整流程。项目会读取真实评论 CSV,完成字段标准化、领域词预处理、主题聚类、差评原因归因、CSV 导出、可视化图表和 HTML 报告生成。本文中的运行截图来自项目代码实际执行后的报告页面。
本次实测数据包含1470条评论,其中570条为 1-2 星低分评论。模型在最小依赖环境下使用TF-IDF + NMF兜底后端稳定运行,输出8个主题,低分评论主导问题为“尺码版型问题”。如果安装 BERTopic 可选依赖,项目也保留 BERTopic 后端入口。
真实数据与素材来源
为了避免只用合成样例,本次重新整理了公开真实评论数据。原始数据集来自 Kaggle 的 Women’s E-Commerce Clothing Reviews,镜像 CSV 下载自 GitHub 公开仓库;项目中保留清洗后的子集demo_data/real_womens_clothing_reviews.csv,字段已经统一为review_text、rating、category、product_name、helpful_count等项目可直接读取的列。
电商评论中的低评分反馈往往来自真实体验落差:尺码不合适、物流等待过长、颜色与图片不符、做工质量不达预期。下面这张来自 Wikimedia Commons 的低评分反馈场景图,用来作为业务背景素材,和本文后续的真实评论建模结果对应。
清洗后的数据分布如下:1 星评论193条,2 星评论377条,3 星评论125条,4 星评论231条,5 星评论544条。项目默认聚焦 1-2 星评论做差评原因分析,因此参与建模的低分评论为570条。
项目流程与代码改造
项目入口是main.py。为了让真实外部数据不需要手工改列名,我增强了prepare_review_dataframe()的字段识别逻辑,使它能自动识别Review Text、Rating、Clothing ID、Department Name、Class Name、Recommended IND、Positive Feedback Count等公开数据集字段,并转换成项目统一字段。
下面的流程示意图对应项目的实际运行链路,图内只保留处理节点和必要说明。
流程可以理解为六步:先读取真实评论数据,再把外部字段标准化为项目字段;随后进行领域词预处理,抽取尺码、物流、质量等业务词;模型层完成主题聚类;分析层将主题关键词映射为业务差评原因;最后导出表格、图表和网页报告。
在文本预处理部分,项目原本更偏中文电商评论。我补充了英文服装评论常见表达,例如fit、size、fabric、material、return、shipping、color、price等,并映射到统一业务维度。这样即使真实数据是英文评论,输出仍然可以归并成中文业务标签,方便写中文项目报告。
真实运行截图
本次使用最小依赖链路执行,命令如下:
python main.py--datademo_data/real_womens_clothing_reviews.csv--backendnmf --n-topics8python app.py运行完成后,浏览器打开outputs/negative_review_report.html。下面这张截图来自本地服务真实打开后的报告首屏,可以看到总评论数、参与分析评论数、差评率、主题数、主导差评原因和建模后端。
首屏结果说明这不是空报告:系统实际读入1470条评论,筛选570条低分评论参与建模,低分率为38.78%,主题数为8,主导差评原因识别为“尺码版型问题”。
继续向下滚动,报告会展示评分分布、差评原因排行、主题数量分布和主题关键词表。下面这张长截图覆盖了核心图表区域。
从图表可以看到,真实服装评论里 1-2 星低分并不少,且“尺码版型问题”明显高于其他差评原因。这和服饰电商的业务直觉一致:低分评论往往不是单纯情绪差,而是围绕尺码偏差、穿着舒适度、版型不合身、图片与实物差异等具体体验问题展开。
主题建模与差评归因
项目采用“双后端”设计。安装 BERTopic 及其依赖时,可以尝试 BERTopic 后端;在没有 BERTopic、不能联网下载模型、或者 Windows 环境不方便编译依赖时,会自动使用TF-IDF + NMF兜底后端。两种后端输出统一,后续业务归因和报告生成不需要改代码。
差评归因不是直接把主题编号展示给用户,而是把主题关键词和典型评论映射成业务标签。下面的示意图展示了从低分评论到业务原因汇总的逻辑。
具体实现上,src/topic_model.py负责训练主题模型并输出topic_id、关键词和文档主题得分;src/analyzer.py根据关键词和代表评论匹配业务规则,生成“尺码版型问题、物流配送问题、色差外观问题、商品质量问题”等标签;src/report.py再把结果组织成 HTML 报告。
本次真实运行的核心指标如下:
{"total_reviews":1470,"analyzed_reviews":570,"negative_rate":0.3878,"topic_count":8,"dominant_negative_reason":"尺码版型问题","backend":"fallback_nmf","topic_diversity":0.225,"silhouette_cosine":0.2965}这里的fallback_nmf是正式可运行的兜底后端,目的是保证源码包在最小依赖环境中也能复现结果。对于课程设计和 CSDN 资源包来说,能稳定一键运行,比强制依赖重型模型更实用。
结果解读与输出文件
评分分布图展示了真实数据子集中不同星级评论的数量。它可以帮助我们确认数据不是刻意构造的单一差评集合,而是包含低分、中评和高分的真实评论样本。
低分评论筛选后,系统将主题结果汇总为差评原因。下图中“尺码版型问题”占比最高,其次是“物流配送问题”“色差外观问题”和“商品质量问题”。
这张图适合直接放在运营分析报告里:它把模型主题转换成了业务人员能读懂的原因排行。比如服装电商看到“尺码版型问题”占比过高,就可以进一步检查尺码表、买家秀、模特参数、试穿建议和退换货说明。
主题分布图保留了topic_id,适合开发者和分析人员追踪每个主题簇的规模。
主题关键词表把主题编号、业务标签、评论数量、平均评分和关键词放在一张图里。它适合在博客里解释“模型为什么把这一组评论归为某类问题”。
运行后生成的核心文件包括:
outputs/topic_summary.csv outputs/negative_reason_summary.csv outputs/review_topic_assignments.csv outputs/evaluation_metrics.json outputs/negative_review_report.html images/results/review_analysis_dashboard.png images/results/screenshot_report_top.png images/results/screenshot_report_long.png models/topic_model.joblib logs/run_log.txt这些文件覆盖了“明细结果、汇总结果、指标记录、可视化图、网页报告、模型产物和运行日志”,适合作为课程设计、项目验收或资源包交付材料。
复现方法与资源包说明
最小依赖安装:
pipinstall-rrequirements.txt使用真实评论子集运行:
python main.py--datademo_data/real_womens_clothing_reviews.csv--backendnmf --n-topics8启动报告服务:
python app.py如果想尝试 BERTopic 后端,可以额外安装:
pipinstall-rrequirements-bertopic.txt python main.py--datademo_data/real_womens_clothing_reviews.csv--backendauto资源包中包含源码、配置文件、清洗后的真实评论子集、演示数据、运行脚本、验证说明、输出图表和 README。拿到源码后,即使当前环境没有 BERTopic,也可以先用 NMF 兜底后端复现本文截图中的核心结果。
扩展方向与参考资料
这个项目可以继续扩展成更完整的评论分析系统。第一,可以把差评原因按商品、类目、品牌拆分,输出每个商品的 Top 问题;第二,可以加入时间字段做趋势分析,观察某类问题是否近期集中爆发;第三,可以接入中文电商评论数据,继续扩展中文领域词典;第四,可以在 BERTopic 后端中加入多语言句向量模型,提升语义聚类能力。
参考资料:
- BERTopic 官方文档:https://maartengr.github.io/BERTopic/
- BERTopic c-TF-IDF 说明:https://maartengr.github.io/BERTopic/getting_started/ctfidf/ctfidf.html
- scikit-learn NMF/LDA topic extraction:https://scikit-learn.org/stable/auto_examples/applications/plot_topics_extraction_with_nmf_lda.html
- Women’s E-Commerce Clothing Reviews:https://www.kaggle.com/datasets/nicapotato/womens-ecommerce-clothing-reviews
- 数据集镜像仓库:https://github.com/chandimap/Sentiment-Analysis-of-Women-s-E-Commerce-Clothing-Reviews
- Wikimedia Commons 低评分反馈图:https://commons.wikimedia.org/wiki/File:Reviews_of_a_Negative_Customer_Experience.jpg