一种基于深度神经网络的片段源代码识别方法技术

技术编号:33727751 阅读:20 留言:0更新日期:2022-06-08 21:22
本发明专利技术公开一种基于深度神经网络的片段源代码识别方法,包括如下步骤:步骤一,对输入的源代码字符串进行预处理,获取训练样本;步骤二,搭建深度神经网络模型,输入训练样本,使用GPU进行训练,并获取准确率最高的模型;步骤三,对训练结果进行可视化,并根据可视化结果对模型进行调整,直至模型达到预期效果;步骤四,将.pth模型转换为onnx模型,并进行编译生成动态库,编写C++可调用的接口,部署到DLP系统;步骤五,将待识别的源代码进行预处理,然后送入深度神经网络模型,输出预测结果。此种基于深度神经网络的片段源代码识别方法能够提高片段式源代码的检测精度,并缩短长代码识别时间,提高短代码的识别精度。提高短代码的识别精度。提高短代码的识别精度。

【技术实现步骤摘要】
一种基于深度神经网络的片段源代码识别方法


[0001]本专利技术属于计算机
,涉及深度学习模型部署优化方法,特别涉及一种基于深度神经网络的片段源代码识别方法。

技术介绍

[0002]近年来,国内外大公司不断有代码泄露事件发生,通过文本分类技术有效识别源代码及其类型也随之发展,越来越多公司网络管理需要这项技术来提高公司的信息安全,但目前包括源代码分类在内的文本分类技术都只对长文本有效,难以对片段中的源代码进行分类并识别,无法阻止内部人员通过发送短消息文本的方式泄露公司内部机密,目前学术界以及工业界也在寻找更加有效的方法来提升源代码识别的准确率,例如Github开发Linguist程序通过考虑命名约定、提取文件扩展名以及文件顶部的内容来识别代码类别,但是不适用于拉取片段的代码识别;另外还有人研究使用深度神经网络线性组合分类器来实现源代码识别,这种方式适合于识别文件级别的长文本源代码,但是很难与DLP系统或客户端进行集成,限制了其应用范围。
[0003]综上,现有的源代码识别方法存在着如下不足:
[0004](1)传统方法灵活性差,通常仅能针对文件级的源代码,不适用于片段源代码识别且精度也偏低,效果无法满足需求;
[0005](2)使用深度神经网络线性组合分类器只能通过tensorflow框架来实现,没有开源代码,无法转化为C++可部署的模型,难以集成到DLP系统或客户端中;
[0006](3)基于深度神经网络的片段源代码识别方法主要由数据预处理和策略识别这两大部分组成,源代码字符串作为输入,需要先进行一定的预处理,源代码字符串长度的不确定性将导致模型的识别准确性和时间效率不稳定,尤其是在源代码字符串较短的时候,目前市面上的源代码识别软件均无法准确识别。
[0007]目前市面上还没有保证源代码识别在准确率、速度和识别长度上的平衡,有待改进,本案由此产生。

技术实现思路

[0008]本专利技术的目的,在于提供一种基于深度神经网络的片段源代码识别方法,能够提高片段式源代码的检测精度,并缩短长代码识别时间,提高短代码的识别精度。
[0009]为了达成上述目的,本专利技术的解决方案是:
[0010]一种基于深度神经网络的片段源代码识别方法,包括如下步骤:
[0011]步骤一,对输入的源代码字符串进行预处理,获取训练样本;
[0012]步骤二,搭建深度神经网络模型,输入训练样本,使用GPU进行训练,并获取准确率最高的模型;
[0013]步骤三,对训练结果进行可视化,并根据可视化结果对模型进行调整,直至模型达到预期效果;
[0014]步骤四,将.pth模型转换为onnx模型,并进行编译生成动态库,编写C++可调用的接口,部署到DLP系统;
[0015]步骤五,将待识别的源代码进行预处理,然后送入深度神经网络模型,输出预测结果。
[0016]上述步骤一和步骤五中,预处理的内容是:首先对输入的源代码字符串进行分割、清洗,然后根据指定的策略筛选出训练样本。
[0017]上述策略包括如下内容:
[0018]策略一:全文完全检测;
[0019]策略二:截取前500个字符和后500个字符进行检测;
[0020]策略三:随机采样n段文本进行检测;
[0021]策略四:根据文本长度自动选择策略,小于1000字符的采用策略二,1000~3000字符的采用策略一,3000字符以上的采用策略三。
[0022]上述步骤二中,深度神经网络模型包含6个卷积层和3个全连接层,其中,每个卷积层包括一个卷积操作和一个最大池化操作,第1个卷积层的特征维度是96

256,卷积核为7,池化大小为3,第2个卷积层的特征维度是256

