System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于上下文代码的混合粒度代码合并冲突自动解决方法技术_技高网

一种基于上下文代码的混合粒度代码合并冲突自动解决方法技术

技术编号:40965361 阅读:2 留言:0更新日期:2024-04-18 20:45
本发明专利技术为一种基于上下文代码的混合粒度代码冲突自动解决方法:首先,本发明专利技术关注的是分支合并时所产生的代码合并冲突的消解,对代码合并冲突块从行粒度、词粒度两种混合粒度出发去生成解决方案。接着,使用对齐算法分别针对不同粒度的代码合并冲突提取出关键的代码冲突信息。然后,根据提取到的关键代码冲突信息,先使用大型预训练代码模型把关键代码冲突信息编码为查询向量,再利用查询向量通过注意力机制从处理过的合并文件中检索得到关键的上下文代码信息。最后,基于组合双粒度代码冲突与检索到的上下文代码信息为新数据集合,通过使用序列到序列的生成式任务来微调训练大型预训练代码模型,接着输入现实世界中的代码合并冲突到模型便可以自动生成冲突解决方案。

【技术实现步骤摘要】

本专利技术属于计算机。尤其是软件。本专利技术提出了一种基于上下文代码信息来对分支合并时所产生的代码合并冲突,从行粒度、词粒度两种混合粒度上自动生成代码合并冲突解决方案的方法,能够有效地针对当前冲突自动消解工具无法处理的代码合并冲突准确地生成解决方案,同时大大节省了开发人员手动解决合并冲突的时间。


技术介绍

1、随着机器学习和深度学习的不断发展,自动解决合并冲突也慢慢变成了可能。在过去的几年里,很多研究者都在探索如何能以最优的效果实现自动解决代码合并冲突。截止到目前为止,已经提出了很多种方法来改进合并冲突的检测和自动解决。传统的方法可以分为三类,即非结构化合并技术、结构化合并技术、半结构化合并技术。其中非结构化合并仅依赖于文本相似度,具有良好的泛化能力和执行效率,但只能检测冲突,不能自动解决冲突。另一方面,结构化和半结构化合并是基于抽象语法树的。这种方法是非常耗时的,并且只能应用于特定的编程语言,从而限制了它们的适用性。为了解决这些问题,研究人员将机器学习算法和深度学习模型应用到合并冲突解决中,并提出了基于学习的技术,目前这些技术达到了最先进的性能。由于基于学习的技术只需要将代码冲突的文本作为输入,因此也可以视为非结构化技术,具有较强的泛化能力和较高的效率。与传统的非结构化技术不同,基于学习的技术可以从训练数据中掌握冲突合并的常见模式,因此具有较强的冲突解决能力。

2、然而,在这些最先进的方法中,无论是定义固定合并模式的分类任务,还是基于生成模型来自动回归的生成式任务,他们消解冲突的输入信息都是有且仅有代码冲突块本身,却统统都没有涵盖冲突块之外(冲突文件之内)的上下文代码信息。代码冲突块的输入确实可以帮助模型理解整个冲突块的结构信息,但是只有这些信息还远远不能够比较正确且稳定地生成代码合并冲突的解决方案。因此,在自动解决代码合并冲突时,如何能更加准确地定位到冲突相关的上下文代码信息,如何能更加有效地加入所检索到的上下文代码信息是训练代码合并冲突自动解决工具所面临的主要挑战。

3、针对这些问题的一个有效解决方案是对于代码合并冲突块内真正产生冲突的内容,基于整个合并文件使用一种代码语义的搜索算法,来找到与冲突内容最相关的关键上下文代码行,然后再把代码冲突与关键上下文代码行结合起来。

4、但是这种解决方案有两个主要困难,首先是代码合并冲突块内的冲突内容过于冗余,无法完整的检索到与其相关的上下文代码行。其次是当前的检索算法都是基于文本相似度来做的匹配算法,无法有效地定位到真正的相关代码行。因此,本专利技术的主要目标是研究一种能够准确地检索到与冲突相关的上下文代码行,并基于所检索到的代码信息能够有效地针对代码合并冲突自动生成解决方案的方法,从而可以在实际开发中帮助开发人员大大地节省手动解决合并冲突的时间。


