当前位置: 首页 > news >正文

用AI做带货视频评论分析【Datawhale AI 夏令营】

文章目录

  • 🛍️ 用 AI 做带货视频评论分析:从用户评论中挖掘商业洞察
    • 一、赛事背景与项目意义
    • 二、任务目标概述
    • 三、赛题及数据解读
      • 📦 带货视频内容文本信息数据格式说明
      • 💬 评论区文本信息数据格式说明
      • 📌 注释说明:情感分析与聚类字段详解
        • 🔍 a. 需进行情感分析的字段
        • 🔄 b. 需进行主题聚类的字段
    • 四、通过Baseline方案实现解题
      • 📦 1. 依赖导入与分词配置
      • 🧪 2. 评论多维情感分类
      • 🔎 3. 正向评论聚类并提取类簇主题词
      • 🧠 4. 提取每个类簇的高频关键词
      • 📥 5. 将主题词写入对应评论
      • ✅ 6. 导出结果并提交
  • 🔗项目链接


🛍️ 用 AI 做带货视频评论分析:从用户评论中挖掘商业洞察

你是否想过,用户在直播间里随手一条评论,其实可能藏着“爆品密码”?
本篇文章带你深入了解一个用 NLP 与大模型分析电商评论,提炼商业价值的真实项目案例。


一、赛事背景与项目意义

随着直播带货的兴起,用户在弹幕、评论区的表达成为宝贵的“消费反馈”。这些碎片化评论中,蕴含了对商品的真实态度、使用痛点、甚至内容种草的效果。

本项目的目标是:
将电商直播视频下的大量用户评论,转化为可量化、可理解、可执行的商业洞察。

通过深度分析,我们可以帮助品牌方:

  • 优化选品策略:找准用户需求痛点
  • 评估网红带货效能:量化内容种草与转化潜力
  • 提升全链路价值:打通内容-决策-购买的数据闭环

二、任务目标概述

核心在于利用 自然语言处理(NLP)、机器学习技术、大模型技术,从海量的文本数据中提取有价值的商业洞察。

主要涉及以下几个关键领域的任务:

  • 🎯 文本编码:识别视频中评论提到的商品
  • 😊 文本分类:识别评论中的情感倾向(正/负/中性)
  • 💬 文本聚类:总结用户评论中的关键观点

文本编码:将人类可读的文本转换为机器可理解的数值向量表示,这是所有文本分析任务的基础。

  • 常用方法包括独热编码、词嵌入 (如Word2Vec、GloVe等静态词向量)以及基于预训练模型的上下文词嵌入(如BERT、GPT等动态词向量)。
  • 本项目的Baseline方案采用了经典的TF-IDF编码方法。

