Saiful-alam105/spam-detection

GitHub: Saiful-alam105/spam-detection

基于 NLP 与机器学习技术构建的端到端 SMS 垃圾信息分类系统,涵盖从数据预处理到模型部署的完整 pipeline 并对比了多种算法的性能。

Stars: 1 | Forks: 0

# 基于 AI、NLP 和 ML 的垃圾信息检测项目 ## 项目概述 本项目使用自然语言处理 (NLP)、机器学习和深度学习技术实现了一个端到端的 SMS 垃圾信息检测系统。 其目标是将 SMS 消息分为两类: * Ham(正常消息) * Spam(垃圾推广或欺诈消息) 该项目涵盖了完整的机器学习 pipeline,包括: * 探索性数据分析 (EDA) * 文本预处理 * 特征工程 * 模型训练 * 模型评估 * 可视化 * 预测 Pipeline * 基于 RNN 的深度学习 # 数据集 数据集:SMS Spam Collection Dataset 该数据集包含的 SMS 消息标签分为: | Label | Description | | ----- | -------------- | | ham | Normal message | | spam | Spam message | 预处理后: | Label | Encoded Value | | ----- | ------------- | | ham | 0 | | spam | 1 | # 项目结构 ``` spam-detection/ │ ├── dataset/ │ ├── spam.csv │ ├── spam_processed.csv │ └── model_comparison.csv │ ├── models/ │ ├── tfidf_vectorizer.pkl │ ├── naive_bayes.pkl │ ├── logistic_regression.pkl │ ├── random_forest.pkl │ ├── rnn_tokenizer.pkl │ └── rnn_model.keras │ ├── notebooks/ │ ├── eda.ipynb │ ├── nlp.ipynb │ ├── feature_engineering.ipynb │ ├── classical_ml.ipynb │ ├── visualization.ipynb │ ├── final_demo.ipynb │ └── deep_learning.ipynb │ ├── src/ │ ├── eda_preprocessing.py │ ├── nlp_preprocessing.py │ ├── feature_engineering.py │ ├── evaluation.py │ └── prediction.py │ ├── requirements.txt ├── README.md └── .gitignore ``` # 探索性数据分析 (EDA) 执行了以下预处理任务: * 数据集检查 * 形状分析 * 缺失值检测 * 重复记录检测 * 去除重复项 * 列清理与重命名 * 标签编码 具体操作: * 移除了不必要的列 * 移除了重复的消息 * 重命名了列: * label * message * 转换: * ham → 0 * spam → 1 # NLP 预处理 应用了以下 NLP 预处理技术: ## 1. 转换为小写 将所有文本转换为小写字母。 示例: ``` HELLO WORLD ``` ↓ ``` hello world ``` ## 2. 移除标点符号 示例: ``` Hello!!! ``` ↓ ``` Hello ``` ## 3. 移除特殊字符和数字 示例: ``` Win $1000 now ``` ↓ ``` Win now ``` ## 4. Tokenization 示例: ``` hello world ``` ↓ ``` ['hello', 'world'] ``` ## 5. 移除停用词 示例: ``` ['this', 'is', 'a', 'message'] ``` ↓ ``` ['message'] ``` ## 6. Stemming 示例: ``` running runs runner ``` ↓ ``` run run runner ``` # 特征工程 使用 TF-IDF (Term Frequency–Inverse Document Frequency) 将文本转换为数值向量。 为什么选择 TF-IDF? * 捕获单词的重要性 * 降低常见词的影响 * 在文本分类中表现极其出色 配置: ``` TfidfVectorizer(max_features=5000) ``` 输出: ``` Text ↓ TF-IDF ↓ Numerical Feature Matrix ``` # 训练集 / 验证集 / 测试集划分 数据集被划分为: | Dataset | Percentage | | -------------- | ---------- | | Training Set | 70% | | Validation Set | 15% | | Test Set | 15% | 使用分层抽样 (Stratified sampling) 来保持类别分布。 # 机器学习模型 对三个机器学习模型进行了训练和评估。 ## 1. Multinomial Naive Bayes 优势: * 速度快 * 对文本分类非常有效 * 强大的基线模型 ## 2. Logistic Regression 优势: * 简单 * 可解释性强 * 强大的线性分类器 ## 3. 随机森林 优势: * 能够处理复杂的模式 * 减少过拟合 * 预测性能高 # 深度学习模型 ## 循环神经网络 (RNN) 架构: ``` Embedding Layer ↓ SimpleRNN ↓ Dense Layer ↓ Output Layer ``` 使用的技术: * Tokenization * 序列编码 * 填充 * 类别权重平衡 由于数据集存在不平衡问题,因此在训练期间使用了类别权重。 # 模型评估指标 使用了以下指标: ## 准确率 衡量整体的预测正确性。 ## 精确率 衡量预测为垃圾消息中有多少实际上是垃圾消息。 ## 召回率 衡量有多少实际的垃圾消息被检测到。 ## F1 分数 精确率和召回率的调和平均数。 该指标被用作主要的比较指标。 # 结果 | Model | Accuracy | Precision | Recall | F1 Score | | ------------------- | -------: | --------: | -----: | -------: | | Naive Bayes | 96.65% | 100.00% | 73.47% | 84.71% | | Logistic Regression | 95.10% | 98.39% | 62.24% | 76.25% | | Random Forest | 97.16% | 98.72% | 78.57% | 87.50% | | RNN | 96.01% | 83.84% | 84.69% | 84.26% | # 最佳性能模型 随机森林取得了最高的总体性能。 性能: * 准确率:97.16% * 精确率:98.72% * 召回率:78.57% * F1 分数:87.50% 因此,随机森林被选为最终模型。 # 预测 Pipeline 预测流程: ``` Raw SMS Message ↓ Text Preprocessing ↓ TF-IDF Vectorization ↓ Random Forest Model ↓ Spam / Ham Prediction ``` 示例: 输入: ``` URGENT! You have won a free lottery prize. ``` 输出: ``` { "prediction": "Spam", "confidence": 0.74 } ``` # 可视化 创建了以下可视化图表: * 准确率对比 * 精确率对比 * 召回率对比 * F1 分数对比 * 混淆矩阵 这些可视化图表有助于比较模型性能,并识别出性能最佳的模型。 # 未来改进 可能的改进方向包括: * BERT 微调 * 超参数优化 * 交叉验证 * 使用 FastAPI 进行模型部署 * Web 应用程序集成 * 实时 SMS 分类 API # 使用的技术 * Python * Pandas * NumPy * NLTK * Scikit-learn * TensorFlow * Matplotlib * Seaborn * Pickle
标签:Apex, RNN, 人工智能, 垃圾信息检测, 文本分类, 机器学习, 深度学习, 用户模式Hook绕过, 逆向工具