256,卷积核为7,池化大小为3,第3个卷积层的特征维度是256

256,卷积核为3,池化大小为2,第4个卷积层的特征维度是256

256,卷积核为3,池化大小为2,第5个卷积层的特征维度是256

256,卷积核为3,池化大小为2,第6个卷积层的特征维度是256

256,卷积核为3,池化大小为3;第1个全连接层的输出维度为256

1024,第2个全连接层的输出维度为1024

1024,第3个全连接层的输出维度为1024

(源代码种类数)。
[0023]上述步骤三中,对模型进行调整包括:若模型过大则进行压缩;若模型准确率不足则对训练参数进行调整。
[0024]上述模型过大时,采用如下方式进行压缩:在保证精度的前提下,通过缩减模型的层数或减少层内的神经元的方式对模型进行压缩,或者通过量化方式,将高精度的FLOAT类型转化为INT,或通过onnxruntime模型简化的方法降低模型复杂度。
[0025]上述步骤二中,采用GeForce RTX 2070训练模型。
[0026]采用上述方案后,本专利技术具有以下改进:
[0027](1)本专利技术使用pytorch搭建深度卷积神经网络线模型,转化并导出为onnx模型,使用onnxruntime框架进行部署,进行C++部署,支持多线程的设置,并集成到DLP系统或客户端中,供客户进行使用;
[0028](2)本专利技术在同时考虑精度与识别速度的同时,识别尽可能长度小的代码序列,使得片段式源代码的检测精度得到进一步提高,并且针对不同长度的源代码采用不同的策略进行识别,可以在一定程度上避免长代码识别时间过长、短代码识别精度低的问题。
[0029]因此,本专利技术通过设计、改进和压缩深度神经网络模型,不仅能够对文件级源代码进行识别,还能实现片段级别的源代码识别,并且在识别速度和准确性上优于传统方法;针对输入的不同长度的源代码字符串,设计不同的识别策略,能够适用于对任意长度的源代码识别。
附图说明
[0030]图1是本专利技术的流程图;
[0031]图2是深度神经网络的模型架构。
具体实施方式
[0032]以下将结合附图,对本专利技术的技术方案及有益效果进行详细说明。
[0033]如图1所示,本专利技术提供一种基于深度神经网络的片段源代码识别方法,包括如下具体步骤:
[0034]步骤1,数据预处理
[0035]数据预处理阶段主要对输入的源代码字符串进行一定的分割,并清洗掉无意义的字符,根据指定的策略筛选出若干样本;在模型训练时,预处理后的数据用于进行模型训练,以生成用于预测的模型,而在模型部署完成后,预处理后的数据用于通过部署好的模型得到源代码的预测结果;
[0036]步骤2,模型训练
[0037]模型搭建完毕后使用GPU(图形处理器)进行训练,并获取准确率最高的模型;在本实施例中,可采用GeForce RTX 2070。
[0038]步骤3,训练结果可视化
[0039]获取到的模型需要使用测本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于深度神经网络的片段源代码识别方法,其特征在于包括如下步骤:步骤一,对输入的源代码字符串进行预处理,获取训练样本;步骤二,搭建深度神经网络模型,输入训练样本,使用GPU进行训练,并获取准确率最高的模型;步骤三,对训练结果进行可视化,并根据可视化结果对模型进行调整,直至模型达到预期效果;步骤四,将.pth模型转换为onnx模型,并进行编译生成动态库,编写C++可调用的接口,部署到DLP系统;步骤五,将待识别的源代码进行预处理,然后送入深度神经网络模型,输出预测结果。2.如权利要求1所述的基于深度神经网络的片段源代码识别方法,其特征在于:所述步骤一和步骤五中,预处理的内容是:首先对输入的源代码字符串进行分割、清洗,然后根据指定的策略筛选出训练样本。3.如权利要求2所述的基于深度神经网络的片段源代码识别方法,其特征在于:所述策略包括如下内容:策略一:全文完全检测;策略二:截取前500个字符和后500个字符进行检测;策略三:随机采样n段文本进行检测;策略四:根据文本长度自动选择策略,小于1000字符的采用策略二,1000~3000字符的采用策略一,3000字符以上的采用策略三。4.如权利要求1所述的基于深度神经网络的片段源代码识别方法,其特征在于:所述步骤二中,深度神经网络模型包含6个卷积层和3个全连接层,其中,每个卷积层包括一个卷积操作和一个最大池化操作,第1个卷积层的特征维度是96

256,卷积核为7,池化大小为3,第2个卷积层的特征维...

【专利技术属性】
技术研发人员:涂高元邱志斌郭永兴陆云燕薛玉洁张勇建
申请(专利权)人:厦门天锐科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1