Facebook “TransCoder AI”可在Java、Python 和C++ 之間轉換代碼
Facebook研究人員表示,他們已經開發出了一種名為 TransCoder AI 的“神經編譯器” ,該系統可以將代碼從一種高級編程語言(如C ++、Java和Python)轉換為另一種。
將現有的代碼庫遷移到更現代或更高效的語言需要大量的資源,包括財務和人力。譬如,澳大利亞聯邦銀行在5 年的時間里花費了大約7.5 億澳元,將其平台從COBOL 轉換為Java。而從理論上講,轉編譯器可以則幫助消除從頭重寫代碼所需的費用。但是,由於源語言和目標語言都具有不同的語法、變量類型、標準庫函數和平台API,因此這個在實踐中其實很難構建。
據介紹,Facebook 的TransCoder AI 則採用了一種無監督的學習方法來應對這些挑戰。它可以在無人監督的情況下不受監督地運行,從而在沒有標籤的情況下在數據集中找到未檢測到的模式,比基於規則數據集的模型要高效得多。
無論使用哪種編程語言,神經編譯器都可以將代表相同指令的代碼段映射到相同代碼段。一位共同作者寫道:“ TransCoder 可以輕鬆地推廣到任何編程語言,不需要任何專業知識就可以將代碼從一種編程語言轉換為另一種編程語言,並且在很大程度上優於商業解決方案。我們的結果表明,通過向解碼器添加簡單的約束以確保生成的函數在語法上是正確的,或者通過使用專用架構,可以輕鬆解決該模型所犯的許多錯誤。”
TransCoder AI 的準確性
Facebook 研究人員在超過280 萬個開源存儲庫中的公開代碼上對TransCoder AI 進行了訓練,以專注於功能級別的代碼轉換。
為了評估TransCoder AI 的性能,他們從GeeksforGeeks 中選擇了852 個C ++、Java 和Python 並行函數。GeeksforGeeks是一個在線平台,用於收集編寫代碼時的問題,並提供多種編程語言的解決方案。
利用以上兩個數據,他們開發了一個名為”計算精度(computational accuracy)”的新指標,用於檢查翻譯後的函數在輸入相同的情況下是否會產生與源語言相同的輸出。
結果
這是AI 從以下位置轉換代碼時獲得的結果的準確性水平:
- C++ to Java: 74.8%
- C++ to Python: 67.2%
- Java to C++: 91.6%
- Java to Python: 68.7%
- Python to Java: 56.1%
- Python to C++: 57.8%
研究人員表示,TransCoder AI 已經展示出對每種語言(Java、Python 和C ++)的語法及其數據結構的理解。它甚至能夠正確地調整每種語言的庫,同時適應小的修改–例如,重命名輸入中的一個變量。儘管Transcoder 並非十分完美,無法在代碼生成過程中考慮某些變量類型。但是,它的性能確實優於已有的利用專家知識手動構建的框架。