Datawhale AI夏令营-基于带货视频评论的用户洞察挑战赛

一.赛事目标

基于星火大模型Spark 4.0 Ultra,对视频和评论的数据进行商品识别,情感分析,归类分析,最终为带货效果进行评价。并通过优化模型来提高评价准确度

二.赛事环境

1.基础平台:星火大模型Spark 4.0 Ultra

2.赛事数据:视频,视频弹窗评论

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

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

  • 带货视频内容文本信息的数据格式
序号变量名称变量格式解释
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按用户建议聚类的类簇主题词

 三.赛事任务

  • 【商品识别】从视频的数据里精准识别推广商品;

  • 【情感分析】对评论文本进行多维度情感分析,涵盖维度见数据说明;

  • 【评论聚类】按商品对归属指定维度的评论进行聚类,并提炼类簇总结词。

四.赛事目标

基于给定的赛事步骤

1.加载数据

import pandas as pd
video_data = pd.read_csv("origin_videos_data.csv")
comments_data = pd.read_csv("origin_comments_data.csv")

2.取样表条数10条

video_data.sample(10)

 3.提取表头

comments_data.head()

4.将视频数据的两个字段合并到一个字段,用来提取商品信息

video_data["text"] = video_data["video_desc"].fillna("") + " " + video_data["video_tags"].fillna("")

 5.加载分词器,情感分析,聚类分析等工具包

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

6.进行分词,从视频数据里获取到商品名product_name的集合

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"])

max_features=50:表示在转换过程中只保留前50个最常见的词汇特征。这有助于减少特征的维度,并提高计算效率。 

7.加载评论数据

comments_data.columns

 8.对评论数据进行情感分析

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"])

9.聚类提取关键词数量

top_n_words = 20

top_n_words 的意义
主题表示:top_n_words 决定了你从每个聚类中提取多少个关键词来代表该聚类的主题。例如,如果 top_n_words=20,那么每个聚类主题将包含 20 个关键词,这些关键词是根据它们在聚类中心的贡献度排名选出的。

对理解聚类的影响:选择不同数量的关键词会影响你对聚类主题的理解。更多的关键词可以提供更全面的主题描述,但也可能引入噪声;较少的关键词则可能会导致主题描述不够完整。

总结来说,top_n_words 是一个关键的参数,它帮助定义在每个聚类中提取的最重要词汇的数量,进而影响对聚类主题的理解。

 10.情感分析-1

kmeans_predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut), KMeans(n_clusters=5)
)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"])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)comments_data.loc[comments_data["sentiment_category"].isin([1, 3]), "positive_cluster_theme"] = [kmeans_top_word[x] for x in kmeans_cluster_label]

 11.情感分析-1

kmeans_predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut), KMeans(n_clusters=5)
)kmeans_predictor.fit(comments_data[comments_data["sentiment_category"].isin([2, 3])]["comment_text"])
kmeans_cluster_label = kmeans_predictor.predict(comments_data[comments_data["sentiment_category"].isin([2, 3])]["comment_text"])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)comments_data.loc[comments_data["sentiment_category"].isin([2, 3]), "negative_cluster_theme"] = [kmeans_top_word[x] for x in kmeans_cluster_label]

 14.情感分析-3

kmeans_predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut), KMeans(n_clusters=5)
)kmeans_predictor.fit(comments_data[comments_data["user_scenario"].isin([1])]["comment_text"])
kmeans_cluster_label = kmeans_predictor.predict(comments_data[comments_data["user_scenario"].isin([1])]["comment_text"])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)comments_data.loc[comments_data["user_scenario"].isin([1]), "scenario_cluster_theme"] = [kmeans_top_word[x] for x in kmeans_cluster_label]

15.情感分析-4

kmeans_predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut), KMeans(n_clusters=5)
)kmeans_predictor.fit(comments_data[comments_data["user_question"].isin([1])]["comment_text"])
kmeans_cluster_label = kmeans_predictor.predict(comments_data[comments_data["user_question"].isin([1])]["comment_text"])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)comments_data.loc[comments_data["user_question"].isin([1]), "question_cluster_theme"] = [kmeans_top_word[x] for x in kmeans_cluster_label]

16.情感分析-5