文本分类:根据文本内容将其自动归类到预定义类别。

  • 本项目中的情感分析属于多维度文本分类任务,需要识别评论的情感倾向(正面/负面/中性等)以及是否涉及用户场景、疑问或建议等属性。
  • 常用方法包括基于规则和词典的方法、传统机器学习方法(如朴素贝叶斯、支持向量机SVM等)以及深度学习方法(如循环神经网络RNN、卷积神经网络CNN、Transformer等) 。
  • Baseline方案使用了线性分类器((如SGDClassifier) 进行文本分类。

文本聚类:根据文本内容的相似性自动将文本分组,无需预先定义类别。

  • 本项目要求按商品对指定维度的评论进行聚类,并提炼每类的主题词。
  • 常用聚类算法包括K-Means(需预设簇数K)、层次聚类、DBSCAN等。
  • Baseline采用了K-Means算法进行聚类。
  • 聚类效果通常用轮廓系数等指标衡量,其值越接近1表示聚类效果越好。

大模型与高级技术:随着技术发展,大型预训练语言模型(LLM) 在NLP任务中表现突出。

  • Baseline也提及可以利用大模型的零样本/少样本学习能力,在标注数据有限时完成任务;
  • 或通过微调预训练模型来更好地适应本任务。
  • 此外,还可使用预训练模型提供的API接口获取文本向量表示,用于后续的分类或聚类。
  • 这些高级技术为提升模型性能提供了思路。

三、赛题及数据解读

赛题背景
在当下电商直播爆发式增长的数字化浪潮中,短视频平台积累了海量的带货视频及用户互动数据。
这些数据不仅仅是消费者对商品体验的直接反馈,更蕴含着驱动商业决策的深层价值。

比赛提供了两类脱敏后的文本数据:

提供了包含 85条 脱敏后的带货视频数据及 6477条评论文本数据,

文件名为:origin_videos_data.csv (带货视频数据) 和 origin_comments_data.csv (评论文本数据)

数据包括少量有人工标注结果的训练集(仅包含商品识别和情感分析的标注结果)以及未标注的测试集。

📦 带货视频内容文本信息数据格式说明

注:product_name需根据提供的视频信息进行提取,并从匹配到商品列表[Xfaiyx Smart Translator, Xfaiyx Smart Recorder]中的一项。

序号变量名称变量格式解释
1video_idstring视频 ID
2video_descstring视频描述
3video_tagsstring视频标签
4product_namestring商品名称

💬 评论区文本信息数据格式说明

序号变量名称变量格式解释
1video_idstring视频 ID
2comment_idstring评论 ID
3comment_textstring评论文本
4sentiment_categoryint关于商品的情感倾向分类
5user_scenarioint是否与用户场景有关,0 表示否,1 表示是
6user_questionint是否与用户疑问有关,0 表示否,1 表示是
7user_suggestionint是否与用户建议有关,0 表示否,1 表示是
8positive_cluster_themestring按正面倾向聚类的类簇主题词
9negative_cluster_themestring按负面倾向聚类的类簇主题词
10scenario_cluster_themestring按用户场景聚类的类簇主题词
11question_cluster_themestring按用户疑问聚类的类簇主题词
12suggestion_cluster_themestring按用户建议聚类的类簇主题词

📌 注释说明:情感分析与聚类字段详解

🔍 a. 需进行情感分析的字段

以下字段需通过模型进行情感分类或判断(部分训练集已提供标签,测试集需模型预测):

  • sentiment_category:评论情感倾向分类
  • user_scenario:是否涉及用户场景(0/1)
  • user_question:是否为用户提问(0/1)
  • user_suggestion:是否为用户建议(0/1)

sentiment_category 字段分类含义如下:

分类值含义
1正面
2负面
3正负都包含
4中性
5不相关

🔄 b. 需进行主题聚类的字段

聚类任务需基于训练集和测试集中满足条件的评论进行,目标为提炼主题词(即聚类中心标签)。每个字段的聚类数推荐为 5~8 个 类别。

字段名聚类样本条件说明
positive_cluster_themesentiment_category 为 1 或 3 的评论(正面/正负混合)
negative_cluster_themesentiment_category 为 2 或 3 的评论(负面/正负混合)
scenario_cluster_themeuser_scenario = 1 的评论(与用户使用场景有关)
question_cluster_themeuser_question = 1 的评论(用户提出的问题)
suggestion_cluster_themeuser_suggestion = 1 的评论(用户提出的建议)

📌 注意事项:

  • 所有聚类字段需结合训练集与测试集进行建模。
  • 输出的字段值为该类簇对应的主题关键词(字符串),如 "性价比""包装设计" 等。

四、通过Baseline方案实现解题

本节主要是如何使用 Tfidf + SGDClassifier 进行评论情感分类,以及如何使用 KMeans 对评论进行聚类并提炼类簇关键词。我们使用 jieba 中文分词,基于带货视频评论完成多维情感判断和正向评论聚类。


📦 1. 依赖导入与分词配置

import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import SGDClassifier
from sklearn.cluster import KMeans
from sklearn.pipeline import make_pipeline
  • jieba:中文分词工具
  • TfidfVectorizer:将文本转换为TF-IDF稀疏向量
  • SGDClassifier:用于训练情感分类模型
  • KMeans:无监督聚类
  • make_pipeline:快速构建预处理 + 模型流水线

🧪 2. 评论多维情感分类

我们对评论的四个维度分别训练一个分类器:

  • sentiment_category(整体情感)
  • user_scenario(是否为用户场景)
  • user_question(是否是问题)
  • user_suggestion(是否是建议)
for col in ['sentiment_category', 'user_scenario', 'user_question', 'user_suggestion']:predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut),  # 中文分词 + TF-IDFSGDClassifier()                         # 分类器)predictor.fit(comments_data[~comments_data[col].isnull()]["comment_text"],  # 训练集(有标签)comments_data[~comments_data[col].isnull()][col]              # 标签)comments_data[col] = predictor.predict(comments_data["comment_text"])  # 对全体进行预测

