Datawhale夏令营-task2.1-理解赛题,也理解baseline
本文重新解释了base的各个代码的含义,对于新手来说,不必执着于每个代码的含义,而只需知道这部分负责什么,这部分负责什么。就能快速对整体有大致的把握。而如何优化,我们下篇笔记继续说!飞书链接:https://z1ewj4b0oao.feishu.cn/wiki/DEWzwFy21iP7jlkLmV1cgI9In1g?from=from_copylink
赛题概述
赛事背景
本挑战赛基于电商直播带货场景,要求参赛者从带货视频及其评论数据中提取商业洞察。主要涉及三个核心任务:
1. 商品识别:从视频描述中识别推广商品
2. 情感分析:多维度分析评论情感倾向
3. 评论聚类:按不同维度对评论进行聚类并提炼主题词
数据结构
- 视频数据:85条记录,包含video_id、video_desc、video_tags、product_name字段
- 评论数据:6,477条记录,包含12个字段用于情感分析和聚类
- 商品类型:仅限两种产品 - "Xfaiyx Smart Translator" 和 "Xfaiyx Smart Recorder"
代码详细解释
1. 数据导入与预处理
import pandas as pd
video_data = pd.read_csv("origin_videos_data.csv")
comments_data = pd.read_csv("origin_comments_data.csv")
作用:加载原始数据集
video_data:存储视频相关信息comments_data:存储评论相关信息
video_data["text"] = video_data["video_desc"].fillna("") + " " + video_data["video_tags"].fillna("")
作用:数据预处理
- 将视频描述(video_desc)和标签(video_tags)合并为一个完整的文本字段
- 使用
fillna("")处理空值,避免字符串拼接报错 - 为后续的商品识别任务准备特征文本
2. 导入机器学习库
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import SGDClassifier
from sklearn.svm import LinearSVC
from sklearn.cluster import KMeans
from sklearn.pipeline import make_pipeline
作用:导入必要的机器学习工具
jieba:中文分词库,用于文本预处理TfidfVectorizer:TF-IDF特征提取器,将文本转化为数值特征SGDClassifier:随机梯度下降分类器,用于文本分类任务KMeans:K-means聚类算法make_pipeline:创建机器学习管道,简化流程
3. 商品识别模块
product_name_predictor = make_pipeline(
TfidfVectorizer(tokenizer=jieba.lcut, max_features=50), SGDClassifier()
)
product_name_predictor.fit(
video_data[~video_data["product_name"].isnull()]["text"],
video_data[~video_data["product_name"].isnull()]["product_name"],
)
video_data["product_name"] = product_name_predictor.predict(video_data["text"])
作用:构建商品识别分类器
- Pipeline组成:
TfidfVectorizer:使用jieba分词,提取最多50个特征词SGDClassifier:线性分类器进行商品预测
- 训练过程:
- 筛选有标注的数据(
~isnull())作为训练集 - 使用合并的文本作为特征,product_name作为标签
- 预测过程:对所有视频数据进行商品预测
技术细节:
max_features=50:限制特征数量,防止过拟合tokenizer=jieba.lcut:使用中文分词替代默认的英文分词
4. 多维情感分析模块
for col in ['sentiment_category', 'user_scenario', 'user_question', 'user_suggestion']:
predictor = make_pipeline(
TfidfVectorizer(tokenizer=jieba.lcut), SGDClassifier()
)
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"])
作用:多维度情感分析
- 分析维度:
sentiment_category:情感倾向分类(1-正面,2-负面,3-混合,4-中性,5-不相关)user_scenario:是否与用户使用场景相关(0/1)user_question:是否包含用户疑问(0/1)user_suggestion:是否包含用户建议(0/1)
技术流程:
- 为每个维度单独训练一个分类器
- 使用有标注的数据进行训练
- 对所有评论数据进行预测
5. 聚类分析模块
5.1 正面情感聚类
kmeans_predictor = make_pipeline(
TfidfVectorizer(tokenizer=jieba.lcut), KMeans(n_clusters=2)
)
kmeans_predictor.fit(comments_data[comments_data["sentiment_category"].isin([1, 3])]["comment_text"])
kmeans_cluster_label = kmeans_predictor.predict(comments_data[comments_data["sentiment_category"].isin([1, 3])]["comment_text"])
作用:对正面评论进行聚类
- 数据筛选:选择sentiment_category为1(正面)或3(正负混合)的评论
- 聚类方法:K-means算法,分为2个簇
- 特征提取:TF-IDF + 中文分词
5.2 主题词提取
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_
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)
作用:从聚类结果中提取主题词
- 技术原理:
- 获取每个聚类中心的特征权重
- 按权重降序排列,取前N个特征词
- 将高权重词组合成主题描述
参数说明:
top_n_words = 10:每个聚类提取10个关键词argsort()[::-1]:按权重从大到小排序
5.3 结果分配
comments_data.loc[comments_data["sentiment_category"].isin([1, 3]), "positive_cluster_theme"] = [kmeans_top_word[x] for x in kmeans_cluster_label]
作用:将聚类主题词分配给对应的评论
- 根据聚类标签,为每条评论分配相应的主题词
6. 其他维度聚类
代码重复上述流程,分别对以下维度进行聚类:
- 负面情感聚类:sentiment_category为2或3的评论
- 用户场景聚类:user_scenario为1的评论
- 用户疑问聚类:user_question为1的评论
- 用户建议聚类:user_suggestion为1的评论
7. 结果输出
!mkdir submit
video_data[["video_id", "product_name"]].to_csv("submit/submit_videos.csv", index=None)
comments_data[['video_id', 'comment_id', 'sentiment_category',
'user_scenario', 'user_question', 'user_suggestion',
'positive_cluster_theme', 'negative_cluster_theme',
'scenario_cluster_theme', 'question_cluster_theme',
'suggestion_cluster_theme']].to_csv("submit/submit_comments.csv", index=None)
!zip -r submit.zip submit/
作用:导出预测结果
- 创建提交文件夹
- 导出视频商品识别结果
- 导出评论分析结果(包含情感分析和聚类主题)
- 打包为压缩文件
Baseline方案的优缺点分析
优点
1. 简单高效:使用经典的TF-IDF + 线性分类器,计算速度快
2. 可解释性强:线性模型权重可直观分析特征重要性
3. 内存占用小:适合在资源受限环境下运行
4. 实现简洁:代码逻辑清晰,易于理解和修改
不足
1. 特征表示局限:TF-IDF无法捕捉词序和上下文语义
2. 聚类效果粗糙:固定K=2的聚类可能不符合实际数据分布
3. 缺乏语义理解:无法处理隐喻、反讽等复杂语言现象
4. 模型容量有限:线性模型对复杂模式的拟合能力不足
改进方向
1. 引入预训练模型:使用BERT、RoBERTa等获得更好的语义表示
2. 优化聚类策略:动态确定聚类数量,使用更先进的聚类算法
3. ensemble方法:结合多种模型提升预测准确性
4. 大模型应用:利用GPT等大语言模型进行少样本学习
浙公网安备 33010602011771号