kmeans_predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut), KMeans(n_clusters=5)
)kmeans_predictor.fit(comments_data[comments_data["user_suggestion"].isin([1])]["comment_text"])
kmeans_cluster_label = kmeans_predictor.predict(comments_data[comments_data["user_suggestion"].isin([1])]["comment_text"])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)comments_data.loc[comments_data["user_suggestion"].isin([1]), "suggestion_cluster_theme"] = [kmeans_top_word[x] for x in kmeans_cluster_label]

17.创建目录

mkdir submit

18.打压缩包

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)

五.操作步骤

为了提高赛事提高分数,本文从一下几个方面进行微调

1.修改n_clusters=5,默认抽取10个视频样本

结果:

分数详情 

2.20个关键字,仍然保持n_clusters=5

最终结果

分数详情

3.增加样本,选择20个样本,其他保持和2一致

分数更低,因为视频数据有一些是空的,没有手工标注的。可能手工标注之后会提高

 总结:

赛事最高微调到228份多点,后面可以再手工标注后优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914431.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何基于FFMPEG 实现视频推拉流

文章目录 前言环境准备为什么选择 FFmpeg什么是nginx 1.7.11.3 GryphonNginx的conf配置启动nginx推流命令接收视频流Untiy播放视频流最后前言 我们经常会有在电脑上实现推拉流的需求,Unity 和Unreal 都提供了基于WebRTC 的视频流方案,效果还不错,但是当我们需要推拉整个电脑…

飞算JavaAI:从情绪价值到代码革命,智能合并项目与定制化开发新范式

目录一、飞算 JavaAI 是什么?二、飞算JavaAI:安装登录2.1 IDEA插件市场安装(推荐)2.2 离线安装包三、飞算JavaAI核心功能:一键生成完整工程代码功能背景3.1 理解需求3.2 设计接口3.3 表结构自动设计3.4 处理逻辑&#…

Python 基础语法与数据类型(十一) - 类 (class) 与对象 (实例)

文章目录1. 什么是类 (Class)?1.1 定义一个类2. 什么是对象 (Object) 或实例 (Instance)?2.1 创建对象(实例化)3. 访问属性和调用方法4. 类属性 vs 实例属性5. self 的重要性总结练习题练习题答案前几篇文章我们学习了变量、数据类…

精准数据检索+数据飞轮自驱优化,彩讯AI知识库助力企业知识赋能和效率创新

近两年,人工智能技术的精细化发展,让知识库概念重新成为“热门词汇”,腾讯ima等智能工作台产品为个人用户打造专属知识库,而面向B端市场,企业AI知识库也逐步成为企业集中存储与管理核心文档、数据、经验和流程的知识中…

打破空间边界!Nas-Cab用模块化设计重构个人存储逻辑

文章目录前言1. Windows安装Nas-Cab2. 本地局域网连接Nas-Cab3. 安装Cpolar内网穿透4. 固定Nas-Cab 公网地址"数据管理不该受制于硬件形态或地理边界。这个开源方案证明:当功能模块化且可扩展时,私有云可以像水一样渗透进所有设备——现在就去Git仓…

Sigma-Aldrich细胞培养基础知识:细胞培养的安全注意事项

细胞培养实验室风险评估风险评估的主要目的是防止人员受伤,保护财产,并避免对个人和环境的伤害。在许多国家,法律要求进行风险评估。例如,英国的《英国职业健康与安全法案(1974年)》就是一个例子。欧洲共同…

Imx6ull用网线与电脑连接

理解工作方式没有路由器时,可以使用,只要保持虚拟机的两个网卡一个与电脑在同一网,一个与板子在同一网段(保持通信)就可以从虚拟机往板子下载第一步:查看电脑连接的网络这一步是在找到主机ip地址这两步在其他同类教程里一样的第二步:设置以太…

力扣454.四数相加Ⅱ

给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a;0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0示例 1&#xff1a;输入&#xff1a;nums1 [1,2], nums2 …

Joplin:一款免费开源、功能强大且注重隐私的笔记软件

Joplin 是一款免费开源、功能强大且注重隐私的笔记和待办事项应用程序&#xff0c;它的设计目标是成为 Evernote 等流行笔记应用的强大替代品&#xff0c;尤其适合重视数据所有权和隐私的用户。 功能特性 Joplin 的核心定位与优势如下&#xff1a; 完全开源&#xff1a;代码公…

渗透前四天总结