📌 解释:

  • 针对每一个字段构造一个模型进行训练。
  • 训练完后对整个数据集(包含测试集)预测结果,实现缺失值填充。

🔎 3. 正向评论聚类并提取类簇主题词

我们对情感为 正向(1)正负混合(3) 的评论,进行文本聚类,并为每个类簇提取前 10 个代表词作为主题。

top_n_words = 10  # 每个类簇提取关键词数量kmeans_predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut),KMeans(n_clusters=2)  # 你可以改为 5~8 更符合题目要求
)# 聚类目标样本:正向 + 正负混合情感评论
positive_mask = comments_data["sentiment_category"].isin([1, 3])
positive_comments = comments_data[positive_mask]["comment_text"]# 聚类训练与预测
kmeans_predictor.fit(positive_comments)
kmeans_cluster_label = kmeans_predictor.predict(positive_comments)

📌 解释:

  • 使用 TF-IDF 向量将文本转换为特征
  • 使用 KMeans 聚成 2 个类簇(可配置为5~8)
  • 得到每条评论所属的类簇标签

🧠 4. 提取每个类簇的高频关键词

kmeans_top_word = []
tfidf_vectorizer = kmeans_predictor.named_steps['tfidfvectorizer']
kmeans_model = kmeans_predictor.named_steps['kmeans']
feature_names = tfidf_vectorizer.get_feature_names_out()
cluster_centers = kmeans_model.cluster_centers_# 遍历每个类簇,提取 top 关键词
for i in range(kmeans_model.n_clusters):top_feature_indices = cluster_centers[i].argsort()[::-1]top_word = ' '.join([feature_names[idx] for idx in top_feature_indices[:top_n_words]])kmeans_top_word.append(top_word)

📌 解释:

  • cluster_centers_ 表示每个类簇的中心向量
  • 对中心向量按特征权重排序,取 Top N 的词作为主题词

📥 5. 将主题词写入对应评论

comments_data.loc[positive_mask, "positive_cluster_theme"] = [kmeans_top_word[x] for x in kmeans_cluster_label
]

📌 解释:

  • 根据预测的类簇编号 kmeans_cluster_label,为每条正向评论打上对应的类簇主题词。

kmeans
TfidfVectorizer


✅ 6. 导出结果并提交

在这里插入图片描述
到赛事链接🔗提交自己的结果


🔗项目链接

datawhale
赛事链接

http://www.dtcms.com/a/274928.html

相关文章:

  • 《P3976 [TJOI2015] 旅游》
  • Guava LoadingCache
  • Apipost 与 Apifox 的 API 调试功能:全面对比与深入分析
  • Vue + Element UI 实现选框联动进而动态控制选框必填
  • 牛客 —— JZ22 链表中倒数最后k个结点
  • 前端八股-promise
  • FreeRTOS踩坑小记——vTaskList函数的使用
  • Activiti:activiti-app.war持久化功能实现
  • AI优化器美国VPS集成:智能算力部署与性能调优指南
  • (补充)RS422
  • Mysql:分库分表
  • STM32F103之存储/启动流程
  • 【世纪龙科技】几何G6新能源汽车结构原理教学软件
  • Linux C 管道文件操作
  • [spring6: @EnableLoadTimeWeaving]-使用案例
  • SSH基础原理
  • 速盾:高防CDN和普通CDN的区别大吗?
  • 【unity编辑器开发与拓展EditorGUILayoyt和GUILayoyt】
  • phpstudy搭建pikachu
  • Java 的集合都有哪些,都有什么特点?
  • c#获取Datatable中某列最大或最小的行数据方法
  • 2025年亚太中文赛B题第一版本超详细解题思路
  • Claude Code 完全上手指南:从入门到精通的终极备忘录
  • 【MYSQL8】springboot项目,开启ssl证书安全连接
  • 深度学习篇---昇腾NPUCANN 工具包
  • 数字后端APR innovus sroute到底是如何选取宽度来铺power rail的?
  • 大模型遇上数据库:如何真正实现从“智能问数”到“精准问数”?Intalink给出答案
  • Rust基础-part3-函数
  • 如何在 PyCharm 批量调整代码缩进?PyCharm 调整代码格式化和代码缩进的快捷键有哪些?
  • Pandas:常见的转换函数(rename,set_index,reset_index)