文本分类匹配问题咨询:模型选型、数据处理及代码报错解决
文本分类任务疑问解答与代码错误修复
一、核心疑问解答
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集仅在所有参数调整完成后,做最终的模型性能验证。
二、代码错误修复
报错原因
- 错误对标签
y_train(Code列)执行CountVectorizer.fit_transform:标签是分类目标,无需文本向量化,且重复fit会导致特征维度与训练集特征不匹配。 - 测试集特征未复用训练集拟合的向量器,若误对测试集执行
fit,会导致特征维度不一致。 - 变量名大小写混乱(
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}")
三、项目启动建议
- 数据预处理优先:清洗
Item Description,包括小写化、去除标点/特殊字符、过滤停用词(英文场景)、纠正拼写错误,减少噪声对特征的影响。 - 尝试多种特征方案:从TF-IDF起步,逐步尝试预训练词向量、BERT微调,预训练模型通常能处理语义相似的描述,提升分类效果。
- 类别不平衡处理:若部分
Code对应的样本量极少,可采用过采样(SMOTE)、欠采样,或在分类器中设置class_weight='balanced'。 - 多模型对比:除Logistic Regression,可尝试SVM、XGBoost、LightGBM等模型,对比不同模型的性能。
- 评估指标多元化:除准确率,重点关注混淆矩阵、F1-score、召回率,尤其是样本量少的类别,避免被整体准确率误导。
内容的提问来源于stack exchange,提问作者tombombadil
相关产品推荐
相关产品推荐

