🚀 Diff-Codegen-350M v2模型卡片
Diff-Codegen-350M v2是一款用於代碼生成的差異模型,由CarperAI發佈。該模型能根據文本片段和期望的更改描述,以差異格式智能修改文本,標記出新增、修改和刪除的行。
🚀 快速開始
你可以通過這個Colab筆記本查看一個簡單的模型調用示例。
✨ 主要特性
- 專業代碼修改:相較於普通代碼生成模型的少樣本提示,差異模型專門用於對現有代碼(尤其是較長的代碼段)提出智能修改建議,且能依據自然語言描述(以提交消息的形式提供)進行修改。
- 實驗研究價值:作為實驗性研究成果,該模型有望為代碼領域的研究社區提供幫助。
📦 安裝指南
文檔未提及安裝步驟,故跳過此章節。
💻 使用示例
文檔未提供代碼示例,故跳過此章節。
📚 詳細文檔
模型描述
diff-codegen-350m-v2是Salesforce的codegen-350m-mono的微調版本,在從GitHub收集的大量提交數據集上進行了訓練。它是一個實驗性的研究產物,發佈此結果和模型是希望能對更廣泛的研究社區(尤其是對代碼語言模型感興趣的人)有所幫助。
訓練數據
- 預訓練數據:該模型基於Salesforce的codegen-350m-mono進行微調。此語言模型首先在The Pile上進行預訓練,The Pile是一個由各種網絡語料組成的800GB數據集。關於The Pile的數據集說明和論文分別可在這裡和這裡找到。該模型隨後在多種語言的大量代碼數據語料上進行微調,最後在Python代碼數據集上進行微調。關於這些數據集的完整細節的Codegen論文可在這裡找到。
- 微調數據集:本次微調的數據集由GitHub的提交記錄組成,使用Google BigQuery公共數據集獲取,這是一個包含大量開源GitHub倉庫的最新公共快照。我們使用BigQuery對該數據集進行過濾,排除了星標少於100的倉庫,並進一步將查詢限制為僅包含開源非版權保護許可(如MIT、Apache等)的倉庫以及提交消息超過10個字符的提交。我們還將範圍限制在22種流行的編程語言、腳本語言和標記語言,包括Python、HTML、Bash腳本、SQL、C++等。過濾後得到了一個包含1900萬條提交記錄的數據集。我們的差異模型在來自BigQuery的提交數據集上進行訓練,這是一個來自GitHub倉庫的多種編程語言的大規模數據集。我們根據倉庫的星標數量(>100星)、許可證(僅包含開源非版權保護許可的代碼)和文件長度(排除長度超過2048個標記的文件)對數據集進行過濾。該模型使用Huggingface Codegen分詞器進行訓練。
訓練細節
- 訓練資源:該模型在由Stability AI提供的64塊A100 GPU上,對10.8億個標記進行了1個輪次的訓練。
- 輸入格式:每個文件在輸入語言模型時的格式如下:
<NME> {FILE_NAME}
<BEF> {INPUT_FILE}
<MSG> {COMMIT_MESSAGE}
<DFF> {FILE_DIFF}
預期用途和侷限性
由於模型規模較小且僅限於代碼領域,不應期望該模型能推廣到代碼以外的領域,也不能對大量代碼進行(成功的)推理。該模型旨在用於代碼生成系統的原型設計,僅用於實驗目的。此模型不提供任何保證,即使許可證允許,也不應在商業環境中使用。
侷限性和偏差
- 語言表現不均:由於上下文長度限制以及排除了星標少於100的倉庫,我們預計該差異模型在一些代表性不足的語言(如Lean或Coq)上的表現會較差。
- 代碼安全性:該模型的輸出不應被視為正確和安全的代碼。在任何安全至關重要的關鍵任務環境中,都不應使用此模型。運行該模型的輸出時,應儘可能在沙箱環境(如gVisor)中進行,因為模型很可能會生成可能刪除文件、發送HTTP請求或包含嚴重安全漏洞的代碼。
- 輸出質量問題:與其他語言模型一樣,diff-codegen容易產生幻覺,輸出可能存在偏差、刻板印象或有毒內容。從該模型生成內容時,無法保證輸出的真實性。
評估結果
完整的評估結果可查看我們的博客文章。
🔧 技術細節
該模型在64塊A100 GPU上,對10.8億個標記進行了1個輪次的訓練。輸入文件按照特定格式處理,使用Huggingface Codegen分詞器進行訓練。
📄 許可證
該模型採用MIT許可證。
致謝
感謝Honglu Fan、Harry Saini、Herbie Bradley、Reshinth Adithyan和Joel Lehman的努力!感謝Nitarshan Rajkumar對本模型卡片提供的反饋。