Meta 又出AI “神器”,開源免費的代碼大模型Code Llama 對比ChatGPT如何?

原文來源:AGI創新實驗室

圖片來源:由無界AI‌ 生成

Meta 近日發布了一個基於Llama 2 進行微調構建的大型語言模型Code Llama,可以使用文本提示生成代碼,並且開源,可供研究和商業用途。

Code Llama是針對代碼任務的公開LLM 的最先進技術,有可能使當前開發人員的工作流程更快、更高效,並降低學習編碼人員的進入門檻。 Code Llama 有潛力用作生產力和教育工具,幫助程序員編寫更強大、文檔更齊全的軟件。

Code Llama的工作原理

今年7 月,Meta(原Facebook)發布了免費可商用的開源大模型Llama 2。最新發布的Code Llama 是Llama2 的專門用於編碼的專用版本,是通過在其特定於代碼的數據集上進一步訓練Llama 2 來創建的,從同一數據集中採樣更多數據的時間更長。

總的來說,Code Llama 具有增強的編碼功能,建立在Llama 2 之上。它可以根據代碼和自然語言提示生成代碼和有關代碼的自然語言(例如,“給我寫一個輸出斐波那契序列的函數。”) 它還可用於代碼完成和調試。

Code Llama支持當今使用的許多最流行的語言,包括Python、C++、Java、PHP、Type (Java)、C# 和Bash。

Code Llama目前擁有三個參數版本:70億參數、130 億參數、340 億參數

每個版本都使用500B 代碼token 和代碼相關數據進行訓練。 70億和130億參數基礎模型和指令模型也經過了中間填充(FIM) 功能的訓練,允許它們將代碼插入到現有代碼中,這意味著它們可以支持開箱即用的代碼完成等任務。

這三種模型滿足不同的服務和延遲要求。例如,70億模型可以在單個GPU 上運行。 340 億模型返回最佳結果並提供更好的編碼輔助,但較小的70億和130 億模型速度更快,更適合需要低延遲的任務,例如實時代碼完成。

Code Llama模型提供了具有多達10 萬個上下文token 的穩定生成。所有模型都在16,000 個token 的序列上進行訓練,並在最多100,000 個token 的輸入上顯示出改進。

除了是生成更長程序的先決條件之外,擁有更長的輸入序列還可以為代碼法學碩士解鎖令人興奮的新用例。例如,用戶可以為模型提供來自其代碼庫的更多上下文,以使各代更相關。它還有助於調試較大代碼庫中的場景,在這種情況下,掌握與具體問題相關的所有代碼對於開發人員來說可能具有挑戰性。當開發人員面臨調試大量代碼時,他們可以將整個代碼長度傳遞到模型中。

Meta還微調了Code Llama 的兩個附加版本:Code Llama - PythonCode Llama - Instruct

  • Code Llama - Python是Code Llama 的語言專用變體,在Python 代碼的100B token 上進一步微調。
  • Code Llama - Instruct是Code Llama 的指令微調和對齊版本。指令調整繼續訓練過程,但目標不同。該模型接受“自然語言指令”輸入和預期輸出。這使得它能夠更好地理解人們對提示的期望。我們建議在使用Code Llama 進行代碼生成時使用Code Llama - Instruct 版本,因為Code Llama - Instruct 已經過微調,可以用自然語言生成有用且安全的答案。

但是不建議使用Code Llama 或Code Llama - Python 執行一般自然語言任務,因為這兩個模型都不是為遵循自然語言指令而設計的。 Code Llama 專門用於特定於代碼的任務,不適合作為其他任務的基礎模型。

Code Llama的性能如何?

Human和Mostly Basic Python 編程(MBPP) 是兩個常用編碼能力測試基準—— Human 用於測試模型根據文檔字符串完成代碼的能力,MBPP 用於測試模型根據描述編寫代碼的能力。 根據這兩個測試基準對Code Llama 測試顯示,Code Llama優於開源、特定代碼的Llama,並且優於Llama 2 本身。例如,Code Llama 34B 在Human 上得分為53.7%,在MBPP 上得分為56.2%,超越了ChatGPT,但在Human 上仍遜於GPT-4。

圖表來源:Meta

*CodeLlama-34B的微調模型已超過GPT-4? *

雖然Code Llama 並未在測試中一騎絕塵,但這並不是Code Llama 的全部,其另一個亮點就是再次微調。用戶可以通過對開源的Code Llama 進行再次微調,構建出符合自己的需求的最佳版本。

