用AI做帶貨視頻評論分析進階提分【Datawhale AI 夏令營】

文章目錄

  • 回顧賽題
  • 優化1??
  • 優化2??


回顧賽題

模塊內容類型說明/示例
賽題背景概述參賽者需構建端到端評論分析系統,實現商品識別、多維情感分析、評論聚類與主題提煉三大任務。
商品識別輸入video_desc(視頻描述)+ video_tags(標簽)
輸出商品名稱(如:Xfaiyx Smart Translator/Recorder)
多維情感分析情感維度- 情感傾向(5類)
- 用戶場景
- 用戶疑問
- 用戶建議
挑戰點隱晦表達處理,如“這重量出門帶著剛好”暗示出行場景
評論聚類與主題提煉聚類目標針對5類評論進行聚類分析
輸出示例主題詞如:續航短|充電慢|發熱嚴重
賽題目標AI目標從原始評論中提取商品與用戶洞察,轉化為商業智能
評估標準商品識別準確率(Accuracy):正確識別商品的比例
情感分析宏平均 F1 值:多分類性能衡量
評論聚類輪廓系數(Silhouette Score):評估聚類合理性
數據集視頻數據85 條,4 個字段,部分標注 product_name
評論數據6,477 條,12 個字段,部分情感字段已標注
挑戰與難點標注比例低僅約 15% 樣本有人工標注
泛化能力挑戰需提升未標注樣本上的表現
推薦方法- 半監督學習(如 UDA)
- 提示學習(Prompt Learning)
最終目標總結構建商品識別 → 情感分析 → 聚類主題提煉的完整 AI 處理鏈路

優化1??

? 使用 Pipeline 封裝 TF-IDF + 分類/聚類流程

  • 說明:通過 make_pipeline()TfidfVectorizerSGDClassifier / KMeans 組合成統一流程,簡化訓練和預測步驟。

? 聚類 + 高頻關鍵詞提取邏輯封裝成函數

  • 說明extract_cluster_theme(...) 函數統一處理文本聚類與主題詞抽取,減少冗余代碼。

? 文本字段預處理策略合理整合

  • 說明:將 video_descvideo_tags 組合生成 text 字段用于分類模型訓練。
import os
import jieba
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import SGDClassifier
from sklearn.pipeline import make_pipeline
from sklearn.cluster import KMeans# -----------------------------
# 1. 加載數據
# -----------------------------
video_data = pd.read_csv("origin_videos_data.csv")
comments_data = pd.read_csv("origin_comments_data.csv")# 合并視頻文本信息作為商品預測輸入
video_data["text"] = video_data["video_desc"].fillna("") + " " + video_data["video_tags"].fillna("")# -----------------------------
# 2. 商品名稱預測(分類任務)
# -----------------------------
product_name_predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut, max_features=50),SGDClassifier()
)
video_train = video_data[~video_data["product_name"].isnull()]
product_name_predictor.fit(video_train["text"], video_train["product_name"])
video_data["product_name"] = product_name_predictor.predict(video_data["text"])# -----------------------------
# 3. 評論情感&屬性多維度分類
# -----------------------------
target_cols = ['sentiment_category', 'user_scenario', 'user_question', 'user_suggestion']for col in target_cols:predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut),SGDClassifier())train_data = comments_data[~comments_data[col].isnull()]predictor.fit(train_data["comment_text"], train_data[col])comments_data[col] = predictor.predict(comments_data["comment_text"])# -----------------------------
# 4. 聚類 + 主題提取封裝函數
# -----------------------------
def extract_cluster_theme(dataframe, filter_cond, target_column, n_clusters=5, top_n_words=10):"""對特定子集評論進行聚類并提取主題詞"""cluster_texts = dataframe[filter_cond]["comment_text"]kmeans_pipeline = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut),KMeans(n_clusters=n_clusters, random_state=42))kmeans_pipeline.fit(cluster_texts)cluster_labels = kmeans_pipeline.predict(cluster_texts)# 提取高頻主題詞tfidf = kmeans_pipeline.named_steps['tfidfvectorizer']kmeans = kmeans_pipeline.named_steps['kmeans']feature_names = tfidf.get_feature_names_out()cluster_centers = kmeans.cluster_centers_top_keywords = []for i in range(n_clusters):indices = cluster_centers[i].argsort()[::-1][:top_n_words]keywords = ' '.join([feature_names[idx] for idx in indices])top_keywords.append(keywords)# 寫入對應字段dataframe.loc[filter_cond, target_column] = [top_keywords[label] for label in cluster_labels]# -----------------------------
# 5. 進行五個維度的聚類主題提取
# -----------------------------
extract_cluster_theme(comments_data,comments_data["sentiment_category"].isin([1, 3]),"positive_cluster_theme"
)extract_cluster_theme(comments_data,comments_data["sentiment_category"].isin([2, 3]),"negative_cluster_theme"
)extract_cluster_theme(comments_data,comments_data["user_scenario"] == 1,"scenario_cluster_theme"
)extract_cluster_theme(comments_data,comments_data["user_question"] == 1,"question_cluster_theme"
)extract_cluster_theme(comments_data,comments_data["user_suggestion"] == 1,"suggestion_cluster_theme"
)# -----------------------------
# 6. 導出預測結果
# -----------------------------
os.makedirs("submit", exist_ok=True)video_data[["video_id", "product_name"]].to_csv("submit/submit_videos.csv", index=False)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=False)

