IBM 為翻譯和驗證程式碼的機器學習系統開放 CodeNet

IBM 推出了 CodeNet 計劃,旨在為研究人員提供一個資料集,使他們能夠嘗試使用機器學習技術來建立程式語言翻譯器、程式碼產生器和分析器。 CodeNet 包含 14 萬個程式碼範例,可解決 4053 個常見程式設計問題。 集合總共包含約 500 億行程式碼,涵蓋 55 種程式語言,既有 C++、Java、Python 和 Go 等現代語言,也有 COBOL、Pascal 和 FORTRAN 等傳統語言。 該專案的開發在Apache 2.0許可下分發,資料集計劃以公共領域的形式分發。

這些範例帶有註釋,並以不同的程式語言實作相同的演算法。 預計所提出的集合將有助於訓練機器學習系統並在翻譯和機器代碼解析領域開發創新,類似於 ImageNet 帶註釋的圖像資料庫如何幫助模式識別和電腦視覺系統的開發。 各種程式設計競賽被認為是收集形成的主要來源之一。

與基於翻譯規則實現的傳統翻譯器不同,機器學習系統可以捕獲並考慮程式碼使用的上下文。 從一種程式語言轉換為另一種程式語言時,上下文與從一種人類語言轉換為另一種人類語言一樣重要。 缺乏上下文考慮導致程式碼無法從 COBOL 等遺留語言轉換。

擁有各種語言的演算法實現的大型資料庫將有助於創建通用機器學習系統,該系統不是在特定語言之間直接翻譯,而是獨立於特定程式語言來操縱更抽象的程式碼表示。 這樣的系統可以用作翻譯器,將任何支援的語言傳輸的程式碼翻譯為其內部抽象表示,然後可以從中產生各種語言的程式碼。

該系統還能夠執行雙向轉換。 例如,銀行和政府機構繼續使用過時的 COBOL 語言的專案。 基於機器學習的翻譯器將能夠將 COBOL 程式碼轉換為 Java 表示,並在必要時將 Java 片段翻譯回 COBOL 程式碼。

除了語言之間的翻譯之外,還提到了 CodeNet 的應用領域,例如創建智慧代碼搜尋系統和自動化克隆檢測,以及開發優化器和自動程式碼校正系統。 特別是,CodeNet 中提供的範例配備了描述效能測試結果、生成的程式大小、記憶體消耗和狀態的元數據,這使我們能夠區分正確的程式碼和有錯誤的程式碼(為了區分正確的程式碼和錯誤的程式碼,集合中特別包含有錯誤的範例,其比例為 29.5%)。 機器學習系統可以考慮此元資料來產生最佳程式碼或識別分析程式碼中的迴歸(系統可以理解提交程式碼中的演算法未最佳實作或包含錯誤)。

來源: opennet.ru

添加評論