CN111273911A - 基于双向lstm和注意力机制的软件技术债务识别方法 - Google Patents

基于双向lstm和注意力机制的软件技术债务识别方法 Download PDF

Info

Publication number
CN111273911A
CN111273911A CN202010036852.1A CN202010036852A CN111273911A CN 111273911 A CN111273911 A CN 111273911A CN 202010036852 A CN202010036852 A CN 202010036852A CN 111273911 A CN111273911 A CN 111273911A
Authority
CN
China
Prior art keywords
code
annotation
attention mechanism
bidirectional lstm
lstm
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
CN202010036852.1A
Other languages
English (en)
Inventor
俞东进
王琳
陈信
郭世明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Dianzi University
Original Assignee
Hangzhou Dianzi University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou Dianzi University filed Critical Hangzhou Dianzi University
Priority to CN202010036852.1A priority Critical patent/CN111273911A/zh
Publication of CN111273911A publication Critical patent/CN111273911A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Machine Translation (AREA)

Abstract

本发明公开了一种基于双向LSTM和注意力机制的软件技术债务识别方法。该方法基于双向LSTM来实现技术债务的识别,利用注意力机制捕捉不同特征的重要性以提高模型的准确率。另外,该方法使用平衡交叉熵损失函数解决样本不均衡问题。通过本发明方法能够高效识别软件技术债务,降低软件维护的成本,对软件维护具有非常重要的意义。

Description

