論文調研 | 一些開源的AI代碼生成模型調研及總結【更新于250313】

本文主要介紹主流代碼生成模型,總結了基于代碼生成的大語言模型,按照時間順序排列。

在了解代碼大語言模型之前,需要了解代碼相關子任務

  • 代碼生成

  • 文本生成代碼(Text to code):根據自然語言描述生成代碼

  • 重構代碼(Refactoring code):在不改變其功能的情況下更改源代碼的結構,通常是為了使其更加高效、可讀且易于維護。

  • 代碼到代碼的翻譯(Code-to-code):將一種編程語言編寫的代碼轉換為另一種同功能編程語言的過程。此過程也稱為代碼轉換、轉譯、代碼遷移或源到源翻譯。

模型論文及代碼

2020.09.18_CodeBERT

CodeBERT是在2020年提出的一個大型語言模型,旨在通過預訓練和微調的方式,增強源代碼理解和生成的能力。

數據集Dataset

  • Stackdataset:Github code repositories(Python, Java,JavaScript, PHP, Ruby, and Go)

模型框架Model Arc

Natural Language(NL),Programming Language(PL)

Objective 1:Masked Language Modeling(MLM)

Objective 2:Replaced Token Detection(RTD)

CodeSearchNet

Code to NL

CodeSearch

2021_CodeX [未開源]

CodeX是OpenAI?在2021年推出的大型語言模型,通過在多樣的編程任務上進行預訓練,旨在提升源代碼理解和生成的能力。

Key features(model)

  • Code-davinci-002 -> Max tokens 4000

  • code-cushman-001->Max tokens 2048

Programming languages

  • Python ,Javascript,Bash,c#...

Search Code Net

2022.02_AlphaCodeTransformer(seq2seq)

論文題目:Competition-Level Code Generation with AlphaCode

論文地址:2203.07814.pdf (arxiv.org)

代碼地址:

Demo:AlphaCode (deepmind.com)

2022_Polyglot

論文題目:Polyglot: Large Language Models of Well-balanced Competence in Multi-languages

代碼地址:EleutherAI/polyglot: Polyglot: Large Language Models of Well-balanced Competence in Multi-languages (github.com)

2023.01.27_PAL

論文題目:PAL: Program-aided Language Models

論文地址:[2211.10435] PAL: Program-aided Language Models (arxiv.org)

論文主要內容: 讓Code LLM生成代碼來解決一些NLP問題!!

摘要

大型語言模型 (LLM) 最近在測試時提供了一些示例(“小樣本提示”),展示了執行算術和符號推理任務的令人印象深刻的能力。這種成功很大程度上可以歸因于諸如“思維鏈”之類的提示方法,這些方法使用LLM來理解問題描述,將其分解為步驟,以及解決問題的每個步驟。雖然 LLM 似乎擅長這種逐步分解,但 LLM 經常在解決方案部分犯邏輯和算術錯誤,即使問題被正確分解。在本文中,我們提出了程序輔助語言模型(PAL):一種新穎的方法,它使用LLM來讀取自然語言問題并生成程序作為中間推理步驟,但將求解步驟卸載到運行時,例如Python解釋器。在PAL中,將自然語言問題分解為可運行的步驟仍然是LLM的唯一學習任務,而求解則委托給解釋器。我們在 BIG-Bench Hard 和其他基準測試的 13 個數學、符號和算法推理任務中展示了神經 LLM 和符號解釋器之間的這種協同作用。在所有這些自然語言推理任務中,使用 LLM 生成代碼并使用 Python 解釋器進行推理會產生比大型模型更準確的結果。例如,使用 Codex 的 PAL 在數學單詞問題的 GSM8K 基準測試中實現了最先進的少樣本精度,超過了使用思維鏈的 PaLM-540B,絕對是 15% 的 top-1。我們的代碼和數據在此?http URL?上公開提供。

與使用自由格式文本的 CoT 不同,PAL 將解決方案步驟卸載到編程運行時,例如 python 解釋器。

2023_Codegen2

CodeGen2是Salesforce開發的,可以進行infilling,并且支持更多的編程語言。這里的infilling應該是在插入代碼的含義。

2023_Codet5+

Salesforce的CodeT5 + 在指令調優上的效果,以更好地使模型與自然語言指令保持一致。

模型框架(Model Architecture)

方法(Method)

  • Span Denoising

  • Causal Language Modeling (CLM)

  • Text-Code Contrastive Learning

  • Text-Code Matching

  • Text-Code Causal LM

2023_SELF-DEBUGGING

Google→ SELF-DEBUGGING

2023_StarCoder

StarCoder是HuggingFace在BigCode基于GitHub數據訓練的一個代碼補全大模型。可以實現一個方法或者補全一行代碼。