技术实现思路

1、本专利技术的主要工作是提出了一种基于上下文代码信息来对分支合并时所产生的代码合并冲突,从行粒度、词粒度两种混合粒度上自动生成代码合并冲突解决方案的方法。首先,本专利技术关注的是分支合并时所产生的代码合并冲突的消解,对代码合并冲突块从行粒度、词粒度两种混合粒度出发去生成解决方案。其次,对于适合行粒度的代码合并冲突,使用对齐算法分别针对ours版本代码与base版本代码对齐、theirs版本代码与base版本代码对齐,从而提取到关键的代码冲突信息,而对于适合词粒度的代码合并冲突,冲突内的词元就是关键的代码冲突信息,可以直接提取出来。然后,根据提取到的关键代码冲突信息,先使用大型预训练代码模型把关键代码冲突信息编码为查询向量q,再利用q向量通过注意力机制从处理过的合并文件中检索得到关键的上下文代码信息。最后,基于组合双粒度代码冲突与检索到的上下文代码信息为新数据集合,通过使用序列到序列的生成式任务来微调训练大型预训练代码模型,输入现实世界中的代码合并冲突到模型便可以自动生成冲突解决方案。针对以上问题,本专利技术的工作和贡献如下:

2、1.代码合并冲突块在两种粒度上的划分以及词粒度代码合并冲突的生成。本专利技术将代码合并冲突分为,行粒度代码合并冲突和词粒度代码合并冲突。针对从不同代码仓库中收集的所有冲突先做一个词元粒度的三路合并,根据生成的词粒度的合并内容来判断此冲突是否适合作为词粒度代码合并冲突。适合词粒度代码合并冲突的冲突,保留其词粒度合并格式,而不适合的则还原为行粒度格式。

3、2.基于不同粒度代码合并冲突的关键代码冲突信息的提取。对于适合行粒度的代码合并冲突,分别针对ours版本代码内容与base版本代码内容、theirs版本代码内容与base版本代码内容使用对齐算法对齐代码语义与编辑距离,便可以得到整个冲突块中真正发生冲突的代码行,从而可以提取到行粒度冲突的关键代码冲突信息,而对于适合词粒度的代码合并冲突,冲突内的词元就是整个冲突块中真正发生冲突的地方,因此可以直接提取冲突词元为词粒度冲突的关键代码冲突信息。

4、3.基于收集的关键代码冲突信息检索查询对应的关键上下文代码信息。由于当前的检索算法都是基于文本相似度来做的匹配算法,无法有效地定位到真正的相关代码行。所以本专利技术采用了大型预训练代码模型,通过该模型将关键代码冲突信息编码为一个具有语义理解的查询向量q。这个向量q包含了关于代码冲突的丰富信息,通过对代码片段的深层次理解,模型能够捕捉到代码之间的潜在关系和语境。然后,本专利技术利用注意力机制帮助模型在合并后的代码文件中检索到与关键冲突信息最相关的代码行,即关键的上下文代码信息。通过对q向量的注意力权重分布,模型能够聚焦于与代码冲突直接相关的部分,从而提取出对解决冲突至关重要的上下文信息。本专利技术通过将代码冲突信息抽象为查询向量,并通过注意力机制引导模型聚焦于关键上下文代码信息,使得后续模型可以更准确地定位和理解代码冲突的根本原因。

