【Datawhale AI 夏令營】 用AI做帶貨視頻評論分析(一)

引言

以訊飛「基于帶貨視頻評論的用戶洞察挑戰賽」的賽事項目為背景,將電商直播帶貨視頻的碎片化用戶評論轉化為可量化的商業洞察信息。其實本質上在于利用自然語言處理、機器學習或者大模型技術,從海量的文本數據中提取有價值的商業洞察

主要涉及以下幾個關鍵領域的任務:

  • 任務一(文本編碼):基于視頻內容識別對應的商品
  • 任務二(文本分類):從非結構化評論中提取情感傾向
  • 任務三(文本聚類):通過聚類總結用戶的關鍵觀點

1. 相關知識了解

文本編碼

概念: 文本(文章句子、評論等)——> 機器可識別的向量(數字向量)

大模型文本編碼關鍵步驟:

1. 分詞: 將一句話拆解成更小的語言單元(通常是單詞、子詞、字符)

  • 例子:
    輸入文本:"I love AI."
    分詞結果可能是:["I", "love", "AI", "."]["I", "lov", "e", "AI", "."](具體取決于分詞器類型)

2. 詞元映射為索引每個詞元都會被映射到一個詞匯表中的索引號

  • ["I", "love", "AI", "."][101, 456, 987, 102]

3.位置編碼(Position Encoding):

? 因為 Transformer 結構本身沒有序列順序的概念,所以要顯式加上位置信息

4. 生成詞嵌入: 每個 token 索引會被映射為一個高維稠密向量

  • 舉例:[101, 456, 987, 102][[0.1, 0.2, ..., 0.9], [...], ..., [...]]
  • 最終形成一個二維張量 [sequence_length, embedding_dim],比如 [4, 768]

常用方法包括獨熱編碼、詞嵌入 (如Word2Vec、GloVe等靜態詞向量)以及基于預訓練模型的上下文詞嵌入(如BERT、GPT等動態詞向量)。

編碼方式上下文相關稠密向量是否需要位置編碼模型是否訓練詞向量適合場景
獨熱編碼? 稀疏? 否? 否教學演示、早期模型
Word2Vec/GloVe? 靜態? 否? 是(預訓練)傳統NLP任務
BERT/GPT等? 是? 動態? 是? 是(上下文訓練)現代NLP任務、SOTA模型

文本分類:根據文本內容將其自動歸類到預定義類別。

  • 本項目中的情感分析屬于多維度文本分類任務,需要識別評論的情感傾向(正面/負面/中性等)以及是否涉及用戶場景、疑問或建議等屬性。
  • 常用方法包括基于規則和詞典的方法、傳統機器學習方法(如樸素貝葉斯、支持向量機SVM等)以及深度學習方法(如循環神經網絡RNN、卷積神經網絡CNN、Transformer等) 。

文本聚類:根據文本內容的相似性自動將文本分組,無需預先定義類別。

  • 本項目要求按商品對指定維度的評論進行聚類,并提煉每類的主題詞。
  • 常用聚類算法包括K-Means(需預設簇數K)、層次聚類、DBSCAN等

2.賽題及數據

具體信息可查看官網

賽題難點

  • 數據量少,挑戰模型泛化能力
    • 比賽提供的數據量相對較少,包含 85 條脫敏后的帶貨視頻數據和 6477 條評論文本數據。其中,帶有 人工標注結果的訓練集更是有限
  • 多任務協同,要求全鏈路解決方案
    • 本次比賽并非單一任務,而是要求參賽者完成“ 商品識別-情感分析-評論聚類 ”的完整鏈條,每個階段環環相扣。

解題思路

商品識別是基礎,如果這里出了錯,后續的情感分析和聚類就沒有意義。情感分析的結果又會影響聚類的樣本選擇。

  • 商品識別 (高優先級): 必須盡可能準確。【文本分類】
  • 情感分析 (高優先級): 這是數據最豐富的部分,也是后面聚類的關鍵輸入。【多標簽文本分類】
  • 評論聚類 (次高優先級): 基于前兩步的結果,需要考慮聚類的效果評估(輪廓系數)和主題詞提煉的質量。無監督學習中的文本聚類+ 主題詞提取

3.baseline解讀

