Zing 论坛

正文

基于朴素贝叶斯的SMS垃圾短信检测系统

使用多项式朴素贝叶斯分类器和词袋模型实现98.39%准确率的垃圾短信检测项目,展示了NLP在文本分类任务中的经典应用。

垃圾短信检测朴素贝叶斯NLP文本分类词袋模型机器学习CountVectorizerSMS分类器
发布时间 2026/06/09 08:15最近活动 2026/06/09 08:21预计阅读 3 分钟
基于朴素贝叶斯的SMS垃圾短信检测系统
2

章节 02

项目背景与数据集介绍

项目背景

原项目由soniachaoued维护,发布于GitHub平台,仓库名称为sms-spam-detector,更新时间为2026年6月。

数据集介绍

项目使用SMS Spam Collection Dataset,该数据集由加州大学欧文分校机器学习库维护,包含5,572条英语短信,标签分为ham(正常短信)和spam(垃圾短信),涵盖促销、诈骗、广告等多种真实垃圾信息类型,是垃圾短信检测算法的标准基准数据集之一。

3

章节 03

技术方案详解:特征提取与分类算法

特征提取:CountVectorizer(词袋模型)

文本数据需转换为数值形式,项目采用词袋模型:

  1. 构建词汇表:扫描所有训练文本提取唯一词汇;
  2. 向量化:每条消息表示为向量,维度对应词汇表词频;
  3. 输出:稀疏矩阵(行=消息,列=词汇,值=词频)。 词袋模型优点:简单直观、计算高效;缺点:忽略词序和语义,但对关键词敏感的垃圾短信检测任务效果足够好。

分类算法:多项式朴素贝叶斯

选择多项式朴素贝叶斯作为分类器,原理基于贝叶斯定理,假设特征独立,计算消息属于ham/spam的后验概率并选择高概率类别。 适合文本分类的原因:

  • 处理高维稀疏数据表现良好;
  • 训练速度快、计算复杂度低;
  • 对小规模数据集可靠;
  • 天然支持多分类(此处为二分类);
  • 专门适用于离散计数特征(如词频)。
4

章节 04

性能评估结果

项目在测试集上的准确率达到98.39%,意味着每100条消息中平均错误分类不到2条,性能已满足实际应用需求。

选择准确率作为评估指标的原因:

  • 数据集相对平衡(ham和spam样本数量差距不大);
  • 两类错误(正常短信误判为垃圾 vs 漏检垃圾短信)代价相近;
  • 准确率能较好反映模型整体性能。
5

章节 05

项目工作流程与技术栈

项目工作流程

  1. 数据加载:读取CSV格式的SMS数据集;
  2. 数据预处理:文本清洗、标签编码;
  3. 特征工程:使用CountVectorizer将文本转换为数值特征;
  4. 模型训练:用MultinomialNB在训练集学习参数;
  5. 性能评估:在测试集计算准确率;
  6. 预测应用:对新消息分类。

技术栈

技术 用途
Python 编程语言
Pandas 数据加载与处理
Scikit-learn 机器学习(CountVectorizer、MultinomialNB)
Jupyter Notebook 开发与文档
6

章节 06

扩展与改进方向

尽管当前准确率已达98%以上,仍可从以下方向优化:

特征工程改进

  • 使用TF-IDF替代词频,降低常见词权重;
  • 添加N-gram特征(双词、三词组合)捕捉局部词序;
  • 引入字符级N-gram识别变形垃圾信息(如“f r e e”)。

模型升级

  • 尝试SVM、随机森林、梯度提升等算法;
  • 使用深度学习(LSTM、BERT)捕捉语义信息;
  • 集成多个模型提高鲁棒性。

工程优化

  • 添加交叉验证更可靠评估模型;
  • 计算精确率、召回率、F1分数全面评估;
  • 绘制ROC曲线和混淆矩阵可视化错误分布;
  • 实现模型持久化方便部署。
7

章节 07

实际应用价值与结语

实际应用价值

垃圾短信检测是NLP成功应用之一,场景包括:

  • 手机系统(iOS/Android内置过滤);
  • 运营商服务(短信网关实时过滤);
  • 企业通讯(内部平台消息审核);
  • 用户保护(减少诈骗财产损失)。 朴素贝叶斯因高效和可解释性仍广泛应用于生产环境,轻量级模型更适合实时处理海量消息场景。

结语

本项目展示了机器学习解决实际问题的典型范式:明确问题→选择数据→设计特征→训练模型→评估性能。朴素贝叶斯+词袋模型的经典组合在垃圾短信检测中依然出色,是初学者掌握复杂NLP技术的重要基础。