用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]中的一项。
序号 | 变量名称 | 变量格式 | 解释 |
---|---|---|---|
1 | video_id | string | 视频 ID |
2 | video_desc | string | 视频描述 |
3 | video_tags | string | 视频标签 |
4 | product_name | string | 商品名称 |
💬 评论区文本信息数据格式说明
序号 | 变量名称 | 变量格式 | 解释 |
---|---|---|---|
1 | video_id | string | 视频 ID |
2 | comment_id | string | 评论 ID |
3 | comment_text | string | 评论文本 |
4 | sentiment_category | int | 关于商品的情感倾向分类 |
5 | user_scenario | int | 是否与用户场景有关,0 表示否,1 表示是 |
6 | user_question | int | 是否与用户疑问有关,0 表示否,1 表示是 |
7 | user_suggestion | int | 是否与用户建议有关,0 表示否,1 表示是 |
8 | positive_cluster_theme | string | 按正面倾向聚类的类簇主题词 |
9 | negative_cluster_theme | string | 按负面倾向聚类的类簇主题词 |
10 | scenario_cluster_theme | string | 按用户场景聚类的类簇主题词 |
11 | question_cluster_theme | string | 按用户疑问聚类的类簇主题词 |
12 | suggestion_cluster_theme | string | 按用户建议聚类的类簇主题词 |
📌 注释说明:情感分析与聚类字段详解
🔍 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_theme | sentiment_category 为 1 或 3 的评论(正面/正负混合) |
negative_cluster_theme | sentiment_category 为 2 或 3 的评论(负面/正负混合) |
scenario_cluster_theme | user_scenario = 1 的评论(与用户使用场景有关) |
question_cluster_theme | user_question = 1 的评论(用户提出的问题) |
suggestion_cluster_theme | user_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
赛事链接