毕业设计:基于机器学习的垃圾短信不良短信息检测系统

目录

前言

项目背景

设计思路

1. 算法理论

1.1 Word2Vec模型

1.2 深度学习

1.3 FastText模型

 数据集

更多帮助


前言

    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

        🚀对毕设有任何疑问都可以问学长哦!

       大家好,这里是海浪学长计算机毕设专题,本次分享的课题是

       🎯基于机器学习的垃圾短信检测系统

项目背景

       随着移动通信的普及和互联网的发展,垃圾短信成为了一个普遍存在的问题。垃圾短信不仅浪费用户的时间和资源,还可能涉及到个人隐私和信息安全的问题。因此,开发一种高效准确的垃圾短信检测系统具有重要的现实意义。传统的基于规则和关键词的方法往往难以应对不断变化的垃圾短信形式,而机器学习技术的发展为解决这一问题提供了新的思路和方法。通过利用机器学习算法对大量的短信数据进行训练和学习,可以构建出一个智能的垃圾短信检测系统,能够自动识别和过滤出垃圾短信,从而提升用户的通信体验和信息安全。

设计思路

1. 算法理论

1.1 Word2Vec模型

       由于模型无法直接接受非结构化的文本作为输入,需要将文本转换成可接受的数值向量。在此之前,需要对短信文本进行数据清洗和分词处理。数据清洗主要是去除无意义的内容,使用正则表达式来处理文本内容。中文文本数据一般还需要进行分词操作,将连续的字序列按照语言规范切分为词序列,以提升模型效果。常见的分词方法包括基于词典的分词方法、基于统计的分词方法和基于语义的分词方法。

       Word2Vec模型是一种经典的词嵌入模型,基于分布假设,即上下文语境相近的词具有相似的语义。该模型能够通过学习词的分布式表示来捕捉词语之间的语义关系。Word2Vec模型主要包括CBOW(Continuous Bag-of-Words)和Skip-gram两种结构。CBOW模型由输入层、隐藏层和输出层组成,输入层输入中间词的前后C个上下文词汇,然后通过神经网络模型来预测中间词。具体过程是将C个上下文词的One-Hot向量输入到词向量矩阵M^XN中进行查找,其中F为词典的大小,W为词向量的维度。对找到的上下文词向量进行求和,并通过另一个矩阵映射到输出层,最后通过Softmax层得到中心词的概率分布向量。在模型训练过程中,通过不断优化这个概率分布得到最终的词向量矩阵。

       Skip-gram模型同样由输入层、隐藏层和输出层三层组成,但该模型的输入为中间词而预测对象为它的C个上下文词汇。具体过程是输入中间词的One-Hot向量到词向量矩阵M^XN中进行查找,并将查找结果通过矩阵映射到C个向量中。最后经过Softmax层得到C个上下文词汇的概率分布向量,同样通过优化此概率分布得到词向量矩阵。

       为了减小Word2Vec模型的计算量,研究人员提出了两种优化方案:层次Softmax和负采样。层次Softmax利用霍夫曼树来优化计算过程,将高频词靠近根节点、低频词远离根节点,通过最大化目标条件概率来预测词语。负采样则是通过随机采样一部分负样本来近似计算目标函数,减少计算量。这些优化方案能够提高Word2Vec模型的训练效率和性能。

1.2 深度学习

       循环神经网络(RNN)在基于机器学习的垃圾短信/不良短信息检测系统中具有多重优势。首先,RNN能够处理序列数据,捕捉文本中的上下文关系和长期依赖,从而更好地理解短信内容。其次,RNN通过循环的隐藏状态传递信息,能够捕捉更长范围的上下文信息,提高分类准确性。RNN还能自动学习任务相关的特征表示,无需手动设计特征,同时具备动态建模能力,适应不同长度的文本输入。最后,RNN常用于序列标注,能够将垃圾短信分类或标记不良信息,实现序列的分类和标注。

       改进的循环神经网络结构,即长短时记忆网络(LSTM)。LSTM采用遗忘门、输入门、输出门三个门控结构和一个细胞状态来解决长期依赖问题。LSTM通过门控机制控制细胞状态的更新和传递,有效地缓解了梯度消失问题,使得网络能够更好地捕捉长期依赖关系,提高了模型的性能和训练效果。

