賽事報名鏈接:2025 iFLYTEK AI開發者大賽-訊飛開放平臺
本賽事聚焦電商直播帶貨場景,要求基于帶貨視頻及評論文本數據,完成三階段任務:
任務一:商品識別
數據方面的信息
數據來源:origin_videos_data.csv (帶貨視頻數據)
隨機展示10條記錄,我們不難發現這些評論有的來自不同國家且存在NAN(數據缺失)的情況。
對應策略:可引入不同語言的識別或統一翻譯可以在一定程度上優化商品的識別。
商品識別方面的要求
運行生成 submit_videos.csv 文件,形如
video_id? ?? | product_name |
... | ... |
其中,product_name 一列需要我們通過?origin_videos_data.csv?中 video_desc(視頻描述)和video_tags(視頻標簽)的信息推斷處理獲得的(【Xfaiyx Smart Translator, Xfaiyx Smart Recorder】這其中之一)
對此,我們可以理解為其本質上是個二分類任務。
任務設計思路方面
針對商品識別這二分類任務(判斷為 Xfaiyx Smart Translator 或 Xfaiyx Smart Recorder),設計思路可分為四大類:
(1)規則匹配法基于人工設定邏輯,包括關鍵詞權重累加、固定模板匹配、詞向量相似度對比,通過文本中關鍵詞、模板或語義關聯直接判斷類別;
(2)傳統機器學習法將文本轉化為特征向量(如 TF-IDF),利用邏輯回歸、決策樹、隨機森林等模型學習特征與類別的關系,輸出分類結果;
(3)深度學習法借助神經網絡處理文本,如 BERT 捕捉深層語義、TextCNN 提取關鍵短語、雙向 LSTM 捕捉上下文依賴等,通過語義理解實現分類;
(4)混合模型法則融合規則與機器學習優勢(先規則過濾再模型處理),或融合多類特征(關鍵詞、統計、語義特征),綜合提升分類效率與準確性。
這里就先以(4)混合模型法為例子,進行任務的處理。
- 規則匹配層:通過
PRODUCT_KEYWORDS
手動定義商品特征詞,直接關聯到目標類別 - 機器學習層:使用樸素貝葉斯模型處理文本統計特征
- 混合策略:先由模型預測,再用規則修正明顯錯誤,結合兩者優勢
核心代碼如下:
*構建混合模型*:傳統機器學習 + 規則修正
def build_hybrid_model():# 機器學習模型:樸素貝葉斯 + TF-IDFmodel = make_pipeline(TfidfVectorizer(tokenizer=jieba.lcut, max_features=200, ngram_range=(1, 1), min_df=1),MultinomialNB(alpha=0.1))return model
最終商品的識別效果大致能達到92+
補充:當然也可以嘗試接入大模型獲取更高的分數
任務二:情感分析
數據和要求方面的信息
數據來源:origin_comments_data.csv (評論文本數據)
需要我們通過comment_text(評論文本)中的信息完成以下4個判斷:
????????(a)sentiment_category int 關于商品的情感傾向分類
分類值 | 1 | 2 | 3 | 4 | 5 |
含義 | 正面 | 負面 | 正負都有 | 中性 | 不相關 |
????????(b)user_scenario int 是否與用戶場景有關,0表示否,1表示是
????????(c)user_question int 是否與用戶疑問有關,0表示否,1表示是 ? ? ? ?
????????(d)user_suggestion int 是否與用戶建議有關,0表示否,1表示是
對此,我們可以進一步將其拆分為 1個多分類 和 3個二分類任務。
任務設計思路方面
基于情感分析任務的語義復雜性、數據規模、多維度標簽關聯等特性,與神經網絡的深層語義建模、自動特征學習、多任務協同能力高度匹配的考慮,這里任務二選擇使用(3)深度學習法 ,?即融合多個深度學習模型的輸出。
- 雙向 LSTM + 注意力機制:通過 LSTM 捕捉文本序列的上下文依賴關系,注意力機制聚焦關鍵語義片段,適合處理長文本的語義關聯。
- 多尺度 CNN:通過不同卷積核(3/5/7gram)提取文本中的局部關鍵特征(如短語、情感詞),擅長捕捉短文本的關鍵模式。
- 多模型策略:通過神經網絡(LSTM + 注意力、多尺度 CNN)實現文本分類任務??????
核心代碼如下:
LSTM模型:雙向 LSTM 層通過前向和后向傳遞捕獲文本序列的長距離依賴關系,并且引入注意力機制,通過計算文本各部分的權重分布,自動聚焦于對分類最關鍵的詞和短語,提升模型對重要語義片段的敏感度
class LSTMModel(nn.Module):def __init__(self, vocab_size, embedding_dim, hidden_dim, num_labels):super().__init__()self.embedding = nn.Embedding(vocab_size, embedding_dim, padding_idx=1)self.lstm = nn.LSTM(embedding_dim, hidden_dim, batch_first=True,bidirectional=True, num_layers=2, dropout=0.2)self.attention = nn.Linear(hidden_dim * 2, 1) # 注意力機制self.classifier = nn.Sequential(nn.Linear(hidden_dim * 2, hidden_dim),nn.ReLU(),nn.Dropout(0.3),nn.Linear(hidden_dim, num_labels))def forward(self, input_ids):embedded = self.embedding(input_ids)lstm_out, _ = self.lstm(embedded) # 雙向LSTM輸出attn_weights = torch.softmax(self.attention(lstm_out).squeeze(-1), dim=1)pooled = (lstm_out * attn_weights.unsqueeze(-1)).sum(dim=1) # 注意力加權池化return self.classifier(pooled)
多模型融合預測:通過雙向 LSTM(捕捉上下文依賴)和多尺度 CNN(提取局部特征)的互補優勢。同時,根據模型性能動態分配權重,自動適應不同任務特性,提升預測穩定性
def ensemble_predict(task_idx, models, texts, vocab):lstm_model, lstm_f1 = models[0]cnn_model, cnn_f1 = models[1]weights = np.array([lstm_f1, cnn_f1]) / (lstm_f1 + cnn_f1 + 1e-8) # 按性能加權# LSTM與CNN分別預測lstm_preds = [torch.argmax(lstm_model(batch["input_ids"].to(device)), dim=1).cpu().numpy()for batch in DataLoader(CommentDataset(texts, [0]*len(texts), vocab, MAX_LEN), batch_size=16)]cnn_preds = [torch.argmax(cnn_model(batch["input_ids"].to(device)), dim=1).cpu().numpy()for batch in DataLoader(CommentDataset(texts, [0]*len(texts), vocab, MAX_LEN), batch_size=16)]# 加權融合結果final_preds = []for i in range(len(texts)):pred_counts = np.zeros(NUM_LABELS[task_idx])pred_counts[lstm_preds[i]] += weights[0]pred_counts[cnn_preds[i]] += weights[1]final_preds.append(np.argmax(pred_counts))return final_preds
最終情感分析效果大致能達到90+
補充:當然也可以嘗試接入大模型獲取更高的分數
任務三:評論聚類
在任務二的基礎上,對對5類特定評論進行聚類分析,并生成5-8個具有代表性的主題詞。
任務設計思路方面
聚類分析其核心是將數據集中具有相似特征的樣本劃分為不同的群體(簇),使得同一簇內的樣本相似度高,不同簇間的樣本相似度低。而根據算法的核心思想和原理,聚類方法可分為多種類型。
這就簡單地羅列比較常見的幾種情況,就不過多闡述,有興趣的小伙伴可自行查閱相關資料。
對于這些方法而言,不同聚類方法各有優缺點和適用場景,選擇時需考慮數據的規模、維度、分布形狀、是否有噪聲、是否需要預設簇數等因素。
以及,實際應用中,也可結合多種方法(如先用降維算法處理高維數據,再用聚類算法)以獲得更好的效果。
這里同樣以多種方法結合為例子,進行任務的處理(得分大致在40-50區間)。
對此,還是建議使用星火大模型進行預測。
畢竟,初步的評分是根據模型的embedding來的。
- 針對不同主題(情感 / 場景 / 問題等)定制聚類策略,動態適配數據特性。
- 采用多算法融合策略(K-Means+DBSCAN+OPTICS),兼顧結構化聚類與噪聲檢測。
- 通過關鍵詞提取和標簽優化提升結果可讀性,最終生成標準化輸出文件
核心代碼如下:
多算法融合聚類:KMeans+DBSCAN+OPTICS優勢互補
def cluster_with_ensemble(df, filter_col, filter_vals, output_col, config):# 1. 數據篩選subset = df[df[filter_col].isin(filter_vals)].copy()if len(subset) < 10: # 小樣本特殊處理all_texts = " ".join(subset["comment_text"].tolist())top_words = [w for w, _ in Counter(preprocess_text(all_texts)).most_common(5)]subset[output_col] = " ".join(top_words)return df# 2. 文本向量化X, vectorizer, feature_names = vectorize_text(subset["comment_text"])# 3. 最優聚類數選擇best_n, _ = get_best_n_clusters(X, config["n_range"])# 4. 多算法并行聚類kmeans_labels = KMeans(n_clusters=best_n, random_state=42).fit_predict(X) # 結構化聚類dbscan_labels = DBSCAN(eps=config["eps"], min_samples=config["min_samples"], metric="cosine").fit_predict(X) # 密度聚類optics_labels = OPTICS(min_samples=config["min_samples"], metric="cosine").fit_predict(X) # 優化噪聲# 5. 結果融合:KMeans為主,密度聚類修正噪聲final_labels = kmeans_labels.copy()noise_mask = (dbscan_labels == -1) # 識別噪聲點if noise_mask.sum() > 0:final_labels[noise_mask] = optics_labels[noise_mask] # 用OPTICS修正噪聲# 6. 聚類主題生成cluster_keywords = {}for c in np.unique(final_labels):if c == -1: continue# 計算類中心關鍵詞cluster_mean = np.mean(X[final_labels == c], axis=0)top_indices = cluster_mean.argsort()[::-1][:5]cluster_keywords[c] = " ".join([feature_names[idx] for idx in top_indices])# 7. 關鍵詞融合(類中心分析 + Textrank)text_rank_keywords = [" ".join(textrank(text, topK=5, allowPOS=('n', 'v', 'adj'))) for text in subset["comment_text"]]subset[output_col] = [f"{cluster_keywords[label]} | {text_rank_keywords[i]}" for i, label in enumerate(final_labels)]# 8. 優化可讀標簽subset = refine_cluster_labels(subset, final_labels, "comment_text", output_col)return df
到此,三個任務的實現就結束了,感興趣的小伙伴們也可以去嘗試一下 (●'?'●)
最后提交
鏈接:2025 iFLYTEK AI開發者大賽-訊飛開放平臺
點擊【提交結果】,上傳submit.zip
即可,祝大家都能取得滿意的成績!