Meta 近日釋出了一個基於 Llama 2 進行微調構建的大型語言模型 Code Llama。
(前情提要:ChatGPT企業版上線!OpenAI客製模型、共享對話… 六大功能一次看 )
(背景補充:AI辦案!台灣檢警靠「ChatGPT」破獲1.5億虛擬貨幣詐騙案 )
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、Typescript (Javascript)、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 – Python 和 Code 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 的效能如何?
HumanEval 和 Mostly Basic Python 程式設計 (MBPP) 是兩個常用編碼能力測試基準 —— HumanEval 用於測試模型根據文件字串完成程式碼的能力,MBPP 用於測試模型根據描述編寫程式碼的能力。
根據這兩個測試基準對 Code Llama 測試顯示,Code Llama 優於開源、特定程式碼的 Llama,並且優於 Llama 2 本身。例如,Code Llama 34B 在 HumanEval 上得分為 53.7%,在 MBPP 上得分為 56.2%,超越了 ChatGPT,但在 HumanEval 上仍遜於 GPT-4。
雖然 Code Llama 並未在測試中一騎絕塵,但這並不是 Code Llama 的全部,其另一個亮點就是再次微調。使用者可以通過對開源的 Code Llama 進行再次微調,構建出符合自己的需求的最佳版本。
Phind 最近根據自己的資料集上對 CodeLlama-34B 和 CodeLlama-34B-Python 進行了微調,其微調版本在 HumanEval 上分別實現了 67.6% 和 69.5% 的成績,這超過了 OpenAI 3 月份公佈的 GPT-4 的 67%。
相關連結:https://www.phind.com/blog/code-llama-beats-gpt4
實際使用對比 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
🔵 Code Llama:成功 +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
🔵 Code Llama:成功 +1
問題 5: 使用 Python。 給定一個輸入字串 s,反轉單詞的順序。
單詞被定義為非空格字元的序列。 s 中的單詞將至少由一個空格分隔。
返回由單個空格按相反順序連線的單詞字串。
請注意,s 可能在兩個單詞之間包含前導或尾隨空格或多個空格。 返回的字串應該只有一個空格來分隔單詞。 請勿包含任何額外空格。
示例 1:
- 輸入:s =「天空是藍色的」
- 輸出:「藍色是天空」」
🟢 ChatGPT:成功 +1
🔵 Code Llama:成功 +1
問題 6: 使用 Python。 給定一個字串 s 和一個整數 k,返回 s 中長度為 k 的任何子串中母音字母的最大數量。
英語中的母音字母有 「a」、「e」、「i」、「o」 和 「u」。
示例 1:
- 輸入:s =「leetcode」,k = 3
- 輸出:2
解釋:「lee」、「eet」 和 「ode」 包含 2 個母音。
🟢 ChatGPT:成功 +1
🔵 Code Llama:成功 +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
最終結果:
🟢 ChatGPT: 8/8
🔵 CodeLlama: 5/8
綜上,在實際使用效果中,Code Llama 與 ChatGPT 相比並未體現出明顯優勢,不過以上測試並不能完全成為判定依據。而且,開源的 Code Llama 要比 ChatGPT 更容易讓使用者根據需求訂製,或許能夠帶來更多的可能性。
📍相關報導📍
GPT-4突然變笨?OpenAI被質疑「省成本」導致性能下滑、改變運算模式