摘要:华为云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主页链接:PaaS技术创新Lab-华为云

参考文献

  • [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算法取得突破相关推荐

  1. 重磅榜单 | 国内云服务企业估值50强,【友盟+】位列其中。

    授权转自爱分析,微信号:ifenxicom 云服务是互联网和软件服务企业的金矿.谷歌.微软.亚马逊.甲骨文还有阿里巴巴都将发展云服务上升为最重要的公司战略之一.同时一大批新兴企业Twilio.钉钉纷纷 ...

  2. 63家企业上榜!华为云优秀合作伙伴公布!

    云计算作为当前企业IT基础架构技术的不二之选,已走过探索实践阶段,迎来了多样化全面化的发展时期. 今天我们分享耳熟能详的华为云. (一)华为云是什么 华为云是华为的云服务品牌,致力于为全球客户提供领先 ...

  3. 华为云文字识别深层算法突破 助力复产复工

    随着新冠疫情影响减弱,全国各地都在逐步全面复工.2020文字识别狂欢季,狂欢已开启,等你来加入! 19款OCR类产品全线降价50%,助力证类识别.财务报销审核.合同录入与审核等场景AI落地,提升工作效 ...

  4. CSDN热榜、华为云博客都可用来练习Python scrapy 爬虫

    这篇博客补充一下 scrapy 选择器相关知识. scrapy 选择器 scrapy 框架自带数据提取机制,相关内容被称为选择器 seletors,其通过 XPath,CSS 表达式可以选择 HTML ...

  5. 华为云发布国内首个 AI 模型市场,加速企业 AI 应用落地

    华为云在 3 月 21 日的 2019 华为中国生态伙伴大会上,正式发布华为云 AI 市场:同时宣布投入专项激励,在 AI 市场上帮助开发者.合作伙伴加速企业的 AI 应用落地. 华为云 AI 市场是 ...

  6. 破51项国际榜单纪录!解读华为云擎天架构调度求解引擎

    摘要:华为云擎天调度与算法团队近日刷新PDPTW问题榜单中51项算例的世界最好记录. 华为云擎天调度与算法团队近日刷新PDPTW问题榜单中51项算例的世界最好记录.该榜单自1990年起由科学工业研究院 ...

  7. 以赛代练,华为云硬核技术加速普惠AI落地

    ▼更多精彩推荐,请关注我们▼ "怎么样,参加一把?有20万元的资金呢!" "这是针对企业和专业开发者的大赛吧?" "似乎并没有太高的门槛--" ...

  8. KubeCon直击 | 华为云以技术布道“云边端芯”

    [6月24-26日,中国,上海] 今天,全国乃至世界各地的技术专家.开发者齐聚上海滩,只为一场云原生技术盛会:KubeCon+CloudNativeCon+OpenSourceSummit(以下简称& ...

  9. 阿里云、腾讯云、华为云哪个好?迄今最全面的云服务评测报告出炉(转)

    阿里云.腾讯云.华为云哪个好?迄今最全面的云服务评测报告出炉 云计算厂商到底哪家强,各家有各家的说法,今天就来跟你聊一聊,各家厂商的云计算技术到底怎么样.我选取了国内知名度比较高的几家厂商,通过弹性计 ...

最新文章

  1. 周杰伦林俊杰李宗盛快失业了!有了AI,未来人人都能秒变作曲家
  2. 联科集团携手阿里云发布科研混合云平台 共建科研教育新生态
  3. Windows Server 2008 R2 搭建DNS服务器(转)
  4. 数据中心UPS电源节能降耗的四大原则
  5. LeetCode-73. Set Matrix Zeroes
  6. 使用xUnit为.net core程序进行单元测试(3)
  7. UILabel 宽高自适应
  8. poatman32位下载_Postman.dll下载|Postman.dll下载官方版【32位|64位】-太平洋下载中心...
  9. [转]关于c#winform禁用关闭按钮的方法
  10. itextpdf使用
  11. iOS 知名公司资讯汇集~招聘内推
  12. 灰灰考研c语言讲义,【灰灰考研】操作系统复习全书.pdf
  13. BZOJ 1631==USACO 2007== POJ 3268 Cow Party奶牛派对
  14. rtmp 发送h264包,主要是sps,pps,i帧和非i帧
  15. Linux C 编程开发环境(工具链,编译,汇编,链接,库)基础知识与实践
  16. 通过Value获取JSON中对应的KEY
  17. 华师计算机设计大赛,广东省首届高校大学生计算机设计大赛在华师举行
  18. linux rm-rf误删文件 思路
  19. Ichorbio/艾美捷 研究级阿达木单抗生物仿制药
  20. python 异步文件读写_Python中使用asyncio 封装文件读写

热门文章

  1. openpnp - 顶部相机辅助光的选择
  2. 做一个简单的二级导航
  3. 孙杨夺下奥运金牌究竟有多艰难?孙杨的一番话让人动容!
  4. 开心截图,拖拽大作战
  5. 10、XCTF xff_referer
  6. 身份证最后一位校验位验证
  7. 卡方检验适用条件及R*C交叉表
  8. Python破解网易云音乐下载版权限制
  9. python 矩阵列拼接_numpy数组拼接简单示例
  10. Html与CSS的爱恨情仇第一式---第一系列