Phind最近根據自己的數據集上對CodeLlama-34B 和CodeLlama-34B-Python 進行了微調,其微調版本在Human 上分別實現了67.6% 和69.5% 的成績,這超過了OpenAI 3 月份公佈的GPT-4的67%。

相關鏈接:

實際使用對比ChatGPT vs. Code Llama

首先,這次對比中使用了GPT-3.5 版本的ChatGPT,以及Perplexity 平台支持的Code Llama。我們將提出8 個問題,以此來對比二者是否成功生成代碼。

問題1:

“使用Python。 給定兩個字符串word1 和word2。 通過以交替順序添加字母來合併字符串,從word1 開始。 如果一個字符串比另一個字符串長,請將附加字母附加到合併字符串的末尾。

返回合併後的字符串。

示例1: •輸入:word1 =“abc”,word2 =“pqr” •輸出:“apbqcr”

🟢 ChatGPT:成功+1 🔵 火焰代碼:成功+1

問題2:

“使用Python。 給定一個字符串s,僅反轉字符串中的所有元音並返回它。

元音為“a”、“e”、“i”、“o”和“u”,它們可以以小寫和大寫形式出現多次。

示例1:

輸入:s =“你好” 輸出:“霍爾”

🟢 ChatGPT:成功+1 🔵 Code Llama:失敗+0

問題3:

“使用Python。 給定一個整數數組nums,將所有0 移至其末尾,同時保持非零元素的相對順序。 請注意,您必須就地執行此操作,而不製作數組的副本。

示例1:

輸入:nums = [0,1,0,3,12] 輸出:[1,3,12,0,0]”

🟢 ChatGPT:成功+1 🔵 Code Llama:失敗+0

問題4:

“使用Python。 你有一個長長的花壇,其中有些地塊種植了,有些則沒有。 但是,相鄰的地塊不能種植花卉。 給定一個包含0 和1 的整數數組花壇,其中0 表示空,1 表示非空,以及一個整數n,如果可以在花壇中種植n 朵新花而不違反無相鄰花規則,則返回true,否則返回false。

示例1: 輸入:花壇= [1,0,0,0,1], n = 1 輸出:true 示例2: 輸入:花壇= [1,0,0,0,1], n = 2 輸出:false

🟢 ChatGPT:成功+1 🔵 火焰代碼:成功+1

問題5:

“使用Python。 給定一個輸入字符串s,反轉單詞的順序。

單詞被定義為非空格字符的序列。 s 中的單詞將至少由一個空格分隔。

返回由單個空格按相反順序連接的單詞字符串。

請注意,s 可能在兩個單詞之間包含前導或尾隨空格或多個空格。返回的字符串應該只有一個空格來分隔單詞。請勿包含任何額外空格。

示例1: 輸入:s =“天空是藍色的” 輸出:“藍色是天空””

🟢 ChatGPT:成功+1 🔵 火焰代碼:成功+1

問題6:

“使用Python。 給定一個字符串s 和一個整數k,返回s 中長度為k 的任何子串中元音字母的最大數量。 英語中的元音字母有“a”、“e”、“i”、“o”和“u”。

示例1: 輸入:s =“leetcode”,k = 3 輸出:2 解釋:“lee”、“eet”和“ode”包含2 個元音。

🟢 ChatGPT:成功+1 🔵 火焰代碼:成功+1

問題7:

“使用Python。 給定一個字符串s,其中包含星號*。

通過一次操作,您可以:

在s 中選擇一顆星。

刪除其左側最接近的非星號字符,並刪除星號本身。

刪除所有星星後返回字符串。

示例1: 輸入:s =“leet**cod*e” 輸出:“lecoe””

🟢 ChatGPT:成功+1 🔵 Code Llama:失敗+0

問題8:

“使用Python。 給定一個表示每日溫度的整數溫度數組,返回一個數組答案,其中answer [i] 是在第i天之後您必須等待的天數才能獲得較溫暖的溫度。如果未來沒有一天可以這樣做,則保留answer [i] == 0。

示例1: 輸入:溫度= [73,74,75,71,69,72,76,73] 輸出:[1,1,4,2,1,1,0,0]”

🟢 聊天GPT:+1 🔵 代碼駱駝:+1

最終結果:

🟢 聊天GPT:8/8 🔵CodeLlama:5/8

綜上,在實際使用效果中,Code Llama 與ChatGPT 相比並未體現出明顯優勢,不過以上測試並不能完全成為判定依據。而且,開源的Code Llama 要比ChatGPT 更容易讓用戶根據需求定制,或許能夠帶來更多的可能性。

參考資料:

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 留言
  • 分享
留言
0/400
暫無留言
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)