背景
使用机器学习的思路实现 sentiment-analysis
预训练语言模型微调与部署
chat
用传统机器学习做文本分类的完整实现思路
我帮你梳理一下 用传统机器学习做文本分类的完整实现思路,从数据处理到模型训练、预测、评估,每一步都清楚说明。
一、整体流程
传统机器学习做文本分类,一般遵循以下步骤:
文本数据 → 文本预处理 → 特征提取 → 训练模型 → 预测 & 评估
二、详细步骤
1️⃣ 数据准备
- 收集文本数据,每条文本有对应标签(分类类别)。
- 示例:
| 文本 | 标签 |
|---|---|
| 我很喜欢这部电影 | 正面 |
| 这本书太无聊了 | 负面 |
2️⃣ 文本预处理
传统 ML 无法直接处理原始文本,需要先做特征化:
常见步骤:
- 分词:把句子拆成单词或词组(中文可用结巴分词
jieba)。 - 去停用词:去掉“的、了、是”等无意义词。
- 清理文本:去掉标点符号、数字、特殊字符。
- 小写化(英文文本可选)。
示例(Python + jieba):
import jieba
text = "我很喜欢这部电影"
tokens = jieba.lcut(text)
# 输出: ['我', '很', '喜欢', '这', '部', '电影']
3️⃣ 特征提取(向量化)
传统 ML 需要将文本转成数值向量才能输入模型:
常用方法:
-
Bag of Words(词袋模型)
- 统计每个词在文本中出现次数
-
TF-IDF
- 对词频加权,减少高频低价值词的影响
-
特征维度选择
- 可使用
CountVectorizer或TfidfVectorizer,并可限制最大特征数
- 可使用
示例:
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["我很喜欢这部电影", "这本书太无聊了"]
vectorizer = TfidfVectorizer(tokenizer=jieba.lcut)
X = vectorizer.fit_transform(corpus)
print(X.toarray()) # 转换成数值向量
4️⃣ 选择模型
常用传统机器学习分类模型:
| 模型 | 特点 |
|---|---|
| 朴素贝叶斯(Naive Bayes) | 简单高效,适合文本分类 |
| 逻辑回归(Logistic Regression) | 对大规模稀疏向量效果好 |
| 支持向量机(SVM) | 高维稀疏数据表现稳定 |
| 随机森林 / 决策树 | 可以处理非线性关系,但文本稀疏向量可能效果一般 |
示例:
from sklearn.naive_bayes import MultinomialNB
y = ["正面", "负面"] # 标签
model = MultinomialNB()
model.fit(X, y)
5️⃣ 预测
对新文本进行处理、向量化,再用模型预测:
new_text = "电影剧情很精彩"
X_new = vectorizer.transform([new_text])
pred = model.predict(X_new)
print(pred) # ['正面']
6️⃣ 模型评估
常用指标:
- 准确率(Accuracy)
- 精确率(Precision)
- 召回率(Recall)
- F1-score
- 混淆矩阵
示例:
from sklearn.metrics import classification_report
y_true = ["正面", "负面"]
y_pred = ["正面", "正面"]
print(classification_report(y_true, y_pred))
三、总结
- 特征工程是关键:传统 ML 依赖人工设计和文本向量化。
- 模型简单高效:朴素贝叶斯、逻辑回归、SVM 就够用了。
- 适合小数据集:1000~10万条文本效果还可以。
- 缺点:无法捕捉词序和上下文信息,对长文本、复杂语义理解有限。
💡 一句话概括
传统文本分类 = 分词 → 特征向量 → 传统分类器 → 预测 & 评估
