从源代码和外部知识进行软件缺陷预测的语义特征学习
- 论文下载地址: 下载链接
- 作者: Jingyu Liu, Jun Ai, Minyan Lu, Jie Wang, Haoxiang Shi
- 学校: School of Reliability and Systems Engineering, Beihang University
- 论文期刊: The Journal of Systems & Software
- 发表年份*: 2023年
- 期刊等级: JCR分区Q2
- 关键词: Software defect prediction, Semantic features, Transformer
摘要
传统的软件缺陷预测方法主要依赖于从源代码中提取的特征和人工设计的度量标准。但这些方法往往忽略了与缺陷相关的其他信息,如代码的注释和提交消息。本文介绍了一种新颖的软件缺陷预测方法,名为PM2-CNN。这种方法结合了自然语言文本和编程语言代码,以提取更丰富的语义特征。具体来说,它使用Transformer模型从自然语言文本(如代码注释和提交消息)中提取特征,并使用多通道卷积神经网络(CNN)从源代码中提取特征。PM2-CNN模型通过结合自然语言处理和深度学习技术,整合这些外部信息,提供了更丰富的上下文敏感表示,并能捕捉序列的局部相关性。
创新点与借鉴点
多通道CNN架构:文章介绍了一种多通道CNN架构,用于软件缺陷预测。这种方法在自然语言处理中不常见,因为通常用于计算机视觉中处理彩色图像。这是一个创新点,将多通道CNN应用于文本数据。
卷积和池化操作:该架构使用卷积操作来捕捉文本中的局部特征,并使用池化操作来提取这些特征的重要信息。这种组合在文本分类任务中可能有独特的效果,特别是在软件缺陷预测方面。
多尺度特征提取:文章提到使用不同大小的卷积核来提取文本中的特征,以获取不同抽象层次的语义信息。这个多尺度特征提取方法可能有助于更全面地捕捉文本数据的信息。
卷积神经网络(CNN):文章的基本架构借鉴了卷积神经网络的思想,尤其是卷积和池化层的结构。CNN已经在计算机视觉领域取得了巨大成功,现在被引入自然语言处理领域,以处理文本数据。
预训练模型:尽管文章没有提供详细信息,但提到了基于预训练模型的多通道CNN。这表明作者可能借鉴了自然语言处理领域中预训练模型(如BERT、GPT等)的思想,以初始化或增强卷积层的权重。
实验与方法
字节对编码分词
使用字节对编码(Byte-Pair Encoding,BPE)进行分词,该算法将字符串或单词分解为子字符串或子词。
BPE的核心思想是不断合并子词,以平衡词汇字典的大小和语义独立性。
无法匹配的子字符串将被替换为特殊符号,例如“[UNK]”,未知的字符串块将消失,以保留更有意义的语义信息。
特征嵌入生成
UniXcoder架构被用作模型的编码器,其预训练权重作为初始权重。
对于每个令牌和其位置,执行单词和位置编码以生成嵌入向量。
使用Transformer层组成的UniXcoder架构,每个Transformer层包含多头自注意力和前馈神经网络。
令牌和位置嵌入
为了捕捉语义和位置信息,为每个令牌生成令牌编码向量和位置编码向量。
令牌编码和位置编码向量相加以生成新的嵌入向量。
UniXcoder编码器
特征嵌入向量输入UniXcoder编码器层,每个层包含多头自注意力和前馈神经网络。
多头自注意层用于平衡不同词的特征部分,并学习词语的依赖关系和句子的结构。
自注意机制使用Query(Q)、Key(K)和Value(V)向量,通过点积计算注意分数。
控制模型行为的自注意掩码策略根据模型模式进行设置,以处理不同的输入序列。
总结
(1): 这篇文章的研究背景是软件缺陷预测。早期的方法主要使用人工设计的指标或从源代码中提取的特征来进行分类预测,但这些方法未能充分利用除代码之外的与缺陷相关的信息,如代码中的注释和提交信息。
(2): 过去的方法存在的问题是无法准确捕捉语义上相似但结构不同的代码。因此,本文提出使用深度学习算法来自动学习程序的语义表示,并通过结合自然语言文本和编程语言代码来增强特征的语义表示。这一方法能够从源代码中提取更丰富的特征,并提高软件缺陷预测的准确性。
(3): 本文提出了一种新的预训练模型和多通道卷积神经网络的缺陷预测模型。预训练模型用于学习代码和自然语言文本的语义表示,多通道卷积神经网络用于从特征嵌入中提取高级特征,并通过全连接层和SoftMax激活函数进行分类预测。
(4): 研究中的方法在软件缺陷预测任务中取得了较好的性能,实验结果表明结合自然语言文本和编程语言代码的语义特征表示能够提高预测的准确性。这些结果支持了他们在改进软件缺陷预测方面的目标。