本文主要介紹主流代碼生成模型,總結了基于代碼生成的大語言模型,按照時間順序排列。
在了解代碼大語言模型之前,需要了解代碼相關子任務
-
代碼生成
-
文本生成代碼(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))
從llama2的4096token輸入改為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.