You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

文本分类匹配问题咨询:模型选型、数据处理及代码报错解决

文本分类任务疑问解答与代码错误修复

一、核心疑问解答

1. 任务类型判定

属于Multi Class Classification(多分类任务)。因为每个Item Description对应唯一的Code,单个样本仅关联一个标签,不符合多标签分类(一个样本对应多个独立标签)的定义。

2. 相似度度量与特征方案

如果是分类任务,无需直接使用相似度度量,重点是文本特征提取+分类模型的组合:

  • 基础特征:TF-IDF(结合n-gram)、词袋模型
  • 进阶特征:Word2Vec/GloVe预训练词向量、BERT等预训练语言模型的句向量
  • 若需做匹配类验证(比如判断描述与代码的对应合理性),可基于上述特征计算余弦相似度(最常用)、Jaccard相似度。

3. 数据集划分方案

已有独立的500行测试集,仅用于最终模型评估。对7000行的主数据集train,应拆分出训练集+验证集:

  • 用sklearn.model_selection.train_test_split从train中拆分(比如按8:2比例),验证集用于调参(如正则化系数、特征维度),避免直接用测试集调参导致过拟合。
  • 原test集仅在所有参数调整完成后,做最终的模型性能验证。

二、代码错误修复

报错原因

  1. 错误对标签y_train(Code列)执行CountVectorizer.fit_transform:标签是分类目标,无需文本向量化,且重复fit会导致特征维度与训练集特征不匹配。
  2. 测试集特征未复用训练集拟合的向量器,若误对测试集执行fit,会导致特征维度不一致。
  3. 变量名大小写混乱(X_train与x_train)。

修正后代码

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

# 加载数据集(假设已完成)
# train = pd.read_csv("train.csv")
# test = pd.read_csv("test.csv")

# 拆分主数据集为训练集+验证集(可选,用于调参)
train_data, val_data = train_test_split(train, test_size=0.2, random_state=42)
x_train = train_data['Item Description'].values
y_train = train_data['Code'].values
x_val = val_data['Item Description'].values
y_val = val_data['Code'].values

# 测试集数据
x_test = test['Item Description'].values
y_test = test['Code'].values

# 特征提取:仅在训练集上fit,保证特征一致性
count_vec = CountVectorizer(ngram_range=(1, 2))
tfidf_transformer = TfidfTransformer(smooth_idf=False)

# 训练集特征处理
x_train_counts = count_vec.fit_transform(x_train)
x_train_tfidf = tfidf_transformer.fit_transform(x_train_counts)

# 验证集、测试集特征处理:仅用transform,复用训练集的特征空间
x_val_counts = count_vec.transform(x_val)
x_val_tfidf = tfidf_transformer.transform(x_val_counts)
x_test_counts = count_vec.transform(x_test)
x_test_tfidf = tfidf_transformer.transform(x_test_counts)

# 训练分类器(添加max_iter避免收敛问题,可选class_weight处理类别不平衡)
logreg = LogisticRegression(C=1e5, max_iter=1000, class_weight='balanced')
logreg.fit(x_train_tfidf, y_train)

# 验证集评估(调参用)
val_pred = logreg.predict(x_val_tfidf)
print(f"验证集准确率: {accuracy_score(y_val, val_pred):.4f}")

# 测试集最终评估
test_pred = logreg.predict(x_test_tfidf)
print(f"测试集准确率: {accuracy_score(y_test, test_pred):.4f}")

三、项目启动建议

  1. 数据预处理优先:清洗Item Description,包括小写化、去除标点/特殊字符、过滤停用词(英文场景)、纠正拼写错误,减少噪声对特征的影响。
  2. 尝试多种特征方案:从TF-IDF起步,逐步尝试预训练词向量、BERT微调,预训练模型通常能处理语义相似的描述,提升分类效果。
  3. 类别不平衡处理:若部分Code对应的样本量极少,可采用过采样(SMOTE)、欠采样,或在分类器中设置class_weight='balanced'。
  4. 多模型对比:除Logistic Regression,可尝试SVM、XGBoost、LightGBM等模型,对比不同模型的性能。
  5. 评估指标多元化:除准确率,重点关注混淆矩阵、F1-score、召回率,尤其是样本量少的类别,避免被整体准确率误导。

内容的提问来源于stack exchange,提问作者tombombadil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:04:04