當前位置:
首頁 > 科技 > 7.5億美元做代碼轉換?一個Facebook TransCoder AI就夠了!

7.5億美元做代碼轉換?一個Facebook TransCoder AI就夠了!

新智元報道

來源:arxiv

編輯:白峰、舒婷

【新智元導讀】代碼的遷移和語言轉換是一件很困難且昂貴的事情,澳大利亞聯邦銀行就曾花費5年時間,耗費7.5億美元將其平台從COBOL轉換為Java。而Facebook最近宣稱,他們開發的一種神經轉換編譯器(neural transcompiler),可以將一種高級編程語言(如C ,Java和Python)轉換為另一種,效率飛起!

從 COBOL 到 Java,TransCoder能幫你省下7.5億美元

不同的編程語言之間也可以自動轉換了!

要知道,將現有的代碼庫遷移到現代或者更有效的語言,如 Java 或 c ,需要精通源語言和目標語言,而且無論是金錢還是時間耗費都十分高昂。

澳洲聯邦銀行在過去五年中花費了大約7.5億美元將其平台從 COBOL 轉換為 Java。

但是,Facebook最近開發的神經轉換編譯器TransCoder讓代碼轉換出現了新的轉機。該系統可以將代碼從一個高級語言轉換成另一個,比如 c 、 Java 和 Python。

這個系統是弱監督的,可以在沒有標籤的數據集中尋找以前未檢測到的模式,只需要少量的人工監督。研究人員稱,這比基於規則數據集的模型要高效得多。

?

理論上,代碼轉換編譯器能夠提供很多的幫助,讓開發者無需從頭重新寫代碼。但實踐中,代碼轉換是一件很困難的事情,因為不同語言依賴於不同的語法準則,不同的平台api、標準庫函數和可變類型。

因此,TransCoder的面世,無疑是企業的福音。因為他們不必像澳洲聯邦銀行那樣,再去耗費大量的時間和金錢去做代碼轉換的複雜工作,只需要選擇Facebook,選擇TransCoder,平台遷移即可迎刃而解。

從Java到C ,TransCoder轉換準確率超九成!

TransCoder是基於跨語言模型預訓練去做的模型初始化,這樣的訓練不著眼於編程語言的類型,而僅僅將表示相同指令的代碼段映射為相同的表示形式。

之所以TransCoder能進行跨語言模型的訓練,是因為系統的標記原理著眼於跨語言之間的共同關鍵字,如「if」,「for」等,以及數字、數學運算符和出現在源代碼中的英語字元串。這樣反向翻譯之後通過源-目標模型和並行訓練的目標-源模型耦合,從而提高了訓練的質量。

研究人員為了評估TransCoder的性能,從GeeksforGeeks中提取了852個C ,Java和Python並行函數,利用這些不同語言的轉換來測試函數語義是否精準,測試的結果如下:

GeeksforGeeks是一個在線平台,用於收集編寫代碼時的問題,並提供多種編程語言的解決方案。

研究人員稱,TransCoder在實驗過程中展示了對每種語言特有語法的理解能力,並且能夠適應小範圍的修改。儘管這個模型並不完美,但是性能優於已有的利用專家知識手動構建的框架。

從自然語言翻譯到代碼翻譯,seq2seq再立新功

TransCoder使用了經典的序列到序列(seq2seq)模型,該模型由基於Transformer的編碼器和解碼器組成,seq2seq模型的好處在於,你只需要有對應的輸入輸出即可,而不需要關心是哪兩種編程語言。

TransCoder仿照Lample等人中確定的無監督機器翻譯流程進行訓練,包括初始化,語言建模和反向翻譯。

實驗表明以跨語言方式對整個模型(不僅是單詞表示形式)進行預訓練顯著改善了無監督機器翻譯的效果,TransCoder遵循Lample和Conneau 的預訓練策略,其中跨語言模型(XLM)在單語言的源代碼數據集上,使用遮罩語言建模進行了預訓練。

?

??TransCoder的轉換原理

其中,跨語言本質來源於多種語言中的大量通用標記(錨點)。在英語-法語翻譯的上下文中,錨點主要由數字、城市、人名等組成,而在編程語言中,這些定位點來自常見的關鍵字(for,while,if,try等),以及源代碼中出現的數字,運算符和英語字元串等。

seq2seq模型的編碼器和解碼器由預訓練的XLM模型參數進行初始化。對於編碼器而言,初始化非常簡單,因為它與XLM模型具有相同的體系結構。但是解碼器具有與attention機制有關的額外參數,所以這部分採用了隨機初始化。

XLM預訓練允許seq2seq模型生成輸入序列的高質量表示。然而,解碼器缺乏翻譯能力,因為從未訓練過解碼器基於源表示對序列進行解碼。為了解決這個問題,TransCoder利用降噪自編碼(DAE)對序列進行編碼和解碼,再對模型進行訓練。

在測試時,模型可以對Python序列進行編碼,並使用C 起始符號對其進行解碼以生成C 轉換。C 轉換的質量取決於模型的「跨語言」性能:如果Python和C 轉換被編碼器映射到相同的表示,則解碼器將成功生成對應的C 代碼。

實際上,僅XLM預訓練和降噪自編碼就足以生成翻譯。但是,這些翻譯的質量往往很低,因為該模型從未對編程語言實現的功能進行訓練。TransCoder為了解決這個問題,使用了反向翻譯,這是在弱監督的情況下利用單語言數據的最有效方法。

在無監督的情況下,源到目標模型與後向的目標到源模型是並行訓練的。目標到源模型用於將目標序列翻譯成源語言,從而產生與真實目標序列相對應的嘈雜源序列。然後以弱監督的方式訓練源到目標模型,從前面生成的嘈雜源序列中重建目標序列,反之亦然,並行訓練兩個模型直到收斂。

作者簡介

該論文一作Marie-Anne Lachaux,目前是Facebook人工智慧研究院NLP方向研究員,巴黎高等電信學院計算機圖像學學士,倫敦國王學院計算機圖像學碩士,曾在達索系統(Dassault Systèmes)擔任研究員。主要研究方向為計算機視覺和圖像識別,計算機神經網路。

在達索擔任研究員期間,Marie-Anne Lachaux主要方向為拓撲優化研究。拓撲優化是設計機械零件的一種新方法,其目的是在保持機械性能的同時大量減少零件的質量。拓撲優化的實現方法是基於Visual Studio,c 和許多經典庫,這為Marie-Anne Lachaux在Facebook開展NLP研究奠定了基礎。

? ?

?

此前,已經有很多基於深度學習的代碼自動補全,效果也十分驚艷,而基於規則的代碼轉換也有不少項目,但大多數泛化能力不強,畢竟能寫的規則有限。

TransCoder基於深度學習進行代碼轉換,無視了這些規則,直接端到端,對相關工作還是有很大的啟發,如果TransCoder準確率持續提升,那演算法模型工程化的工作量將大幅縮減,程序員的編碼效率也將有質的飛躍。

參考鏈接:

https://arxiv.org/pdf/2006.03511.pdf

https://venturebeat.com/2020/06/08/facebooks-transcoder-ai-converts-code-from-one-programming-language-into-another/

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!


請您繼續閱讀更多來自 新智元 的精彩文章:

華人教授史弋宇團隊與Kneron合作應用神經網路與硬體協同搜索框架,並獲Facebook研究大獎
阿里雲宣布再招5000人!未來3年投2000億推動數字新基建