5、4.基于代码冲突与关键上下文代码信息组合的新数据集合来以自动解决代码合并冲突为任务,微调大型预训练代码模型。对于代码合并冲突的解决,本专利技术不仅仅局限于单个冲突块的内容,而是关注到了关键冲突信息最相关的但却是代码冲突块之外的关键上下文代码信息。本专利技术构建了一个新的数据集合,该数据集合以实际发生的代码合并冲突为基础,同时包括了冲突对应的关键上下文代码,并且创建了一个以自动解决代码合并冲突形式的序列到序列任务,将其用于微调大型预训练代码模型。这一任务要求模型不仅能够理解冲突的本质,还能够生成合理且正确的解决方案,充分发挥了预训练模型在语义理解和生成任务上的优势。在微调过程中,本专利技术特别注重对上下文代码信息的引入。通过将检索到的上下文代码信息与混合双粒度代码冲突结合,丰富了模型的输入信息,使其在生成解决方案时能够更好地考虑代码的整体语境。本专利技术充分挖掘了预训练代码模型在语义理解和生成任务上的能力,结合了代码冲突与关键上下文代码信息的新数据集合,为自动解决代码合并冲突任务提供了一种强大而实用的解决方案。

本文档来自技高网...

【技术保护点】

1.一种基于上下文代码的混合粒度代码合并冲突自动解决方法,其特征是对代码合并冲突块从行粒度、词粒度两种混合粒度出发去自动生成代码合并冲突解决方案;接着,基于不同粒度的代码合并冲突块,来定位并提取关键代码冲突信息;接着,基于大型预训练代码模型向量搜索的方法,来根据关键代码冲突信息检索对应的关键上下文代码信息;最后,基于代码冲突与关键上下文代码信息组合的新数据集合来微调大型预训练代码模型,以实现自动生成代码合并冲突的解决方案。

2.根据权利要求1所描述的一种基于上下文代码的混合粒度代码合并冲突自动解决方法,其特征包括以下几个步骤:

3.根据权利要求2所述的基于上下文代码的混合粒度代码合并冲突自动解决方法,其特征是步骤1) 中,代码合并冲突块在两种粒度上进行划分以及词粒度上代码合并冲突的生成,对代码合并冲突块从行粒度、词粒度两种混合粒度出发去生成解决方案;

4.根据权利要求2所述的基于上下文代码的混合粒度代码合并冲突自动解决方法,其特征是步骤2) 中,基于适合行粒度的代码合并冲突,使用对齐算法分别针对ours与base版本代码对齐、theirs与base版本代码对齐,提取到关键代码冲突信息,而对于适合词粒度的代码合并冲突,直接提取冲突内的词元为关键代码冲突信息。

5.根据权利要求2所述的基于上下文代码的混合粒度代码合并冲突自动解决方法,其特征是步骤3) 中,基于关键代码冲突信息,先使用大型预训练代码模型把关键代码冲突信息编码为查询向量,再利用查询向量通过向量检索从合并文件中检索得到关键的上下文代码信息;

6.根据权利要求2所述的基于上下文代码的混合粒度代码合并冲突自动解决方法,其特征是步骤4) 中,基于组合双粒度代码冲突与检索到的上下文代码信息为新数据集合,通过使用生成式任务来微调大型预训练代码模型,使用结果模型对现实世界代码合并冲突可以自动生成冲突解决方案;

...

【技术特征摘要】

1.一种基于上下文代码的混合粒度代码合并冲突自动解决方法,其特征是对代码合并冲突块从行粒度、词粒度两种混合粒度出发去自动生成代码合并冲突解决方案;接着,基于不同粒度的代码合并冲突块,来定位并提取关键代码冲突信息;接着,基于大型预训练代码模型向量搜索的方法,来根据关键代码冲突信息检索对应的关键上下文代码信息;最后,基于代码冲突与关键上下文代码信息组合的新数据集合来微调大型预训练代码模型,以实现自动生成代码合并冲突的解决方案。

2.根据权利要求1所描述的一种基于上下文代码的混合粒度代码合并冲突自动解决方法,其特征包括以下几个步骤:

3.根据权利要求2所述的基于上下文代码的混合粒度代码合并冲突自动解决方法,其特征是步骤1) 中,代码合并冲突块在两种粒度上进行划分以及词粒度上代码合并冲突的生成,对代码合并冲突块从行粒度、词粒度两种混合粒度出发去生成解决方案;

4.根据权利要求2所述...

【专利技术属性】
技术研发人员:张卫丰董政宇周国强张迎周王子元
申请(专利权)人:南京邮电大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1