GitHub釋出了CodeSearchNet語料庫以及CodeSearchNet挑戰賽,以推動用自然語言搜尋程式碼的技術發展。CodeSearchNet語料庫是一個龐大的程式碼和自然語言註解資料集,讓研究人員可以用來訓練機器學習模型,並在CodeSearchNet挑戰排行榜上競爭模型的精準度。

搜尋程式碼以重複使用、呼叫或是查看其他人撰寫程式碼的方式,是開發者的日常之一,但是目前程式碼搜尋引擎的表現,與網頁搜尋引擎還有一大段距離,程式碼搜尋引擎還無法良好地理解使用者想要搜尋的目標,而GitHub也提到,當他們使用機器學習技術改善程式碼搜尋時,發現目前沒有標準來衡量改善結果的進展,不像是自然語言處理有GLUE基準,程式碼搜尋缺乏標準資料集來評估結果。

因此GitHub與機器學習新創公司Weights & Biases合作,發布了一個大型的資料集,以幫助資料科學家訓練模型,也推出CodeSearchNet挑戰賽的評估環境與排行榜,同時還附加了幾個用來展示目前技術水準的基準模型。

CodeSearchNet釋出的語料庫,來自GitHub自家平臺的開源專案,他們收集大量以Go、Java、JavaScript、PHP、Python和Ruby程式語言撰寫的函式資料集,以及其說明文件,官方使用解析器TreeSitter作為基礎架構,並發布了資料預處理工作管線,作為其他研究人員在程式碼中應用機器學習的起點。官方提到,雖然這項資料與程式碼搜尋沒有直接相關,但是可用來訓練模型,將程式碼與相關的自然語言描述配對起來。

完整經過預處理的CodeSearchNet語料庫,總共包含600萬種方法,其中200萬是具有文件字串或JavaDoc等相關說明文件,另外還有指向資料原始位置,像是儲存庫或是行數的元資料。GitHub將語義程式碼搜尋上的進展,發布成一系列基準模型,幫助研究人員開始程式碼搜尋研究工作。

而與CodeSearchNet語料庫搭配的是CodeSearchNet挑戰賽,CodeSearchNet挑戰賽的排行榜則使用帶有註解的資料集,來評估程式碼搜尋工具的品質,為此,GitHub收集了一組初始的程式碼搜尋查詢集,並由專業人員註解結果與查詢的相關性。

GitHub從Bing搜尋引擎收集了一般搜尋查詢具較高點擊率的程式碼,並與StaQC(Stack Overflow Question-Code)結合,產生99個針對程式碼相關概念的查詢,並使用基準模型從CodeSearchNet語料庫為每個查詢找出10個可能的結果,最後要求開發者、資料科學家和機器學習研究人員,為這些查詢的結果的相關性進行評分。

這些資料集和工具都在GitHub平臺上對外開放,而GitHub接下來會繼續擴展資料集,包括更多的程式語言、查詢以及註解,為下一個CodeSearchNet挑戰賽做準備。

臉書在今年7月的時候,也公開了自家自然語言程式碼搜尋工具NCS(Neural Code Search),同樣使用了GitHub儲存庫和熱門開發者論壇Stack Overflow上的資料,產生用作訓練模型的資料集,讓使用者可以直接搜尋「如何隱藏Android螢幕鍵盤?」這樣的問題,而模型會回傳相符的程式碼。


Advertisement

更多 iThome相關內容