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, 垃圾检测, 文本分类, 机器学习, 逆向工具, 逻辑回归