Centrala begrepp
CodeRosetta 是一種新型的編碼器-解碼器轉換器模型,專為在程式語言及其高效能運算 (HPC) 擴展之間進行翻譯而設計,透過創新的訓練目標和無監督學習方法,展現出優於現有方法的效能,並為 Fortran 到 C++ 等複雜翻譯任務開闢了新的可能性。
Sammanfattning
論文資訊
標題:CodeRosetta:突破無監督程式碼翻譯在平行程式設計領域的界限
作者:Ali TehraniJamsaz, Arijit Bhattacharjee, Le Chen, Nesreen K. Ahmed♢, Amir Yazdanbakhsh♠, Ali Jannesari
機構:愛荷華州立大學、思科、Google DeepMind
發表:NeurIPS 2024
研究目標
本研究旨在開發一種能夠在程式語言及其高效能運算 (HPC) 擴展之間進行自動翻譯的模型,特別是針對 C++ 到 CUDA 和 Fortran 到 C++ 的翻譯任務。
方法
- 模型架構: CodeRosetta 採用編碼器-解碼器轉換器模型,並結合了新的預訓練和訓練目標。
- 預訓練:
- 跨語言遮罩語言建模: 使用 C++ 和目標語言(CUDA 或 Fortran)的組合數據集進行訓練,使模型能夠學習跨語言的程式設計概念和語法結構。
- 抽象語法樹實體識別: 訓練模型識別和分類程式碼中的各種語法組成部分,例如函數、變數和常數。
- 訓練:
- 去噪自動編碼: 使用自適應雜訊注入機制,包括加權標記丟棄、插入和自適應損壞率,訓練模型從受干擾的輸入中重建原始程式碼。
- 反向翻譯: 利用模型的雙向能力,在訓練過程中進行源到目標和目標到源的翻譯,形成弱監督學習迴路。
- 可選步驟: 使用大型語言模型(如 GPT-4 和 Gemini Ultra)生成合成數據,以進一步微調 CodeRosetta。
主要發現
- 在 C++ 到 CUDA 翻譯任務中,CodeRosetta 的效能優於現有方法,BLEU 值提高了 2.9 個百分點,CodeBLEU 值提高了 1.72 個百分點,編譯準確率提高了 6.05%。
- CodeRosetta 是第一個展示出將 Fortran 翻譯成 C++ 的能力的模型,其 CodeBLEU 值比現有的封閉原始碼和開放原始碼大型語言模型提高了至少 4.63 個百分點。
結論
CodeRosetta 是一種有效的程式碼翻譯模型,能夠處理涉及平行程式設計範例的複雜翻譯任務。其無監督學習方法和創新的訓練目標使其成為自動程式碼翻譯領域的重大進步。
局限性和未來研究方向
- 雖然 CodeRosetta 在翻譯準確性和編譯準確率方面表現出色,但仍有改進的空間,特別是在處理複雜程式碼結構和罕見程式設計模式方面。
- 未來的工作可以集中於將 CodeRosetta 擴展到其他程式語言和程式設計範例,例如 Python 到 CUDA 或 C++ 到 OpenCL。
- 此外,探索將 CodeRosetta 與其他程式碼分析和優化技術相結合,以進一步提高翻譯程式碼的效能和效率,也是一個值得關注的方向。
Statistik
CodeRosetta 在 C++ 到 CUDA 翻譯任務中,BLEU 值比 BabelTower 提高了 2.9 個百分點。
CodeRosetta 的 CodeBLEU 值為 78.84,比 BabelTower 高 1.72 個百分點。
CodeRosetta 的編譯準確率為 98.85%。
CodeRosetta 在 Fortran 到 C++ 翻譯任務中,CodeBLEU 值比 GPT-4 和 Gemini 提高了至少 4.63 個百分點。
Citat
"To the best of our knowledge, CodeRosetta is the first model to demonstrate proficiency in the task of Fortran to C++ translation, surpassing the performance of existing closed-source LLMs and open-code LLMs on standard metrics, with up to 4.63-point improvement in CodeBLEU."