目录 一.DNS DNS 基本概述 DNS解析过程 二.HTTPS TLS握手过程 RSA加密 对称加密&#xff1a; 非对称加密&#xff1a; RSA加密过程 三.使用xdebug调试php 四.信息收集 一.DNS DNS 基本概述 DNS&#xff1a;域名系统(DomainNameSystem)因特网的一项核心服务&#xf…

Python----NLP自然语言处理(中文分词器--jieba分词器)

一、介绍文本语料在输送给NLP模型前&#xff0c;需要一系列的预处理工作&#xff0c;才能符合模型输入的要求。对于NLP来说&#xff0c;他学习一篇人类书写的文章不是整体的来学习&#xff0c;而是一个词一个词的来学习。所以文本预处理的第一个步骤就是对文本进行分词处理。&a…

深入了解linux系统—— 进程信号的保存

信号 信号&#xff0c;什么是信号&#xff1f; 在现实生活中&#xff0c;闹钟&#xff0c;红绿灯&#xff0c;电话铃声等等&#xff1b;这些都是现实生活中的信号&#xff0c;当闹钟想起时&#xff0c;我就要起床&#xff1b;当电话铃声想起时&#xff0c;我就知道有人给我打电…

Redis 事务错误处理机制与开发应对策略

&#x1f4d8; Redis 事务错误处理机制与开发应对策略一、Redis 事务基础回顾 Redis 中的事务由以下三组命令构成&#xff1a;命令作用说明MULTI开始一个事务&#xff0c;进入命令入队模式命令集所有后续命令不会立即执行&#xff0c;而是入队等待提交EXEC提交事务&#xff0c;…

信息学奥赛一本通 1549:最大数 | 洛谷 P1198 [JSOI2008] 最大数

【题目链接】 ybt 1549&#xff1a;最大数 洛谷 P1198 [JSOI2008] 最大数 【题目考点】 1. 线段树&#xff1a;单点修改 区间查询 知识点讲解见&#xff1a;洛谷 P3374 【模板】树状数组 1&#xff08;线段树解法&#xff09; 【解题思路】 本题为设线段树维护区间最值&a…

【STM32】什么在使能寄存器或外设之前必须先打开时钟?

这篇文章解释一个非常基础但是重要的问题&#xff1a; 为什么在使能寄存器或外设之前必须先打开时钟&#xff1f; 我们会发现&#xff0c;如果不开时钟就访问寄存器 ⇒ 会“写不进去”或“读取错误”。 因此&#xff0c;我们在写代码时&#xff0c;总是需要 先开时钟&#xff0…

Go·并发处理http请求实现

一、Goroutine介绍 基本原理 goroutine 是 Go 运行时(Runtime)管理的​​用户态线程。与线程相比,其初始栈空间仅约 2KB,创建和切换的开销更低,能够同时运行大量并发任务。 创建goroutine的方法非常简单,在将要调用的函数前加入go关键字即可。 func hello() {fmt.Pri…

USB一线连多屏?Display Link技术深度解析

DisplayLink 技术是一种基于USB接口的显示输出解决方案&#xff0c;通常用于通过USB端口连接多个显示器&#xff0c;尤其在笔记本电脑、平板电脑和台式机上&#xff0c;能够显著扩展显示屏的数量和分辨率。它的核心技术原理是通过压缩和传输图形数据&#xff0c;将视频信号通过…

AI 临床医学课题【总结】

最近参与了几个临床医学课题,总结一下如何跨界结合 1: 确定研究的方向: 这个是决定文章的核心 研究方向的时候,就要确定要投的期刊,平时看论文的时候要把一些常用的术语记录下来, 投的期刊,研究内容,方法记录一下。 2: 研究团队团队搭建(负责人:负责读论文,研究点…

PostgreSQL HOT (Heap Only Tuple) 更新机制详解

PostgreSQL HOT (Heap Only Tuple) 更新机制详解在PostgreSQL中&#xff0c;为了提高更新操作的性能并减少存储空间的浪费&#xff0c;引入了一种称为HOT (Heap Only Tuple) 的优化技术。HOT更新允许在相同的数据页内进行行的更新操作&#xff0c;而不需要创建一个新的物理行版…

macos安装iper3

brew install iperf3Running brew update --auto-update...安装homebrew&#xff0c;长久没用使用更新失效了。只好重新安装 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"破案了 原来是需要海外网了。。。。 b…