1.3 FastText模型

       FastText是一种基于N-Gram特征的词嵌入模型,通过引入子词信息和考虑词汇的形态构成来解决未登录词的向量表示问题。该模型能够构建高质量的词向量,并通过N-Gram特征处理未登录词,提供优秀的向量表达能力。在文本分类任务中,FastText采用简单的三层神经网络结构,并利用层次Softmax方法进行计算复杂度优化。通过将文本的字符级N-Gram信息作为输入,FastText能够有效进行文本分类,并提升模型性能。该模型不仅解决了未登录词的问题,还考虑了词序信息,克服了传统词袋模型的不足。

       短信内容通常缺乏规范性,存在同形字替换和繁体字替换等现象,导致处理过程中经常遇到未登录词的问题。传统方法采用随机向量或替换低频词的方法处理未登录词,但存在缺陷和负面效果。为解决未登录词的向量表示问题,改进了深度学习模型的词嵌入过程,并引入了独立的词嵌入学习过程。采用FastText词嵌入模型,加入字符级N-Gram特征,考虑词汇的构成,提供更好的语义信息表达。模型通过词的首尾添加边界符,并将词本身作为一个N-Gram特征,构建词向量表示。FastText模型结构包括CBOW和Skip-gram两种,利用层次Softmax和负采样减少计算量。

 数据集

       由于网络上没有现有的合适的数据集,我决定通过网络爬取,收集图片并制作了一个全新的数据集。我在真实场景中获取大量的短信样本,包括各种垃圾短信的类型和形式。这些样本涵盖了不同的语言、表达方式和诈骗手段,以确保数据集的多样性和代表性。同时,我还通过互联网收集了大量的短信数据,并进行了筛选和标注,以补充和丰富数据集。

       在完成数据整理后,对短信文本内容进行数据清洗。首先利用正则表达式去除短信文本中的标点符号、换行符等无意义内容,以减少干扰项。另外,在脱敏过程中,敏感信息已经被替换为字符"x",因此连续的"x"字符对分类任务没有帮助,同样需要使用正则表达式进行去除。此外,短信数据中还存在一定量的"脏数据",即内容只包含标点符号,在正则化处理后变为空字符串,对于这类数据直接进行剔除。

       使用结巴(jieba)中文分词工具对短信文本进行分词。结巴分词结合了基于规则和基于统计的分词方法,它基于前缀词典实现词图扫描并生成一个有向无环图(DAG),并采用动态规划算法查找最大概率路径,得到基于词频的最佳分词结果。此外,结巴分词还实现了基于汉字成词能力的隐马尔可夫模型(Hidden Markov Model,HMM),具有新词发现的功能。结巴分词支持三种分词模式:全模式(输出文本所有可能的切分结果,速度快但无法处理歧义)、精确模式(尝试对文本进行精准切分,适用于文本分析)、搜索引擎模式(对精确模式结果中的长词继续进行切分,提升召回率,常被应用于搜索引擎场景中)。

       为了准确反映模型的识别效果,采用多个评价指标对模型分类性能进行评估,包括准确率、查准率、查全率和F1值。模型的各个指标可通过分类结果的混淆矩阵计算得到。在混淆矩阵中,TP表示正确识别不良短信的数量,TN表示正确识别的正常短信的数量,FP表示正常短信被错误识别为不良短信的数量,FN表示不良短信被错误识别为正常短信的数量。

相关代码示例:

import fasttext

