基于DistilBERT与BiLSTM的垃圾短信过滤系统设计与优化

📅 2026/7/5 10:56:20
基于DistilBERT与BiLSTM的垃圾短信过滤系统设计与优化
1. 项目背景与核心挑战垃圾信息过滤是互联网时代的基础需求。根据Verizon发布的2023年数据泄露调查报告全球每天产生约140亿条垃圾短信占所有移动消息的30%以上。我的毕业设计选择这个方向源于大三实习时亲眼目睹某电商平台因垃圾短信投诉导致的用户流失——仅仅一周内客服工单激增47%。传统规则过滤如关键词黑名单的误判率高达18-25%而基于机器学习的方案能将误判控制在5%以内。但实现过程中面临三个核心挑战短文本特征稀疏短信平均仅70字符对抗性攻击如薇亻言【vx】haoxxxxxx这类变形实时性要求移动端需在200ms内完成分类2. 技术选型与方案设计2.1 算法对比实验在本地构建包含12万条标注数据的数据集正负样本1:1测试了以下模型表现模型准确率F1值推理速度(条/秒)朴素贝叶斯89.2%0.8715,000SVMTF-IDF92.1%0.918,200LSTM93.8%0.931,500BERT微调95.6%0.95320DistilBERTBiLSTM94.7%0.94680最终选择DistilBERTBiLSTM的混合架构在保持较高精度的同时满足实时性要求。关键改进点使用哈工大开源的BERT-wwm-ext作为预训练基底在池化层后接128维BiLSTM捕捉位置特征输出层采用Focal Loss解决样本不平衡2.2 特征工程创新针对短信文本特点设计了多维度特征def extract_features(text): # 1. 符号特征 special_chars len(re.findall(r[^\w\s], text)) # 2. URL检测 has_url int(bool(re.search(rhttp[s]?://, text))) # 3. 数字占比 digit_ratio sum(c.isdigit() for c in text) / len(text) # 4. 形近词替换检测 变形词 detect_disguised_words(text) # 自定义词典匹配 return [special_chars, has_url, digit_ratio, 变形词]3. 关键实现细节3.1 数据增强策略为解决正样本不足问题采用三种增强方式同义词替换使用Synonyms库保持语义不变对抗样本生成随机插入不可见Unicode字符模板填充基于50个真实垃圾短信模板生成重要提示增强时需保留原始文本的垃圾特征如过多标点、数字等避免引入噪声3.2 工程化部署方案为满足移动端需求通过以下优化将模型压缩到18MB使用ONNX Runtime进行推理量化到INT8精度实现异步批处理每50ms聚合一次请求核心部署代码结构/app ├── model_serving │ ├── quantized_model.onnx │ └── preprocessor.py # 统一文本清洗 ├── cache │ └── bloom_filter.py # 高频垃圾短信缓存 └── api └── predict.py # FastAPI接口4. 实际效果验证在10万条真实短信数据上测试场景召回率误判率营销类96.2%3.8%诈骗类98.1%1.2%验证码0.3%99.7%正常沟通2.1%97.9%典型误判案例分析含大量数字的正常短信如会议改到305会议室使用网络用语的亲友消息如绝绝子快看这个带链接的官方通知如学校系统通知5. 优化方向与经验总结当前系统的瓶颈在于对新兴诈骗手法的响应延迟需3-7天收集新样本并重新训练。后续计划搭建在线学习系统支持hotfix模型更新引入用户反馈机制长按短信举报结合图神经网络分析发送者关系链三个血泪教训不要过度依赖准确率指标——某次优化将验证集准确率提升0.5%但误杀重要工作短信必须建立标准化测试集包含200条易混淆样本用于每次迭代验证中文文本清洗要先于特征提取特别是全角/半角统一处理这个项目让我深刻体会到好的算法工程师不仅要会调参更要理解业务场景的特殊性。比如发现老年人更容易被子女出事类诈骗短信欺骗就需要针对性增加这类样本的权重。