关于java:代码语义搜索算法哪家强华为云UniXcoderVESOv1算法取得突破问鼎CodeXGLUE榜单第一名

6次阅读

共计 3686 个字符,预计需要花费 10 分钟才能阅读完成。

随着语言大模型技术的倒退,一系列语言大模型在自然语言解决工作上获得了微小的胜利,为源代码解决工作提供了技术根底,这些模型曾经利用于代码摘要和代码语义搜寻。华为云 PaaS 技术创新团队基于 UniXcoder 模型,在公开测试数据集(CodeXGLUE)上的代码搜寻工作评测后果上获得冲破,在 CodeXGLUE 榜单上排名中第一。

依照查问语句的类型,代码搜寻能够分为代码关键字搜寻和代码语义搜寻。代码关键字搜寻次要通过索引代码实体(如类、办法、变量等),查问定位代码实体的定义及援用;代码语义搜寻的指标是反对开发人员基于自然语言形式来形容代码个性,从而进行相干代码的举荐与搜寻。在开发人员编程过程中帮忙其查找最佳代码示例实际和库应用示例,从而开发者能够通过性能形容搜寻到代码。

目前,大多数代码搜索引擎仅反对代码关键字搜寻,这须要开发者理解他们正在搜寻的代码,例如类名、函数名、API 调用等等,这具备很大的局限性。少数用户通常通过搜寻代码示例来领导他们实现特定的编码工作,他们更偏向于应用自然语言来形容待编码实现的性能,从而借鉴开源社区中已存在的相干代码片段。代码语义搜寻能够反对开发人员在不晓得类或函数名称的状况下应用自然语言形式来形容所需的代码性能。借助于语言模型及不同自然语言之间的映射关系,开发者甚至能够基于中文形容搜寻出蕴含英文性能形容的代码片段。

随着语言大模型(Large Language Model, LLM)技术的倒退,一系列语言大模型(如 BERT [1]、XLNet [2]、GPT [3]、RoBERTa [4] 等)在自然语言解决工作上获得了微小的胜利,为源代码解决工作提供了技术根底。这些模型曾经利用于代码摘要和代码语义搜寻,战胜了以前的最先进办法。语义搜寻背地的想法是将语料库中的所有条目,无论是句子、段落还是文档,都编码到向量空间中。在搜寻时,查问被编码到雷同的向量空间中,并找到语料库中最近的向量。这些条目应与查问具备高度的语义重叠。代码语义搜寻应用编码大模型将查问及代码片段编码成向量,使得语义相干或相近的代码片段和查问在向量空间内落在相近的地位。如下图所示:

有很多算法应用不同的编码器对代码片段和查问进行编码,最新和最有心愿的钻研集中在通用编码器和解码器上,这些编码器和解码器应用雷同的神经网络来编码所有编程语言代码片段和文本。

Salza 等人 [5] 基于原始 BERT[1] 模型,用多种编程语言代码预训练一个新的 BERT 模型,并用两个编码器(一个解决自然语言,另一个解决代码片段)精调该模型,首先证实了解决自然语言的基于 Transformer 架构的模型能够被间接利用到代码搜寻工作中。

CodeBERT [6] 是在自然语言和编程语言序列数据上进行训练的大型语言模型之一,它在代码搜寻方面体现较为杰出。此外,还倒退演化出 RoBERTa [4]、TreeBERT [7]、GraphCodeBERT [8]、UniXcoder [9] 等在代码搜寻方面表现出色的自然语言与编程语言联合训练的模型。

华为云 PaaS 技术创新团队基于 UniXcoder 模型,通过混同代码片段、减少海量开源代码作为训练集、进步批尺寸等精调办法,实现了 UniXcoder-VESO-v1 算法,该算法在公开测试数据集(CodeXGLUE [10])上的代码搜寻工作评测后果上获得冲破:均匀倒数排序值(MRR)达到 0.58,CodeXGLUE 榜单上排名中第一(如下图所示:UniXcoder-VESO-v1,详见 https://microsoft.github.io/CodeXGLUE/)。

咱们将继续推动该工作的技术创新与冲破,会抉择适合形式披露外部技术细节,如感兴趣,欢送继续关注咱们的订阅号文章。

文章来自 PaaS 技术创新 Lab,PaaS 技术创新 Lab 隶属于华为云,致力于综合利用软件剖析、数据挖掘、机器学习等技术,为软件研发人员提供下一代智能研发工具服务的外围引擎和智慧大脑。咱们将聚焦软件工程畛域硬核能力,一直构筑研发利器,继续交付高价值商业个性!退出咱们,一起创始研发新“境界”!(详情欢送分割 mayuchi1@huawei.com;guodongshuo@huawei.com)

PaaS 技术创新 Lab 主页链接:https://www.huaweicloud.com/lab/paas/home.html

参考文献
[1]. Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL-HLT (1) 2019: 4171-4186
[2]. Zhilin Yang, Zihang Dai, Yiming Yang, Jaime G. Carbonell, Ruslan Salakhutdinov, Quoc V. Le: XLNet: Generalized Autoregressive Pretraining for Language Understanding. NeurIPS 2019: 5754-5764
[3]. Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, Dario Amodei: Language Models are Few-Shot Learners. NeurIPS 2020
[4]. Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, Veselin Stoyanov: RoBERTa: A Robustly Optimized BERT Pretraining Approach. CoRR abs/1907.11692 (2019)
[5]. Pasquale Salza, Christoph Schwizer, Jian Gu, Harald C. Gall: On the Effectiveness of Transfer Learning for Code Search. IEEE Trans. Software Eng. 49(4): 1804-1822 (2023)
[6]. Zhangyin Feng, Daya Guo, Duyu Tang, Nan Duan, Xiaocheng Feng, Ming Gong, Linjun Shou, Bing Qin, Ting Liu, Daxin Jiang, Ming Zhou: CodeBERT: A Pre-Trained Model for Programming and Natural Languages. EMNLP (Findings) 2020: 1536-1547
[7]. Xue Jiang, Zhuoran Zheng, Chen Lyu, Liang Li, Lei Lyu: TreeBERT: A tree-based pre-trained model for programming language. UAI 2021: 54-63
[8]. Daya Guo, Shuo Ren, Shuai Lu, Zhangyin Feng, Duyu Tang, Shujie Liu, Long Zhou, Nan Duan, Alexey Svyatkovskiy, Shengyu Fu, Michele Tufano, Shao Kun Deng, Colin B. Clement, Dawn Drain, Neel Sundaresan, Jian Yin, Daxin Jiang, Ming Zhou: GraphCodeBERT: Pre-training Code Representations with Data Flow. ICLR 2021
[9]. Daya Guo, Shuai Lu, Nan Duan, Yanlin Wang, Ming Zhou, Jian Yin: UniXcoder: Unified Cross-Modal Pre-training for Code Representation. ACL (1) 2022: 7212-7225
[10]. https://microsoft.github.io/CodeXGLUE/

正文完
 0