來源:機器之心
編輯:杜偉、陳萍
今日,Meta 的開源Llama 模型家族迎來了一位新成員—— 專攻代碼生成的基礎模型Code Llama。
作為Llama 2 的代碼專用版本,Code Llama 基於特定的代碼數據集在其上進一步微調訓練而成。
Meta 表示,Code Llama 的開源協議與Llama 2 一樣,免費用於研究以及商用目的。
相關論文《Code Llama: Open基金Models for Code》已經公佈,足足有47 頁,作者有25 位。
論文地址:https://ai.meta.com/research/publications/code-llama-open-foundation-models-for-code/
GitHub 地址:https://github.com/facebookresearch/codellama
Code Llama 系列模型有三個版本,參數量分別為7B、13B 和34B。並且支持多種編程語言,包括Python、C++、Java、PHP、Typescript (Javascript)、C# 和Bash。
Code Llama 穩定支持了最高10 萬token 的上下文生成。下圖2 為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 為研究和商業產品創建新的創新工具。
參考鏈接:
https://ai.meta.com/blog/code-llama-large-language-model-coding/
資訊來源:由0x資訊編譯自8BTC。版權歸作者所有,未經許可,不得轉載