# 设置FastText模型的参数
model_params = {
    'model': 'skipgram',  # 模型结构,可以选择"cbow"或"skipgram"
    'dim': 300,  # 词向量的维度
    'minCount': 5,  # 词频阈值,低于该值的词将被过滤掉
    'ws': 5,  # 窗口大小
    'epoch': 10,  # 迭代次数
    'lr': 0.1,  # 学习率
    'neg': 5,  # 负采样数量
    'loss': 'ns',  # 损失函数,可以选择"ns"或"hs"
    'thread': 4  # 线程数
}

# 训练FastText模型
model = fasttext.train_unsupervised('corpus.txt', **model_params)

# 保存词向量模型
model.save_model('word_embeddings.bin')

# 加载词向量模型
model = fasttext.load_model('word_embeddings.bin')

# 获取词的向量表示
word_vector = model['word']

海浪学长项目示例:

更多帮助

### Python 实现垃圾短信识别系统ER设计 #### 1. 用户表 (Users) | 字段名 | 类型 | 描述 | |------------|-------------|-------------------| | user_id | INT PRIMARY KEY | 用户唯一标识符 | | username | VARCHAR(50) | 用户名 | | password | VARCHAR(255)| 密码哈希 | | email | VARCHAR(100)| 邮箱地址 | 此表格用于存储系统用户的账户信息[^1]。 ```sql CREATE TABLE Users ( user_id INT AUTO_INCREMENT, username VARCHAR(50), password VARCHAR(255), email VARCHAR(100), PRIMARY KEY(user_id) ); ``` #### 2. 短信记录表 (Messages) | 字段名 | 类型 | 描述 | |--------------|---------------|--------------------| | message_id | INT PRIMARY KEY | 短信唯一标识符 | | content | TEXT | 短信内容 | | send_time | DATETIME | 发送时间 | | sender_phone | VARCHAR(20) | 发件人电话号码 | | is_spam | BOOLEAN | 是否标记为垃圾短信 | | user_id | INT FOREIGN KEY | 关联到发送者的用户ID | 该表保存每条接收到的信息及其属性,特别是`is_spam`字段用来指示消息是否被分类为垃圾邮件。 ```sql CREATE TABLE Messages ( message_id INT AUTO_INCREMENT, content TEXT NOT NULL, send_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, sender_phone VARCHAR(20), is_spam BOOLEAN DEFAULT FALSE, user_id INT, PRIMARY KEY(message_id), FOREIGN KEY(user_id) REFERENCES Users(user_id) ); ``` #### 3. 特征词典表 (Feature_Dictionary) | 字段名 | 类型 | 描述 | |---|-------------|------------------------| | feature_id | INT PRIMARY KEY | 特征项唯一标识符 | | word | VARCHAR(100) | 单个特征单词或短语 | | weight | FLOAT | 权重值 | 这张表包含了所有可能影响垃圾检测模型判断的关键字/短语以及它们的重要性权重。 ```sql CREATE TABLE Feature_Dictionary ( feature_id INT AUTO_INCREMENT, word VARCHAR(100), weight FLOAT, PRIMARY KEY(feature_id) ); ``` #### 4. 消息特征关联表 (Message_Features) | 字段名 | 类型 | 描述 | |--| | id | INT PRIMARY KEY | 记录唯一标识符 | | message_id | INT FOREIGN KEY | 对应的消息ID | | feature_id | INT FOREIGN KEY | 对应的特征项ID | | occurrence_count | INT | 此特征在此消息中的出现次数 | 为了提高效率,在实际应用中通常会创建这样一个中间表来表示多对多的关系——即一条消息可以包含多个不同的特征,而同一个特征也可能存在于许多不同消息之中。 ```sql CREATE TABLE Message_Features ( id INT AUTO_INCREMENT, message_id INT, feature_id INT, occurrence_count INT, PRIMARY KEY(id), FOREIGN KEY(message_id) REFERENCES Messages(message_id), FOREIGN KEY(feature_id) REFERENCES Feature_Dictionary(feature_id) ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值