CN111090460B - 一种基于最近邻算法的代码变更日志自动生成方法 - Google Patents

一种基于最近邻算法的代码变更日志自动生成方法 Download PDF

Info

Publication number
CN111090460B
CN111090460B CN201910967684.5A CN201910967684A CN111090460B CN 111090460 B CN111090460 B CN 111090460B CN 201910967684 A CN201910967684 A CN 201910967684A CN 111090460 B CN111090460 B CN 111090460B
Authority
CN
China
Prior art keywords
word
file
diff
pair
commit
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.)
Expired - Fee Related
Application number
CN201910967684.5A
Other languages
English (en)
Other versions
CN111090460A (zh
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.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
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 Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN201910967684.5A priority Critical patent/CN111090460B/zh
Publication of CN111090460A publication Critical patent/CN111090460A/zh
Application granted granted Critical
Publication of CN111090460B publication Critical patent/CN111090460B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Library & Information Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于最近邻算法的代码变更日志自动生成方法,属于代码变更日志自动生成领域。该方法包括:输入数据的预处理、训练集数据预处理、通过词袋模型获取词频向量对的集合、通过KNN算法计算候选中间结果、计算BLEU‑4值,最终获得输出结果。该方法具有模型结构简单,解释性强,模型不需要训练,实际运行时间较NMT大大缩减,对噪声不敏感,鲁棒性强的特点。

Description

一种基于最近邻算法的代码变更日志自动生成方法
技术领域
本发明属于代码变更日志自动生成领域,具体地涉及一种基于最近邻算法 的代码变更日志自动生成方法。
背景技术
目前,代码变更日志的技术已被广泛研究。DeltaDoc是将源代码的变更作为 输入,通过符号执行的方法来获得路径谓词,然后使用一组预定义的规则和转换 生成提交消息。ChangeScribe首先通过分析相应的源代码的变更和抽象语法树, 以提取必要信息。然后它用提取的信息填充预定义的模板来作为本次提交的日志。 NMT则首先将深度神经网络运用到其该领域,其做法是使用神经机器翻译算法 自动从源码中生成精简的代码变更日志。
但是目前代码克隆检测工具中普遍存在以下问题:
(1)模型结构复杂,缺乏可解释性;
(2)模型训练和运行时间花费大;
(3)对噪声敏感,鲁棒性不强。
发明内容
本发明的对现有技术进行改进的目的,提供一种基于最近邻算法的代码变 更日志自动生成方法。
本发明是通过以下技术方案实现的:一种基于最近邻算法的代码变更日志自动生成方法,具体包括以下步骤:
步骤一:输入数据的预处理:每一个原始数据的提交都对应于一个diff文件, 所述diff文件通过Git原生命令git diff获得,所述diff文件保存工作区中的当 前文件和历史版本文件的差异内容。
步骤二:训练集数据预处理:对步骤一所得diff文件进行训练,所述diff文 件中包含工程的commit对,通过正则表达式过滤掉所述diff文件中的由集成开 发工具自动生成的冗余信息的commit对或者缺失信息的commit对,最终获得 训练集数据。每个commit对由diff文件和与之对应的commit message组成。
步骤三:通过词袋模型获取词频向量对的集合:将待生成日志diff文件通过 词袋模型建立所述diff文件的词频向量对的集合。所述词频向量对表示为<d,ti>, 其中d表示diff文件生成的词向量,ti表示训练集中第i个数据对应的词向量; 词向量的维度记为n,diff文件的词汇表集合记为D,第i个数据对应词词频向量 对的集合记为Ti,n=|D∪Ti|。
步骤四:KNN算法计算候选中间结果:对步骤三中获得的词频向量对的集 合分别做余弦相似度计算,获得相似度值,将相似度值最大的5个词频向量对作 为候选中间结果:
Figure BDA0002231061640000021
其中,
Figure BDA0002231061640000022
为ti向量的第j个分量,dj为diff文件生成的词向量的第j个分量。
步骤五:计算BLEU-4值:对步骤四中得到的候选中间结果所对应的词频向 量对<d,ti>,分别计算BLEU-4值,将其中BLEU-4值最大的词频向量对所对应 的commit message文件作为最终的结果输出。
进一步地,步骤5中所述BLEU-4值的计算方法如下:
首先计算修正的n个连续的单词片段精确度,对于任意的n,所述单词片段 精确度通过以下计算得到:
Figure BDA0002231061640000023
Cntclip(n-gram)=min(Cntgen(n-gram),Cntref(n-gram)) (3)
其中,gen是ti中所有的不同的n-grams组成的集合;Cntclip由方程(3)定义; Cntgen为某一个n-gram在ti中出现的次数;Cntref为某一个n-gram在d中出 现的次数。
其次,BLEU的定义如下:
Figure BDA0002231061640000024
Figure BDA0002231061640000025
其中,N是最长的连续单词片段,此处选择经验值4;pn是由方程(2)计算 而得;BP由方程(5)定义;r是d所对应的diff语句的长度,c是ti所对应的commit message的长度。
与现有技术相比,本发明具有如下有益效果:本发明采用的是简单高效的机 器学习模型KNN代替现有技术中复杂的深度学习网络模型。KNN模型本身不需 要模型训练阶段,实际运行阶段只需要计算待测样本和所有训练样本的余弦距离, 故运行时间相比现有技术也大幅度减少,同时利用余弦函数计算相似性的方法本 身也十分易于理解,便于解释。最后,本发明增加了训练数据的预处理阶段,故 可以排除训练样本中噪声的干扰,具有很强的鲁棒性。本发明的方法具有模型结 构简单,解释性强;模型不需要训练,实际运行时间较NMT大大缩减;对噪声 不敏感,鲁棒性强的特点。
附图说明
图1为代码变更日志自动生成流程图。
具体实施方式
如图1所示,为本发明代码变更日志自动生成流程图,该方法具体包括以下 步骤:
步骤一:输入数据的预处理:每一个原始数据的提交都对应于一个diff文件, 所述diff文件通过Git原生命令git diff获得,所述diff文件保存工作区中的当 前文件和历史版本文件的差异内容。
步骤二:训练集数据预处理:对步骤一所得diff文件进行训练,所述diff文 件中包含工程的commit对,通过正则表达式过滤掉所述diff文件中的由集成开 发工具自动生成的冗余信息的commit对或者缺失信息的commit对,最终获得 训练集数据。每个commit对由diff文件和与之对应的commit message组成。通 过对训练数据的预处理,排除无效信息,可以大幅度提升模型的鲁棒性。
步骤三:通过词袋模型获取词频向量对:将待生成日志diff文件通过词袋模 型建立diff文件的词频向量对的集合。词袋模型只考虑每个句子中词语出现的频 率,忽略其语法以及词语的顺序。所述词频向量对表示为<d,ti>,其中d表示 diff文件生成的词向量,ti表示训练集中第i个数据对应的词向量;词向量的维 度记为dim,diff文件的词汇表集合记为D,第i个数据对应词词频向量对的集合 记为Ti,dim=|D∪Ti|。词向量每一维度代表当前单词在当前句子中出现的频 数。词袋模型的作用是简化模型输入的复杂度,即将自然语言序列直接映射为词 频向量对,相比于深度学习网络中方法中将单个单词映射为独立向量,可以极大 减少运算过程中的复杂度,减少运算时间。
步骤四:KNN算法计算候选中间结果:对步骤三中获得的词频向量对的集 合分别做余弦相似度计算,获得相似度值,将相似度值最大的5个词频向量对作 为候选中间结果:
Figure BDA0002231061640000041
其中,
Figure BDA0002231061640000042
为ti向量的第j个分量。
步骤五:计算BLEU-4值:对步骤四中得到的候选中间结果所对应的词频向 量对<d,ti>,分别计算BLEU-4值,将其中BLEU-4值最大的词频向量对所对应 的commit message文件作为最终的结果输出。
所述BLEU-4值的计算方法如下:
首先计算修正的n个连续的单词片段精确度,对于任意的n,所述单词片段 精确度通过以下计算得到:
Figure BDA0002231061640000043
Cntclip(n-gram)=min(Cntgen(n-gram),Cntref(n-gram)) (3)
其中,gen是ti中所有的不同的n-grams组成的集合;Cntclip由方程(3)定义; Cntgen则是某一个n-gram在ti中出现的次数;Cntref是某一个n-gram在d中 出现的次数。步骤四和五是该方法的核心,步骤四通过计算余弦距离来确定K(根 据经验值K取5)个候选结果,而不是将所有的结果都输入第步骤五,由此进一 步减少了计算代价;最后步骤五通过计算每个候选结果和输入向量的BLEU-4值, 最后将于输入结果最想的候选结果作为预测结果输出。整个运算流程利用简单 的KNN和BLEU-4算法组合运用,拥有很强的可解释性。
其次,BLEU的定义如下:
Figure BDA0002231061640000044
Figure BDA0002231061640000045
其中,N是最长的连续单词片段,此处选择经验值4;pn是由方程(2)计算 而得;BP由方程(5)定义;r是d所对应的diff语句的长度,c是ti所对应的 commit message的长度。
实施例
给定一个从Git仓库提取出的原始的代码变更日志(commit message),记为OCM(original commit message),同时利用git diff命令获得与之对应的diff信息, 记为OF(original diff)。将OF作为NNGen(最近邻算法的代码仓库提交信息生成 算法)的输入,输出结果MG(massage generated)。该方法的性能参数如表1所示。
对比例
首先将一个待生成代码日志的diff文件和一个训练集输入GenNN模型, GenNN会从训练集中提取diff文件。接下来,训练diff文件和待生成代码日志 的diff文件利用词袋模型生成为一个词向量对集合(如具体实施方式中步骤三)。 然后,GenNN计算词向量对集合中每个向量对之间的余弦相似度,并选择出相 似度得分最高的5个向量对所对应的diff文件。然后,计算待生成代码日志的 diff文件和Top-5(相似度最高的5个向量对)训练diff文件之间的bleu-4得分。 并将bleu-4得分最高的训练diff视为待生成代码日志的diff文件的最近邻。最后, GenNN方简单地输出得分最高的训练diff文件所对应的提交代码日志作为最后 输出的代码日志文件。对于NMT模型,输入同样的待生成代码日志的diff文件,最后获得其生成的代码日志diff文件。两者对比试验结果如下:
表1 实际生成提交日志比较
Figure BDA0002231061640000051
表2 NMT和GenNN的评估结果
Figure BDA0002231061640000052
表3 NMT和GenNN时间消耗对比
Figure BDA0002231061640000053
Figure BDA0002231061640000061
*GTX 1080是Nvidia GeForce GTX 1080显卡,GPU采用的是Intel Core i52.5GHz。
如表1所示,输入相同的diff文件,最后分别生成的提交日志,GenNN的生成 结果要比NMT更接近真实的提交日志,由此直观显示GenNN效果要优于NMT。
如表2所示,给出了NMT和GenNN的在原始数据集(original)以及清洗过数据 集(cleaned)上的评估结果,GenNN的BLEU值获得了从16%到21%不等的提升。 此外,GenNN所有修正N-gram精度(表2中的p1-p4)都高于NMT。结果则定量 地表明GenNN算法的效果要优于NMT,同时可以看到GenNN方法在每个数据集 上的BLEU-4得分都优于NMT,这在表明了GenNN方法有更高的鲁棒性,噪声对 其影响更小。
如表3所示,对于相同的输入diff文件,NMT相比较于GenNN的时间成本大 大减少。可以看到,训练NMT需要24到34小时,测试这两个数据集需要4.5到17 分钟。然而GenNN不需要训练,因此其训练时间标记为N/A。其测试过程的时间 成本只有23到30秒。这意味着GenNN在两个数据集上比NMT快得多(超过2600 倍)。

Claims (1)

1.一种基于最近邻算法的代码变更日志自动生成方法,其特征在于,具体包括以下步骤:
步骤一:输入数据的预处理:每一个原始数据的提交都对应于一个diff文件,所述diff文件通过Git原生命令git diff获得,所述diff文件保存工作区中的当前文件和历史版本文件的差异内容;
步骤二:训练集数据预处理:对步骤一所得diff文件进行训练,所述diff文件中包含工程的commit对,通过正则表达式过滤掉所述diff文件中的由集成开发工具自动生成的冗余信息的commit对或者缺失信息的commit对,最终获得训练集数据;每个commit对由diff文件和与之对应的commit message组成;
步骤三:通过词袋模型获取词频向量对的集合:将待生成日志diff文件通过词袋模型建立所述diff文件的词频向量对的集合;所述词频向量对表示为<d,ti>,其中d表示diff文件生成的词向量,ti表示训练集中第i个数据对应的词向量;词向量的维度记为n,diff文件的词汇表集合记为D,第i个数据对应词词频向量对的集合记为Ti,n=|D∪Ti|;
步骤四:KNN算法计算候选中间结果:对步骤三中获得的词频向量对的集合分别做余弦相似度计算,获得相似度值,将相似度值最大的5个词频向量对作为候选中间结果:
Figure FDA0002918399790000011
其中,tij为ti向量的第j个分量,dj为diff文件生成的词向量的第j个分量;
步骤五:计算BLEU-4值:对步骤四中得到的候选中间结果所对应的词频向量对<d,ti>,分别计算BLEU-4值,将其中BLEU-4值最大的词频向量对所对应的commit message文件作为最终的结果输出;
步骤五中所述BLEU-4值的计算方法如下:
首先计算修正的n个连续的单词片段精确度,对于任意的n,所述单词片段精确度通过以下计算得到:
Figure FDA0002918399790000012
Cntclip(n-gram)=min(Cntgen(n-gram),Cntref(n-gram)) (3)
其中,gen是ti中所有的不同的n-grams组成的集合;Cntclip由方程(3)定义;Cntgen为某一个n-gram在ti中出现的次数;Cntref为某一个n-gram在d中出现的次数;
其次,BLEU的定义如下:
Figure FDA0002918399790000021
Figure FDA0002918399790000022
其中,N是最长的连续单词片段,此处选择经验值4;pn是由方程(2)计算而得;BP由方程(5)定义;r是d所对应的diff语句的长度,c是ti所对应的commit message的长度。
CN201910967684.5A 2019-10-12 2019-10-12 一种基于最近邻算法的代码变更日志自动生成方法 Expired - Fee Related CN111090460B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910967684.5A CN111090460B (zh) 2019-10-12 2019-10-12 一种基于最近邻算法的代码变更日志自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910967684.5A CN111090460B (zh) 2019-10-12 2019-10-12 一种基于最近邻算法的代码变更日志自动生成方法

Publications (2)

Publication Number Publication Date
CN111090460A CN111090460A (zh) 2020-05-01
CN111090460B true CN111090460B (zh) 2021-05-04

Family

ID=70392981

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910967684.5A Expired - Fee Related CN111090460B (zh) 2019-10-12 2019-10-12 一种基于最近邻算法的代码变更日志自动生成方法

Country Status (1)

Country Link
CN (1) CN111090460B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112527769B (zh) * 2020-12-09 2023-05-16 重庆大学 一种针对软件变更日志生成方法的自动化质量保证框架

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006135607A2 (en) * 2005-06-09 2006-12-21 New England Controls, Inc. Method and system for rapid deployment and development of application and test software and documentation
US7155664B1 (en) * 2000-11-14 2006-12-26 Cypress Semiconductor, Corp. Extracting comment keywords from distinct design files to produce documentation
CN105446734A (zh) * 2015-10-14 2016-03-30 扬州大学 一种基于软件开发历史开发人员网络关系构建方法
CN106407113A (zh) * 2016-09-09 2017-02-15 扬州大学 一种基于Stack Overflow和commit库的bug定位方法
CN106681708A (zh) * 2016-11-16 2017-05-17 中国科学院软件研究所 一种基于数据挖掘的源代码注释自动生成方法
CN108171050A (zh) * 2017-12-29 2018-06-15 浙江大学 Linux容器的细粒度沙盒策略挖掘方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7593843B2 (en) * 2004-03-30 2009-09-22 Microsoft Corporation Statistical language model for logical form using transfer mappings
CN104462072B (zh) * 2014-11-21 2017-09-26 中国科学院自动化研究所 面向计算机辅助翻译的输入方法与装置
US10049106B2 (en) * 2017-01-18 2018-08-14 Xerox Corporation Natural language generation through character-based recurrent neural networks with finite-state prior knowledge
US10592236B2 (en) * 2017-11-14 2020-03-17 International Business Machines Corporation Documentation for version history
CN110007956A (zh) * 2019-03-29 2019-07-12 四川虹美智能科技有限公司 一种动态配置日志的方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7155664B1 (en) * 2000-11-14 2006-12-26 Cypress Semiconductor, Corp. Extracting comment keywords from distinct design files to produce documentation
WO2006135607A2 (en) * 2005-06-09 2006-12-21 New England Controls, Inc. Method and system for rapid deployment and development of application and test software and documentation
CN105446734A (zh) * 2015-10-14 2016-03-30 扬州大学 一种基于软件开发历史开发人员网络关系构建方法
CN106407113A (zh) * 2016-09-09 2017-02-15 扬州大学 一种基于Stack Overflow和commit库的bug定位方法
CN106681708A (zh) * 2016-11-16 2017-05-17 中国科学院软件研究所 一种基于数据挖掘的源代码注释自动生成方法
CN108171050A (zh) * 2017-12-29 2018-06-15 浙江大学 Linux容器的细粒度沙盒策略挖掘方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Categorizing and Predicting Invalid Vulnerabilities on Common Vulnerabilities and Exposures;Qiuyuan Chen 等;《2018 25th Asia-Pacific Software Engineering Conference》;20181207;345-354 *
即时软件缺陷预测研究进展;蔡亮 等;《软件学报》;20190531;1288-1307 *
基于概率潜在语义分析的软件变更分类研究;鄢萌;《中国优秀硕士学位论文全文数据库_信息科技辑》;20140215;I138-160 *

Also Published As

Publication number Publication date
CN111090460A (zh) 2020-05-01

Similar Documents

Publication Publication Date Title
AU2021204448B2 (en) Systems and methods of applying pragmatics principles for interaction with visual analytics
US10936664B2 (en) Dialogue system and computer program therefor
US11182568B2 (en) Sentence evaluation apparatus and sentence evaluation method
CN111095259B (zh) 使用n-gram机器的自然语言处理
WO2020186627A1 (zh) 舆情极性预测方法、装置、计算机设备及存储介质
Chen et al. Unsupervised induction and filling of semantic slots for spoken dialogue systems using frame-semantic parsing
CN108536670B (zh) 输出语句生成装置、方法和程序
US11983513B2 (en) Multi-lingual code generation with zero-shot inference
CN112926337B (zh) 一种结合重构句法信息的端到端方面级情感分析方法
CN118170894B (zh) 一种知识图谱问答方法、装置及存储介质
US10795902B1 (en) Applying natural language pragmatics in a data visualization user interface
CN104485106B (zh) 语音识别方法、语音识别系统和语音识别设备
JP2022000805A (ja) 語句処理方法、機器及び記憶媒体
CN111090460B (zh) 一种基于最近邻算法的代码变更日志自动生成方法
Xu et al. Unsupervised morphology learning with statistical paradigms
US11513773B2 (en) Feedback-driven semi-supervised synthesis of program transformations
Biswas et al. VANiLLa: Verbalized answers in natural language at large scale
CN117290478A (zh) 一种知识图谱问答方法、装置、设备和存储介质
CN113032366A (zh) 基于Flex和Bison的SQL语法树解析方法
US20220229990A1 (en) System and method for lookup source segmentation scoring in a natural language understanding (nlu) framework
Fan et al. Learning noise-robust joint representation for multimodal emotion recognition under realistic incomplete data scenarios
US20220164598A1 (en) Determining a denoised named entity recognition model and a denoised relation extraction model
Bilgin CLASSIFICATION OF TURKISH TWEETS BY DOCUMENT VECTORS AND INVESTIGATION OF THE EFFECTS OF PARAMETER CHANGES ON CLASSIFICATION SUCCESS
Chu et al. Supervised syntax-based alignment between english sentences and abstract meaning representation graphs
CN118227766B (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
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20210504

Termination date: 20211012

CF01 Termination of patent right due to non-payment of annual fee