CN117453861A - 基于对比学习与预训练技术的代码搜索推荐方法和*** - Google Patents
基于对比学习与预训练技术的代码搜索推荐方法和*** Download PDFInfo
- Publication number
- CN117453861A CN117453861A CN202311597506.0A CN202311597506A CN117453861A CN 117453861 A CN117453861 A CN 117453861A CN 202311597506 A CN202311597506 A CN 202311597506A CN 117453861 A CN117453861 A CN 117453861A
- Authority
- CN
- China
- Prior art keywords
- code
- query
- encoder
- training
- segments
- 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.)
- Pending
Links
- 238000012549 training Methods 0.000 title claims abstract description 69
- 238000000034 method Methods 0.000 title claims abstract description 59
- 238000005516 engineering process Methods 0.000 title claims abstract description 12
- 239000013598 vector Substances 0.000 claims abstract description 61
- 239000012634 fragment Substances 0.000 claims abstract description 30
- 238000006243 chemical reaction Methods 0.000 claims abstract description 15
- 238000007781 pre-processing Methods 0.000 claims description 14
- 230000009466 transformation Effects 0.000 claims description 5
- 230000006835 compression Effects 0.000 claims description 2
- 238000007906 compression Methods 0.000 claims description 2
- 238000012986 modification Methods 0.000 claims description 2
- 230000004048 modification Effects 0.000 claims description 2
- 238000005457 optimization Methods 0.000 abstract 1
- 230000008569 process Effects 0.000 description 11
- 238000012360 testing method Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000013136 deep learning model Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000003550 marker Substances 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000013527 convolutional neural network Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000015654 memory Effects 0.000 description 1
- 238000003909 pattern recognition Methods 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
- 239000008194 pharmaceutical composition Substances 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/088—Non-supervised learning, e.g. competitive learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/0895—Weakly supervised learning, e.g. semi-supervised or self-supervised learning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Molecular Biology (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Databases & Information Systems (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于对比学习与预训练技术的代码搜索推荐方法和***。本发明先将代码片段进行结构转换,得到多个等效代码片段,以相同语义的代码片段作为正样本,不同语义的代码片段作为负样本,预训练代码编码器。然后将其迁移到包含文本编码器的代码查询模型中,利用带有代码注释的代码片段继续优化,代码编码器用于向量化表示代码片段,文本编码器用于向量化表示查询语句。最后,将查询语句输入文本编码器得到查询向量,利用代码编码器将代码库中的代码片段均转换为代码向量,以与查询向量相似度最高的代码向量对应的代码片段进行推荐。本发明可以减轻对代码注释的依赖,同时提高代码搜索的准确率。
Description
技术领域
本发明涉及电数字数据处理领域,尤其是一种基于对比学习与预训练技术的代码搜索推荐方法和***。
背景技术
近年来,随着开源软件的快速发展,互联网上出现了大量的代码资源。为了实现某个功能,程序员通常会搜索所需的代码片段并重用它们。代码搜索方法可以有效地帮助程序员搜索与特定编程任务相关的代码片段。代码搜索已成为软件工程的重要研究领域之一。大多数早期的代码搜索方法都是基于信息检索技术。基于信息检索的代码搜索的一个基本问题是自然语言查询中反映的高级意图与源代码中的低级实现细节不匹配。后来人们提出了基于深度学习的代码搜索方法。然而这些方法通常需要大量带有自然语言注释的代码片段来训练深度学习模型。实际上,只有一部分代码片段拥有注释,并且代码注释的质量很难保证,筛选出具有正确注释的代码片段往往需要付出很多努力。
例如专利文献CN112051986A所公开的“基于开源知识的代码搜索推荐装置及方法”,其首先采集开源社区中开源代码及信息,进行处理后生成代码片段库。然后对代码片段进行特征提取,包括代码的文本特征、结构特征、主题特征、开发特征,并建立每个代码片段与其特征间的映射关系,生成代码片段-特征索引库。接下来采用文本预处理方法对查询语句处理后作为代码搜索推荐的输入。最后通过代码特征与查询语句相似度计算,完成代码片段的搜索排序及向查询用户推荐。该方法的缺点是,在计算代码特征与自然语言查询的相似度时,没有考虑到代码片段与自然语言之间的语义鸿沟,难以保证所搜索到的代码与需求之间的匹配程度。
另外,专利文献CN115017294A所公开的“代码搜索方法”,其包括:第一步,输入带描述的代码;第二步,分别对代码和描述进行单独的嵌入;第三步,对代码特征跟描述特征做交互计算得到一个细粒度相似矩阵,用构建好的CNN网络对矩阵进行学习;第四步,分别为代码和描述构建全连接图,通过一定的规则更新节点向量;第五步,对代码和描述分别用注意力机制做加权求和操作;第六步,预测每个候选代码片段的分数,使用分数对所有候选代码片段进行重新排序。该方法需要大量带有自然语言注释的代码片段来训练模型,另外,对代码注释的质量也具有较高的要求。
类似的代码搜索方案还有很多,例如:
Gu, X., Zhang, H., Kim, S., 2018. Deep code search. In: 2018 IEEE/ACM40th International Conference on Software Engineering (ICSE). IEEE, pp. 933--944.
He, K., Fan, H., Wu, Y., Xie, S., Girshick, R., 2020. Momentumcontrast for unsupervised visual representation learning. In: Proceedings ofthe IEEE/CVF conference on computer vision and pattern recognition. pp.9729--9738.
Lv, F., Zhang, H., Lou, J.-g., Wang, S., Zhang, D., Zhao, J., 2015.Codehow: Effective code search based on api understanding and extendedboolean model (e). In: 2015 30th IEEE/ACM International Conference onAutomated Software Engineering (ASE). IEEE, pp. 260--270.
Wan, Y., Shu, J., Sui, Y., Xu, G., Zhao, Z., Wu, J., Yu, P., 2019.Multi-modal attention network learning for semantic source code retrieval.In: 2019 34th IEEE/ACM International Conference on Automated SoftwareEngineering (ASE). IEEE, pp. 13--25.
Xu, L., Yang, H., Liu, C., Shuai, J., Yan, M., Lei, Y., Xu, Z., 2021.Two-stage attention-based model for code search with textual and structuralfeatures. In: 2021 IEEE International Conference on Software Analysis,Evolution and Reengineering (SANER). IEEE, pp. 342--353.
Wang, H., Wang, X., Xiong, W., Yu, M., Guo, X., Chang, S., Wang, W.~Y., 2019. Self-supervised learning for contextualized extractivesummarization. arXiv preprint arXiv:1906.04466.
Saunshi, N., Plevrakis, O., Arora, S., Khodak, M., Khandeparkar, H.,2019. A theoretical analysis of contrastive unsupervised representationlearning. In: International Conference on Machine Learning. PMLR, pp. 5628--5637.
Chen, T., Kornblith, S., Norouzi, M., Hinton, G., 2020. A simpleframework for contrastive learning of visual representations. In:International conference on machine learning. PMLR, pp. 1597--1607。
但这些搜索方案归纳起来,存在两个较大的不足:1、需要大量带有注释的代码片段来训练推荐模型,2、推荐模型对搜索条件所匹配出的代码片段与需求间的匹配度不佳。
发明内容
本发明的发明目的在于:针对上述存在的全部或部分问题,提供一种对代码注释依赖小,同时能够提高代码搜索准确率的代码搜索推荐方案。
本发明采用的技术方案如下:
本发明提供了一种基于对比学习与预训练技术的代码搜索推荐方法,其包括:
分别对样本集中的每一原始代码片段进行结构转换,生成多个对应的等效代码片段;
利用所述等效代码片段,根据设定的对比学习目的,使用对比学习方法预训练代码编码器,所述代码编码器将输入的代码片段表示为代码向量;其中,对于一个等效代码片段,将对应于同一原始代码片段的等效代码片段视为正样本,将对应于其他原始代码片段的等效代码片段视为负样本;
将预训练的代码编码器迁移到代码查询模型中,所述代码查询模型还包括文本编码器,所述文本编码器将输入的代码注释表示为查询向量;利用带有代码注释的代码片段对所述代码查询模型进行训练;
将查询语句输入训练好的代码查询模型,在代码库中查询出推荐的代码片段。
为解决上述问题,本发明还提供了一种基于对比学习与预训练技术的代码搜索推荐***,其包括代码预处理模块、预训练模块、模型微调训练模块和代码搜索模块,其中:
所述代码预处理模块被配置为:分别对样本集中的每一原始代码片段进行结构转换,生成多个对应的等效代码片段;
所述预训练模块被配置为:利用所述代码预处理模块生成的等效代码片段,以及配置的对比学习目的,使用对比学习方法预训练代码编码器,所述代码编码器将输入的代码片段表示为代码向量;其中,对于一个等效代码片段,将对应于同一原始代码片段的等效代码片段视为正样本,将对应于其他原始代码片段的等效代码片段视为负样本;
所述模型微调训练模块被配置为:利用带有代码注释的代码片段对所述代码查询模型进行训练,所述代码查询模型包括文本编码器,以及由所述预训练模块预训练的代码编码器,所述文本编码器将输入的代码注释表示为查询向量;
所述代码搜索模块被配置为:接收输入的查询语句,将所述查询语句输入训练好的代码查询模型,在代码库中查询出推荐的代码片段。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
1、本发明通过预训练的方式训练代码编码器,然后在使用少量带有注释的代码片段对其模型进行微调,大幅减轻了对注释代码片段的依赖程度。
2、本发明通过结构转换的方式来生成等效代码片段,在不改变原始代码语义的情况下,构建出了大量的正样本和负样本,并且,相较于通过代码-注释对来进行相似语义分组的方式,可以快速实现对正样本和负样本的分组。
3、本发明使用两个编码器来对代码编码器进行无监督学习,通过引入动量变化的负样本,可以降低负样编码的随机性和不稳定性,提高自监督学习中的向量表示学习效果。
4、本发明所构建的代码搜索框架,将代码嵌入模型训练部分和基于代码向量和自然语言查询向量的相似性评分预测部分相结合,具备优秀的推荐效果,代码搜索准确率高。
附图说明
本发明将通过例子并参照附图的方式说明,其中:
图1是代码搜索推荐构思框架示意图。
图2是代码转换操作示例。
图3是预训练代码编码器架构图。
图4是模型微调训练模块架构图。
具体实施方式
本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。
本说明书(包括任何附加权利要求、摘要)中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。
实施例1
一种基于对比学习与预训练技术的代码搜索推荐方法,如图1所示,包括以下几个部分:
代码预处理部分:对于从论坛、网络或者专业数据库中获取的样本集(包含大量代码片段),这些代码片段不需要注释(即不带标记),分别对每一条原始代码片段进行结构转换,每一条原始代码片段均生成多个对应的等效代码片段。
传统方法是在代码仓库中通过人为识别或者机器辅助的方式,寻找具有相同语义的代码片段,这种方式需要耗费大量的人工和时间成本,并且分组结果受主观影响较为严重。本发明程序转换方式对原始代码片段进行结构转换,以快速构建出多个具有相同语义的代码片段(称为等效代码片段),结构转换不改变代码片段的执行结果。
具体而言,对于一个原始代码片段,先解析该代码片段,将其转化为树状结构表示,即抽象语法树(AST,Abstract Syntax Tree),然后对该抽象语法树进行多种转换操作,以生成多种不同变体,这些变体之间具有相同的语义。本发明实施例中,这些转换操作大致分为了三类:
代码压缩:改变代码的语法结构。包括代码重新排列、代码美化、死代码消除、变量类型兼容、代码常量折叠。
标识符修改:对代码中的方法名和变量名进行更改。在这种过程中,方法名和变量名通常会被替换为随机生成的标记或标识符,以隐藏程序中一些可读的人类信息,但保留程序的功能性。包括变量重命名、标识符混淆。
代码正则化变换:减少具有高文本重叠的正例对的数量。包括死代码***、子词正则化。
在对原始代码片段的结构转换过程中,随机应用上述转换操作中的一些或全部进行转换处理,以生成多个等效代码片段。
如图2所示为一些代码转换操作的示例,图中(a)为实现***序列的JavaScript(一种具有函数优先的轻量级,解释型或即时编译型的编程语言)的原始代码片段,(b)为改变变量名称的转换操作,(c)为交换两个独立语句的转换操作,(d)为***了不影响函数输出的死代码的转换操作。
对比预训练部分:参见附图3,此部分利用所述等效代码片段,根据设定的对比学习目标,使用对比学习方法预训练代码编码器f q,之后将其迁移到代码查询任务中。本发明的学习目标为:最大化具有相同语义的代码片段之间的向量表示的一致性,最小化具有不同语义的代码片段之间的向量表示的一致性。
本发明通过使用对比损失目标将编码查询与编码键字典进行匹配来训练代码编码器。具体而言,本发明训练一个代码编码器f q,它将一系列代码片段映射到代码向量嵌入中,即将输入的代码片段表示为代码向量。对于一个代码片段x q(视为查询样本),将相同原始代码片段的等效代码片段视为正样本 (x q,x k+),将不同原始代码片段的等效代码片段视为负样本(x q,x k-)。在对比预训练期间,x k+表示与之相匹配的键,x k-表示为x q的负样本。
出于对比学习目标的考虑,在一些实施例中,代码编码器的预训练过程中,使用InfoNCE损失函数来对代码编码器f q的模型参数进行优化,其通过点积来度量两个向量之间的相似性。当查询样本q与它的正样本相似而与其他样本存在较大区别时,InfoNCE的值变小。假设有一个查询样本q和一组编码样本{k 0 ,k 1 ,k 2 ,…},公式(1)展示了InfoNCE损失:
(1)
式中τ为超参数,或称为温度参数,通常取值较小,如0.1、0.2等,但也不能太小,否则会导致模型泛化能力差或者很难收敛,K为负样本数量-1。该公式中,分子表示归一化后正样本之间的相似度,分母表示归一化后正样本与负样本之间的相似度。并且,查询样本q由代码编码器f q计算得到,k i由动量编码器f k计算得到。代码编码器f q通过反向传播更新网络参数,而编码器f k通过动量更新网络参数。形式上,θ k表示f k的网络参数(权重),θ q表示f q的网络参数,公式(2)表示θ k的更新过程:
(2)
式中m∈[0,1)是动量系数。m的值通常比较大,通常大于0.9(例如m=0.999),这使得θ k更新比θ q更平滑。
使用无监督表征学***均,这样,就引入了更加稳定的负样本,有助于降低编码的随机性和不稳定性,从而使得模型能够更好地区分正样本和负样本,改善对比学习过程。
模型微调训练部分:将预训练的代码编码器迁移到代码查询模型中进行初始化,另外,代码查询模型还包括一个文本编码器。文本编码器的作用是将输入的代码注释表示为查询向量。利用(少量)带有代码注释的代码片段对该代码查询模型进行训练,优化代码编码器的网络参数,如图4所示。
对于代码编码器,前文说过,其是将代码片段嵌入到代码嵌入中。对于每个代码片段,我们提取其标记符(即代码关键词/单词)并将其输入代码编码器的神经网络。考虑代码片段中包含N T个单词的标记符序列。本实施例以LSTM(Long Short-TermMemory,长短期记忆网络)为例,展示如何将代码片段嵌入为向量c:
(3)
其中ti为标记符t i的嵌入表示,使用最后一步的隐藏状态作为c的向量表示。
对于文本编码器,其是将自然语言查询嵌入到查询向量中,即将代码注释表示为查询向量。在训练阶段,查询从代码注释中提取,而在测试阶段,代码注释被视为输入的查询语句。考虑由N Q个词语的查询序列。在本实施例中,我们仍使用LSTM将代码注释嵌入到查询向量q中。
(3)
其中wi表示词语w i的嵌入表示。我们使用最后一步的隐藏状态作为q的向量表示。
在设计的模型基础上,将代码片段和自然语言查询联合嵌入到统一的向量空间中。模型预期的目标是,如果代码片段与查询语句具有相似的语义,则它们嵌入的向量应该彼此接近,换句话说,给定一个任意的代码片段C和一个任意的查询语句Q,我们希望当C正确匹配Q时,模型计算出来的相似度(概率)高,否则相似度小。
在模型训练阶段,我们构造一个三元组<C,Q + ,Q ->作为训练实例,多个训练实例构成三元组集。对于每个代码片段C,都有一个正查询样本Q +和负查询样本Q -,当利用三元组集进行训练时,模型同时预测<C,Q +>和<C,Q ->的相似性,并将排序损失Φ(*)最小化:
(4)
其中,θ为代码查询模型参数,sim为代码片段与查询样本之间的相似度,β为一个常数余量,c为C的向量表示,q +和q -分别为Q +和Q -的向量表示,D为训练数据集。
在一些实施例中,采用余弦相似函数计算相似度sim,并将β设为0.05。直观地说,排序损失导致代码片段与其匹配的查询语句之间的相似性增加,而代码片段与不匹配查询语句之间的相似性降低。
代码查询模型训练之后,还利用一个测试集来测试模型的性能。给定一个测试集,将代码注释作为查询语句Q,查询的目的是根据与Q的相似度来对所有代码片段C进行排序。将测试集中的各代码片段输入到代码编码器以获得对应代码向量c,将查询语句Q输入到文本编码器以得到查询向量q,然后计算向量q和各向量c的相似度,本实施例以余弦相似度计算为例:
(5)
对各相似度进行排序,取最大值的代码片段作为推荐结果。根据测试结果可以对模型的性能进行评估,也可以对模型参数进行优化。
代码搜索部分:在训练代码查询模型后,即可用其进行代码搜索。代码搜索的过程和性能测试相似,不过查询语句不再是代码注释,而是对期望的代码片段的描述。将查询语句输入给文本编码器以获得查询向量,将代码库中的各代码片段分别输入给代码编码器以获得对应代码向量,也可以先将代码库中各代码片段利用代码编码器转换为代码向量先进行关联存储,以节约搜索时间。然后分别计算查询向量与各代码向量的相似度排名,取相似度最大的至少一个代码向量对应的代码片段进行推荐。
例如,查询语句仍用Q表示,代码库中代码片段用C表示,各代码片段预先通过代码编码器转化为了代码向量c。将查询语句输入文本编码器,得到查询向量q,然后模型对向量q和各向量c的相似度进行计算和排序,最后取相似度最大的一个或几个向量c所对应的代码片段作为推荐的代码片段。相似度计算使用余弦相似函数仅仅是示例,也可以采用其他相似函数来计算相似度。
实施例2
本实施例从***架构角度对本发明设计的方案进行说明。
***包括代码预处理模块、预训练模块、模型微调训练模块和代码搜索模块,分别与实施例1中的代码预处理部分、对比预训练部分、模型微调训练部分及代码搜索部分相对应。
代码预处理模块被配置为:分别对样本集中的每一原始代码片段进行结构转换,生成多个对应的等效代码片段。
预训练模块被配置为:利用所述预处理模块生成的等效代码片段,以及配置的对比学习目的,使用对比学习方法预训练代码编码器,所述代码编码器将输入的代码片段表示为代码向量;其中,对于一个等效代码片段,将对应于同一原始代码片段的等效代码片段视为正样本,将对应于其他原始代码片段的等效代码片段视为负样本;
模型微调训练模块被配置为:利用带有代码注释的代码片段对所述代码查询模型进行训练,所述代码查询模型包括文本编码器,以及由所述预训练模块预训练的代码编码器,所述文本编码器将输入的代码注释表示为查询向量;
代码搜索模块被配置为:接收输入的查询语句,将所述查询语句输入训练好的代码查询模型,在代码库中查询出推荐的代码片段。
***的代码预处理模块、预训练模块、模型微调训练模块和代码搜索模块,其细节设计或优选实施方式等,可以分别参考实施例1中的代码预处理部分、对比预训练部分、模型微调训练部分及代码搜索部分,在此不再赘述。
实施例3
本实施例公开了一种基于对比学习与预训练技术的代码搜索推荐***,其包括处理器和计算机可读存储介质,该存储介质中存储有计算机程序,运行该计算机程序执行实施例1中的全部或部分方法,处理器则负责运行计算机程序中的代码。
实施例4
本实施例对所设计的模型进行了性能测试。本实施例使用两个常见的指标来衡量代码搜索的有效性,即SuccessRate@k(SR@k,达标率)和MRR(Mean reciprocal rank,平均倒数秩),它们也是代码搜索模型中广泛使用的指标。
本发明提出的方案理论上支持任何架构的网络来训练代码编码器,本实施例主要评估了两种架构:2层双向LSTM和6层Transformer(一种基于注意力机制的序列模型)。本实施例将代码嵌入(即向量表示)和文本嵌入的维数都设置为256,测试结果如下表1所示。
从表1的比较结果中,可以观察到以下几点特点。
1)当学习率为0.002时,Bi-LSTM(Bi-directional Long-Short Term Memory,双向长短期记忆网络)模型在SR@5和MRR指标上均达到最佳性能。
2)当学习率为8.5e-5时,Transformer模型在SR@5指标上实现最佳性能,当学习率为9.5e-5时,在MRR指标上实现最佳性能。
3)Transformer模型的性能比Bi-LSTM模型低得多。我们推断这是因为在代码搜索的深度学习模型中,代码编码器和文本编码器的模型结构一致,便于代码嵌入和文本嵌入的联合嵌入,因此,本发明也推荐将代码编码器和文本编码器使用相同的网络模型架构进行训练。
本发明并不局限于前述的具体实施方式。本发明扩展到任何在本说明书中披露的新特征或任何新的组合,以及披露的任一新的方法或过程的步骤或任何新的组合。
Claims (10)
1.一种基于对比学习与预训练技术的代码搜索推荐方法,其特征在于,包括:
分别对样本集中的每一原始代码片段进行结构转换,生成多个对应的等效代码片段;
利用所述等效代码片段,根据设定的对比学习目标,使用对比学习方法预训练代码编码器,所述代码编码器将输入的代码片段表示为代码向量;其中,对于一个等效代码片段,将对应于同一原始代码片段的等效代码片段视为正样本,将对应于其他原始代码片段的等效代码片段视为负样本;
将预训练的代码编码器迁移到代码查询模型中,所述代码查询模型还包括文本编码器,所述文本编码器将输入的代码注释表示为查询向量;利用带有代码注释的代码片段对所述代码查询模型进行训练;
将查询语句输入训练好的代码查询模型,在代码库中查询出推荐的代码片段。
2.如权利要求1所述的基于对比学习与预训练技术的代码搜索推荐方法,其特征在于,所述分别对样本集中的每一原始代码片段进行结构转换,包括:
解析原始代码片段,转化为抽象语法树;
对抽象语法树进行多种转换操作,分别生成相应的等效代码片段。
3.如权利要求2所述的基于对比学习与预训练技术的代码搜索推荐方法,其特征在于,所述转换操作包括代码压缩、标识符修改、正则化变换中的一种或多种。
4.如权利要求1所述的基于对比学习与预训练技术的代码搜索推荐方法,其特征在于,所述对比学习目标为:最大化具有相同语义的代码片段之间的向量表示的一致性,最小化具有不同语义的代码片段之间的向量表示的一致性。
5.如权利要求1所述的基于对比学习与预训练技术的代码搜索推荐方法,其特征在于,所述使用对比学习方法预训练代码编码器中,查询样本q的对比学习目标损失为:,其中,k +为正样本,k i为负样本,K为负样本数量-1,τ为超参数。
6.如权利要求5所述的基于对比学习与预训练技术的代码搜索推荐方法,其特征在于,查询样本q由代码编码器计算得到,样本k +和k i由动量编码器计算得到;所述代码编码器通过反向传播更新网络参数,所述动量编码器通过动量更新网络参数。
7.如权利要求6所述的于对比学习与预训练技术的代码搜索推荐方法,其特征在于,所述动量编码器的网络参数θ k更新方法为:
;
其中,m∈[0,1)是动量系数,θ q是代码编码器的网络参数。
8.如权利要求1所述的基于对比学习与预训练技术的代码搜索推荐方法,其特征在于,所述利用带有代码注释的代码片段对所述代码查询模型进行训练,包括:
从训练数据集D中构造三元组<C,Q + ,Q ->作为训练实例,其中C表示代码片段,Q + 、Q -分别表示正查询样本和负查询样本;
利用代码查询模型同时预测<C,Q +>和的相似性,并将排序损失Φ(*)最小化:
其中,θ为代码查询模型参数,sim为代码片段与查询样本之间的相似度,β为一个常数余量,c为C的向量表示,q +和q -分别为Q +和Q -的向量表示。
9.如权利要求1所述的基于对比学习与预训练技术的代码搜索推荐方法,其特征在于,所述将查询语句输入训练好的代码查询模型,在代码库中查询出推荐的代码片段,包括:
将查询语句输入给文本编码器以获得查询向量,将代码库中的各代码片段分别输入给代码编码器以获得对应代码向量,或者获取对代码库中各代码片段利用代码编码器进行转换后的代码向量;
分别计算查询向量与各代码向量的相似度排名,取相似度最大的至少一个代码向量对应的代码片段进行推荐。
10.一种基于对比学习与预训练技术的代码搜索推荐***,其特征在于,包括代码预处理模块、预训练模块、模型微调训练模块和代码搜索模块,其中:
所述代码预处理模块被配置为:分别对样本集中的每一原始代码片段进行结构转换,生成多个对应的等效代码片段;
所述预训练模块被配置为:利用所述代码预处理模块生成的等效代码片段,以及配置的对比学习目的,使用对比学习方法预训练代码编码器,所述代码编码器将输入的代码片段表示为代码向量;其中,对于一个等效代码片段,将对应于同一原始代码片段的等效代码片段视为正样本,将对应于其他原始代码片段的等效代码片段视为负样本;
所述模型微调训练模块被配置为:利用带有代码注释的代码片段对所述代码查询模型进行训练,所述代码查询模型包括文本编码器,以及由所述预训练模块预训练的代码编码器,所述文本编码器将输入的代码注释表示为查询向量;
所述代码搜索模块被配置为:接收输入的查询语句,将所述查询语句输入训练好的代码查询模型,在代码库中查询出推荐的代码片段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311597506.0A CN117453861A (zh) | 2023-11-28 | 2023-11-28 | 基于对比学习与预训练技术的代码搜索推荐方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311597506.0A CN117453861A (zh) | 2023-11-28 | 2023-11-28 | 基于对比学习与预训练技术的代码搜索推荐方法和*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117453861A true CN117453861A (zh) | 2024-01-26 |
Family
ID=89580017
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311597506.0A Pending CN117453861A (zh) | 2023-11-28 | 2023-11-28 | 基于对比学习与预训练技术的代码搜索推荐方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117453861A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117850870A (zh) * | 2024-03-08 | 2024-04-09 | 四川大学 | 一种代码注释生成方法、装置、电子设备及存储介质 |
CN118035424A (zh) * | 2024-04-11 | 2024-05-14 | 四川大学 | 一种代码搜索方法、装置、电子设备及存储介质 |
-
2023
- 2023-11-28 CN CN202311597506.0A patent/CN117453861A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117850870A (zh) * | 2024-03-08 | 2024-04-09 | 四川大学 | 一种代码注释生成方法、装置、电子设备及存储介质 |
CN117850870B (zh) * | 2024-03-08 | 2024-05-07 | 四川大学 | 一种代码注释生成方法、装置、电子设备及存储介质 |
CN118035424A (zh) * | 2024-04-11 | 2024-05-14 | 四川大学 | 一种代码搜索方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Zhao et al. | Dense text retrieval based on pretrained language models: A survey | |
CN111159223B (zh) | 一种基于结构化嵌入的交互式代码搜索方法及装置 | |
Ebraheem et al. | DeepER--Deep Entity Resolution | |
Wu et al. | Semi-supervised nonlinear hashing using bootstrap sequential projection learning | |
Shi et al. | Deep adaptively-enhanced hashing with discriminative similarity guidance for unsupervised cross-modal retrieval | |
CN117453861A (zh) | 基于对比学习与预训练技术的代码搜索推荐方法和*** | |
CN110990596B (zh) | 一种基于自适应量化多模态哈希检索方法及*** | |
CN110399392B (zh) | 语义关系数据库运算 | |
Zhang et al. | Attention-based multimodal entity linking with high-quality images | |
Duan et al. | One size does not fit all: Customizing ontology alignment using user feedback | |
US20220114340A1 (en) | System and method for an automatic search and comparison tool | |
CN114237621B (zh) | 一种基于细粒度共注意机制的语义代码搜索方法 | |
CN116662502A (zh) | 基于检索增强的金融问答文本生成方法、设备及存储介质 | |
CN112860879A (zh) | 一种基于联合嵌入模型的代码推荐方法 | |
Ozan et al. | K-subspaces quantization for approximate nearest neighbor search | |
Wang et al. | Multi-concept representation learning for knowledge graph completion | |
EP4133385A1 (en) | System and method for performing a search in a vector space based search engine | |
Liang et al. | Cross-media semantic correlation learning based on deep hash network and semantic expansion for social network cross-media search | |
CN112732862B (zh) | 一种基于神经网络的双向多段落阅读零样本实体链接方法和装置 | |
CN115357691B (zh) | 一种语义检索方法及***、设备和计算机可读存储介质 | |
CN111782818A (zh) | 生物医疗知识图谱的构建装置、方法、***及存储器 | |
CN117076598A (zh) | 基于自适应权重的语义检索模型融合方法及*** | |
CN116661852A (zh) | 一种基于程序依赖图的代码搜索方法 | |
Zhang et al. | Neural embeddings for nearest neighbor search under edit distance | |
CN116302953A (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 |