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

一种基于重排序的代码搜索去偏差方法及系统技术方案

技术编号:40709568 阅读:9 留言:0更新日期:2024-03-22 11:10
本发明专利技术提供了代码搜索技术领域的一种基于重排序的代码搜索去偏差方法及系统,方法包括:步骤S1、基于历史搜索语句、历史搜索结果组成的搜索数据构建数据集;步骤S2、计算各搜索数据的MRR分数,基于偏差项对搜索数据分组;步骤S3、通过历史搜索结果计算各历史搜索语句的重排序分数项;步骤S4、计算当前搜索语句在候选代码库搜索候选代码的MRR分数;步骤S5、计算与当前搜索语句最相似的n条搜索数据;步骤S6、基于MRR分数对搜索数据进行聚类得到低MRR分数代码区间;步骤S7、通过低MRR分数代码区间中代码的先验偏差项特征,为候选代码库具有相同偏差项的候选代码的MRR分数加上重排序分数项以进行去偏。本发明专利技术的优点在于:极大的提升了代码搜索的准确性。

【技术实现步骤摘要】

本专利技术涉及代码搜索,特别指一种基于重排序的代码搜索去偏差方法及系统


技术介绍

1、目前,大多数的代码搜索技术为基于信息检索搜索技术,例如linstead等人提出了sourcerer,一种基于信息检索的代码搜索工具,可以用结构化信息对程序的文本内容进行搜索,sourcerer支持按程序实现方式以及按程序结构进行搜索。除此以外,研究者还提供了多种代码搜索方法,例如mcmillan等人提出了portfolio,它通过关键字匹配和pagerank返回一系列结果,研究者从1555个开源java项目,对应于25.4万个类等进行实验,最终确定了最优的代码搜索方法。

2、随着深度学习的发展,代码搜索结合神经网络,辅以自然语言处理技术,已成为趋势。在张开乐撰写的综述中,将代码搜索方法分为基于序列嵌入、基于图嵌入、基于机器学习的嵌入三大类。序列嵌入将查询和代码视为输入模型的序列数据,图嵌入则是将代码通过抽象语法树转换成具有图结构的数据,再作为模型的输入。张理想提出了一种基于多维标注信息的代码搜索技术,其从改进数据集标注方法以及改进搜索方法两个角度来提高代码搜索准确度。针对源代码,首先对其进行去噪,并通过特征融合得到多维度信息,再者利用同义词对数据进行重构,以增强模型搜索语句的理解能力。gu x等人提出了一种基于循环神经网络的代码搜索模型,核心思想是利用余弦相似度来计算搜索自然语言查询语句和程序代码段的语义相似度,由两个子网络组成,分别是代码表征子网络和描述表征子网络,前者的输入为代码的函数调用api,函数体字段tokens以及函数名,后者则是自然语言描述,二者的输出都是一个高维嵌入向量。feng z等人基于预训练模型bert提出codebert模型,传统的bert是面向自然语言的预训练模型,而codebert则是一个使用多模态数据进行训练、面向代码语言的新型预训练模型,codebert使用自然语言和6种编程语言进行预训练,并且通过一个混合目标函数进行优化,结合了mlm任务(masked language modeling)和rtd任务(replaced token detection);codebert能与多种代码下游子任务,如代码摘要生成等相结合,并取得较好成绩。

3、虽然代码搜索技术得到大力发展,但在实际进行代码检索过程中,还是难免出现偏差,导致搜索的结果不尽如人意,不利于开发人员对历史代码进行借鉴。

4、因此,如何提供一种基于重排序的代码搜索去偏差方法及系统,实现提升代码搜索的准确性,成为一个亟待解决的技术问题。


技术实现思路

1、本专利技术要解决的技术问题,在于提供一种基于重排序的代码搜索去偏差方法及系统,实现提升代码搜索的准确性。

2、第一方面,本专利技术提供了一种基于重排序的代码搜索去偏差方法,包括如下步骤:

3、步骤s1、定义代码搜索的偏差项,获取历史搜索语句以及所述历史搜索语句在代码搜索模型上的历史搜索结果,基于各所述历史搜索语句以及历史搜索结果组成的搜索数据构建数据集,将所述数据集结构化存储至数据库中;

4、步骤s2、从所述数据库中读取各所述搜索数据,计算各所述搜索数据的mrr分数,基于所述偏差项对数据集中的搜索数据进行分组;

5、步骤s3、通过所述历史搜索结果计算各历史搜索语句的重排序分数项;

6、步骤s4、通过搜索界面获取当前搜索语句,实时计算所述当前搜索语句在候选代码库搜索候选代码的mrr分数;所述候选代码库为一系列代码片段的结合,用于检索并返回对查询语句的代码;

7、步骤s5、实时计算所述当前搜索语句与数据集中,最相似的n条所述搜索数据,n为正整数;

8、步骤s6、基于mrr分数对最相似的各所述搜索数据进行聚类,得到高mrr代码区间以及低mrr分数代码区间;

9、步骤s7、基于选择的偏差项,通过所述低mrr分数代码区间中代码的先验偏差项特征,为所述候选代码库上具有相同偏差项的候选代码的mrr分数加上重排序分数项以进行去偏,不断重复直至所有的所述偏差项都完成去偏,基于去偏的各所述候选代码生成代码搜索结果,通过所述搜索界面显示代码搜索结果,基于所述代码搜索结果以及当前搜索语句生成搜索日志,对所述搜索日志进行备份;

