CN111090460B - 一种基于最近邻算法的代码变更日志自动生成方法 - Google Patents
一种基于最近邻算法的代码变更日志自动生成方法 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 23
- 230000008859 change Effects 0.000 title claims abstract description 13
- 239000013598 vector Substances 0.000 claims abstract description 47
- 238000012549 training Methods 0.000 claims abstract description 29
- 238000007781 pre-processing Methods 0.000 claims abstract description 10
- 238000004364 calculation method Methods 0.000 claims description 3
- 238000011161 development Methods 0.000 claims description 3
- 238000001914 filtration Methods 0.000 claims description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000000052 comparative effect Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program 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个词频向量对作 为候选中间结果:
步骤五:计算BLEU-4值:对步骤四中得到的候选中间结果所对应的词频向 量对<d,ti>,分别计算BLEU-4值,将其中BLEU-4值最大的词频向量对所对应 的commit message文件作为最终的结果输出。
进一步地,步骤5中所述BLEU-4值的计算方法如下:
首先计算修正的n个连续的单词片段精确度,对于任意的n,所述单词片段 精确度通过以下计算得到:
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的定义如下:
其中,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个词频向量对作 为候选中间结果:
步骤五:计算BLEU-4值:对步骤四中得到的候选中间结果所对应的词频向 量对<d,ti>,分别计算BLEU-4值,将其中BLEU-4值最大的词频向量对所对应 的commit message文件作为最终的结果输出。
所述BLEU-4值的计算方法如下:
首先计算修正的n个连续的单词片段精确度,对于任意的n,所述单词片段 精确度通过以下计算得到:
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的定义如下:
其中,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 实际生成提交日志比较
表2 NMT和GenNN的评估结果
表3 NMT和GenNN时间消耗对比
*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个词频向量对作为候选中间结果:
其中,tij为ti向量的第j个分量,dj为diff文件生成的词向量的第j个分量;
步骤五:计算BLEU-4值:对步骤四中得到的候选中间结果所对应的词频向量对<d,ti>,分别计算BLEU-4值,将其中BLEU-4值最大的词频向量对所对应的commit message文件作为最终的结果输出;
步骤五中所述BLEU-4值的计算方法如下:
首先计算修正的n个连续的单词片段精确度,对于任意的n,所述单词片段精确度通过以下计算得到:
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的定义如下:
其中,N是最长的连续单词片段,此处选择经验值4;pn是由方程(2)计算而得;BP由方程(5)定义;r是d所对应的diff语句的长度,c是ti所对应的commit message的长度。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527769B (zh) * | 2020-12-09 | 2023-05-16 | 重庆大学 | 一种针对软件变更日志生成方法的自动化质量保证框架 |
Citations (6)
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)
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 | 四川虹美智能科技有限公司 | 一种动态配置日志的方法及装置 |
-
2019
- 2019-10-12 CN CN201910967684.5A patent/CN111090460B/zh not_active Expired - Fee Related
Patent Citations (6)
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)
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 |