基于双向LSTM和注意力机制的软件技术债务识别方法
技术领域
本发明属于软件工程领域,具体涉及到一种基于双向LSTM和注意力机制的软件技术债务识别技术。
背景技术
在软件开发过程中,软件项目的最终目标是提交高质量且无缺陷的软件给用户。但是,由于资源受限或者时间不足等原因,开发人员通常会提交不完整的或临时修复的代码。这种现象被Ward Cunningham隐喻为技术债务,他认为这是一种以牺牲长期代码质量为代价而寻求短期收益的技术折中。与金融债务类似,技术债务也会产生利息,会影响软件的质量、成本和开发效率,因此需要开发者在未来付出额外成本来偿还。
传统的做法是开发人员手动检查软件项目,并确定哪些模块存在技术债务需要被偿还。在实际操作中,由于开发者之间实践经验不同,一些开发人员不知道自己编写的代码存在技术债务。另外,与软件系统中存在的缺陷不同,技术债务通常是看不见的,这导致技术债务不能被及时发现。近年来,越来越多的学者致力于识别技术债务,他们提出不同的技术债务识别方法。一方面,他们从源代码角度出发,通过工具分析源代码并检测代码异常,实现技术债务检测任务。另一方面,开发者会在源代码注释中记录代码中存在的问题,研究者们定义这种技术债务为“自承认的技术债务(self-admitted technical debt,SATD)”,并提出了一些检测SATD的方法。如基于模式的检测方法、基于自然语言处理的检测方法和基于文本挖掘的检测方法等。
然而,这些方法对技术债务识别的准确率依旧不理想,因为基于源代码分析的方法存在假阳率较高的问题,在实际中,需要人工参与,并且操作复杂,会浪费开发人员大量时间。另外,由于记录技术债务的代码注释相对较少,而且传统方法很难有效提取代码注释的文本特征,导致目前的基于代码注释的检测方法在功能和性能上都难以达到预期效果。
发明内容
本发明针对现有技术的不足,提供了一种基于双向LSTM和注意力机制的软件技术债务识别方法,可有效识别代码注释中的SATD。
本发明具体采用的技术方案如下:
步骤(1)获取代码注释集合S=(S1,S2,...,Sm),m为代码注释的数量,将其中的每个样本表示成St=<id,project,y,comment>,t=1,2,3,...,m,其中id表示代码注释编号,project表示代码注释所属项目,y表示代码注释的标签,即是否是技术债务(y=1,表示为技术债务;y=0,表示为非技术债务),comment表示代码注释的文本信息。
步骤(2)对每条comment进行预处理,包括删除完全相同的代码注释、历史修订记录、不含英文字母的字符和停用词,并转换大写字母为小写字母;经过预处理后每个样本为St=<id,project,y,preComment>,其中preComment表示预处理后代码注释的文本信息。
步骤(3)使用Glove方法对预处理后的每个代码注释文本的每个单词wr生成一个d维的词向量υr
步骤(4)设置双向LSTM和注意力机制模型的参数:Number of hidden units(隐藏单元数)、IterMax(LSTM训练最大迭代次数)、Batch size(批量大小)、L2、Learning rate(学习率)、将S分为训练数据集合ζtrain和验证数据集合ζves
步骤(5)将ζtrain和ζves代码注释文本的每个单词转化为步骤(3)获得的词向量,则每一条代码注释被表示为Seq={υ1,υ2,...,υn},n为最长代码注释对应的单词的个数。
步骤(6)将上述得到的Seq输入到双向LSTM网络层,正向LSTM获得Seq中单词正向特征向量
Figure BDA0002366336150000021
反向LSTM获得Seq中单词反向特征向量
Figure BDA0002366336150000022
并将上述的正向特征向量
Figure BDA0002366336150000023
和反向特征向量
Figure BDA0002366336150000024
进行连接组合为
Figure BDA0002366336150000025
(
Figure BDA0002366336150000026
表示连接符),k=1,2,3,...,n,则每条代码注释被表示为Hb={h1,h2,...,hn}。
步骤(7)使用注意力机制为得到的特征向量Hb的每个hk分配一个权重αk,通过计算获得处理后的新的特征向量o。
步骤(8)上述得到的特征向量o通过sigmoid函数得到每个输入样本的预测概率
Figure BDA0002366336150000027
步骤(9)使用类平衡交叉熵(class-balanced cross-entropy)作为损失函数计算样本真实标签值y和预测概率
Figure BDA0002366336150000028
的损失值。
步骤(10)训练上述基于注意力机制和双向LSTM模型的参数,当达到最大训练次数IterMax后,获得训练后的双向LSTM和注意力机制模型。
步骤(11)对于一条新的代码注释,首先按步骤(2)进行预处理,然后将预处理后的代码注释输入到步骤(10)获得的双向LSTM和注意力机制模型中,最终获得该代码注释的预测概率,如果预测概率大于等于0.5表示该代码注释是技术债务注释,小于0.5表示该代码注释不是技术债务注释。
本发明的有益效果:本发明使用双向LSTM获取代码注释的上下文信息,同时使用注意力机制表示不同特征的重要性以提高检测SATD的准确率。为了克服样本不均衡问题,本发明采用类平衡交叉熵作为损失函数,通过引入一个平衡因子减少负样本(非SATD代码注释)对模型的负面影响。通过在一个公开数据集进行实验,证明了该方法在精准率、召回率和F1-score方面均优于传统检测方法。
附图说明
图1为方法的框架流程图;
图2为模型具体流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图1,对本发明提供的基于双向LSTM和注意力机制的软件技术债务识别方法进行进一步详细说明。
步骤(1)获取代码注释集合S=(S1,S2,...,Sm),m为代码注释数量,将其中每个样本表示成St=<id,project,y,comment>,t=1,2,3,...,m,其中id表示代码注释编号,project表示代码注释所属项目,y表示代码注释的标签,即是否是技术债务(y=1,表示为技术债务;y=0,表示为非技术债务),comment表示代码注释的文本信息。
步骤(2)对每条comment进行预处理,预处理过程分为以下步骤:
2-1、删除数据集中完全相同的代码注释。
2-2、删除代码注释中有关历史修订记录的信息,这部分信息通常以“xx-xx-xx:text”的文本格式,其中“xx-xx-xx”代表日期,“text”表示文本。
2-3、将代码注释中所有单词转换为小写字母。
2-4、删除代码注释中不包含英文字母的字符和停用词,不包含英文字母的字符包括:标点符号、特殊符号、数字。
经过处理后每个样本为St=<id,project,y,preComment>,其中preComment表示预处理后代码注释的文本信息。
步骤(3)使用Glove方法对预处理操作之后的每个源代码注释文本的每个单词wk生成一个d维的词向量υk,其中d大小为300;
步骤(4)设置双向LSTM和注意力机制模型的参数:
Number of hidden units:256;
IterMax:50;
Batch size:64;
L2:0.01;
Learning rate:0.0001;
SpatialDropout1D:0.4;
ζtrain:代码注释样本90%的子集作为训练集;
ζtest:代码注释样本10%的子集作为验证集。
步骤(5)将ζtrain和ζves代码注释文本的每个单词转化为步骤(3)获得的词向量,则每一条代码注释被表示为Seq={υ1,υ2,...,υn},n为最长代码注释对应的单词的个数。
步骤(6)将上述得到的Seq输入到双向LSTM网络层,如图2所示,正向LSTM获得Seq中单词正向特征向量
Figure BDA0002366336150000041
反向LSTM获得Seq中单词反向特征向量
Figure BDA0002366336150000042
并将上述的正向特征向量
Figure BDA0002366336150000043
和反向特征向量
Figure BDA0002366336150000044
进行连接组合为
Figure BDA0002366336150000045
(
Figure BDA0002366336150000046
表示连接符),k=1,2,3,...,n,则每条代码注释被表示为Hb={h1,h2,...,hn}。
步骤(7)使用注意力机制为得到Hb的每个hk分配一个权重αk,通过计算获得处理后的新的特征向量o,其计算公式如下;
uk=tanh(Wshk+bs)
Figure BDA0002366336150000047
Figure BDA0002366336150000048
其中Ws表示权重参数向量,bs表示偏置。
步骤(8)将得到的特征向量o采用sigmoid方法得到每个输入样本的预测概率
Figure BDA0002366336150000049
步骤(9)使用类平衡交叉熵(class-balanced cross-entropy)作为损失函数计算样本真实标签值y和预测概率
Figure BDA00023663361500000410
的损失,其中该损失函数的公式如下:
Figure BDA00023663361500000411
其中β为平衡因子。
步骤(10)训练上述基于注意力机制和双向LSTM模型的参数,当达到最大训练次数IterMax后,获得训练后的双向LSTM和注意力机制模型。
步骤(11)对于一条新的代码注释,首先按步骤(2)进行预处理,然后将预处理后的代码注释输入到步骤(10)获得的双向LSTM和注意力机制模型中,最终获得该代码注释的预测值,如果预测值大于等于0.5表示该代码注释是技术债务注释,小于0.5表示该代码注释不是技术债务注释。
为了验证本发明提供方法在精准率、召回率和F1-score方面的有效性,引入两个实验案例(基于文本挖掘的SATD检测方法和基于自然语言处理的SATD检测方法)。通过在一个公开数据集进行留一交叉验证实验,本发明方法在精准率、召回率和F1-score方面获得的平均值分别为81.75%,72.24%和75.86%;而基于文本挖掘的SATD检测方法在精准率、召回率和F1-score方面获得的平均值分别为73.61%,66.75%和69.22%;基于自然语言处理的SATD检测方法在精准率、召回率和F1-score方面获得的平均值分别为73.23%,67.00%和69.41%;实验结果证明本发明提供的方法,在精准率、召回率和F1-score方面均优于目前存在的检测方法。