1.設計思路: 分階段處理 各個任務,并利用 TF-IDF / BGE向量化線性分類器/KMeans 聚類 來完成商品識別、情感分析和評論聚類。

  • 計算資源需求低: 相較于大型深度學習模型,TF-IDF 和 LinearSVC/KMeans 對計算資源的要求非常低。這意味著它可以在普通的個人電腦上快速運行,無需高性能GPU,也符合比賽中可能存在的資源限制(尤其是在不使用額外付費資源的情況下)。

  • TF-IDF 的局限性: TF-IDF 僅關注詞語的頻率和文檔分布,無法捕捉詞語的 上下文信息語義相似性多義詞 。例如,“蘋果”在“買蘋果手機”和“吃蘋果”中含義不同,TF-IDF 無法區分。

    改進:可以嘗試BERT

  • K-Means 的局限性: K-Means 是一種基于距離的聚類算法,它假設簇是凸形的且大小相近。它對初始質心敏感,且無法很好地處理不規則形狀的簇。

2.代碼整體流程

這個 baseline 代碼嚴格按照比賽的三個任務順序執行:

  1. 任務一: 訓練一個模型來預測 product_name
  2. 任務二: 訓練四個模型來分別預測四個情感相關的標簽。
  3. 任務三: 對不同類別的評論進行聚類,并提取主題詞。

分步詳解

  1. 數據準備
video_data["text"] = video_data["video_desc"].fillna("") + " " + video_data["video_tags"].fillna("")

因為描述和標簽都包含商品有關信息,合在一起,能給模型提供更全面信息

  1. 任務一:商品識別
product_name_predictor = make_pipeline( # 創建處理流水線 # 文本向量化+分類TfidfVectorizer(tokenizer=jieba.lcut, max_features=50), SGDClassifier()
)
product_name_predictor.fit(	# 訓練模型,代碼篩選出 product_name 這一列有標注的行,用這些數據來訓練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"])	# 預測

3.任務二:情感分析

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

這里用一個 for 循環,對 sentiment_category, user_scenario 等四個目標列,重復地做了和任務一幾乎一樣的事情:

  1. 創建一個 TF-IDF + SGDClassifier 的流水線。
  2. 用已有標注的評論數據進行訓練。
  3. 對所有評論進行預測,填上對應的標簽。

4.任務三:評論聚類

# 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"])# 2. 對評論進行聚類
kmeans_cluster_label = kmeans_predictor.predict(comments_data[comments_data["sentiment_category"].isin([1, 3])]["comment_text"])# 3. 提取每個類簇的主題詞
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]	# 按TF-IDF權重排序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]

named_steps:從 pipeline 中取出各步驟的具體對象

feature_names:TF-IDF 中的所有詞(按順序)

cluster_centers_:每個聚類中心的向量,表示這個簇中哪些詞的平均 TF-IDF 值最大

步驟:

  • 1、創建聚類流水線:這次的流水線是 TF-IDF + KMeansKMeans 是一種經典的聚類算法。

  • 2、篩選數據并訓練:它先從所有評論中篩選出正面或包含正面的評論(sentiment_category 為 1 或 3),然后用這些評論來訓練 KMeans 模型。

  • 3、預測簇標簽:模型會給每一條正面評論分配一個它所屬的類別標簽(比如第0類或第1類)。

  • 4、提取主題詞:找出TF-IDF權重最高的幾個詞,然后把這幾個詞拼成一個字符串,作為這個類別的“總結詞”。

  • 5、結果:最后,把每個評論所屬類別的“總結詞”填到 positive_cluster_theme 這一列。

其它幾個評論文本類似。

4.優化思考

對于任務一

  • 模型太簡單TF-IDF + SGDClassifier 是非常基礎的組合,它只能學到一些表面的詞頻信息,理解不了深層語義。

  • 參數max_features=50 這個參數限制了 TfidfVectorizer 只會關注最重要的50個詞。嘗試改為100呢?

對于任務二

  • 同樣是TF-IDF局限性

對于任務三

  • 模型
  • 聚類數:寫一個循環,嘗試 n_clusters 從5到8的所有可能。對于每一個 n_clusters 值,都計算一下聚類的輪廓系數 (Silhouette Coefficient),選擇讓輪廓系數最高的那個 n_clusters 值作為你最終的聚類數量
# 動態確定最佳聚類數
from sklearn.metrics import silhouette_score
best_k = 0
best_score = -1for k in range(5,9):kmeans = KMeans(n_clusters=k)labels = kmeans.fit_predict(embeddings)score = silhouette_score(embeddings, labels)if score > best_score:best_k = k

