Meta 的開源 Llama 模型家族迎來了一位元新成員 —— 專攻程式碼生成的基礎模型 Code Llama。
作為 Llama 2 的程式碼專用版本,Code Llama 基於特定的程式碼資料集在其上進一步微調訓練而成。
Meta 表示,Code Llama 的開源協議與 Llama 2 一樣,免費用於研究以及商用目的。
相關論文《Code Llama: Open Foundation Models for Code》已經公布,內容有 47 頁,作者有 25 位。
Code Llama 系列模型有三個版本,參數量分別為 7B、13B 和 34B。並且支援多種程式設計語言,包括 Python、C++、Java、PHP、Typescript (Javascript)、C# 和 Bash。
Code Llama 穩定支持了最高 10 萬 token 的上下文生成。下圖為 Code Llama 的微調流程。
就其效果來說,Code Llama 的不同版本在 HumanEval 和 MBPP 資料集上的一次生成通過率(pass@1)都可以超越 GPT-3.5。
另外,Code Llama 的「Unnatural」34B 版本在 HumanEval 資料集上的 pass@1 接近了 GPT-4(62.2% vs 67.0%)。Meta 沒有發表這個版本,但透過一小部分高品質程式設計資料的訓練做到了明顯的效果改進。
這個特殊版本引起了很多人的注意,其中就有特斯拉前 AI 總監、回歸 OpenAI 的 Andrej Karpathy。
文中雖然提到它是「在 15000 個 unnatural 指令上微調的 Code Llama-Python 34B 版本」,但 Karpathy 仍然對這個「神秘的名稱、模糊的描述、碾壓其他的保密模型」感到很好奇。
Code Llama 如何工作
Code Llama 程式設計能力非常強,它可以根據程式碼和自然語言提示產生程式碼(例如使用者輸入提示「幫我寫一個輸出費波那契數的函數。」) 它還可幫助使用者進行程式碼補全和調試程式碼。
三個參數版本的 Code Llama 模型都使用了 500B 的程式碼 tokens 和程式碼相關資料進行訓練。7B 和 13B 基礎和指令模型也經過了 FIM(fill-in-the-middle)訓練,從而允許將程式碼插入到現有程式碼中,這意味著它們可以支援開箱即用的程式碼補全等任務。
下表為 Code Llama 的訓練資料集。
有了這三種模型,不同的服務和延遲要求都能得到滿足。例如,7B 模型可以在單個 GPU 上運行;34B 模型能夠返回最佳結果並提供更好的程式設計輔助,但就速度而言,較小的 7B 和 13B 模型速度更快,更適合低延遲任務,例如即時程式碼補全。
Code Llama 不僅提供了多達 100000 個上下文 token 的穩定生成,所有模型的訓練 token 序列也高達 16000。
除了作為生成更長程式的先決條件外,擁有更長的輸入序列也為 Code Llama 帶來新的功能。例如,使用者可以為模型提供來自他們程式碼庫的更多上下文,以使生成的程式碼更相關。
值得一提的是,Meta 更進一步微調了 Code Llama 的兩個附加變體:Code Llama - Python和 Code Llama - Instruct。
Code Llama-Python 是 Code Llama 的一種變體,其在 Python 程式碼的 100B token 上進一步微調。下表為 Code Llama-Python 的訓練資料集。
Code Llama - Instruct 是 Code Llama 的指令微調和對齊變體,能夠更好地理解輸入提示。Meta 建議在使用 Code Llama 進行程式碼生成時使用 Code Llama - Instruct 變體,因為 Code Llama - Instruct 已經過微調,可以用自然語言生成有用且安全的答案。
Meta 表示,他們不建議使用 Code Llama 或 Code Llama - Python 執行一般的自然語言任務,因為這兩個模型都不是為遵循自然語言指令而設計的。Code Llama 專門用於特定於程式碼的任務,不適合作為其他任務的基礎模型。
使用 Code Llama 模型時,使用者必須遵守許可和使用政策。
Code Llama 性能如何
Meta 使用了 HumanEval 和 MBPP(Mostly Basic Python Programming)兩個程式設計基準進行測試。其中,HumanEval 測試模型基於文字字串(docstrings)完成程式碼的能力,MBPP 測試模型基於描述編寫程式碼的能力。
結果表明,Code Llama 的性能優於開源、特定於程式碼任務的 LLM,並且優於自家 Llama 2。例如,Code Llama 34B 在 HumanEval 上得分為 53.7%,在 MBPP 上得分為 56.2%,與其他最先進的開源解決方案相比是最好的,與 ChatGPT 相當。
不過,Code Llama 也存在風險,Meta 表示構建負責任地 AI 模型至關重要,他們在發表 Code Llama 之前採取了許多安全措施。作為紅隊測試工作的一部分,Meta 對 Code Llama 生成惡意程式的風險進行了定量評估。他們創建了一些提示,以試圖讓模型生成惡意程式,並將 Code Llama 對這些提示的回應與 ChatGPT (GPT3.5 Turbo) 進行比較。結果發現,Code Llama 的回答更安全。
由此看來,程式設計能力不是特別強的 Llama 2,這個坑已被 Code Llama 填上了。Meta 希望 Code Llama 的出現能夠激勵其他研究者基於 Llama 2 為研究和商業產品創建新的創新工具。
資料來源:
加入電腦王Facebook粉絲團