Claims (1)

1.基于双向LSTM和注意力机制的软件技术债务识别方法,其特征在于包括如下步骤:
步骤(1)获取代码注释集合S=(S1,S2,...,Sm),m为代码注释的数量,将集合中的每个样本表示成St=<id,project,y,comment>,t=1,2,3,...,m,其中id表示代码注释编号,project表示代码注释所属项目,y表示代码注释的标签,即是否是技术债务,y=1,表示为技术债务;y=0,表示为非技术债务,comment表示代码注释的文本信息;
步骤(2)对每条comment进行预处理,包括删除完全相同的代码注释、历史修订记录、不含英文字母的字符和停用词,并转换大写字母为小写字母;经过预处理后每个样本为St=<id,project,y,preComment>,其中preComment表示预处理后代码注释的文本信息;
步骤(3)使用Glove方法对预处理后的每个代码注释文本的每个单词wr生成一个d维的词向量υr
步骤(4)设置双向LSTM和注意力机制模型的参数,包括:隐藏单元数Number of hiddenunits、LSTM训练最大迭代次数IterMax、批量大小Batch size、L2和学习率Learning rate、将集合S分为训练数据集合ζtrain和验证数据集合ζves
步骤(5)将训练数据集合ζtrain和验证数据集合ζves中的代码注释文本的每个单词转化为步骤(3)获得的词向量,则每一条代码注释被表示为Seq={υ1,υ2,...,υn},n为最长代码注释对应的单词的个数;
步骤(6)将上述得到的Seq输入到双向LSTM网络层,正向LSTM获得Seq中单词正向特征向量
Figure FDA0002366336140000011
反向LSTM获得Seq中单词反向特征向量
Figure FDA0002366336140000012
并将上述的正向特征向量
Figure FDA0002366336140000013
和反向特征向量
Figure FDA0002366336140000014
进行连接组合为
Figure FDA0002366336140000015
Figure FDA0002366336140000016
表示连接符,k=1,2,3,...,n;则每条代码注释被表示为Hb={h1,h2,...,hn};
步骤(7)使用注意力机制为得到的特征向量Hb的每个hk分配一个权重αk,通过计算获得处理后的新的特征向量o;
步骤(8)上述得到的特征向量o通过sigmoid函数得到每个输入样本的预测概率
Figure FDA0002366336140000017
步骤(9)使用类平衡交叉熵作为损失函数计算样本真实标签值y和预测概率
Figure FDA0002366336140000021
的损失值;
步骤(10)训练上述基于注意力机制和双向LSTM模型的参数,当达到最大训练次数IterMax后,获得训练后的双向LSTM和注意力机制模型;
步骤(11)对于一条新的代码注释,首先按步骤(2)进行预处理,然后将预处理后的代码注释输入到步骤(10)获得的双向LSTM和注意力机制模型中,最终获得该代码注释的预测概率,如果预测概率大于等于0.5表示该代码注释是技术债务注释,小于0.5表示该代码注释不是技术债务注释。
CN202010036852.1A 2020-01-14 2020-01-14 基于双向lstm和注意力机制的软件技术债务识别方法 Withdrawn CN111273911A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010036852.1A CN111273911A (zh) 2020-01-14 2020-01-14 基于双向lstm和注意力机制的软件技术债务识别方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010036852.1A CN111273911A (zh) 2020-01-14 2020-01-14 基于双向lstm和注意力机制的软件技术债务识别方法

