System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于预训练模型的代码搜索系统及方法技术方案_技高网
当前位置: 首页 > 专利查询>东北大学专利>正文

一种基于预训练模型的代码搜索系统及方法技术方案

技术编号:41269764 阅读:3 留言:0更新日期:2024-05-11 09:24
本发明专利技术提供一种基于预训练模型的代码搜索系统及方法,涉及代码搜索技术领域。该系统及方法首先提取每段代码的自然语言描述序列以及每一段代码片段的Token序列;再提取Token序列T中的特征,得到Token序列的特征向量;并对每段代码对应的自然语言描述序列N进行特征提取,从而生成对应的自然语言描述的特征向量;然后计算代码片段的特征向量和自然语言描述的特征向量之间的相似度;迭代执行以上过程最终产出每个代码片段的特征向量;再将各代码片段的特征向量通过聚类算法聚类成M个向量簇;对于用户的查询语句,在经过训练后的CodeBERT模型、聚类后的特征向量以及代码库中存储的代码片段序列P的基础上进行代码搜索工作。

【技术实现步骤摘要】

本专利技术涉及代码搜索,尤其涉及一种基于预训练模型的代码搜索系统及方法


技术介绍

1、代码搜索任务是帮助开发人员可以通过搜索一个大规模的代码库来重用以前编写的代码片段的行为。代码搜索需要用户输入一段描述代码功能的自然语言,然后模型输出相对应的编程语言供用户使用。代码搜索技术可以大大降低开发人员编写代码的时间,提升工作效率,并且提升软件质量。

2、在早期,编程语言和自然语言的搜索主要通过检索技术实现。codenn模型第一次将代码片段和自然语言描述联合嵌入到高维向量空间中,这样代码片段及其相应的描述就具有相似的向量。使用统一的向量表示,可以根据其向量检索与自然语言查询相关的代码片段。语义相关的单词也可以被识别,在查询中可以处理无关/有噪声的关键字。其性能相比于传统的检索技术有较大提升。更为重要的是,codenn提出了统一编程语言和自然语言到同一维度的概念,为后来的模型指出一条新的方向。

3、如今基于转换器的预训练语言模型,如bert模型、roberta模型等,在自然语言处理(nlp)任务中取得了巨大的成功。codebert模型是一个结合了源代码和自然语言描述的双峰预训练模型。该模型包含了替换的令牌检测的训练前任务,即检测从生成器中采样的可信的备选方案。这使模型能够同时利用nl-pl对的“双峰”数据和“单峰”数据,其中前者为模型训练提供了输入令牌,而后者有助于学习更好的生成器。graphcodebert模型,通过在数据流图上引入边缘掩蔽技术来保留源代码的语法结构。graphcodebert模型是第一个考虑预训练代码表示的代码结构的预训练模型。

4、codnn模型在提取代码片段特征的过程中只关注了代码的文本信息,却遗漏了代码独有的图形结构特征。这种遗漏造成了特征提取的不完整性,进而影响了代码搜索技术的准确性。

5、codebert和graphcodebert预训练模型在精确度层面为代码搜索技术带来了显著的提升,但它未能充分考虑编程语言中语义信息和结构信息。这个遗漏的细节可能会导致模型的表现出现波动,例如当两个功能相同的代码段存在微小的变量名或代码结构的差异时,模型对它们的评分可能会受到影响。同时,这些建模方法侧重于提高代码搜索的精准度,却未充分考虑在庞大的代码数据库中进行代码搜索所需的时间问题。在处理高维度的编程语言向量和自然语言向量时,经常会面临一个挑战,即模型可能需要较长的时间来执行搜索操作。因此,软件工程领域迫切需要寻求一种既迅速又准确的代码搜索技术,以满足开发人员日益增长的需求。


技术实现思路

1、本专利技术要解决的技术问题是针对上述现有技术的不足,提供一种基于预训练模型的代码搜索系统及方法,实现代码的高效搜索。

2、为解决上述技术问题,本专利技术所采取的技术方案是:

3、一方面,本专利技术提供一种基于预训练模型的代码搜索系统,包括数据采集模块、代码片段预处理模块、token特征提取模块、自然语言预处理模块、自然语言特征提取模块、自注意力嵌入模块、句子相似度计算模块、相似度计算模块和聚类模块;

