Last Updated on 2023-05-10 by Clay
介紹
BigCode
首先我們先來介紹 BigCode 吧!BigCode 是一個由 Hugging Face 和 ServiceNow 共同領導的開放性科學合作項目,目的是共同開發能夠應用於『程式設計』的大型語言模型(Large Language Model, LLM)。
而在最近這幾天(2023/05/04 – 2023/05/10),我偶然地看的了關於 StarCoder 的新聞、隨後又被同事推薦了說這是個很棒的模型。就這樣因緣際會地知道了這個專用於程式碼的大型語言模型。
作為一名 AI/NLP 工程師,自然是對於這個模型非常感興趣。
StarCoder
StarCoder 在 Hugging Face Model Hub 上已經可以找到了,分別是:
兩者都是針對程式碼設計、開發的大型語言模型,並在 GitHub 上獲得授權許可的資料進行訓練(還有這樣的授權?如果不嫌棄的話,我的程式碼很歡迎拿去訓練)。總之,這些訓練資料囊括了 80+ 種以上的程式語言,並且也收錄了凡舉 Git 提交、GitHub issues 和 Jupyer notebook 等檔案,或許我們可以期待他們對於解決 BUG 也有一定程度的能力。
與最近當紅的能應用於研究用途的開源大型語言模型 LLaMA 相似,開發團隊訓練了一個約 15.5B 參數量(約有一百五十五億參數量)的模型,處理了一兆個 tokens。
而 StarCoderBase 和 StarCoder 有什麼區別呢?實際上,StarCoder 就是 StarCoderBase 經過了 35B 的 Python tokens 資料的微調所得到的新模型。所以我們能夠想像,StarCoder 應當對於 Python 具有更精熟的產生能力。
接下來該簡單談談模型效果了。開發團隊發現 StarCoderBase 在流行的編程基準測試中優於現有的 Open Code LLMs,並在某方面(我認為需要強調一下、某方面)可能持平或超過 OpenAI 的 code-cushman-001,也就是原始的 Codex 模型。
另外,StarCoder 系列的模型上下文長度可以超過 8k 個 tokens,比許多開源的 LLMs 支援了更長的輸入,故更能處理較長的程式碼內容。另外我們也可以通過設計不同的 prompts,讓 StarCoder 模型成為技術助手,解釋程式碼或修改程式碼。
最後,StarCoder 系列的授權是 OpenRAIL,簡單查了一下應該是支援商業授權的,怪不得文檔中會說這樣的授權許可簡化了企業將模型集成到產品的過程。
訓練資料
StarCoder 系列的模型是在 The Stack 1.2 上進行訓練,並且這份資料集僅包含具有許可權的程式碼。如果你對於這方面有疑慮,並且是其程式碼的貢獻者,你可以選擇將自己的程式碼從資料集中刪除(參考 Am I in The Stack?)。
有趣的是,我一查之下驚訝地發現自己的 GitHub repo 還真的被包進去了。
然而我自然是不會選擇退出的,如果不介意的話請務必把我的其他 repo 也拿來當資料集!
評估模型效果
剛剛提到,開發團隊對 StarCoder 和幾個類似模型以及各種基準測試進行了全面評估。
一個流行的 Python 基準測試就是 HumanEval,可以測試在程式碼上訓練的大型語言模型的效果,訓練內容則是根據函式的命名或 docstring 來設計、補完該函式。開發團隊表示,即便 StarCoder 系列的模型規模較小,但仍然優於較大規模的語言模型,如 Google 的 PaLM、LaMDA 和 LLaMA,另外還優於 CodeGen-16B-Mono 和 OpenAI 的 code-cushman-001 (12B) 的模型。
有一個奇怪的問題是,這個模型會自動生成如 # Solution here 的註解部分,推測可能是因為此類註解會出現在範例、解答程式碼中。
而為了能夠生成實際解決的方案,開發團隊添加了 prompt(提示):
<filename>solutions/solution_1.py\n# Here is the correct implementation of the code exercise
而這顯著提高了 StarCoder 系列在 HumanEval 中的評分,從 34% 提高到甚至超過 40%,刷新了最新紀錄。
Model | HumanEval | MBPP |
---|---|---|
LLaMA-7B | 10.5 | 17.7 |
LaMDA-137B | 14.0 | 14.8 |
LLaMA-13B | 15.8 | 22.0 |
CodeGen-16B-Multi | 18.3 | 20.9 |
LLaMA-33B | 21.7 | 30.2 |
CodeGeeX | 22.9 | 24.4 |
LLaMA-65B | 23.7 | 37.7 |
PaLM-540B | 26.2 | 36.8 |
CodeGen-16B-Mono | 29.3 | 35.3 |
StarCoderBase | 30.4 | 49.0 |
code-cushman-001 | 33.5 | 45.9 |
StarCoder | 33.6 | 52.7 |
StarCoder-Prompted | 40.8 | 49.5 |
(補充)技術助手
StarCoder 除了非常會寫程式碼外,也可以嘗試建構一些 prompt 來讓這個模型充當技術助手,回答與程式設計相關的問題。
References
- STARCODER: MAY THE SOURCE BE WITH YOU (Paper)
- StarCoder – Code Completion Playground(可以試玩 StarCoder)
- StarCoder: A State-of-the-Art LLM for Code(Hugging Face 說明文件)