基于 BERTopic 的电商评论主题聚类与差评原因分析系统实战

刷到一个挺有意思的话题,结合自己之前的经验,整理了一下核心要点。

工程关键词: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_textratingcategoryproduct_namehelpful_count 等项目可直接读取的列。

电商评论中的低评分反馈往往来自真实体验落差:尺码不合适、物流等待过长、颜色与图片不符、做工质量不达预期。下面这张来自 Wikimedia Commons 的低评分反馈场景图,用来作为业务背景素材,和本文后续的真实评论建模结果对应。

清洗后的数据分布如下:1 星评论 193 条,2 星评论 377 条,3 星评论 125 条,4 星评论 231 条,5 星评论 544 条。项目默认聚焦 1-2 星评论做差评原因分析,这样一来参与建模的低分评论为 570 条。

项目流程与代码改造

项目入口是 main.py。为了让真实外部数据不得手工改列名,我增强了 prepare_review_dataframe() 的字段识别逻辑,使它能自动识别 Review TextRatingClothing IDDepartment NameClass NameRecommended INDPositive Feedback Count 等公开数据集字段,并转换成项目统一字段。

下面的流程示意图对应项目的实际运行链路,图内只保留处理节点和必要说明。

流程可以搞懂为六步:先读取真实评论数据,再把外部字段标准化为项目字段;随后进行领域词预处理,抽取尺码、物流、质量等业务词;模型层完成主题聚类;分析层将主题关键词映射为业务差评原因;最后导出表格、图表和网页报告。

在文本预处理部分,项目原本更偏中文电商评论。我补充了英文服装评论常见表达,例如 fitsizefabricmaterialreturnshippingcolorprice 等,并映射到统一业务维度。这样即使真实数据是英文评论,输出仍然可以归并成中文业务标签,方便写中文项目报告。

真实运行截图

本次用最小依赖链路执行,命令如下:

python main.py --data demo_data/real_womens_clothing_reviews.csv --backend nmf --n-topics 8
python 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

这些文件覆盖了“明细结果、汇总结果、指标记录、可视化图、网页报告、模型产物和运行日志”,适合作为课程设计、项目验收或资源包交付材料。

复现方法与资源包说明

最小依赖安装:

pip install -r requirements.txt

使用真实评论子集运行:

python main.py --data demo_data/real_womens_clothing_reviews.csv --backend nmf --n-topics 8

启动报告服务:

python app.py

如果想尝试 BERTopic 后端,可以额外安装:

pip install -r requirements-bertopic.txt
python main.py --data demo_data/real_womens_clothing_reviews.csv --backend auto

资源包中包含源码、配置文件、清洗后的真实评论子集、演示数据、运行脚本、验证说明、输出图表和 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

这篇笔记就先到这里,后面用到新的思路或者发现有问题再补充。

评论 (0)

暂无评论