Publications (1)

Publication Number Publication Date
CN111273911A true CN111273911A (zh) 2020-06-12

Family

ID=70998700

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010036852.1A Withdrawn CN111273911A (zh) 2020-01-14 2020-01-14 基于双向lstm和注意力机制的软件技术债务识别方法

Country Status (1)

Country Link
CN (1) CN111273911A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111782807A (zh) * 2020-06-19 2020-10-16 西北工业大学 一种基于多方法集成学习的自承认技术债务检测分类方法
CN112748951A (zh) * 2021-01-21 2021-05-04 杭州电子科技大学 基于XGBoost的自承认技术债务多分类方法
CN113313184A (zh) * 2021-06-07 2021-08-27 西北工业大学 一种异质集成的自承认技术债务自动检测方法
CN117112446A (zh) * 2023-10-16 2023-11-24 腾讯科技(深圳)有限公司 编辑器调试方法、装置、电子设备及介质

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111782807A (zh) * 2020-06-19 2020-10-16 西北工业大学 一种基于多方法集成学习的自承认技术债务检测分类方法
CN111782807B (zh) * 2020-06-19 2024-05-24 西北工业大学 一种基于多方法集成学习的自承认技术债务检测分类方法
CN112748951A (zh) * 2021-01-21 2021-05-04 杭州电子科技大学 基于XGBoost的自承认技术债务多分类方法
CN112748951B (zh) * 2021-01-21 2022-04-22 杭州电子科技大学 基于XGBoost的自承认技术债务多分类方法
CN113313184A (zh) * 2021-06-07 2021-08-27 西北工业大学 一种异质集成的自承认技术债务自动检测方法
CN113313184B (zh) * 2021-06-07 2024-05-24 西北工业大学 一种异质集成的自承认技术债务自动检测方法
CN117112446A (zh) * 2023-10-16 2023-11-24 腾讯科技(深圳)有限公司 编辑器调试方法、装置、电子设备及介质
CN117112446B (zh) * 2023-10-16 2024-02-02 腾讯科技(深圳)有限公司 编辑器调试方法、装置、电子设备及介质

Similar Documents

Publication Publication Date Title
CN109948165B (zh) 基于混合注意力网络的细粒度情感极性预测方法
CN108984530B (zh) 一种网络敏感内容的检测方法及检测系统
CN111273911A (zh) 基于双向lstm和注意力机制的软件技术债务识别方法
CN111626063B (zh) 一种基于投影梯度下降和标签平滑的文本意图识别方法及系统
CN107943784B (zh) 基于生成对抗网络的关系抽取方法
CN109635108B (zh) 一种基于人机交互的远程监督实体关系抽取方法
CN111400455A (zh) 基于知识图谱的问答系统的关系检测方法
CN110046356B (zh) 标签嵌入的微博文本情绪多标签分类方法
CN111428490B (zh) 一种利用语言模型的指代消解弱监督学习方法
CN113742733B (zh) 阅读理解漏洞事件触发词抽取和漏洞类型识别方法及装置
CN112561718A (zh) 基于BiLSTM权重共享的案件微博评价对象情感倾向性分析方法
CN113051914A (zh) 一种基于多特征动态画像的企业隐藏标签抽取方法及装置
CN111475615A (zh) 一种情感增强的细粒度情感预测方法、装置、系统及存储介质
WO2021077168A1 (en) Docket analysis methods and systems
CN108920446A (zh) 一种工程文本的处理方法
CN114780582A (zh) 基于表格问答的自然答案生成系统及其方法
CN114416991A (zh) 一种基于prompt的文本情感原因分析方法和系统
CN116663539A (zh) 基于RoBERTa和指针网络的中文实体与关系联合抽取方法及系统
CN115033689B (zh) 一种基于小样本文本分类原型网络欧氏距离计算方法
CN114944002B (zh) 文本描述辅助的姿势感知的人脸表情识别方法
CN115905545A (zh) 一种基于变分自编码器的无监督读者书评情感分析方法
CN115510188A (zh) 文本关键词关联方法、装置、设备及存储介质
CN112163423B (zh) 一种检察案件办理工作量计算方法及系统
CN115422945A (zh) 一种融合情感挖掘的谣言检测方法及系统
CN115062109A (zh) 一种基于实体对注意力机制的实体关系联合抽取方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WW01 Invention patent application withdrawn after publication

Application publication date: 20200612

WW01 Invention patent application withdrawn after publication