15.5B LLM for code with 8k context and trained only on permissive data in 80+ programming languages:

  • Decoder-only Transformer with Fillin-the Middle,Multi-Query-Attention,and leaned absolute position embeddings.

  • Pretrainmodel Size : 64GB → BigCode OpenRAIL-M v1

2023.7.18_LLAMA2

Meta→ 2023_LLAMA2

2023.7_CodeGeeX2

2023.8.8_StableCode

Announcing StableCode — Stability AI

stabilityai/stablecode-instruct-alpha-3b · Hugging Face

Based on Bigcode,Instruction and response

2023.8.24_Code Llama

論文題目:Code Llama: Open Foundation Models for Code

論文地址:[2308.12950] Code Llama: Open Foundation Models for Code (arxiv.org)

代碼地址GitHub - facebookresearch/codellama: Inference code for CodeLlama models

官方博客:Code Llama: Llama 2 learns to code (huggingface.co)

?code llama就是在llama2模型的基礎上,利用代碼數據進行訓練和微調,提高llama2在代碼生成上的能力。

code llama提供了三種模型,每種模型包含7B,13B,34B三個尺寸,支持多種編程語言,如Python, C++, Java, PHP, Typescript (Javascript), C#, Bash等。

  • Code Llama,代碼生成的基礎模型;

  • Code Llama-Python,單獨針對于python的模型;

  • Code Llama-Instruct,根據人工指令微調的模型。

主要講解論文對應段落

2.3.代碼補全(Infilling)

代碼補全就是根據代碼的上下文預測代碼缺失的部分,比如在IDE中,對鼠標位置的代碼自動完成,文檔自動生成等。

將訓練的文本序列一部分移動到結尾,然后自回歸重新排序進行訓練。

將文本分成<prefix>,<middle>和<suffix>三部分(前,中,后),然后按2種方式排列。

PSM:即prefix,suffix,middle的順序,結構如下圖:

編輯

?SPM:即suffix,prefix,middle的順序,如下

<SUF>○Enc(suffix)○<PRE>○Enc(prefix)○<MID>○Enc(middle)

訓練時樣本一半按PSM格式,一半按SPM格式。

2.4.微調長上下文(long context fine-tuning (LCFT))

llama24096token輸入改為16384token輸入

為了將訓練成本限制在微調,參考RoPE線性插值的思路,只不過這里沒有采用插值,而是修改注意力的衰減周期。

2.5.策略微調(Instruction fine-tuning)

對于指令微調,最重要的還是構建更好的數據集。

  • 專有數據集(Proprietary dataset)

  • 指令數據集(self-instruct dataset)

2023.08.27_WizardCoder

Microsoft→WizardCoder?

代碼地址:https://github.com/nlpxucan/WizardLM/tree/main/WizardCoder

Demo:WizardCoder-Python-34B-V1.0

  • WizardLM(WizardLM: An Instruction-following LLM Using Evol-Instruct)

    • Instruction Evolver :

    • Instruction Eliminator

    • Evol-Instruct(Focuses on open-domain instruction data)

  • Fine-tune Starcoder-15B based on?WizardLM

2024.1.25_DeepSeekCoder

論文DeepSeek-Coder: When the Large Language Model Meets Programming -- The Rise of Code Intelligence

?DeepSeek-Coder是開源代碼模型,大小從 1.3B 到 33B 不等,在 2 萬億個token上從頭開始訓練。這些模型在高質量的項目級代碼語料庫上進行了預訓練,并采用具有 16K 窗口的填空任務來增強代碼生成和填充。論文表明,DeepSeek-Coder 不僅在多個基準測試的開源代碼模型中實現了最先進的性能,而且還超越了現有的閉源模型,如 Codex 和 GPT-3.5。

2024.11.12V3_Qwen2.5-Coder?

論文:Qwen2.5-Coder Technical Report

論文地址:https://arxiv.org/abs/2409.12186

論文代碼:https://github.com/QwenLM/Qwen2.5-Coder

阿里巴巴的Qwen2.5-Coder 是特定于代碼的 Qwen 大型語言模型(以前稱為 CodeQwen)的最新系列。截至目前,Qwen2.5-Coder 已覆蓋 0.5、1.5、3、7、14、320 億個參數的六大主流模型大小,滿足不同開發者的需求。Qwen2.5-Coder 在 CodeQwen1.5 的基礎上帶來了以下改進:

  • 在代碼生成、代碼推理和代碼修復方面有顯著改進。基于強大的 Qwen2.5,我們將訓練代幣擴展到 5.5 萬億,包括源代碼、文本代碼接地、合成數據等。Qwen2.5-Coder-32B 已成為當前最先進的開源 codeLLM,其編碼能力與 GPT-4o 相匹配。

  • 為實際應用程序(如 Code Agent)提供更全面的基礎。不僅提高了編碼能力,而且保持了其在數學和一般能力方面的優勢。

  • 長上下文支持高達 128K 個令牌。

