问鼎CodeXGLUE榜单,华为云UniXcoder-VESO-v1算法取得突破

问鼎,codexglue,榜单,华为,unixcoder,veso,v1,算法,取得,突破 · 浏览次数 : 31

小编点评

**华为云PaaS技术创新团队基于UniXcoder模型,在公开测试数据集(CodeXGLUE)上的代码搜索任务评测结果上取得突破,在CodeXGLUE榜单上排名中第一。** **UniXcoder-VESO-v1算法的优势:** * 使用混淆代码片段和增加海量开源代码作为训练集。 * 提高批尺寸。 * 优化模型性能。 **结果:** * 平均倒数排序值(MRR)达到0.58。 * CodeXGLUE榜单上排名中第一。 **其他信息:** * 代码搜索任务使用语言模型和不同自然语言之间的映射关系。 * 该算法在公开测试数据集(CodeXGLUE)上的代码搜索任务中取得突破,这表明它是一种有效的代码搜索方法。

正文

摘要:华为云PaaS技术创新团队基于UniXcoder模型,在公开测试数据集(CodeXGLUE)上的代码搜索任务评测结果上取得突破,在CodeXGLUE榜单上排名中第一。

本文分享自华为云社区《代码语义搜索算法哪家强?华为云UniXcoder-VESO-v1算法取得突破,问鼎CodeXGLUE榜单第一名》,作者:华为云软件分析Lab 。

按照查询语句的类型,代码搜索可以分为代码关键字搜索和代码语义搜索。代码关键字搜索主要通过索引代码实体(如类、方法、变量等),查询定位代码实体的定义及引用;代码语义搜索的目标是支持开发人员基于自然语言方式来描述代码特性,从而进行相关代码的推荐与搜索。在开发人员编程过程中帮助其查找最佳代码示例实践和库使用示例,从而开发者可以通过功能描述搜索到代码。

目前,大多数代码搜索引擎仅支持代码关键字搜索,这需要开发者了解他们正在搜索的代码,例如类名、函数名、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/

 

点击关注,第一时间了解华为云新鲜技术~

与问鼎CodeXGLUE榜单,华为云UniXcoder-VESO-v1算法取得突破相似的内容:

问鼎CodeXGLUE榜单,华为云UniXcoder-VESO-v1算法取得突破

摘要:华为云PaaS技术创新团队基于UniXcoder模型,在公开测试数据集(CodeXGLUE)上的代码搜索任务评测结果上取得突破,在CodeXGLUE榜单上排名中第一。 本文分享自华为云社区《代码语义搜索算法哪家强?华为云UniXcoder-VESO-v1算法取得突破,问鼎CodeXGLUE榜单

接口防刷!利用redisson快速实现自定义限流注解

问题: 在日常开发中,一些重要的对外接口,需要加上访问频率限制,以免造成资��损失。 如登录接口,当用户使用手机号+验证码登录时,一般我们会生成6位数的随机验证码,并将验证码有效期设置为1-3分钟,如果对登录接口不加以限制,理论上,通过技术手段,快速重试100000次,即可将验证码穷举出来。 解决思

UE MultiLineTraceByChannel函数返回只有一个对象的问题

问题描述 MultiLineTraceByChannel,看函数名字是返回射线检测到的所有对象,实际使用过程中,发现返回的数组中只又一个对象。 Multi Line Trace by Channel 可以看下官方的文档解释: 此指南说明如何使用 Multi Line Trace by Channel

OpenStack 下 CentOS6.X 镜像网络初始化失败问题排查

问题表现 在我的 OpenStack 集群上迁移了一批老旧的镜像(从其他三方云平台过来的)发现这批镜像在使用 ConfigDrive 的方式注入配置初始化时无法对非首张网卡镜像初始化(后经过测试非 ConfigDrive 的数据源也不行)。 排查路径 首先检查 cloud-init 是否是正常工作的

升级到 MySQL 8.4,MySQL 启动报错:io_setup() failed with EAGAIN

问题 最近碰到一个 case,一台主机上,部署了多个实例。之前使用的是 MySQL 8.0,启动时没有任何问题。但升级到 MySQL 8.4 后,部分实例在启动时出现了以下错误。 [Warning] [MY-012582] [InnoDB] io_setup() failed with EAGAIN

使用explain优化慢查询的业务场景分析

问:你最害怕的事情是什么? 答:搓澡 问:为什么? 答:因为有些人一旦错过,就不在了 Explain 这个词在不同的上下文中有不同的含义。在数据库查询优化的上下文中,"EXPLAIN" 是一个常用的 SQL 命令,用于显示 SQL 查询的执行计划。执行计划是数据库如何执行查询的一个详细描述,包括它将

ETL服务器连接GaussDB(DWS)集群客户端配置

问题描述:给ETL的服务器上安装gsql的工具,用来连接GaussDB(DWS)集群,做数据抽取用 DWS:GaussDB(DWS) 8.2.1-ESL 1.获取软件包 登录FusionInsight Manager系统,在“集群”下拉列表中单击需要操作的集群名称。选择“更多 >->下载客户端->下

Lfu缓存在Rust中的实现及源码解析

综上所述,LFU算法通过跟踪数据项的访问频次来决定淘汰对象,适用于数据访问频率差异较大的场景。与LRU相比,LFU更能抵御偶发性的大量访问请求对缓存的冲击。然而,LFU的实现较为复杂,需要综合考虑效率和公平性。在实际应用中,应当根据具体的数据访问模式和系统需求,灵活选择和调整缓存算法,以达到最优的性...

.NET下 支持大小写不敏感的JSON Schema验证方法

问题 有很多应用程序在验证JSON数据的时候用到了JSON Schema。 在微服务架构下,有时候各个微服务由于各种历史原因,它们所生成的数据对JSON Object属性名的大小写规则可能并不统一,它们需要消费的JSON数据的属性名可能需要大小写无关。 遗憾的是,目前的JSON Schema没有这方

带有ttl的Lru在Rust中的实现及源码解析

TTL是Time To Live的缩写,通常意味着元素的生存时间是多长。 应用场景 数据库:在redis中我们最常见的就是缓存我们的数据元素,但是我们又不想其保留太长的时间,因为数据时间越长污染的可能性就越大,我们又不想在后续的程序中设置删除,所以我们此时需要设置过期时间来让数据自动淘汰。 sete