精讀一篇論文需要多久,CodeX論文精讀
精讀一篇論文需要多久,CodeX論文精讀
論文:《Evaluating Large Language Models Trained on Code》
下載地址:https://arxiv.org/pdf/2107.03374.pdf
簡介
Copilot的核心技術:給定函數名和功能描述,可以自動進行代碼補全,或者給定代碼,給出相關文檔
作者團隊收集了Github上所有的不重復的python代碼,總計179GB,并進行了簡單過濾(去掉了過大的文件(>1MB)和過長的代碼(>100行或單行超過1000個字符)),在數據集上面訓練了一個GPT3模型
效果
精讀一篇論文需要多久、作者團隊手動編寫了164個函數(避免數據泄漏),每個函數包括代碼、文檔以及單元測試,平均每個問題包括7.7個測試樣例,用于評估模型。Codex 12億參數的模型能解決28.8%的問題,3億參數的模型能解決13.2%的問題,作者團隊又收集了一個跟測試集差不多的數據集用于模型微調,微調以后,得到Codex-S可以解決37.7%的問題。而使用 repeated sampling,即運行一百次模型,只要有一個輸出解決了問題就算成功的話,那么Codex-S能解決77.5%的問題(CodeX能解決70.2%),而如果選擇100個輸出中概率最高的輸出,則能解決44.5%的問題。
細節
1. 目標函數沒有使用BLEU(困惑度),因為代碼不同于自然語言,即使特別相似,但仍然可能不是一個合法的語句,作者使用pass@k來評估模型,即生成n個輸出(n>k),從中隨機抽取k個輸出,輸出通過單元測試的概率
穩定實現
2. 輸出代碼的測試在沙盒中進行
3. 在GPT3原有模型上微調并不能取得更好的效果,但會加速收斂
精讀與泛讀議論文,4. 當模型輸出‘\nclass’, ‘\ndef’, ‘\n#’, ‘\nif’, or‘\nprint’等語句時,模型會終止推理,輸出結果
5. 使用nucleus sampling(核采樣):選擇概率總和p=95%的前k個輸出用于評估模型
6. 對輸出做softmax得到概率之前,會除以一個超參數Temperature,來調節不同輸出之間的概率差距,當pass@k中的采樣數k越大時,T越大效果越好
7. 收集了跟測試集類似的數據集用于微調,1)從各種比賽中收集賽題(大約一萬個),2)從Continuous Integration中收集了約40000個函數和單元測試,并過濾(CodeX對每個問題生成一百個輸出,如果能解決通過測試用例則保留該樣本,反之則去掉(不能通過表示該問題太難或測試用例有問題)),在這個數據集上繼續訓練,訓練方式相同,只是該數據集有“標準答案”,得到模型Code-S
8. 使用收集到的github數據集,重新訓練一個GPT3模型用于反向生成文檔,Codex-D,評測Codex-D模型好壞的方式是,一是人閱讀文檔評測模型好壞,二是使用生成的文檔重新生成代碼,看能否通過單元測試
模型局限性
高級英語精讀精解和教材全解。1. 樣本有效性不夠,需要訓練很多的代碼,模型才能輸出比較簡單的實驗
2. Prompt應該怎么寫才能獲得比較理想的代碼,作者找了13 basic building block(對字符串做一些簡單的操作:如改變大小寫、變換位置等),將文檔塊任意串起來,發現文檔越長,生成代碼的質量越差,說明docstring不宜過長
3. 對于精確、復雜的數學問題很難生成正確的代碼
模型潛在的影響
1. 過度依賴:
語言學教程精讀精解。人可能會過度依賴生成的代碼,如果使用者不仔細審查代碼,可能會給程序帶來潛在的問題
2. Misalignment:模型足夠復雜的時候,可能能輸出期望的代碼,但如果給定一個docstring,可能只能輸出一個跟訓練數據風格相似,看上去正確,但并不是期望的代碼
3. github男性用戶居多,所寫的代碼可能包含性別偏見
4. 市場和經濟:
很多程序員可能會失業?
語言學精讀精解PDF第5版,如果訓練數據里的代碼對于某些包使用較多,可能導致某些特別的工具使用率增多
5. 安全:
可能某些人用它寫病毒和惡意軟件
6. 訓練這樣一個模型需要使用很多資源
7. 法律:
如何精讀論文?使用的是公開代碼,fair use(對公共社會有好處的話并沒有什么問題),但用于商業行為可能會有法律風險
生成的代碼可能跟別人一模一樣,可能存在抄襲別人具有版權或者專利保護的代碼的風險
總結
作者爬了很多github的代碼,訓練了一個GPT3的模型,為了評估模型的效果,準備了146到題用于測試,發現大概能解決大概30%的題,效果還不錯,為了進一步提高分數,又收集了一個跟測試集相似的數據集,在上面微調。