2025.01.07V3_OpenCodeInterpreter

論文:OpenCodeInterpreter: Integrating Code Generation with Execution and Refinement將代碼生成與執行和優化集成

論文地址:https://arxiv.org/pdf/2402.14658

論文代碼:https://github.com/OpenCodeInterpreter/OpenCodeInterpreter

DEMO:https://opencodeinterpreter.github.io/


SOTA模型?


想要了解更多內容,可在小程序搜索🔍AI Pulse,獲取更多最新內容。

參考文獻

【1】Big Code Models Leaderboard - a Hugging Face Space by bigcode

【2】codefuse-ai/Awesome-Code-LLM: [TMLR] A curated list of language modeling researches for code (and other software engineering activities), plus related datasets.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72256.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72256.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72256.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【QT】-一文說清楚QT定時器怎么用

在 Qt 中&#xff0c;定時器&#xff08;QTimer&#xff09;是用來定時執行某些任務的非常有用的類。它可以幫助你在指定的時間間隔后重復執行某個函數。常見的用法是啟動一個定時器&#xff0c;每過一段時間自動執行某個操作&#xff0c;比如更新 UI、檢查狀態或發送數據等。 …

iOS OC匹配多個文字修改顏色和字號

1、傳入字符串數組&#xff0c;通過NSMutableAttributedString修改匹配文字 可以根據需要搞成匹配單個字符串 - (NSAttributedString *)applyFontSizeToText:(NSString *)text matchStrings:(NSArray<NSString *> *)matchStrings {NSMutableAttributedString *attribut…

3DS模擬器使用(pc+安卓)+金手指+存檔互傳

1、引言 3ds模擬器已經能夠在手機端近乎完美模擬了&#xff0c;那么多的3ds游戲&#xff0c;比玩手機游戲舒服多了。 本人是精靈寶可夢的老玩家&#xff0c;從第一世代就一直在玩&#xff0c;剛耍完NDS的第五世代&#xff0c;黑白系列。現在到寶可夢XY了&#xff0c;需要在3d…

Java EE Web環境安裝

Java EE Web環境安裝 一、JDK安裝與測試&#xff08;Windows環境&#xff09; 1. 安裝JDK 官網下載&#xff1a;Oracle JDK&#xff08;選擇Windows x64 Installer&#xff09;雙擊安裝包&#xff0c;按向導完成安裝 ? 2. 環境變量配置 右鍵【此電腦】→【屬性】→【高級…

探索CSS魔法:3D翻轉與漸變光效的結合

隨著前端技術的不斷發展&#xff0c;CSS不再僅僅局限于樣式設計&#xff0c;它也成為了實現富有互動性的動畫和特效的強大工具。本篇文章將向大家展示如何利用CSS的3D變換和漸變光效&#xff0c;打造一張“神秘卡片”&#xff0c;通過簡單的代碼實現炫酷的視覺效果。 1. 初識神…

C++ STL 深度解析:vector 的全面指南與進階技巧

一、底層架構深度剖析 1.1 內存管理機制 vector 通過三個指針實現動態內存管理&#xff1a; _start&#xff1a;指向分配內存的首元素&#xff08;begin()返回值&#xff09;_finish&#xff1a;指向最后一個元素的下一個位置&#xff08;end()返回值&#xff09;_end_of_st…

pom.xml中配置的repository,在編譯器下載依賴包沒生效,怎么解決

針對 pom.xml 中配置的倉庫&#xff08;repository&#xff09;未生效導致依賴下載失敗的問題&#xff0c;結合搜索結果和 Maven 依賴解析機制&#xff0c;以下是分步解決方案&#xff1a; 一、問題原因分析 鏡像覆蓋全局請求 若 settings.xml 中配置了鏡像&#xff08;mirror…

S7-1200 G2移植舊版本S7-1200程序的具體方法示例

S7-1200 G2移植舊版本S7-1200程序的具體方法示例 前期概要: S7-1200 G2必須基于TIA博途V20,之前的程序可通過移植的方式在新硬件上使用。 該移植工具可自動將TIA Portal 項目從 S7-1200 移植到更新的S7-1200 G2。 注意: 該插件支持在同一TIA Portal項目實例內將軟件和/或硬…

CNN SSP, ASPP, PPM 分割任務經典尺度聚合模塊

SSP&#xff1a;Spatial Pyramid Pooling 讓任意大小圖像最終輸出的特征維度始終固定&#xff0c;便于接全鏈接層。 4x4, 2x2,1x1區域的maxpooling&#xff0c;讓任意大小圖像最終輸出最終特征維度始終為 &#xff08;1641)*256 ASSP:Atrous Spatial Pyramid Pooling 不進行…