對比效果

在這里插入圖片描述


優化2??

import os
import jieba
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import SGDClassifier
from sklearn.pipeline import make_pipeline
from sklearn.cluster import KMeans# -----------------------------
# 1. 加載數據
# -----------------------------
video_data = pd.read_csv("origin_videos_data.csv")
comments_data = pd.read_csv("origin_comments_data.csv")# 合并視頻描述 + 標簽,形成商品分類模型的輸入字段
video_data["text"] = video_data["video_desc"].fillna("") + " " + video_data["video_tags"].fillna("")# -----------------------------
# 2. 商品名稱預測(分類任務)
# -----------------------------
# 構建商品分類器:使用 TF-IDF(最多 50 個詞)+ SGD 分類器(適合大規模稀疏特征)
product_name_predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut, max_features=50),SGDClassifier()
)
# 拿有真實標簽的部分訓練模型
video_train = video_data[~video_data["product_name"].isnull()]
product_name_predictor.fit(video_train["text"], video_train["product_name"])# 使用模型預測所有視頻的商品名稱
video_data["product_name"] = product_name_predictor.predict(video_data["text"])# ? 可選優化:
# - 模型替換:`SGDClassifier` 可替換為 `LogisticRegression`, `XGBoost`, `RandomForest` 等
# - 分詞改進:`jieba` 可替換為 `pkuseg`, `LAC`,或使用 `BERT` tokenizer(更強但慢)
# - 增加 n-gram:`ngram_range=(1,2)` 可捕捉“關鍵詞組合”,提高分類準確率# -----------------------------
# 3. 評論情感&屬性多維度分類
# -----------------------------
# 要預測的評論屬性標簽(分類任務)
target_cols = ['sentiment_category', 'user_scenario', 'user_question', 'user_suggestion']# 對每個目標列都訓練一個 TF-IDF + SGD 分類器
for col in target_cols:predictor = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut),SGDClassifier())train_data = comments_data[~comments_data[col].isnull()]predictor.fit(train_data["comment_text"], train_data[col])comments_data[col] = predictor.predict(comments_data["comment_text"])# ? 可選優化:
# - 使用 `MultiOutputClassifier` 構建聯合多標簽分類器
# - 樣本不均衡時,考慮添加 `class_weight='balanced'`
# - 加入 `classification_report` 輸出分類指標,輔助調參# -----------------------------
# 4. 聚類 + 主題提取封裝函數
# -----------------------------
def extract_cluster_theme(dataframe, filter_cond, target_column, n_clusters=5, top_n_words=10):"""對指定條件篩選出的評論子集,使用 KMeans 聚類并提取每類高頻關鍵詞,寫入主題字段"""cluster_texts = dataframe[filter_cond]["comment_text"]# 構建聚類模型:TF-IDF + KMeanskmeans_pipeline = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut),KMeans(n_clusters=n_clusters, random_state=42))kmeans_pipeline.fit(cluster_texts)cluster_labels = kmeans_pipeline.predict(cluster_texts)# 提取每個聚類的高頻關鍵詞(TF-IDF 值最高的前 n 個詞)tfidf = kmeans_pipeline.named_steps['tfidfvectorizer']kmeans = kmeans_pipeline.named_steps['kmeans']feature_names = tfidf.get_feature_names_out()cluster_centers = kmeans.cluster_centers_top_keywords = []for i in range(n_clusters):indices = cluster_centers[i].argsort()[::-1][:top_n_words]keywords = ' '.join([feature_names[idx] for idx in indices])top_keywords.append(keywords)# 為篩選子集中的每條評論賦予對應主題標簽dataframe.loc[filter_cond, target_column] = [top_keywords[label] for label in cluster_labels]# ? 可選優化:
# - 聚類算法替換:`KMeans` → `MiniBatchKMeans`(更快)、`LDA`(更語義)、`HDBSCAN`(無需指定簇數)
# - TF-IDF 可以添加 `max_features`, `stop_words`, `ngram_range` 等增強表達
# - 可加 `TSNE` / `UMAP` 降維可視化聚類分布
# - 可保存最具代表性的樣本(如每類中心附近評論)# -----------------------------
# 5. 進行五個維度的聚類主題提取
# -----------------------------
# 對以下幾類評論子集做主題提取,并寫入指定列
extract_cluster_theme(comments_data,comments_data["sentiment_category"].isin([1, 3]),"positive_cluster_theme"
)extract_cluster_theme(comments_data,comments_data["sentiment_category"].isin([2, 3]),"negative_cluster_theme"
)extract_cluster_theme(comments_data,comments_data["user_scenario"] == 1,"scenario_cluster_theme"
)extract_cluster_theme(comments_data,comments_data["user_question"] == 1,"question_cluster_theme"
)extract_cluster_theme(comments_data,comments_data["user_suggestion"] == 1,"suggestion_cluster_theme"
)# ? 可選優化:
# - 添加異常處理,避免聚類文本為空時程序崩潰
# - 若后續支持多語言數據,可替換 tokenizer 和聚類邏輯為更通用版本# -----------------------------
# 6. 導出預測結果
# -----------------------------
# 創建輸出目錄
os.makedirs("submit", exist_ok=True)# 導出商品預測結果
video_data[["video_id", "product_name"]].to_csv("submit/submit_videos.csv", index=False)# 導出評論多分類 + 聚類主題提取結果
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=False)

