4. 支持向量机短文本分类
任务说明
本案例使用支持向量机(SVM)对短文本进行二分类。输入为若干条中文短文本(如商品评论),每条标注为正面(1)或负面(0)。目标是通过TF-IDF特征将文本向量化,训练线性SVM分类器,并对新样本完成类别预测。
实现代码
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 1. 构造训练数据(短文本 + 标签)
train_texts = [
"这个手机屏幕清晰,运行流畅",
"电池续航太差,半天就没电",
"外观漂亮,手感很好",
"拍照模糊,对焦很慢",
"价格实惠,性价比高",
"系统卡顿,经常闪退",
]
train_labels = [1, 0, 1, 0, 1, 0] # 1=正面, 0=负面
# 2. 中文分词
def tokenize(text):
return " ".join(jieba.cut(text))
train_corpus = [tokenize(t) for t in train_texts]
# 3. TF-IDF特征提取
vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(train_corpus)
# 4. 训练线性SVM分类器
svm_model = SVC(kernel="linear", C=1.0)
svm_model.fit(X_train, train_labels)
# 5. 对新样本进行预测
new_texts = [
"这个耳机音质很好,值得购买",
"质量太差,用两天就坏了",
]
new_corpus = [tokenize(t) for t in new_texts]
X_new = vectorizer.transform(new_corpus)
pred_labels = svm_model.predict(X_new)
# 6. 输出预测结果
for text, label in zip(new_texts, pred_labels):
print(f"文本: {text} → 预测类别: {'正面' if label == 1 else '负面'}")
# 7. 在训练集上评估(仅作演示,实际应使用测试集)
train_pred = svm_model.predict(X_train)
print(f"训练集准确率: {accuracy_score(train_labels, train_pred):.2f}")
运行方式
安装依赖:pip install jieba scikit-learn。将代码保存为 svm_short_text.py,执行 python svm_short_text.py。
验证方法
观察终端输出:两条新样本应分别被预测为“正面”和“负面”。训练集准确率输出为1.00(因为训练样本线性可分,且评估在训练集上进行)。若需更严谨验证,可将数据划分为训练集和测试集,或使用交叉验证。
判定标准
- 程序无报错,正常输出两条预测结果。
- 第一条新文本(含“音质很好”“值得购买”)预测为正面,第二条(含“质量太差”“用两天就坏”)预测为负面。
- 训练集准确率输出为1.00,说明模型在训练数据上完全拟合。
关键说明
本案例使用线性核SVM,适合短文本高维稀疏特征场景。实际应用中应使用独立测试集评估泛化能力,并可通过网格搜索调节C参数。分词使用jieba默认词典,未做停用词过滤,可根据数据情况自行添加。