本发明专利技术公开了一种基于最近邻算法的代码变更日志自动生成方法,属于代码变更日志自动生成领域。该方法包括:输入数据的预处理、训练集数据预处理、通过词袋模型获取词频向量对的集合、通过KNN算法计算候选中间结果、计算BLEU‑4值,最终获得输出结果。该方法具有模型结构简单,解释性强,模型不需要训练,实际运行时间较NMT大大缩减,对噪声不敏感,鲁棒性强的特点。
An automatic generation method of code change log based on nearest neighbor algorithm
【技术实现步骤摘要】
一种基于最近邻算法的代码变更日志自动生成方法
本专利技术属于代码变更日志自动生成领域,具体地涉及一种基于最近邻算法的代码变更日志自动生成方法。
技术介绍
目前,代码变更日志的技术已被广泛研究。DeltaDoc是将源代码的变更作为输入,通过符号执行的方法来获得路径谓词,然后使用一组预定义的规则和转换生成提交消息。ChangeScribe首先通过分析相应的源代码的变更和抽象语法树,以提取必要信息。然后它用提取的信息填充预定义的模板来作为本次提交的日志。NMT则首先将深度神经网络运用到其该领域,其做法是使用神经机器翻译算法自动从源码中生成精简的代码变更日志。但是目前代码克隆检测工具中普遍存在以下问题:(1)模型结构复杂,缺乏可解释性;(2)模型训练和运行时间花费大;(3)对噪声敏感,鲁棒性不强。
技术实现思路
本专利技术的对现有技术进行改进的目的,提供一种基于最近邻算法的代码变更日志自动生成方法。本专利技术是通过以下技术方案实现的:一种基于最近邻算法的代码变更日志自动生成方法,具体包括以下步骤:步骤一:输入数据的预处理:每一个原始数据的提交都对应于一个diff文件,所述diff文件通过Git原生命令gitdiff获得,所述diff文件保存工作区中的当前文件和历史版本文件的差异内容。步骤二:训练集数据预处理:对步骤一所得diff文件进行训练,所述diff文件中包含工程的commit对,通过正则表达式过滤掉所述diff文件中的由集成开发工具自动生成的冗余信息的commit对或者缺失信息的commit对,最终获得训练集数据。每个commit对由diff文件和与之对应的commitmessage组成。步骤三:通过词袋模型获取词频向量对的集合:将待生成日志diff文件通过词袋模型建立所述diff文件的词频向量对的集合。所述词频向量对表示为<d,ti>,其中d表示diff文件生成的词向量,ti表示训练集中第i个数据对应的词向量;词向量的维度记为n,diff文件的词汇表集合记为D,第i个数据对应词词频向量对的集合记为Ti,n=|D∪Ti|。步骤四:KNN算法计算候选中间结果:对步骤三中获得的词频向量对的集合分别做余弦相似度计算,获得相似度值,将相似度值最大的5个词频向量对作为候选中间结果:其中,为ti向量的第j个分量,dj为diff文件生成的词向量的第j个分量。步骤五:计算BLEU-4值:对步骤四中得到的候选中间结果所对应的词频向量对<d,ti>,分别计算BLEU-4值,将其中BLEU-4值最大的词频向量对所对应的commitmessage文件作为最终的结果输出。进一步地,步骤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所对应的commitmessage的长度。与现有技术相比,本专利技术具有如下有益效果:本专利技术采用的是简单高效的机器学习模型KNN代替现有技术中复杂的深度学习网络模型。KNN模型本身不需要模型训练阶段,实际运行阶段只需要计算待测样本和所有训练样本的余弦距离,故运行时间相比现有技术也大幅度减少,同时利用余弦函数计算相似性的方法本身也十分易于理解,便于解释。最后,本专利技术增加了训练数据的预处理阶段,故可以排除训练样本中噪声的干扰,具有很强的鲁棒性。本专利技术的方法具有模型结构简单,解释性强;模型不需要训练,实际运行时间较NMT大大缩减;对噪声不敏感,鲁棒性强的特点。附图说明图1为代码变更日志自动生成流程图。具体实施方式如图1所示,为本专利技术代码变更日志自动生成流程图,该方法具体包括以下步骤:步骤一:输入数据的预处理:每一个原始数据的提交都对应于一个diff文件,所述diff文件通过Git原生命令gitdiff获得,所述diff文件保存工作区中的当前文件和历史版本文件的差异内容。步骤二:训练集数据预处理:对步骤一所得diff文件进行训练,所述diff文件中包含工程的commit对,通过正则表达式过滤掉所述diff文件中的由集成开发工具自动生成的冗余信息的commit对或者缺失信息的commit对,最终获得训练集数据。每个commit对由diff文件和与之对应的commitmessage组成。通过对训练数据的预处理,排除无效信息,可以大幅度提升模型的鲁棒性。步骤三:通过词袋模型获取词频向量对:将待生成日志diff文件通过词袋模型建立diff文件的词频向量对的集合。词袋模型只考虑每个句子中词语出现的频率,忽略其语法以及词语的顺序。所述词频向量对表示为<d,ti>,其中d表示diff文件生成的词向量,ti表示训练集中第i个数据对应的词向量;词向量的维度记为dim,diff文件的词汇表集合记为D,第i个数据对应词词频向量对的集合记为Ti,dim=|D∪Ti|。词向量每一维度代表当前单词在当前句子中出现的频数。词袋模型的作用是简化模型输入的复杂度,即将自然语言序列直接映射为词频向量对,相比于深度学习网络中方法中将单个单词映射为独立向量,可以极大减少运算过程中的复杂度,减少运算时间。步骤四:KNN算法计算候选中间结果:对步骤三中获得的词频向量对的集合分别做余弦相似度计算,获得相似度值,将相似度值最大的5个词频向量对作为候选中间结果:其中,为ti向量的第j个分量。步骤五:计算BLEU-4值:对步骤四中得到的候选中间结果所对应的词频向量对<d,ti>,分别计算BLEU-4值,将其中BLEU-4值最大的词频向量对所对应的commitmessage文件作为最终的结果输出。所述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)个候选结果,而不本文档来自技高网...
【技术保护点】
1.一种基于最近邻算法的代码变更日志自动生成方法,其特征在于,具体包括以下步骤:/n步骤一:输入数据的预处理:每一个原始数据的提交都对应于一个diff文件,所述diff文件通过Git原生命令git diff获得,所述diff文件保存工作区中的当前文件和历史版本文件的差异内容。/n步骤二:训练集数据预处理:对步骤一所得diff文件进行训练,所述diff文件中包含工程的commit对,通过正则表达式过滤掉所述diff文件中的由集成开发工具自动生成的冗余信息的commit对或者缺失信息的commit对,最终获得训练集数据。每个commit对由diff文件和与之对应的commit message组成。/n步骤三:通过词袋模型获取词频向量对的集合:将待生成日志diff文件通过词袋模型建立所述diff文件的词频向量对的集合。所述词频向量对表示为<d,t
【技术特征摘要】
1.一种基于最近邻算法的代码变更日志自动生成方法,其特征在于,具体包括以下步骤:
步骤一:输入数据的预处理:每一个原始数据的提交都对应于一个diff文件,所述diff文件通过Git原生命令gitdiff获得,所述diff文件保存工作区中的当前文件和历史版本文件的差异内容。
步骤二:训练集数据预处理:对步骤一所得diff文件进行训练,所述diff文件中包含工程的commit对,通过正则表达式过滤掉所述diff文件中的由集成开发工具自动生成的冗余信息的commit对或者缺失信息的commit对,最终获得训练集数据。每个commit对由diff文件和与之对应的commitmessage组成。
步骤三:通过词袋模型获取词频向量对的集合:将待生成日志diff文件通过词袋模型建立所述diff文件的词频向量对的集合。所述词频向量对表示为<d,ti>,其中d表示diff文件生成的词向量,ti表示训练集中第i个数据对应的词向量;词向量的维度记为n,diff文件的词汇表集合记为D,第i个数据对应词词频向量对的集合记为Ti,n=|D∪Ti|。
步骤四:KNN算法计算候选中间结果:对步骤三中获得的词频向量对的集合分别做余弦相似度计算,获得相似度值,将相似度值最大的5个词频向量对作为候选中间结果:
【专利技术属性】
技术研发人员:蔡亮,张洋,鄢萌,刘忠鑫,夏鑫,李善平,王新宇,
申请(专利权)人:浙江大学,
类型:发明
国别省市:浙江;33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。