優化思路1: 修改max_features參數循環聚類數

分數從
在這里插入圖片描述

提高到
在這里插入圖片描述

其它優化思路:(預訓練模型大模型

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

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

相關文章

Vue中的render()函數

在 Vue 中&#xff0c;render() 是一個用于手動編寫組件渲染邏輯的方法&#xff0c;它直接返回虛擬節點&#xff08;VNode&#xff09;&#xff0c;替代模板語法&#xff08;<template>&#xff09;來描述組件的 UI 結構。以下是關于 render() 方法的詳細解析&#xff1a…

板凳-------Mysql cookbook學習 (十一--------9)

13.2 分組描述統計 mysql> select age, count(score) as n,-> sum(score) as sum,-> min(score) as minimum,-> max(score) as maximum,-> avg(score) as mean,-> stddev_samp(score) as std. dev.,-> var_samp(score) as variance-> from testscore-&…

編寫產品需求文檔:黃歷日歷小程序

整理產品需求文檔&#xff1a;黃歷日歷小程序版本&#xff1a;1.0 更新時間&#xff1a;2025-7-9一、文檔概述1.1 產品背景開發一款融合傳統黃歷文化的日歷工具&#xff0c;提供每日吉兇查詢、神煞展示和個人運勢分析功能。1.2 目標用戶關注傳統歷法的中老年群體婚嫁/搬家等需要…

Spring Boot + MyBatis 實現用戶登錄功能詳解(基礎)

一、項目概述做了幾個項目發現有人問到怎么使用springbootHTMLjsCSS開發一個項目呢所以本文將介紹如何使用Spring Boot和MyBatis實現一個完整的用戶登錄功能。系統包含前端登錄頁面、后端控制器、服務層、數據訪問層以及數據庫交互。二、技術棧Spring Boot 2.xMyBatis 持久層框…

adb 簡介與常用命令

1. adb 簡介adb 的全稱為 Android Debug Bridge&#xff0c;就是起到調試橋的作用。借助 adb 工具&#xff0c;我們可以管理設備或手機模擬器的狀態。還可以進行很多手機操作&#xff0c;如安裝軟件、系統升級、運行 shell 命令等等。其實簡而言說&#xff0c;adb 就是連接 And…

阿里云-跨賬號同步OSS Bucket

說明 阿里云A賬號的OSS BUCKET同步到B賬號的指定OSS BUCKET。 賬號Bucket NamesRAM角色A{源buctket}OSS-SYNCERB{目標buctket} 步驟 在阿里云A,B賬號分別建上表buckets, 最好是相同地域的在A號-RAM控制臺建立角色OSS-SYNCER&#xff0c;并賦權AliyunOSSFullAccess&#xff…

uniapp小程序無感刷新token

request.js // request.js import {getApptoken,getStoredApptoken } from ./tokenRequest // 從合并模塊導入// 全局配置 const MAX_RETRIES 1 // 最大重試次數 const baseURL https://your-api.com// 請求隊列和刷新狀態 let requestsQueue [] let isRefreshing false// …

MySQL優化高手筆記

語雀完整版&#xff1a;https://www.yuque.com/g/mingrun/embiys/dv3btw/collaborator/join?tokenzMBwPzSMfSGINLuv&sourcedoc_collaborator# 《MySQL優化高手筆記》MySQL優化高手一、MySQL架構01 天天寫CRUD,你知道你的系統是如何跟MySQL打交道的嗎通過驅動連接數據庫&am…

Git 詳解:從概念,常用命令,版本回退到工作流

本文將從 Git 的核心概念講起&#xff0c;詳細介紹常用命令、各階段版本回退、分支控制以及企業內常見的 Git 工作流。 Git 與 GitHub 簡介 Git 簡介 Git 是一個開源的分布式版本控制系統&#xff0c;由 Linus Torvalds 于 2005 年開發。它與集中式版本控制系統&#xff08;…

CMSIS(Cortex Microcontroller Software Interface Standard)ARM公司為 Cortex-M 系列處理器

CMSIS&#xff08;Cortex Microcontroller Software Interface Standard&#xff09;是ARM公司為 Cortex-M 系列處理器&#xff08;如 M0/M3/M4/M7/M23/M33 等&#xff09;定義的一套硬件抽象層標準&#xff0c;旨在簡化嵌入式開發&#xff0c;提高代碼的可移植性和復用性。 核…

[特殊字符] 掃描式處理:Python 自動提取 PDF 中關鍵詞相關表格并導出為 Excel

本文演示如何利用 pdfplumber 批量處理指定文件夾下 PDF 文檔&#xff1a;定位關鍵詞&#xff08;如“主要會計數據”&#xff09;出現的頁碼及下一頁&#xff0c;提取其中的表格并保存為獨立 Excel 文件。適用于財務報告、審計表格、統計報表等場景。 1?? 第一步&#xff1a…

python3的返回值能返回多個嗎?

在Python中&#xff0c;函數可以通過返回一個元組&#xff08;tuple&#xff09; 來間接實現返回多個值的效果。以下是具體說明&#xff1a; 實現方式&#xff1a;直接返回逗號分隔的值 Python會自動將這些值打包成一個元組&#xff1a; def multiple_return():a 1b "he…

UE5 Secondary Materials

首先放入材質A材質B放入Secondary Materials兩個效果就能融合到一起了動態設置secondary material

AUTOSAR進階圖解==>AUTOSAR_SWS_FlashTest

AUTOSAR Flash Test模塊詳解與分析 基于AUTOSAR標準的Flash Test模塊架構、功能與應用分析目錄 1. Flash Test模塊概述 1.1 模塊作用與功能1.2 適用范圍 2. Flash Test模塊架構 2.1 模塊位置2.2 組件關系 3. 狀態管理 3.1 狀態定義3.2 狀態轉換 4. 后臺測試執行流程 4.1 測試間…

msf復現永恒之藍

永恒之藍&#xff08;EternalBlue&#xff09;是利用 Windows 系統的 SMB 協議漏洞&#xff08;MS17-010&#xff09;來獲取系統最高權限的漏洞&#xff0c;利用 Metasploit 框架&#xff08;MSF&#xff09;復現該漏洞是一個復雜且具有一定風險的操作&#xff0c;必須在合法合…

格密碼--LWE,DLWE和ss-LWE

格密碼–LWE&#xff0c;DLWE和ss-LWE 0.數學符號數學符號含義備注Zq\mathbb{Z}_qZq?模qqq的整數集合&#xff0c;即{0,1,2,...,q?1}\{0,1,2,...,q-1\}{0,1,2,...,q?1}用于定義LWE、DLWE、ss-LWE等問題中矩陣和向量的元素取值范圍&#xff0c;是基礎整數環x∈RSx \in_R Sx∈…

【閉包】前端的“保護神”——閉包詳解+底層原理

目錄 一、閉包是什么&#xff1f;概念 二、閉包為什么存在&#xff1f;作用 1. 創建私有變量 2. 實現數據封裝與信息隱藏 3. 模擬私有方法 4. 保存函數執行時的狀態 5. 回調函數和事件處理 6. 模塊化編程 7. 懶加載與延遲執行 三、閉包怎么用&#xff1f;實踐業務場景 …

算法學習筆記:19.牛頓迭代法——從原理到實戰,涵蓋 LeetCode 與考研 408 例題

牛頓迭代法&#xff08;Newtons Method&#xff09;是一種強大的數值計算方法&#xff0c;由英國數學家艾薩克?牛頓提出。它通過不斷迭代逼近方程的根&#xff0c;具有收斂速度快、適用范圍廣的特點&#xff0c;在科學計算、工程模擬、計算機圖形學等領域有著廣泛應用。牛頓迭…

小白學Python,操作文件和文件夾

目錄 前言 一、操作文件路徑 1.獲取當前路徑 2.創建文件夾 &#xff08;1&#xff09;mkdir()函數 &#xff08;2&#xff09;makedirs() 函數 3.拼接路徑 4.跳轉路徑 5.判斷相對路徑和絕對路徑 6.獲取文件路徑和文件名 二、操作文件和文件夾 1.查詢文件大小 2.刪除…

015_引用功能與信息溯源

引用功能與信息溯源 目錄 引用功能概述支持的模型引用類型API使用方法引用格式應用場景最佳實踐 引用功能概述 什么是引用功能 Claude的引用功能允許在回答基于文檔的問題時提供詳細的信息來源引用&#xff0c;幫助用戶追蹤和驗證信息的準確性。這個功能特別適用于需要高可…