CN117725087B - 一种基于重排序的代码搜索去偏差方法及系统 - Google Patents
一种基于重排序的代码搜索去偏差方法及系统 Download PDFInfo
- Publication number
- CN117725087B CN117725087B CN202410176550.2A CN202410176550A CN117725087B CN 117725087 B CN117725087 B CN 117725087B CN 202410176550 A CN202410176550 A CN 202410176550A CN 117725087 B CN117725087 B CN 117725087B
- Authority
- CN
- China
- Prior art keywords
- search
- code
- deviation
- score
- mrr
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 27
- 230000028161 membrane depolarization Effects 0.000 claims abstract description 5
- 238000004364 calculation method Methods 0.000 claims description 25
- 239000012634 fragment Substances 0.000 claims description 12
- 230000001174 ascending effect Effects 0.000 claims description 6
- 238000003064 k means clustering Methods 0.000 claims description 6
- 238000012549 training Methods 0.000 claims description 6
- 238000010276 construction Methods 0.000 claims description 5
- 230000002999 depolarising effect Effects 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 description 6
- 239000013598 vector Substances 0.000 description 5
- 238000012512 characterization method Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000002372 labelling Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000010845 search algorithm Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000013549 information retrieval technique Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了代码搜索技术领域的一种基于重排序的代码搜索去偏差方法及系统,方法包括:步骤S1、基于历史搜索语句、历史搜索结果组成的搜索数据构建数据集;步骤S2、计算各搜索数据的MRR分数,基于偏差项对搜索数据分组;步骤S3、通过历史搜索结果计算各历史搜索语句的重排序分数项;步骤S4、计算当前搜索语句在候选代码库搜索候选代码的MRR分数;步骤S5、计算与当前搜索语句最相似的n条搜索数据;步骤S6、基于MRR分数对搜索数据进行聚类得到低MRR分数代码区间;步骤S7、通过低MRR分数代码区间中代码的先验偏差项特征,为候选代码库具有相同偏差项的候选代码的MRR分数加上重排序分数项以进行去偏。本发明的优点在于:极大的提升了代码搜索的准确性。
Description
技术领域
本发明涉及代码搜索技术领域,特别指一种基于重排序的代码搜索去偏差方法及系统。
背景技术
目前,大多数的代码搜索技术为基于信息检索搜索技术,例如Linstead等人提出了Sourcerer,一种基于信息检索的代码搜索工具,可以用结构化信息对程序的文本内容进行搜索,Sourcerer支持按程序实现方式以及按程序结构进行搜索。除此以外,研究者还提供了多种代码搜索方法,例如McMillan等人提出了Portfolio,它通过关键字匹配和PageRank返回一系列结果,研究者从1555个开源Java项目,对应于25.4万个类等进行实验,最终确定了最优的代码搜索方法。
随着深度学习的发展,代码搜索结合神经网络,辅以自然语言处理技术,已成为趋势。在张开乐撰写的综述中,将代码搜索方法分为基于序列嵌入、基于图嵌入、基于机器学习的嵌入三大类。序列嵌入将查询和代码视为输入模型的序列数据,图嵌入则是将代码通过抽象语法树转换成具有图结构的数据,再作为模型的输入。张理想提出了一种基于多维标注信息的代码搜索技术,其从改进数据集标注方法以及改进搜索方法两个角度来提高代码搜索准确度。针对源代码,首先对其进行去噪,并通过特征融合得到多维度信息,再者利用同义词对数据进行重构,以增强模型搜索语句的理解能力。Gu X等人提出了一种基于循环神经网络的代码搜索模型,核心思想是利用余弦相似度来计算搜索自然语言查询语句和程序代码段的语义相似度,由两个子网络组成,分别是代码表征子网络和描述表征子网络,前者的输入为代码的函数调用API,函数体字段Tokens以及函数名,后者则是自然语言描述,二者的输出都是一个高维嵌入向量。Feng Z等人基于预训练模型BERT提出CodeBERT模型,传统的BERT是面向自然语言的预训练模型,而CodeBERT则是一个使用多模态数据进行训练、面向代码语言的新型预训练模型,CodeBERT使用自然语言和6种编程语言进行预训练,并且通过一个混合目标函数进行优化,结合了MLM任务(Masked Language Modeling)和RTD任务(replaced token detection);CodeBERT能与多种代码下游子任务,如代码摘要生成等相结合,并取得较好成绩。
虽然代码搜索技术得到大力发展,但在实际进行代码检索过程中,还是难免出现偏差,导致搜索的结果不尽如人意,不利于开发人员对历史代码进行借鉴。
因此,如何提供一种基于重排序的代码搜索去偏差方法及系统,实现提升代码搜索的准确性,成为一个亟待解决的技术问题。
发明内容
本发明要解决的技术问题,在于提供一种基于重排序的代码搜索去偏差方法及系统,实现提升代码搜索的准确性。
第一方面,本发明提供了一种基于重排序的代码搜索去偏差方法,包括如下步骤:
步骤S1、定义代码搜索的偏差项,获取历史搜索语句以及所述历史搜索语句在代码搜索模型上的历史搜索结果,基于各所述历史搜索语句以及历史搜索结果组成的搜索数据构建数据集,将所述数据集结构化存储至数据库中;
步骤S2、从所述数据库中读取各所述搜索数据,计算各所述搜索数据的MRR分数,基于所述偏差项对数据集中的搜索数据进行分组;
步骤S3、通过所述历史搜索结果计算各历史搜索语句的重排序分数项;
步骤S4、通过搜索界面获取当前搜索语句,实时计算所述当前搜索语句在候选代码库搜索候选代码的MRR分数;所述候选代码库为一系列代码片段的结合,用于检索并返回对查询语句的代码;
步骤S5、实时计算所述当前搜索语句与数据集中,最相似的n条所述搜索数据,n为正整数;
步骤S6、基于MRR分数对最相似的各所述搜索数据进行聚类,得到高MRR代码区间以及低MRR分数代码区间;
步骤S7、基于选择的偏差项,通过所述低MRR分数代码区间中代码的先验偏差项特征,为所述候选代码库上具有相同偏差项的候选代码的MRR分数加上重排序分数项以进行去偏,不断重复直至所有的所述偏差项都完成去偏,基于去偏的各所述候选代码生成代码搜索结果,通过所述搜索界面显示代码搜索结果,基于所述代码搜索结果以及当前搜索语句生成搜索日志,对所述搜索日志进行备份;
所述先验偏差项特征为对候选代码库中每条代码计算各个偏差项得到的数值。
进一步的,所述步骤S1中,所述偏差项包括长度偏差、抽象语法树节点数据量偏差、AST深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差;
所述长度偏差用于表征代码搜索模型偏好长度较长的代码片段或者搜索语句;所述抽象语法树节点数据量偏差用于表征代码搜索模型偏好候选代码中AST节点更多的代码;所述AST深度偏差用于表征代码搜索模型偏好候选代码中AST更深的代码;所述保留字偏差用于表征代码搜索模型偏好候选代码中包含更多当前编程语言保留字的代码;所述词汇重要性偏差用于表征代码搜索模型偏好候选代码中包含更多重要性词汇的代码;所述重叠单词偏差用于表征代码搜索模型偏好候选代码中与当前搜索语句重叠单词更多的代码。
进一步的,所述步骤S2中,所述基于所述偏差项对数据集中的搜索数据进行分组具体为:
与候选代码长度偏差、查询语句长度偏差相关的搜索数据按长度为4的区间进行分组;与词汇重要性偏差相关的搜索数据按长度为0.15的区间进行分组,即将词汇重要性分数升序排序后,将词汇重要性分数按0.15为区间进行划分;与抽象语法树节点数据量偏差、AST深度偏差、保留字偏差以及重叠单词偏差相关的搜索数据按长度为1的区间进行分组。
进一步的,所述步骤S3中,所述重排序分数项的计算公式为:
;
其中,R表示重排序分数项;表示历史搜索语句c的原始分数;所述原始分数为预设代码搜索模型对于给定查询语句,每条候选代码的置信度分数;/>表示代码搜索模型在训练搜索数据上的MRR分数;/>表示代码搜索模型在数据集上整体的MRR分数;表示在所有的搜索数据中,代码搜索模型显示低于整体的MRR分数的搜索数据的百分比。
进一步的,所述步骤S6具体为:
基于MRR分数对最相似的各所述搜索数据进行k-means聚类,得到高MRR代码区间以及低MRR分数代码区间;
所述步骤S7中,所述对所述搜索日志进行备份具体为:
对所述搜索日志进行哈希计算得到哈希值,随机生成一对称密钥,利用所述对称密钥对搜索日志进行加密,并备份至IPFS系统,将所述哈希值以及IPFS系统返回的索引地址绑定后上传至区块链。
第二方面,本发明提供了一种基于重排序的代码搜索去偏差系统,包括如下模块:
数据集构建模块,用于定义代码搜索的偏差项,获取历史搜索语句以及所述历史搜索语句在代码搜索模型上的历史搜索结果,基于各所述历史搜索语句以及历史搜索结果组成的搜索数据构建数据集,将所述数据集结构化存储至数据库中;
搜索数据分组模块,用于从所述数据库中读取各所述搜索数据,计算各所述搜索数据的MRR分数,基于所述偏差项对数据集中的搜索数据进行分组;
重排序分数项计算模块,用于通过所述历史搜索结果计算各历史搜索语句的重排序分数项;
候选代码分数计算模块,用于通过搜索界面获取当前搜索语句,实时计算所述当前搜索语句在候选代码库搜索候选代码的MRR分数;所述候选代码库为一系列代码片段的结合,用于检索并返回对查询语句的代码;
相似搜索数据计算模块,用于实时计算所述当前搜索语句与数据集中,最相似的n条所述搜索数据,n为正整数;
聚类模块,用于基于MRR分数对最相似的各所述搜索数据进行聚类,得到高MRR代码区间以及低MRR分数代码区间;
去偏模块,用于基于选择的偏差项,通过所述低MRR分数代码区间中代码的先验偏差项特征,为所述候选代码库上具有相同偏差项的候选代码的MRR分数加上重排序分数项以进行去偏,不断重复直至所有的所述偏差项都完成去偏,基于去偏的各所述候选代码生成代码搜索结果,通过所述搜索界面显示代码搜索结果,基于所述代码搜索结果以及当前搜索语句生成搜索日志,对所述搜索日志进行备份;
所述先验偏差项特征为对候选代码库中每条代码计算各个偏差项得到的数值。
进一步的,所述数据集构建模块中,所述偏差项包括长度偏差、抽象语法树节点数据量偏差、AST深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差;
所述长度偏差用于表征代码搜索模型偏好长度较长的代码片段或者搜索语句;所述抽象语法树节点数据量偏差用于表征代码搜索模型偏好候选代码中AST节点更多的代码;所述AST深度偏差用于表征代码搜索模型偏好候选代码中AST更深的代码;所述保留字偏差用于表征代码搜索模型偏好候选代码中包含更多当前编程语言保留字的代码;所述词汇重要性偏差用于表征代码搜索模型偏好候选代码中包含更多重要性词汇的代码;所述重叠单词偏差用于表征代码搜索模型偏好候选代码中与当前搜索语句重叠单词更多的代码。
进一步的,所述搜索数据分组模块中,所述基于所述偏差项对数据集中的搜索数据进行分组具体为:
与候选代码长度偏差、查询语句长度偏差相关的搜索数据按长度为4的区间进行分组;与词汇重要性偏差相关的搜索数据按长度为0.15的区间进行分组,即将词汇重要性分数升序排序后,将词汇重要性分数按0.15为区间进行划分;与抽象语法树节点数据量偏差、AST深度偏差、保留字偏差以及重叠单词偏差相关的搜索数据按长度为1的区间进行分组。
进一步的,所述重排序分数项计算模块中,所述重排序分数项的计算公式为:
;
其中,R表示重排序分数项;表示历史搜索语句c的原始分数;所述原始分数为预设代码搜索模型对于给定查询语句,每条候选代码的置信度分数;/>表示代码搜索模型在训练搜索数据上的MRR分数;/>表示代码搜索模型在数据集上整体的MRR分数;表示在所有的搜索数据中,代码搜索模型显示低于整体的MRR分数的搜索数据的百分比。
进一步的,所述聚类模块具体用于:
基于MRR分数对最相似的各所述搜索数据进行k-means聚类,得到高MRR代码区间以及低MRR分数代码区间;
所述去偏模块中,所述对所述搜索日志进行备份具体为:
对所述搜索日志进行哈希计算得到哈希值,随机生成一对称密钥,利用所述对称密钥对搜索日志进行加密,并备份至IPFS系统,将所述哈希值以及IPFS系统返回的索引地址绑定后上传至区块链。
本发明的优点在于:
通过定义代码搜索的偏差项,获取历史搜索语句以及历史搜索结果,基于各历史搜索语句以及历史搜索结果组成的搜索数据构建数据集,接着计算各搜索数据的MRR分数,基于偏差项对数据集中的搜索数据进行分组,通过历史搜索结果计算各历史搜索语句的重排序分数项;接着计算当前搜索语句在候选代码库搜索候选代码的MRR分数,计算当前搜索语句与数据集中,最相似的n条所述搜索数据,基于MRR分数对最相似的各搜索数据进行聚类,得到高MRR代码区间以及低MRR分数代码区间;最后基于选择的偏差项,通过低MRR分数代码区间中代码的先验偏差项特征,为候选代码库上具有相同偏差项的候选代码的MRR分数加上重排序分数项以进行去偏,不断重复直至所有的偏差项都完成去偏;即通过检索当前搜索语句与数据集中相似的搜索数据,将这些相似的搜索数据作为先验知识,再基于重排序技术对包括长度偏差、抽象语法树节点数据量偏差、AST深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差的偏差项依次进行去偏差操作,进而极大的提升了代码搜索的准确性。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1是本发明一种基于重排序的代码搜索去偏差方法的流程图。
图2是本发明一种基于重排序的代码搜索去偏差系统的结构示意图。
图3是本发明的流程示意图。
图4是本发明去偏差前后代码搜索模型的性能对比示意图。
具体实施方式
本申请实施例中的技术方案,总体思路如下:通过检索当前搜索语句与数据集中相似的搜索数据,将这些相似的搜索数据作为先验知识,再基于重排序技术对包括长度偏差、抽象语法树节点数据量偏差、AST深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差的偏差项依次进行去偏差操作,以提升代码搜索的准确性,保障搜索结果的多样性,且重排序技术可较为便捷地运用到现有的代码搜索模型上,并提升代码搜索模型性能。
请参照图1至图4所示,本发明一种基于重排序的代码搜索去偏差方法的较佳实施例,包括如下步骤:
步骤S1、定义代码搜索的偏差项,获取历史搜索语句以及所述历史搜索语句在代码搜索模型上的历史搜索结果,基于各所述历史搜索语句以及历史搜索结果组成的搜索数据构建数据集,将所述数据集结构化存储至数据库中;具体实施时,可直接使用CoSQA数据集,CoSQA数据集包含20,604个搜索代码配对,每个搜索语句都是真实搜索语句,由人工标注者进行编写;
步骤S2、从所述数据库中读取各所述搜索数据,计算各所述搜索数据的MRR分数,基于所述偏差项对数据集中的搜索数据进行分组;MRR(Mean reciprocal rank)是一个国际上通用的对搜索算法进行评价的机制,即第一个结果匹配,分数为1,第二个匹配分数为0.5,第n个匹配分数为1/n,如果没有匹配的句子分数为0,最终的分数为所有得分之和。
步骤S3、通过所述历史搜索结果计算各历史搜索语句的重排序分数项;
步骤S4、通过搜索界面获取当前搜索语句,实时计算所述当前搜索语句在候选代码库搜索候选代码的MRR分数;所述候选代码库为一系列代码片段的结合,用于检索并返回对查询语句的代码;
步骤S5、实时计算所述当前搜索语句与数据集中,最相似的n条所述搜索数据(历史搜索语句-历史搜索结果),n为正整数;
步骤S6、基于MRR分数对最相似的各所述搜索数据进行聚类,得到高MRR代码区间以及低MRR分数代码区间;
步骤S7、基于选择的偏差项,通过所述低MRR分数代码区间中代码的先验偏差项特征,为所述候选代码库上具有相同偏差项的候选代码的MRR分数加上重排序分数项以进行去偏差,不断重复直至所有的所述偏差项都完成去偏差,基于去偏的各所述候选代码生成代码搜索结果,通过所述搜索界面显示代码搜索结果,基于所述代码搜索结果以及当前搜索语句生成搜索日志,对所述搜索日志进行备份;
所述先验偏差项特征为对候选代码库中每条代码计算各个偏差项得到的数值。具体实施时,可基于串行或者并行去偏差。
本发明首先定义了代码搜索模型中的六种偏差项,接着运用“偏差项-MRR”曲线示意图对偏差项进行直观展示,接着将数据集作为先验知识,对于当前搜索语句,首先计算得到其在数据集中最相似的若干条搜索数据,对于这些搜索数据,通过k-means算法对MRR分数进行聚类,对于聚类后处于低MRR分数代码区间的代码,计算其对应某个偏差项的数值,并对拥有类似数值的候选代码进行重排序。
所述步骤S1中,所述偏差项包括长度偏差、抽象语法树(Abstract Syntax Tree,AST)节点数据量偏差、AST深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差;
所述长度偏差用于表征代码搜索模型偏好长度较长的代码片段或者搜索语句;所述抽象语法树节点数据量偏差用于表征代码搜索模型偏好候选代码中AST节点更多的代码;所述AST深度偏差用于表征代码搜索模型偏好候选代码中AST更深的代码;所述保留字偏差用于表征代码搜索模型偏好候选代码中包含更多当前编程语言保留字的代码;所述词汇重要性偏差用于表征代码搜索模型偏好候选代码中包含更多重要性词汇的代码;所述重叠单词偏差用于表征代码搜索模型偏好候选代码中与当前搜索语句重叠单词更多的代码。
所述偏差项中的偏差,即指代码搜索模型面对具有某种特征的搜索语句或者候选代码时,表现出更好的性能。
所述步骤S2中,所述基于所述偏差项对数据集中的搜索数据进行分组具体为:
与候选代码长度偏差、查询语句长度偏差相关的搜索数据按长度为4的区间进行分组;与词汇重要性偏差相关的搜索数据按长度为0.15的区间进行分组,即将词汇重要性分数升序排序后,将词汇重要性分数按0.15为区间进行划分;与抽象语法树节点数据量偏差、AST深度偏差、保留字偏差以及重叠单词偏差相关的搜索数据按长度为1的区间进行分组。以搜索数据长度为例,分组方法为将偏差项数值排序后,以长度为4进行递增,将属于某个长度区间的数据归为一组。
即根据所述偏差项,将数据集中的历史搜索语句或其对应的历史搜索结果(代码片段)按等长度区间进行分组,然后调查代码搜索模型是否对不同的区间表现出不同的行为。在“偏差项-MRR”曲线示意图中,x轴表示区间;左y轴表示每个区间中的查询数量或真实代码片段数量;右y轴显示每个区间数据的平均MRR分数。随着与偏差项相关的x轴数值的提升,y轴MRR分数亦呈现出上升趋势,由此可以判断代码搜索模型在某种程度上受到所述偏差项的影响。
所述步骤S3中,所述重排序分数项的计算公式为:
;
其中,R表示重排序分数项;表示历史搜索语句c的原始分数;所述原始分数为预设代码搜索模型对于给定查询语句,每条候选代码的置信度分数;/>表示代码搜索模型在训练搜索数据上的MRR分数;/>表示代码搜索模型在数据集上整体的MRR分数;表示在所有的搜索数据中,代码搜索模型显示低于整体的MRR分数的搜索数据的百分比。
重排序时,首先使用预训练的CodeBERT模型将数据集中的所有历史搜索语句转换为表征向量,对于当前搜索语句,在通过CodeBERT模型转换后,基于向量之间的余弦相似度,检索数据集中前M个与当前搜索语句最为相似的历史查询语句,这些检索到的历史查询语句以及对应的历史搜索结果将为当前搜索语句是否可能面临某种偏差提供一些提示。
然后确定数据集中代码搜索模型表现出非常高的性能的区间(高MRR代码区间),在这些区间内,历史搜索结果很可能没有严重的偏差,否则根据其定义,这些区间的MRR分数应该很低,对于这样的区间不需要重新排名以消除偏差。本发明按MRR分数对数据集中的搜索数据进行排序,并检索最相似的MRR分数的搜索数据,采用k-means算法将检索到的搜索数据聚集成S个集群,每个集群中的最大MRR分数和最小MRR分数被用作集群的边界。
所述步骤S6具体为:
基于MRR分数对最相似的各所述搜索数据进行k-means聚类,得到高MRR代码区间以及低MRR分数代码区间;
所述步骤S7中,所述对所述搜索日志进行备份具体为:
对所述搜索日志进行哈希计算得到哈希值,随机生成一对称密钥,利用所述对称密钥对搜索日志进行加密,并备份至IPFS系统,将所述哈希值以及IPFS系统返回的索引地址绑定后上传至区块链。
通过对搜索日志进行哈希计算得到哈希值,随机生成一对称密钥,利用对称密钥对搜索日志进行加密并备份至IPFS系统,将哈希值以及IPFS系统返回的索引地址绑定后上传至区块链;一方面可以避免哈希值被篡改,另一方面可通过哈希值校验搜索日志是否完整、是否被篡改,前后采取三重安全措施(对称密钥、哈希值、区块链),保障搜索日志备份的安全性。
本发明一种基于重排序的代码搜索去偏差系统的较佳实施例,包括如下模块:
数据集构建模块,用于定义代码搜索的偏差项,获取历史搜索语句以及所述历史搜索语句在代码搜索模型上的历史搜索结果,基于各所述历史搜索语句以及历史搜索结果组成的搜索数据构建数据集,将所述数据集结构化存储至数据库中;具体实施时,可直接使用CoSQA数据集,CoSQA数据集包含20,604个搜索代码配对,每个搜索语句都是真实搜索语句,由人工标注者进行编写;
搜索数据分组模块,用于从所述数据库中读取各所述搜索数据,计算各所述搜索数据的MRR分数,基于所述偏差项对数据集中的搜索数据进行分组;MRR(Mean reciprocalrank)是一个国际上通用的对搜索算法进行评价的机制,即第一个结果匹配,分数为1,第二个匹配分数为0.5,第n个匹配分数为1/n,如果没有匹配的句子分数为0,最终的分数为所有得分之和。
重排序分数项计算模块,用于通过所述历史搜索结果计算各历史搜索语句的重排序分数项;
候选代码分数计算模块,用于通过搜索界面获取当前搜索语句,实时计算所述当前搜索语句在候选代码库搜索候选代码的MRR分数;所述候选代码库为一系列代码片段的结合,用于检索并返回对查询语句的代码;
相似搜索数据计算模块,用于实时计算所述当前搜索语句与数据集中,最相似的n条所述搜索数据(历史搜索语句-历史搜索结果),n为正整数;
聚类模块,用于基于MRR分数对最相似的各所述搜索数据进行聚类,得到高MRR代码区间以及低MRR分数代码区间;
去偏模块,用于基于选择的偏差项,通过所述低MRR分数代码区间中代码的先验偏差项特征,为所述候选代码库上具有相同偏差项的候选代码的MRR分数加上重排序分数项以进行去偏差,不断重复直至所有的所述偏差项都完成去偏差,基于去偏的各所述候选代码生成代码搜索结果,通过所述搜索界面显示代码搜索结果,基于所述代码搜索结果以及当前搜索语句生成搜索日志,对所述搜索日志进行备份;
所述先验偏差项特征为对候选代码库中每条代码计算各个偏差项得到的数值。具体实施时,可基于串行或者并行去偏差。
本发明首先定义了代码搜索模型中的六种偏差项,接着运用“偏差项-MRR”曲线示意图对偏差项进行直观展示,接着将数据集作为先验知识,对于当前搜索语句,首先计算得到其在数据集中最相似的若干条搜索数据,对于这些搜索数据,通过k-means算法对MRR分数进行聚类,对于聚类后处于低MRR分数代码区间的代码,计算其对应某个偏差项的数值,并对拥有类似数值的候选代码进行重排序。
所述数据集构建模块中,所述偏差项包括长度偏差、抽象语法树(AbstractSyntax Tree,AST)节点数据量偏差、AST深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差;
所述长度偏差用于表征代码搜索模型偏好长度较长的代码片段或者搜索语句;所述抽象语法树节点数据量偏差用于表征代码搜索模型偏好候选代码中AST节点更多的代码;所述AST深度偏差用于表征代码搜索模型偏好候选代码中AST更深的代码;所述保留字偏差用于表征代码搜索模型偏好候选代码中包含更多当前编程语言保留字的代码;所述词汇重要性偏差用于表征代码搜索模型偏好候选代码中包含更多重要性词汇的代码;所述重叠单词偏差用于表征代码搜索模型偏好候选代码中与当前搜索语句重叠单词更多的代码。
所述偏差项中的偏差,即指代码搜索模型面对具有某种特征的搜索语句或者候选代码时,表现出更好的性能。
所述搜索数据分组模块中,所述基于所述偏差项对数据集中的搜索数据进行分组具体为:
与候选代码长度偏差、查询语句长度偏差相关的搜索数据按长度为4的区间进行分组;与词汇重要性偏差相关的搜索数据按长度为0.15的区间进行分组,即将词汇重要性分数升序排序后,将词汇重要性分数按0.15为区间进行划分;与抽象语法树节点数据量偏差、AST深度偏差、保留字偏差以及重叠单词偏差相关的搜索数据按长度为1的区间进行分组。以搜索数据长度为例,分组方法为将偏差项数值排序后,以长度为4进行递增,将属于某个长度区间的数据归为一组。
即根据所述偏差项,将数据集中的历史搜索语句或其对应的历史搜索结果(代码片段)按等长度区间进行分组,然后调查代码搜索模型是否对不同的区间表现出不同的行为。在“偏差项-MRR”曲线示意图中,x轴表示区间;左y轴表示每个区间中的查询数量或真实代码片段数量;右y轴显示每个区间数据的平均MRR分数。随着与偏差项相关的x轴数值的提升,y轴MRR分数亦呈现出上升趋势,由此可以判断代码搜索模型在某种程度上受到所述偏差项的影响。
所述重排序分数项计算模块中,所述重排序分数项的计算公式为:
;
其中,R表示重排序分数项;表示历史搜索语句c的原始分数;所述原始分数为预设代码搜索模型对于给定查询语句,每条候选代码的置信度分数;/>表示代码搜索模型在训练搜索数据上的MRR分数;/>表示代码搜索模型在数据集上整体的MRR分数;表示在所有的搜索数据中,代码搜索模型显示低于整体的MRR分数的搜索数据的百分比。
重排序时,首先使用预训练的CodeBERT模型将数据集中的所有历史搜索语句转换为表征向量,对于当前搜索语句,在通过CodeBERT模型转换后,基于向量之间的余弦相似度,检索数据集中前M个与当前搜索语句最为相似的历史查询语句,这些检索到的历史查询语句以及对应的历史搜索结果将为当前搜索语句是否可能面临某种偏差提供一些提示。
然后确定数据集中代码搜索模型表现出非常高的性能的区间(高MRR代码区间),在这些区间内,历史搜索结果很可能没有严重的偏差,否则根据其定义,这些区间的MRR分数应该很低,对于这样的区间不需要重新排名以消除偏差。本发明按MRR分数对数据集中的搜索数据进行排序,并检索最相似的MRR分数的搜索数据,采用k-means算法将检索到的搜索数据聚集成S个集群,每个集群中的最大MRR分数和最小MRR分数被用作集群的边界。
所述聚类模块具体用于:
基于MRR分数对最相似的各所述搜索数据进行k-means聚类,得到高MRR代码区间以及低MRR分数代码区间;
所述去偏模块中,所述对所述搜索日志进行备份具体为:
对所述搜索日志进行哈希计算得到哈希值,随机生成一对称密钥,利用所述对称密钥对搜索日志进行加密,并备份至IPFS系统,将所述哈希值以及IPFS系统返回的索引地址绑定后上传至区块链。
通过对搜索日志进行哈希计算得到哈希值,随机生成一对称密钥,利用对称密钥对搜索日志进行加密并备份至IPFS系统,将哈希值以及IPFS系统返回的索引地址绑定后上传至区块链;一方面可以避免哈希值被篡改,另一方面可通过哈希值校验搜索日志是否完整、是否被篡改,前后采取三重安全措施(对称密钥、哈希值、区块链),保障搜索日志备份的安全性。
综上所述,本发明的优点在于:
通过定义代码搜索的偏差项,获取历史搜索语句以及历史搜索结果,基于各历史搜索语句以及历史搜索结果组成的搜索数据构建数据集,接着计算各搜索数据的MRR分数,基于偏差项对数据集中的搜索数据进行分组,通过历史搜索结果计算各历史搜索语句的重排序分数项;接着计算当前搜索语句在候选代码库搜索候选代码的MRR分数,计算当前搜索语句与数据集中,最相似的n条所述搜索数据,基于MRR分数对最相似的各搜索数据进行聚类,得到高MRR代码区间以及低MRR分数代码区间;最后基于选择的偏差项,通过低MRR分数代码区间中代码的先验偏差项特征,为候选代码库上具有相同偏差项的候选代码的MRR分数加上重排序分数项以进行去偏,不断重复直至所有的偏差项都完成去偏;即通过检索当前搜索语句与数据集中相似的搜索数据,将这些相似的搜索数据作为先验知识,再基于重排序技术对包括长度偏差、抽象语法树节点数据量偏差、AST深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差的偏差项依次进行去偏差操作,进而极大的提升了代码搜索的准确性。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (6)
1.一种基于重排序的代码搜索去偏差方法,其特征在于:包括如下步骤:
步骤S1、定义代码搜索的偏差项,获取历史搜索语句以及所述历史搜索语句在代码搜索模型上的历史搜索结果,基于各所述历史搜索语句以及历史搜索结果组成的搜索数据构建数据集,将所述数据集结构化存储至数据库中;
所述偏差项包括长度偏差、抽象语法树节点数据量偏差、AST深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差;
所述长度偏差用于表征代码搜索模型偏好长度较长的代码片段或者搜索语句;所述抽象语法树节点数据量偏差用于表征代码搜索模型偏好候选代码中AST节点更多的代码;所述AST深度偏差用于表征代码搜索模型偏好候选代码中AST更深的代码;所述保留字偏差用于表征代码搜索模型偏好候选代码中包含更多当前编程语言保留字的代码;所述词汇重要性偏差用于表征代码搜索模型偏好候选代码中包含更多重要性词汇的代码;所述重叠单词偏差用于表征代码搜索模型偏好候选代码中与当前搜索语句重叠单词更多的代码;
步骤S2、从所述数据库中读取各所述搜索数据,计算各所述搜索数据的MRR分数,基于所述偏差项对数据集中的搜索数据进行分组;
步骤S3、通过所述历史搜索结果计算各历史搜索语句的重排序分数项;
所述重排序分数项的计算公式为:
;
其中,R表示重排序分数项;表示历史搜索语句c的原始分数;所述原始分数为预设代码搜索模型对于给定查询语句,每条候选代码的置信度分数;/>表示代码搜索模型在训练搜索数据上的MRR分数;/>表示代码搜索模型在数据集上整体的MRR分数;/>表示在所有的搜索数据中,代码搜索模型显示低于整体的MRR分数的搜索数据的百分比;
步骤S4、通过搜索界面获取当前搜索语句,实时计算所述当前搜索语句在候选代码库搜索候选代码的MRR分数;所述候选代码库为一系列代码片段的结合,用于检索并返回对查询语句的代码;
步骤S5、实时计算所述当前搜索语句与数据集中,最相似的n条所述搜索数据,n为正整数;
步骤S6、基于MRR分数对最相似的各所述搜索数据进行聚类,得到高MRR代码区间以及低MRR分数代码区间;
步骤S7、基于选择的偏差项,通过所述低MRR分数代码区间中代码的先验偏差项特征,为所述候选代码库上具有相同偏差项的候选代码的MRR分数加上重排序分数项以进行去偏,不断重复直至所有的所述偏差项都完成去偏,基于去偏的各所述候选代码生成代码搜索结果,通过所述搜索界面显示代码搜索结果,基于所述代码搜索结果以及当前搜索语句生成搜索日志,对所述搜索日志进行备份;
所述先验偏差项特征为对候选代码库中每条代码计算各个偏差项得到的数值。
2.如权利要求1所述的一种基于重排序的代码搜索去偏差方法,其特征在于:所述步骤S2中,所述基于所述偏差项对数据集中的搜索数据进行分组具体为:
与候选代码长度偏差、查询语句长度偏差相关的搜索数据按长度为4的区间进行分组;与词汇重要性偏差相关的搜索数据按长度为0.15的区间进行分组,即将词汇重要性分数升序排序后,将词汇重要性分数按0.15为区间进行划分;与抽象语法树节点数据量偏差、AST深度偏差、保留字偏差以及重叠单词偏差相关的搜索数据按长度为1的区间进行分组。
3.如权利要求1所述的一种基于重排序的代码搜索去偏差方法,其特征在于:所述步骤S6具体为:
基于MRR分数对最相似的各所述搜索数据进行k-means聚类,得到高MRR代码区间以及低MRR分数代码区间;
所述步骤S7中,所述对所述搜索日志进行备份具体为:
对所述搜索日志进行哈希计算得到哈希值,随机生成一对称密钥,利用所述对称密钥对搜索日志进行加密,并备份至IPFS系统,将所述哈希值以及IPFS系统返回的索引地址绑定后上传至区块链。
4.一种基于重排序的代码搜索去偏差系统,其特征在于:包括如下模块:
数据集构建模块,用于定义代码搜索的偏差项,获取历史搜索语句以及所述历史搜索语句在代码搜索模型上的历史搜索结果,基于各所述历史搜索语句以及历史搜索结果组成的搜索数据构建数据集,将所述数据集结构化存储至数据库中;
所述偏差项包括长度偏差、抽象语法树节点数据量偏差、AST深度偏差、保留字偏差、词汇重要性偏差以及重叠单词偏差;
所述长度偏差用于表征代码搜索模型偏好长度较长的代码片段或者搜索语句;所述抽象语法树节点数据量偏差用于表征代码搜索模型偏好候选代码中AST节点更多的代码;所述AST深度偏差用于表征代码搜索模型偏好候选代码中AST更深的代码;所述保留字偏差用于表征代码搜索模型偏好候选代码中包含更多当前编程语言保留字的代码;所述词汇重要性偏差用于表征代码搜索模型偏好候选代码中包含更多重要性词汇的代码;所述重叠单词偏差用于表征代码搜索模型偏好候选代码中与当前搜索语句重叠单词更多的代码;
搜索数据分组模块,用于从所述数据库中读取各所述搜索数据,计算各所述搜索数据的MRR分数,基于所述偏差项对数据集中的搜索数据进行分组;
重排序分数项计算模块,用于通过所述历史搜索结果计算各历史搜索语句的重排序分数项;
所述重排序分数项的计算公式为:
;
其中,R表示重排序分数项;表示历史搜索语句c的原始分数;所述原始分数为预设代码搜索模型对于给定查询语句,每条候选代码的置信度分数;/>表示代码搜索模型在训练搜索数据上的MRR分数;/>表示代码搜索模型在数据集上整体的MRR分数;/>表示在所有的搜索数据中,代码搜索模型显示低于整体的MRR分数的搜索数据的百分比;
候选代码分数计算模块,用于通过搜索界面获取当前搜索语句,实时计算所述当前搜索语句在候选代码库搜索候选代码的MRR分数;所述候选代码库为一系列代码片段的结合,用于检索并返回对查询语句的代码;
相似搜索数据计算模块,用于实时计算所述当前搜索语句与数据集中,最相似的n条所述搜索数据,n为正整数;
聚类模块,用于基于MRR分数对最相似的各所述搜索数据进行聚类,得到高MRR代码区间以及低MRR分数代码区间;
去偏模块,用于基于选择的偏差项,通过所述低MRR分数代码区间中代码的先验偏差项特征,为所述候选代码库上具有相同偏差项的候选代码的MRR分数加上重排序分数项以进行去偏,不断重复直至所有的所述偏差项都完成去偏,基于去偏的各所述候选代码生成代码搜索结果,通过所述搜索界面显示代码搜索结果,基于所述代码搜索结果以及当前搜索语句生成搜索日志,对所述搜索日志进行备份;
所述先验偏差项特征为对候选代码库中每条代码计算各个偏差项得到的数值。
5.如权利要求4所述的一种基于重排序的代码搜索去偏差系统,其特征在于:所述搜索数据分组模块中,所述基于所述偏差项对数据集中的搜索数据进行分组具体为:
与候选代码长度偏差、查询语句长度偏差相关的搜索数据按长度为4的区间进行分组;与词汇重要性偏差相关的搜索数据按长度为0.15的区间进行分组,即将词汇重要性分数升序排序后,将词汇重要性分数按0.15为区间进行划分;与抽象语法树节点数据量偏差、AST深度偏差、保留字偏差以及重叠单词偏差相关的搜索数据按长度为1的区间进行分组。
6.如权利要求4所述的一种基于重排序的代码搜索去偏差系统,其特征在于:所述聚类模块具体用于:
基于MRR分数对最相似的各所述搜索数据进行k-means聚类,得到高MRR代码区间以及低MRR分数代码区间;
所述去偏模块中,所述对所述搜索日志进行备份具体为:
对所述搜索日志进行哈希计算得到哈希值,随机生成一对称密钥,利用所述对称密钥对搜索日志进行加密,并备份至IPFS系统,将所述哈希值以及IPFS系统返回的索引地址绑定后上传至区块链。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410176550.2A CN117725087B (zh) | 2024-02-08 | 2024-02-08 | 一种基于重排序的代码搜索去偏差方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410176550.2A CN117725087B (zh) | 2024-02-08 | 2024-02-08 | 一种基于重排序的代码搜索去偏差方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117725087A CN117725087A (zh) | 2024-03-19 |
CN117725087B true CN117725087B (zh) | 2024-06-04 |
Family
ID=90205670
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410176550.2A Active CN117725087B (zh) | 2024-02-08 | 2024-02-08 | 一种基于重排序的代码搜索去偏差方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117725087B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113761162A (zh) * | 2021-08-18 | 2021-12-07 | 浙江大学 | 一种基于上下文感知的代码搜索方法 |
CN116049503A (zh) * | 2023-02-14 | 2023-05-02 | 厦门大学 | 基于命名风格无关的多视图对比代码表示学习的代码检索 |
CN116414968A (zh) * | 2023-02-16 | 2023-07-11 | 腾讯医疗健康(深圳)有限公司 | 信息搜索方法、装置、设备、介质及产品 |
CN117390130A (zh) * | 2022-07-01 | 2024-01-12 | 南京工业大学 | 一种基于多模态表示的代码搜索方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10983761B2 (en) * | 2019-02-02 | 2021-04-20 | Microsoft Technology Licensing, Llc | Deep learning enhanced code completion system |
-
2024
- 2024-02-08 CN CN202410176550.2A patent/CN117725087B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113761162A (zh) * | 2021-08-18 | 2021-12-07 | 浙江大学 | 一种基于上下文感知的代码搜索方法 |
CN117390130A (zh) * | 2022-07-01 | 2024-01-12 | 南京工业大学 | 一种基于多模态表示的代码搜索方法 |
CN116049503A (zh) * | 2023-02-14 | 2023-05-02 | 厦门大学 | 基于命名风格无关的多视图对比代码表示学习的代码检索 |
CN116414968A (zh) * | 2023-02-16 | 2023-07-11 | 腾讯医疗健康(深圳)有限公司 | 信息搜索方法、装置、设备、介质及产品 |
Non-Patent Citations (1)
Title |
---|
深度神经网络结构搜索综述;唐浪等;《中国图象图形学报》;20210228;第26卷(第02期);第245-264 * |
Also Published As
Publication number | Publication date |
---|---|
CN117725087A (zh) | 2024-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110399457B (zh) | 一种智能问答方法和系统 | |
Navarro | Spaces, trees, and colors: The algorithmic landscape of document retrieval on sequences | |
CN110399392B (zh) | 语义关系数据库运算 | |
CN115576984A (zh) | 中文自然语言生成sql语句及跨数据库查询方法 | |
CN112306494A (zh) | 一种基于卷积和循环神经网络的代码分类及聚类方法 | |
CN109885641B (zh) | 一种数据库中文全文检索的方法及系统 | |
CN1629837A (zh) | 电子文档的处理、浏览及分类查询的方法、装置及其系统 | |
CN115017268B (zh) | 一种基于树结构的启发式日志抽取方法及系统 | |
CN118245564B (zh) | 一种支持语义查重查新的特征比对库构建方法及装置 | |
KR20210134878A (ko) | 키워드 추출 기법을 이용한 윅수퍼비전 방법론에 기초하여 정보검색모델을 학습시키는 방법 | |
Dawar et al. | Comparing topic modeling and named entity recognition techniques for the semantic indexing of a landscape architecture textbook | |
CN112698831B (zh) | 一种代码自动生成质量评估方法 | |
CN117573096A (zh) | 一种融合抽象语法树结构信息的智能代码补全方法 | |
CN113032371A (zh) | 数据库语法分析方法、装置和计算机设备 | |
CN110717014B (zh) | 一种本体知识库动态构建方法 | |
Barari et al. | CloniZER spell checker adaptive language independent spell checker | |
CN109902162B (zh) | 基于数字指纹的文本相似性的识别方法、存储介质及装置 | |
CN117725087B (zh) | 一种基于重排序的代码搜索去偏差方法及系统 | |
CN115629800A (zh) | 一种基于多模态的代码摘要生成方法与系统 | |
CN114741088A (zh) | 一种基于用户评论和开发者智慧的App源代码链接方法 | |
CN113901811A (zh) | 一种基于掩码语言模型的文献新词发现方法及系统 | |
CN111159366A (zh) | 一种基于正交主题表示的问答优化方法 | |
CN115809321B (zh) | 基于知识图谱的检索系统及方法 | |
KR102337112B1 (ko) | 윅수퍼비전 방법론에 기초하여 정보검색모델을 학습시키는 방법 | |
CN118332082A (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 |