摘要:華為云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隸屬于華為云,致力于綜合利用軟體分析、資料挖掘、機器學習等技術,為軟體研發人員提供下一代智能研發工具服務的核心引擎和智慧大腦,我們將聚焦軟體工程領域硬核能力,不斷構筑研發利器,持續交付高價值商業特性!加入我們,一起開創研發新“境界”!(詳情歡迎聯系 [email protected];[email protected])
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/
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/552520.html
標籤:其他
上一篇:Python Numpy 切片和索引(高級索引、布爾索引、花式索引)
下一篇:返回列表