OpenHarmony-XTS測試

OpenHarmony-XTS測試 OpenHarmony-XTS測試環境搭建測試準備開始運行PS OpenHarmony-XTS測試 針對OpenHarmony版本進行XTS測試使用記錄。 windows環境。 以acts套件為例。 環境搭建 獲取測試套件&#xff0c;兩種方法 1&#xff09;官網下載&#xff1a;https://www.openharm…

文件系統 linux ─── 第19課

前面博客講解的是內存級文件管理,接下來介紹磁盤級文件管理 文件系統分為兩部分 內存級文件系統 : OS加載進程 ,進程打開文件, OS為文件創建struct file 和文件描述符表 ,將進程與打開的文件相連, struct file 內還函數有指針表, 屏蔽了底層操作的差異,struct file中還有內核級…

kali之netdiscover

kali之netdiscover Netdiscover 是 Kali Linux 中一款用于網絡發現和主機掃描的工具。它通過主動發送 ARP 請求來識別局域網中的活動主機&#xff0c;并顯示它們的 IP 地址、MAC 地址和網卡廠商信息。Netdiscover 特別適用于局域網內的主機發現和網絡映射。 1. Netdiscover 的…

【軟考-架構】5.2、傳輸介質-通信方式-IP地址-子網劃分

?資料&文章更新? GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目錄 傳輸介質網線光纖無線信道 通信方式和交換方式會考&#xff1a;交換方式 &#x1f4af;考試真題第一題第二題 IP地址表示子網劃分&#x1f4af;考試真題第一題第二題 傳輸…

G2o頂點與邊編程總結

G2o的頂點與邊屬于 HyperGraph 抽象類的繼承OptimizableGraph 的繼承。 BaseVertex<D,T> D是預測點的維度&#xff08;在流形空間的最小表示&#xff09;T是待估計vertex的數據類型&#xff0c;比如用四元數表達三維旋轉的話&#xff0c;T就是Quaternion 類型 // 頂點的…

【區塊鏈】以太坊

學習視頻源鏈接&#xff1a; https://www.bilibili.com/video/BV1Vt411X7JF/ 本文是根據肖老師的視頻進行的筆記記錄 bitcoin 1.0 區塊鏈 以太坊 2.0區塊鏈 以太坊 設置了 memory hard mining puzzle &#xff0c;這造成了asic resistance&#xff0c; 后續 proof of work &a…

凸優化算法學習筆記:決策單調性與 wqs二分

文章目錄 前言決策單調性單調矩陣&#xff0c;完全單調矩陣&#xff0c;蒙日陣決策單調性優化 d p dp dp線性 d p dp dp分治&#xff08;離線&#xff09;二分隊列&#xff08;在線&#xff09;SMAWK 區間 d p dp dp 練習題LOJ6039 w q s wqs wqs 二分&#xff08;蒙日陣最短…

Aop實現簡單基于日志記錄

目錄 一、基礎知識&#xff1a; 二、測試記錄接口的參數和結果 一、基礎知識&#xff1a; Before&#xff1a;用于執行目標方法之前的邏輯。After&#xff1a;用于執行目標方法之后的邏輯。AfterReturning&#xff1a;用于獲取目標方法返回值后的邏輯。AfterThrowing&#x…

【Nacos】服務發布之優雅預熱上線方案

目錄 一、背景二、注冊時機2.1、注冊機制2.2、分析源碼找到注冊時機 三、注冊前心跳健康檢測3.1、方案實施3.2、源碼分析3.3、優化代碼 四、流量權重配置五、總結5.1、整體完整流程&#xff1a;5.2、流程圖&#xff1a;5.1、優化方案完整代碼&#xff1a; 一、背景 有些面向廣…

接口自動化腳本優化的多個關鍵維度及具體方法總結

以下是優化接口自動化腳本的多個關鍵維度及具體方法&#xff0c;幫助提升測試效率、可維護性和可靠性&#xff1a; 1. 測試用例設計優化 維度優化方法參數化使用數據驅動&#xff08;如CSV、Excel、JSON&#xff09;&#xff0c;分離測試數據與邏輯&#xff0c;減少重復代碼。…

AI驅動的數字供應鏈安全情報預警服務:云脈XSBOM

先發制人&#xff0c;精準預警數字供應鏈中的安全風險 Pre-emptive Strategy, Accurate Warning of Security Risks in Digital Supply Chain 云脈XSBOM數字供應鏈安全情報預警依托懸鏡安全團隊強大的供應鏈管理監測能力和AI安全大數據云端分析能力&#xff0c;對全球數字供應…