10、所述先验偏差项特征为对候选代码库中每条代码计算各个偏差项得到的数值。

11、进一步的,所述步骤s1中,所述偏差项包括长度偏差、抽象语法树节点数据量偏差、ast深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差;

12、所述长度偏差用于表征代码搜索模型偏好长度较长的代码片段或者搜索语句;所述抽象语法树节点数据量偏差用于表征代码搜索模型偏好候选代码中ast节点更多的代码;所述ast深度偏差用于表征代码搜索模型偏好候选代码中ast更深的代码;所述保留字偏差用于表征代码搜索模型偏好候选代码中包含更多当前编程语言保留字的代码;所述词汇重要性偏差用于表征代码搜索模型偏好候选代码中包含更多重要性词汇的代码;所述重叠单词偏差用于表征代码搜索模型偏好候选代码中与当前搜索语句重叠单词更多的代码。

13、进一步的,所述步骤s2中,所述基于所述偏差项对数据集中的搜索数据进行分组具体为:

14、与候选代码长度偏差、查询语句长度偏差相关的搜索数据按长度为4的区间进行分组;与词汇重要性偏差相关的搜索数据按长度为0.15的区间进行分组,即将词汇重要性分数升序排序后,将词汇重要性分数按0.15为区间进行划分;与抽象语法树节点数据量偏差、ast深度偏差、保留字偏差以及重叠单词偏差相关的搜索数据按长度为1的区间进行分组。

15、进一步的,所述步骤s3中,所述重排序分数项的计算公式为:

16、;

17、其中,r表示重排序分数项;表示历史搜索语句c的原始分数;所述原始分数为预设代码搜索模型对于给定查询语句,每条候选代码的置信度分数;表示代码搜索模型在训练搜索数据上的mrr分数;表示代码搜索模型在数据集上整体的mrr分数;表示在所有的搜索数据中,代码搜索模型显示低于整体的mrr分数的搜索数据的百分比。

18、进一步的,所述步骤s6具体为:

19、基于mrr分数对最相似的各所述搜索数据进行k-means聚类,得到高mrr代码区间以及低mrr分数代码区间;

20、所述步骤s7中,所述对所述搜索日志进行备份具体为:

21、对所述搜索日志进行哈希计算得到哈希值,随机生成一对称密钥,利用所述对称密钥对搜索日志进行加密,并备份至ipfs系统,将所述哈希值以及ipfs系统返回的索引地址绑定后上传至区块链。

22、第二方面,本专利技术提供了一种基于重排序的代码搜索去偏差系统,包括如下模块:

23、数据集构建模块,用于定义代码搜索的偏差项,获取历史搜索语句以及所述历史搜索语句在代码搜索模型上的历史搜索结果,基于各所述历史搜索语句以及历史搜索结果组成的搜索数据构建数据本文档来自技高网...

【技术保护点】

1.一种基于重排序的代码搜索去偏差方法,其特征在于:包括如下步骤:

2.如权利要求1所述的一种基于重排序的代码搜索去偏差方法,其特征在于:所述步骤S1中,所述偏差项包括长度偏差、抽象语法树节点数据量偏差、AST深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差;

3.如权利要求1所述的一种基于重排序的代码搜索去偏差方法,其特征在于:所述步骤S2中,所述基于所述偏差项对数据集中的搜索数据进行分组具体为:

4.如权利要求1所述的一种基于重排序的代码搜索去偏差方法,其特征在于:所述步骤S3中,所述重排序分数项的计算公式为:

5.如权利要求1所述的一种基于重排序的代码搜索去偏差方法,其特征在于:所述步骤S6具体为:

6.一种基于重排序的代码搜索去偏差系统,其特征在于:包括如下模块:

7.如权利要求6所述的一种基于重排序的代码搜索去偏差系统,其特征在于:所述数据集构建模块中,所述偏差项包括长度偏差、抽象语法树节点数据量偏差、AST深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差;

8.如权利要求6所述的一种基于重排序的代码搜索去偏差系统,其特征在于:所述搜索数据分组模块中,所述基于所述偏差项对数据集中的搜索数据进行分组具体为:

9.如权利要求6所述的一种基于重排序的代码搜索去偏差系统,其特征在于:所述重排序分数项计算模块中,所述重排序分数项的计算公式为:

10.如权利要求6所述的一种基于重排序的代码搜索去偏差系统,其特征在于:所述聚类模块具体用于:

...

【技术特征摘要】

1.一种基于重排序的代码搜索去偏差方法,其特征在于:包括如下步骤:

2.如权利要求1所述的一种基于重排序的代码搜索去偏差方法,其特征在于:所述步骤s1中,所述偏差项包括长度偏差、抽象语法树节点数据量偏差、ast深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差;

3.如权利要求1所述的一种基于重排序的代码搜索去偏差方法,其特征在于:所述步骤s2中,所述基于所述偏差项对数据集中的搜索数据进行分组具体为:

4.如权利要求1所述的一种基于重排序的代码搜索去偏差方法,其特征在于:所述步骤s3中,所述重排序分数项的计算公式为:

5.如权利要求1所述的一种基于重排序的代码搜索去偏差方法,其特征在于:所述步骤s6具体为:

6.一种...

【专利技术属性】
技术研发人员:纪荣嵘李辉张晟
申请(专利权)人:厦门大学
类型:发明
国别省市:

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

1