1.一种源代码漏洞预测方法,其特征在于,所述方法包括:
获取待预测源代码数据集;
对所述待预测源代码数据集进行文本标记化处理,得到多个源代码标记单元;
根据源代码标记单元中的源代码文本建立词频排序词汇表;
根据所述词频排序词汇表将源代码标记单元转换为独热编码格式的源代码特征向量;
将所述独热编码格式的源代码特征向量输入源代码漏洞预测模型,输出漏洞类别预测结果;
所述源代码漏洞预测模型的生成,包括:
获取源代码公开数据集;所述源代码公开数据集包含携带CWE漏洞标签的数据和未携带CWE漏洞标签的数据;
识别所述源代码公开数据集中未携带CWE漏洞标签的数据,并从未携带CWE漏洞标签的数据中随机抽取预设数量的数据,以及将抽取的预设数量的数据与携带CWE漏洞标签的数据进行重组,生成欠采样后的源代码子集;
将欠采样后的源代码子集按照预设比例分割为训练数据集、验证数据集和测试数据集;
对训练数据集、验证数据集和测试数据集进行文本标记化处理,分别得到对应的多个源代码标记单元;
根据源代码标记单元中的源代码文本建立对应的词频排序词汇表;
根据源代码标记单元将训练数据集、验证数据集和测试数据集转化为等长的输入矩阵;
根据词频排序词汇表将训练数据集、验证数据集和测试数据集的输入矩阵转换为独热编码格式的源代码特征向量;
构建源代码漏洞预测模型网络;
采用表示为独热编码格式的源代码特征向量的训练数据集对所述源代码漏洞预测模型网络进行训练,并采用基于动态权重的损失函数计算总损失,以及基于总损失更新源代码漏洞预测模型网络参数;
在训练迭代过程中,当验证数据集上损失函数的变化趋势由上一次迭代相比于下一次迭代呈现下降转为上升时,记录一次状态变化,若记录的次数超过预设的早停阈值,则停止训练,保存当前训练过程中最后一次损失函数呈下降趋势时的模型参数,得到所述源代码漏洞预测模型;
基于动态权重的损失函数Lt的定义如下:
其中,Li为每个任务的损失函数,每个任务在每次迭代结束时的交叉熵损失为Mi,N为任务数量,S是用于控制权重平滑程度的参数,S∈(0,5]。
2.根据权利要求1所述的方法,其特征在于,源代码漏洞预测模型包括集成到Keras模型的位置编码层、轻量级Transformer块、卷积层、全局平均池化层、全连接层;将所述独热编码格式的源代码特征向量输入源代码漏洞预测模型,输出漏洞类别预测结果,包括:将独热编码格式的源代码特征向量映射转换为源代码嵌入向量;
对每个源代码嵌入向量生成一个对应的位置索引;
将源代码嵌入向量输入到集成到Keras模型的位置编码层,集成到Keras模型的位置编码层根据源代码嵌入向量的总维度和位置索引计算位置编码向量,并将位置编码向量与源代码嵌入向量相加,得到包含位置信息的源代码嵌入向量;
将包含位置信息的源代码嵌入向量传递给轻量级Transformer块,输出源代码特征深度增强融合向量;
将源代码特征深度增强融合向量经卷积层、全局平均池化层处理后传递给多个全连接层,将多个全连接层的输出分别通过sofmax函数转换为每个漏洞类别的预测概率。
3.根据权利要求2所述的方法,其特征在于,将源代码嵌入向量输入到集成到Keras模型的位置编码层,集成到Keras模型的位置编码层根据源代码嵌入向量的总维度和位置索引计算位置编码向量,并将位置编码向量与源代码嵌入向量相加,得到包含位置信息的源代码嵌入向量,包括:将源代码嵌入向量输入到集成到Keras模型的位置编码层,集成到Keras模型的位置编码层根据源代码嵌入向量的总维度和位置索引,计算每个位置在每个维度上的正弦值和余弦值;
对于每个位置,将计算得到的正弦值和余弦值交错组合成维度与源代码嵌入向量总维度相同的位置编码向量;
将位置编码向量与源代码嵌入向量相加,得到包含位置信息的源代码嵌入向量。
4.根据权利要求2所述的方法,其特征在于,将包含位置信息的源代码嵌入向量传递给轻量级Transformer块,输出源代码特征深度增强融合向量,包括:将包含位置信息的源代码嵌入向量输入多头注意力层,输出多头注意力融合向量;
将多头注意力融合向量与包含位置信息的源代码嵌入向量进行残差连接并进行层归一化,输出自注意力位置增强向量;
将自注意力位置增强向量传入由全连接层、丢弃层、relu激活函数构成的前馈网络,输出前馈网络增强向量;
将前馈网络增强向量进行残差连接和层归一化,输出源代码特征深度增强融合向量。
5.一种源代码漏洞预测装置,其特征在于,所述装置包括:
待预测数据获取模块,用于获取待预测源代码数据集;
第一标记化处理模块,用于对所述待预测源代码数据集进行文本标记化处理,得到多个源代码标记单元;
第一词频排序词汇表建立模块,用于根据源代码标记单元中的源代码文本建立词频排序词汇表;
第一独热编码模块,用于根据所述词频排序词汇表将源代码标记单元转换为独热编码格式的源代码特征向量;
漏洞预测模块,用于将所述独热编码格式的源代码特征向量输入源代码漏洞预测模型,输出漏洞类别预测结果;
所述装置还包括:
源代码公开数据集获取模块,用于获取源代码公开数据集;所述源代码公开数据集包含携带CWE漏洞标签的数据和未携带CWE漏洞标签的数据;
欠采样模块,用于识别所述源代码公开数据集中未携带CWE漏洞标签的数据,并从未携带CWE漏洞标签的数据中随机抽取预设数量的数据,以及将抽取的预设数量的数据与携带CWE漏洞标签的数据进行重组,生成欠采样后的源代码子集;
数据集分割模块,用于将欠采样后的源代码子集按照预设比例分割为训练数据集、验证数据集和测试数据集;
第二标记化处理模块,用于对训练数据集、验证数据集和测试数据集进行文本标记化处理,分别得到对应的多个源代码标记单元;
第二词频排序词汇表建立模块,用于根据源代码标记单元中的源代码文本建立对应的词频排序词汇表;
等长矩阵构建模块,用于根据源代码标记单元将训练数据集、验证数据集和测试数据集转化为等长的输入矩阵;
第二独热编码模块,用于根据词频排序词汇表将训练数据集、验证数据集和测试数据集的输入矩阵转换为独热编码格式的源代码特征向量;
模型网络构建模块,用于构建源代码漏洞预测模型网络;
模型训练模块,用于采用表示为独热编码格式的源代码特征向量的训练数据集对所述源代码漏洞预测模型网络进行训练,并采用表示为独热编码格式的源代码特征向量的验证数据集和测试数据集进行验证和测试,得到所述源代码漏洞预测模型;
所述模型训练模块包括:
模型网络参数优化子模块,用于采用表示为独热编码格式的源代码特征向量的训练数据集对所述源代码漏洞预测模型网络进行训练,并采用基于动态权重的损失函数计算总损失,以及基于总损失更新源代码漏洞预测模型网络参数;
源代码漏洞预测模型生成子模块,用于在训练迭代过程中,当验证数据集上损失函数的变化趋势由上一次迭代相比于下一次迭代呈现下降转为上升时,记录一次状态变化,若记录的次数超过预设的早停阈值,则停止训练,保存当前训练过程中最后一次损失函数呈下降趋势时的模型参数,得到所述源代码漏洞预测模型;
基于动态权重的损失函数Lt的定义如下:
其中,Li为每个任务的损失函数,每个任务在每次迭代结束时的交叉熵损失为Mi,N为任务数量,S是用于控制权重平滑程度的参数,S∈(0,5]。
6.根据权利要求5所述的装置,其特征在于,源代码漏洞预测模型包括集成到Keras模型的位置编码层、轻量级Transformer块、卷积层、全局平均池化层、全连接层;所述漏洞预测模块包括:嵌入向量生成子模块,用于将独热编码格式的源代码特征向量映射转换为源代码嵌入向量;
位置索引生成子模块,用于对每个源代码嵌入向量生成一个对应的位置索引;
位置编码子模块,用于将源代码嵌入向量输入到集成到Keras模型的位置编码层,集成到Keras模型的位置编码层根据源代码嵌入向量的总维度和位置索引计算位置编码向量,并将位置编码向量与源代码嵌入向量相加,得到包含位置信息的源代码嵌入向量;
自注意力融合子模块,用于将包含位置信息的源代码嵌入向量传递给轻量级Transformer块,输出源代码特征深度增强融合向量;
漏洞类别概率预测子模块,用于将源代码特征深度增强融合向量经卷积层、全局平均池化层处理后传递给多个全连接层,将多个全连接层的输出分别通过sofmax函数转换为每个漏洞类别的预测概率。
7.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口以及所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行存储器上所存放的程序时,实现如权利要求1-4任一项所述的源代码漏洞预测方法。
8.一个或多个计算机可读介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如权利要求1-4任一项所述的源代码漏洞预测方法。