對比結果:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89518.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89518.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89518.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis常見數據結構詳細介紹

Redis 作為一款高性能的開源內存數據庫,憑借其豐富多樣的數據結構和出色的性能,在緩存、會話存儲、實時分析等眾多場景中得到了廣泛應用。下面將詳細介紹 Redis 主要的數據結構,包括它們的類型、具體用法和適用場景。1、字符串(St…

HAMR硬盤高溫寫入的可靠性問題

熱輔助磁記錄(HAMR)作為突破傳統磁記錄密度極限的下一代存儲技術,其在數據中心大規模應用的核心挑戰在于可靠性保障。 擴展閱讀: 下一個存儲戰場:HAMR技術HDD HAMR技術進入云存儲市場! 漫談HAMR硬盤的可靠性 隨著存儲密度向4Tbpsi邁進,傳統磁記錄技術遭遇"三難困境…

使用llama-factory進行qwen3模型微調

運行環境 Linux 系統(ubuntu) Gpu (NVIDIA) 安裝部署 llama factory CUDA 安裝 首先,在 https://developer.nvidia.com/cuda-gpus 查看您的 GPU 是否支持CUDA 保證當前 Linux 版本支持CUDA. 在命令行中輸入 uname -m && cat /etc/*release,應當看到類似的輸出 x8…

tcp/udp調試工具

幾款tcp/udp調試工具 下載地址:夸克網盤

智慧光伏發電信息化系統需求文檔

以下是從產品經理角度撰寫的智慧光伏發電信息化系統需求文檔,聚焦光伏行業痛點與業務價值,遵循標準PRD結構:智慧光伏發電信息化系統需求文檔 版本:1.0 日期:2025年7月19日 作者:產品經理視角一、文檔概述 1…

ARCS系統機器視覺實戰(直播回放)

ARCS系統機器視覺實戰本次培訓主要圍繞ARCS操作系統中的視覺與機器人同步應用展開,詳細講解了網絡配置、視覺軟件設置、九點標定、機器人程序編寫以及數據通信等內容。以下是關鍵要點提煉: 網絡配置 為機器人、相機和電腦分別設置靜態IP地址,…

Http請求中的特殊字符

問題 一個 springboot 應用&#xff0c;包含如下 controller RestController public class DemoController {GetMapping("/get")public ResponseEntity<String> get(RequestParam(value "cid2") String cid2) 準備測試數據 String cid2 "…

告別手動報表開發!描述數據維度,AI 自動生成 SQL 查詢 + Java 導出接口

Java 開發中&#xff0c;報表模塊往往是 “隱形耗時大戶”—— 產品經理要 “按地區、月份統計訂單量”&#xff0c;開發者需先編寫 SQL 查詢&#xff0c;再手動開發導出接口&#xff0c;稍作調整又要重新調試&#xff0c;耗費大量時間在重復勞動上。飛算 JavaAI 通過 “數據維…

函數設計測試用例

//歸并排序:public static void mergeSort(int[] a,int left,int right){if(left > right)return;int mid left(right -left)/2;mergeSort(a,left,mid);mergeSort(a,mid1,right);int[] tmp new int[a.length];int l left,r mid1,k left;while(l<mid && r<…

Vmware虛擬機使用僅主機模式共享物理網卡訪問互聯網

一、概述 Vmware虛擬機網卡模式有三種&#xff1a;橋接模式、僅主機模式、NAT模式。默認情況下&#xff0c;Vmware虛擬機使用僅主機模式不能訪問互聯網。因此&#xff0c;虛擬機可以共享宿主機的物理網卡訪問互聯網。 三種網卡模式的區別二、Vmware網絡設置 2.1、調整虛擬網絡 …

聲畫同步!5 個音視頻素材適配的網站,創作更和諧

視頻畫面和背景音樂不搭&#xff1f;音效和動作不同步&#xff1f;好的作品&#xff0c;聲音和畫面必須像齒輪一樣咬合。這 5 個專注 “聲畫同步” 的素材網站&#xff0c;能讓音視頻素材精準匹配&#xff0c;從旋律到節奏&#xff0c;從音效到畫面&#xff0c;都默契十足&…

13.多種I/O函數

前言 之前的示例中&#xff0c;基于Linux的使用read&write函數完成數據I/O&#xff0c;基于Windows的則使用send&recv函數。這次的Linux示例也將使用send& recv函數&#xff0c;并講解其與read&write函數相比的優點。還將介紹幾種其他的I/O函數。 一、send &am…

設計模式五:橋模式(Bridge Pattern)

橋模式是一種結構型設計模式&#xff0c;它將抽象部分與其實現部分分離&#xff0c;使它們可以獨立變化。這種模式通過提供橋梁結構將抽象和實現解耦。橋模式的結構橋模式包含以下主要角色&#xff1a;Abstraction&#xff08;抽象類&#xff09;&#xff1a;定義抽象接口&…

深入理解設計模式之模板模式:優雅地定義算法骨架

在軟件開發中&#xff0c;我們經常會遇到這樣的情況&#xff1a;多個類執行相似的操作流程&#xff0c;但每個類在流程的某些步驟上有自己特定的實現。如果為每個類都完整地編寫整個流程&#xff0c;會導致大量重復代碼&#xff0c;且難以維護。這時候&#xff0c;模板模式&…

基于單片機寵物喂食器/智能寵物窩/智能飼養

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 深夜加班時&#xff0c;你是否擔心家中寵物餓肚子&#xff1f;出差旅途中&#xff0c;是否焦慮寵…

靜態補丁腳本 - 修改 libtolua.so

直接改arm64的so&#xff0c; 使用python腳本。#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 靜態補丁腳本 - 修改 libtolua.so 主要功能&#xff1a; 1. 修改 luaL_loadbuffer 函數&#xff0c;將跳轉目標從 luaL_loadbufferx 改為 luaL_loadfilex 2. …

2-大語言模型—理論基礎:詳解Transformer架構的實現(2)

目錄 1-大語言模型—理論基礎&#xff1a;詳解Transformer架構的實現(1)-CSDN博客https://blog.csdn.net/wh1236666/article/details/149443139?spm1001.2014.3001.5502 2.3、殘差連接和層歸一化 2.3.1、什么是層歸一化&#xff1f; 2.3.2、層歸一化的核心特點&#xff08…

SmartX 用戶建云實踐|富士康:基于榫卯企業云平臺構建分布式云,支撐全球多地工廠重要產線

作為全球最大的電子科技智造服務商&#xff0c;富士康集團在全球范圍內構建生產制造網絡。為實現多廠區統一管理與降本增效&#xff0c;在逐步替代 VMware 虛擬化架構的過程中&#xff0c;富士康對比了自研 OpenStack Ceph 平臺和 SmartX 超融合方案&#xff0c;最終選擇基于 …

ADC選型設計

1、最大擺伏FSR&#xff1a; 0 ~ 4.096V&#xff0c;一般Vref要等于FSR 2、最大頻率&#xff1a;根據奈奎斯特采樣定理大于2倍的信號頻率才夠還原信號&#xff0c;所以選擇20/50倍更好&#xff0c; 3、最小精度&#xff0c;對于一給定模擬輸入&#xff0c;實際數字輸出與理論預…

基于深度學習的火災智能檢測系統設計與實現

在各類安全事故中&#xff0c;火災因其突發性強、破壞力大&#xff0c;一直是威脅人們生命財產安全的重大隱患。傳統的火災檢測方式多依賴煙霧傳感器、溫度傳感器等&#xff0c;存在響應滯后、易受環境干擾等問題。隨著深度學習技術的飛速發展&#xff0c;基于計算機視覺的火災…