4、所述数据采集模块采集原始代码片段数据集,并将该数据集划分为训练集、验证集和测试集;所述原始代码片段数据集包括原始代码片段集合以及原始代码片段所对应的自然语言描述;

5、所述代码片段预处理模块将数据采集模块获取的原始代码片段数据集进行预处理,提取每个代码片段的关键特征;所述每个代码片段的关键特征是分割代码片段的token序列;

6、所述token特征提取模块接受代码片段预处理模块输出的token序列,并将这些序列输入到多层感知机中,提取token序列中内在的特征信息,产生一系列token特征向量;

7、所述自然语言预处理模块利用分词工具分别对用户输入的查询语句和原始代码片段所对应的自然语言描述进行分词处理,同时去除其中的特殊字符,得到用户输入的查询语句对应的自然语言序列q和原始代码片段所对应的自然语言描述序列n;

8、所述自然语言特征提取模块接收来自自然语言预处理模块的查询语句对应的自然语言序列q以及原始代码片段所对应的自然语言描述序列n,并将序列q和序列n输入至codebert模型中以抽取其中含有的特征,得到代表查询语句对应的自然语言序列q的自然语言特征向量qv以及原始代码片段所对应的自然语言描述序列n的自然语言特征向量vn;

9、所述自注意力嵌入模块接收token特征提取模块输出的token特征向量以及自然语言特征提取模块输出的自然语言特征向量;通过编码器的掩蔽语言建模和替换令牌检测两个预训练任务对codebert模型进行训练;同时使用交叉熵损失以及对比学习损失函数对模型进行损失评估,直到相似度损失收敛;并且最后将接收的特征向量应用不同权重的注意力机制生成了一个综合特征表示,即得到代码片段的特征向量;

10、所述句子相似度计算模块利用词汇表将代码片段预处理模块生成的代码片段的token序列以及自然语言预处理模块生成的用户输入的查询语句的自然语言序列q转换成高维向量,然后通过句子相似度算法计算并得出代码片段的token序列和自然语言序列q的句子相似度得分;

11、所述相似度计算模块接收自注意力嵌入模块得到的代码片段的最终特征向量,以及自然语言特征提取模块得到的自然语言特征向量qv;计算自然语言特征向量qv与所有代码片段的最终特征向量之间的余弦相似度;然后,将这个余弦相似度得分与句子相似度计算模块得到的句子相似度得分进行加权计算以获得代码片段和自然语言序列的最终相似度得分,挑选出与自然语言查询最为相似的特征向量,并将相应的代码片段作为搜索结果返回给用户;

12、所述聚类模块利用聚类算法在高维空间中评估代码片段之间的相似性,并基于这些相似性把相近的代码片段归集成簇;在用户发起搜索请求时,首先确定用户的自然语言描述与哪个向量簇的相似度最高;然后,通过自注意力嵌入模块以及相似度计算模块将特定的向量簇进行相似度分析并识别出最匹配的代码片段,最后把最匹配的代码片段作为结果反馈给用户。

13、另一方面,本专利技术还提供一种基于预训练模型的代码搜索方法,包括以下步骤:

14、步骤1:采用数据采集模块采集不同编程语言对应的原始代码片段集合以及原始代码片段所对应的自然语言描述;

15、步骤2:通过自然语言预处理模块提取每段代码的自然语言描述序列n;

16、使用分词工具jieba对每一段代码片段对应的自然语言描述进行分词处理,并过滤掉分词结果中包含的特殊符号,得到每一代码片段的自然语言描述序列n;其中,n={n1,n2,...,nn}表示自然语言描述序列中所有单词的集合,自然语言描述序列的长度为n;

17、步骤3:通过代码片段预处理模块提取每一段代码片段的token序列t;

18、首先根据不同编程语言的编码规范进行分词,得到代码片段序列p,其中p={p1,p2,...,pp}表示代码片段中所有单词的集合,p本文档来自技高网...

【技术保护点】

