RAJBIR-SINGH-NITT/DataByte_Task_1_NLP_sms_spam_detection
GitHub: RAJBIR-SINGH-NITT/DataByte_Task_1_NLP_sms_spam_detection
基于 UCI 短信数据集构建的 NLP 文本分类管线,通过 TF-IDF 与 Logistic Regression 实现垃圾短信自动检测。
Stars: 0 | Forks: 0
# 垃圾短信检测 - DataByte 招新 (NLP 任务 1)
一个简单的 NLP pipeline,用于将 SMS 消息分类为**垃圾短信 (Spam)** 或**正常短信 (Ham,非垃圾短信)**。
这是我作为 DataByte Club 招新提交作品的一部分构建的——这里的目标是真正
理解完整的文本分类 pipeline,而不仅仅是调用一个库函数就完事。
## 它的功能
给定一条原始的 SMS 消息,模型会:
1. 对其进行清理(转换为小写、移除 URL/标点符号/数字、tokenizing、丢弃 stopwords)
2. 使用 **TF-IDF** 将其转换为数值特征
3. 使用 **Logistic Regression** 将其分类为垃圾短信/正常短信
## 数据集
[SMS 垃圾短信收集数据集](https://archive.ics.uci.edu/dataset/228/sms+spam+collection) —
包含 5,574 条真实的 SMS 消息,每条都被标记为垃圾短信或正常短信。数据相当不平衡(正常短信比垃圾短信多得多),这在后续查看评估指标时会有很大影响。
## 项目结构
```
sms-spam-detection/
├── data/ # raw dataset (downloaded automatically when notebook runs)
├── notebooks/
│ └── sms_spam_detection.ipynb # main notebook — everything happens here
├── outputs/
│ ├── confusion_matrix.png
│ ├── spam_wordcloud.png
│ ├── spam_vs_ham_count.png
│ └── model_report.txt
├── requirements.txt
└── README.md
```
## 遵循的步骤
- **数据集探索** — 统计垃圾短信与正常短信的数量,查看垃圾短信中最常见的单词
(不出所料:`free`、`call`、`txt`、`win`、`claim` 不断出现)
- **预处理** - 转换为小写、移除 URL、去除标点符号/数字、tokenization、移除 stopwords
- **特征工程** - TF-IDF 向量化(上限设为 3000 个特征以便于管理)
- **模型训练** - Logistic Regression
- **评估** - 准确率、精确率、召回率、F1分数、混淆矩阵
## 结果
| 指标 | 分数 |
|-----------|-------|
| 准确率 | 运行后填写 |
| 精确率 | 运行后填写 |
| 召回率 | 运行后填写 |
| F1分数 | 运行后填写 |
*(具体数值取决于训练集/测试集的划分,因此我会在实际运行 notebook 后填写这些数据,而不是主观猜测。)*
## 如果有更多时间,我会做出的改进
数据集相当不平衡,因此仅仅看准确率可能会让模型显得比实际情况更好。
针对垃圾短信类别的精确率/召回率提供了更客观真实的情况。如果我进一步推进这个项目,我会尝试
使用 SMOTE 来处理不平衡问题,或者将其与 Naive Bayes 进行比较,因为后者是
垃圾短信过滤更“经典”的选择,并且处理这个数据集的方式可能会与 Logistic Regression 有所不同。
## 如何运行
1. 在 Google Colab 中打开 `notebooks/sms_spam_detection.ipynb`
2. 运行所有单元格 (Runtime -> Run all)
3. 数据集会自动下载,无需手动设置
4. 输出(图表 + 报告)将保存到 `outputs/` 文件夹中
## 使用的技术
Python、pandas、scikit-learn、NLTK、matplotlib、seaborn、WordCloud
为 DataByte Club 招新提交 - 任务 1 (NLP)
标签:Apex, NoSQL, TF-IDF, 垃圾检测, 文本分类, 机器学习, 逆向工具, 逻辑回归