章节 01
导读 / 主楼:SMS垃圾短信分类器:基于NLP与机器学习的实时识别系统
使用TF-IDF特征提取与朴素贝叶斯分类器实现的垃圾短信识别系统,F1分数达0.9479,并部署为Streamlit交互式Web应用
正文
使用TF-IDF特征提取与朴素贝叶斯分类器实现的垃圾短信识别系统,F1分数达0.9479,并部署为Streamlit交互式Web应用
章节 01
使用TF-IDF特征提取与朴素贝叶斯分类器实现的垃圾短信识别系统,F1分数达0.9479,并部署为Streamlit交互式Web应用
章节 02
章节 03
原作者与来源
class_weight='balanced'自动调整类别权重,缓解不平衡问题\n- 计算效率高,适合大规模数据\n\n3. LinearSVC(线性支持向量机)\n\n- 寻找最优分类超平面,最大化类别间隔\n- 使用CalibratedClassifierCV包装,输出概率估计\n- 在高维空间表现优异\n\n超参数优化与交叉验证\n\n为避免过拟合,项目采用严格的评估策略:\n\n分层划分(Stratified Split)\n\n- 训练集:70%\n- 验证集:15%\n- 测试集:15%\n\n分层确保每个子集中spam/ham比例与原始数据一致。\n\nGridSearchCV网格搜索\n\n使用5折分层交叉验证(StratifiedKFold k=5),以F1分数为优化目标,自动搜索最优超参数组合。关键设计是将TF-IDF向量化器与分类器封装在Pipeline中,确保在每次交叉验证折数中,向量化器仅使用训练数据拟合,防止信息泄露。\n\n模型性能评估\n\n测试集结果(776条未见过的短信)\n\n| 模型 | 准确率 | 精确率 | 召回率 | F1分数 | AUC-ROC | AUC-PR |\n|------|--------|--------|--------|--------|---------|--------|\n| MultinomialNB | 0.9871 | 0.9681 | 0.9286 | 0.9479 | 0.9943 | 0.9780 |\n| LinearSVC | 0.9871 | 0.9783 | 0.9184 | 0.9474 | 0.9853 | 0.9643 |\n| LogisticRegression | 0.9858 | 0.9780 | 0.9082 | 0.9418 | 0.9897 | 0.9699 |\n\nMultinomialNB以0.9479的F1分数胜出,在精确率(避免误杀正常短信)和召回率(不漏掉垃圾短信)之间取得了最佳平衡。\n\n混淆矩阵分析\n\n最终模型在测试集上的预测结果:\n\n| 实际 \ 预测 | 预测正常 | 预测垃圾 |\n|-------------|----------|----------|\n| 实际正常 | 675(TN) | 3(FP) |\n| 实际垃圾 | 7(FN) | 91(TP) |\n\n- 假阳性(FP): 仅3条正常短信被误判为垃圾——用户几乎不会错过重要信息\n- 假阴性(FN): 7条垃圾短信漏网——仍有改进空间,但已大幅减轻骚扰\n\n特征重要性分析\n\n通过TF-IDF权重分析,模型学到的最具判别力的垃圾短信词汇:\n\n- 免费诱导类: free、prize、win、winner\n- 行动号召类: call、reply、text、send\n- 紧急感制造类: now、urgent、limited\n- 商业推广类: mobile、service、offer\n\n这些词汇与人类识别垃圾短信的直觉高度一致,验证了模型的可解释性。\n\nStreamlit交互式部署\n\n项目不仅停留在模型训练,还提供了完整的生产部署方案:\n\n应用功能\n\n- 文本输入框:用户可粘贴或输入待检测短信\n- 实时分类:点击按钮后显示ham/spam判定结果\n- 置信度显示:展示模型预测的概率分布\n- 响应迅速:本地运行延迟低于100毫秒\n\n部署方式\n\nbash\n本地运行\npip install -r requirements.txt\nstreamlit run app.py\n\n访问 http://localhost:8501\n\n\n项目还支持部署到Streamlit Community Cloud,实现零成本的在线服务。\n\n项目结构与代码质量\n\n\nspam-sms-classifier/\n├── app.py Streamlit应用入口\n├── requirements.txt 依赖管理\n├── README.md 文档说明\n├── notebooks/\n│ └── notebook_atualizado.ipynb 完整训练流程\n├── model/\n│ └── modelo_final.joblib 序列化模型(TF-IDF+NB)\n├── reports/\n│ └── relatorio_atualizado.pdf 项目报告\n└── data/\n └── spam.csv 数据集\n\n\n代码组织清晰,将数据、模型、应用、文档分离,符合软件工程最佳实践。使用joblib序列化整个Pipeline(向量化器+分类器),确保训练与推理阶段的一致性。\n\n局限性与改进方向\n\n尽管模型表现优异,仍存在以下局限:\n\n1. 语言局限性\n\n数据集主要为英文短信,模型在其他语言(如中文、葡萄牙语)上的效果可能下降。中文短信还需额外处理分词问题。\n\n2. 时效性问题\n\n数据集收集于2000年代,当时的垃圾短信模式(如"赢取奖品")与当前(短链接、emoji、二维码)存在差异。模型需要定期用新数据重新训练。\n\n3. 语义理解局限\n\nTF-IDF是词袋模型,忽略词序和上下文语义。讽刺、双关语等复杂表达可能无法正确理解。未来可尝试BERT等预训练语言模型。\n\n4. 对抗性攻击\n\n垃圾短信发送者可故意插入正常词汇干扰模型(如"Hi friend, you won free prize")。更复杂的模型可能对这类对抗样本更鲁棒。\n\n5. 类别不平衡的深层挑战\n\n虽然使用了类别权重和F1指标,但spam样本仅653条,可能不足以覆盖所有垃圾短信变体。收集更多标注数据是持续改进的关键。\n\n对中文短信过滤的启示\n\n将本项目方法应用于中文垃圾短信过滤时,需考虑以下适配:\n\n- 分词处理: 中文无空格分词,需使用jieba等分词工具\n- 特征提取: TF-IDF在中文上同样适用,但n-gram范围可能需要调整(如加入2-3字词)\n- 数据标注: 中文垃圾短信数据集相对稀缺,可考虑爬取公开举报平台数据\n- 规则融合: 中文垃圾短信常包含特定模式(如"回复TD退订"、短链接),可设计规则与模型融合\n\n总结\n\nspam-sms-classifier项目是一个教科书级别的机器学习实践案例:从数据清洗、探索性分析、特征工程、模型对比、超参数优化到最终部署,每个环节都体现了专业水准。MultinomialNB在TF-IDF特征上的优异表现(F1=0.9479)证明,对于文本分类任务,简单的模型配合良好的特征工程往往比复杂模型更有效。\n\n对于学习者,这是理解NLP分类pipeline的绝佳入门材料;对于开发者,Streamlit部署方案展示了如何将模型快速转化为用户可用的产品;对于研究者,项目中对类别不平衡问题的处理方法(分层采样、类别权重、F1/AUC-PR指标)具有参考价值。\n\n在垃圾短信治理这场持久战中,技术只是手段,提高公众安全意识、完善法律法规、强化运营商责任同样重要。但毫无疑问,像本项目这样的智能过滤系统,是保护用户免受数字骚扰的第一道防线。