1.一种基于预训练模型的代码搜索系统,其特征在于:包括数据采集模块、代码片段预处理模块、Token特征提取模块、自然语言预处理模块、自然语言特征提取模块、自注意力嵌入模块、句子相似度计算模块、相似度计算模块;

2.根据权利要求1所述的一种基于预训练模型的代码搜索系统,其特征在于:还包括聚类模块;所述聚类模块利用聚类算法在高维空间中评估代码片段之间的相似性,并基于这些相似性把相近的代码片段归集成簇;在用户发起搜索请求时,首先确定用户的自然语言描述与哪个向量簇的相似度最高;然后,通过自注意力嵌入模块以及相似度计算模块将特定的向量簇进行相似度分析并识别出最匹配的代码片段,最后把最匹配的代码片段作为结果反馈给用户。

3.一种基于预训练模型的代码搜索方法,基于权利要求1所述系统实现,其特征在于:包括以下步骤:

4.根据权利要求3所述的一种基于预训练模型的代码搜索方法,其特征在于:所述步骤2使用分词工具对每一段代码片段对应的自然语言描述进行分词处理,并过滤掉分词结果中包含的特殊符号,得到每一代码片段的自然语言描述序列N;其中,N={n1,n2,...,nN}表示自然语言描述序列中所有单词的集合,自然语言描述序列的长度为N。

5.根据权利要求4所述的一种基于预训练模型的代码搜索方法,其特征在于:所述步骤3的具体方法为:

6.根据权利要求5所述的一种基于预训练模型的代码搜索方法,其特征在于:所述步骤4通过词汇表将Token序列T中的编程语言单词映射到高维向量,得到Token序列的特征向量VT;所述步骤5通过词汇表将自然语言描述序列N中的自然语言单词映射到高维向量,得到自然语言描述序列的特征向量VN。

7.根据权利要求6所述的一种基于预训练模型的代码搜索方法,其特征在于:所述步骤7通过交叉熵损失函数和对比学习损失函数对CodeBERT模型进行损失评估,当相似度损失趋于稳定后,产生最终Token序列的特征向量Tv,该特征向量即为代码片段的特征向量。

8.根据权利要求6所述的一种基于预训练模型的代码搜索方法,其特征在于:所述步骤8采用DS-cluster聚类算法将各代码片段的特征向量聚类成M个向量簇,具体包括:

9.根据权利要求6所述的一种基于预训练模型的代码搜索方法,其特征在于:所述步骤9的具体方法为:

10.根据权利要求9所述的一种基于预训练模型的代码搜索方法,其特征在于:所述步骤9.4通过SRank句子相似性算法分别计算出每对查询语句序列Qi与代码片段序列Pi的句子相似性得分,具体包括:

...

【技术特征摘要】

1.一种基于预训练模型的代码搜索系统,其特征在于:包括数据采集模块、代码片段预处理模块、token特征提取模块、自然语言预处理模块、自然语言特征提取模块、自注意力嵌入模块、句子相似度计算模块、相似度计算模块;

2.根据权利要求1所述的一种基于预训练模型的代码搜索系统,其特征在于:还包括聚类模块;所述聚类模块利用聚类算法在高维空间中评估代码片段之间的相似性,并基于这些相似性把相近的代码片段归集成簇;在用户发起搜索请求时,首先确定用户的自然语言描述与哪个向量簇的相似度最高;然后,通过自注意力嵌入模块以及相似度计算模块将特定的向量簇进行相似度分析并识别出最匹配的代码片段,最后把最匹配的代码片段作为结果反馈给用户。

3.一种基于预训练模型的代码搜索方法,基于权利要求1所述系统实现,其特征在于:包括以下步骤:

4.根据权利要求3所述的一种基于预训练模型的代码搜索方法,其特征在于:所述步骤2使用分词工具对每一段代码片段对应的自然语言描述进行分词处理,并过滤掉分词结果中包含的特殊符号,得到每一代码片段的自然语言描述序列n;其中,n={n1,n2,...,nn}表示自然语言描述序列中所有单词的集合,自然语言描述序列的长度为n。

5.根据权利要求4所述的一种基于...

【专利技术属性】
技术研发人员:印莹杨四海赵宇海
申请(专利权)人:东北大学
类型:发明
国别省市:

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

1