2025科大讯飞AI大赛<大模型技术方向>(Datawhale AI 夏令营)
赛事报名链接: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
即可,祝大家都能取得满意的成绩!