成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用AI實現C++、Java、Python代碼互譯!

開發 后端
AI 能翻譯自然語言,那也應該能翻譯編程語言。所以他們最近提出了 TransCoder,一個翻譯編程語言的 AI,現在可以在 C++、Java、Python 語言之間互譯。

還記得美國前一陣要招聘 60 歲的老程序員嗎?都怪編程語言發展太快!

因為新冠疫情的緣故,美國一些地區的失業救濟系統不堪重負,而這些系統都是上古語言 COBOL 寫的。

[[330354]]

然而,現在早已經是 C/C++、Java、Python 的天下了,把 COBOL 程序換成 Python,何其難也。

遠的不說,Python 2 剛剛淘汰,過去的老程序手工轉成 Python 3 也是個很大的工程。

既然 AI 能翻譯自然語言,那也應該能翻譯編程語言。

Facebook 也是這么想的,所以他們最近提出了 TransCoder,一個翻譯編程語言的 AI,現在可以在 C++、Java、Python 語言之間互譯。

[[330355]]

經翻譯后的程序,成功運行的通過率最高可以達到 80.9%。

而且 TransCoder 是一種無監督學習算法,意味著不需要大量成對的、標記的編程代碼數據集進行訓練。

如果這項技術達到實用化程度,對廣大程序員來說真是巨大福音啊!

難怪論文作者之一 Guillaume Lample 在 Twitter 上宣布了這篇論文后很快引起了熱議。

翻譯編程語言,什么原理?

TransCoder 充分利用了編程語言的特點,比如像 for、while、if 這些關鍵詞以及通用的數學運算符。

下圖展示了 C++、Java 和 Python 關鍵字的嵌入。在相似的上下文中使用的不同編程語言的關鍵字在嵌入空間中非常接近。

例如,Python 中的 except 和 Java、C++ 中的 catch 都用于獲取異常,它們被映射到非常相似的嵌入空間位置。

對于映射的實現(map 和 dict)、用于將字符串轉換為字符數組(c_str 和 toCharArray)以及類似的變量類型 (例如 long、int 和 Integer),也可以觀察到相同的現象。

那么以上這些關鍵詞的嵌入是如何獲得的?

Facebook 提出了實現無監督編程語言機器翻譯的三個原則。

首先,通過跨語言掩碼語言模型(MLM)預處理來初始化模型,這有些類似于自然語言的填空題。結果是表達相同指令的代碼片段被映射到與編程語言無關的相同表示。

其次是去噪自動編碼,它能訓練解碼器始終生成有效序列,即使在輸入有噪聲的數據時也是如此,提高了編碼器對輸入噪聲的魯棒性。

最后是反向翻譯,它允許模型生成可用于訓練的并行數據。每當 Python 轉 C++ 模型變得更好時,它就會為 C++ 轉 Python 模型生成更精確的數據,反之亦然。

通過以上步驟,TransCoder 在訓練后獲得了之前提到的跨語言嵌入。

我們觀察到,TransCoder 成功地理解了每種語言特有的語法、數據結構、函數庫和方法。

在上面的圖中,展示了 Java 和 C++ 獨有的三元運算符 X ? A : B,翻譯到 Python 中就變成了 if X then A else B。

以下是一個從 Python 翻譯到 C++ 的實例。TransCoder 推斷變量和函數返回值的類型,將 Python 的 deque() 容器映射到 C++ 中類似的實現 deque<>,并使用 C++ 的 front、back、pop_back 和 push_back 方法來檢索和插入 deque 中的元素,而不是使用 Python 方括號、pop 和 append 方法。

實驗結果

為了訓練 TransCoder,Facebook 在 GitHub 上尋找了 280 萬個開源代碼庫進行訓練,其中包含數百億個 token。

然后去 GeeksforGeeks 平臺去驗證翻譯成果,該平臺是收集各類編碼問題,并以多種編程語言提供解決方案。

和自然語言不同的是,代碼翻譯并不太要求逐字逐句的對照,因此翻譯后的代碼和參考代碼的重合度其實很低,比如 C++ 轉 Java 的代碼和 Ground Truth 僅有 3.1% 匹配。

另外 NLP 翻譯中的 BLEU 也不宜作為代碼翻譯的衡量標準,因為這只能表示實際代碼和參考代碼之間的語法差異。

因此需要一個新的度量標準 —— 計算正確率,它表示翻譯后的代碼測試后是否能與參考代碼有相同的輸出。 

以此為標準,C++ 轉 Java 的代碼的計算正確率為 60.9%,而 Java 轉 C++ 的計算正確率為 80.9

%。

Facebook 不是唯一開發 AI 代碼生成系統的公司。前不久微軟 Build 大會上,OpenAI 就演示了一個在 GitHub 數據上訓練的模型,僅根據注釋內容即可生成對應功能的代碼。

TransCoder 沒那么智能,但是在計算機技術飛速發展的今天,誰知道下一個流行的語音是什么,有了 TransCoder,至少讓我們在移植代碼的時候沒那么難了。

也許美國社保系統的 COBOL 就靠它解決了。 

 

責任編輯:龐桂玉 來源: 戀習Python
相關推薦

2020-06-09 14:44:18

AI 數據人工智能

2023-10-30 10:29:50

C++最小二乘法

2010-01-22 13:45:36

C++代碼

2023-12-22 13:58:00

C++鏈表開發

2010-02-06 09:46:46

C++單向鏈表

2010-02-06 13:42:36

C++單件模式

2011-07-20 14:33:19

C++IO

2010-01-14 14:40:21

C++代碼

2010-01-18 16:17:53

C++代碼

2011-05-18 18:05:47

C#C++

2012-05-18 10:21:30

程序員CC++

2010-03-26 16:17:24

Python嵌入

2011-05-18 17:56:38

C#C++

2010-02-01 13:34:07

C++獲得系統時間

2013-06-24 15:32:00

c++GCC

2010-05-14 15:23:03

2010-01-21 10:23:53

C++代碼

2010-01-18 13:42:51

C++代碼

2010-02-02 15:59:32

C++賦值函數

2010-02-05 10:23:09

C++基本函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产国产精品 | 亚洲国产成人精 | 久久精品这里精品 | 国产成人a亚洲精品 | 91av免费版 | 免费观看一级特黄欧美大片 | 欧美在线视频一区二区 | 国产一区2区 | 成人在线看片 | 日韩欧美国产一区二区三区 | 操操日 | 欧美综合久久 | 久久久亚洲一区 | 国产一区二区三区四区五区加勒比 | 91精品久久久久久久久 | 久久久www成人免费精品 | 日日干夜夜操 | 在线免费观看a级片 | 日本一区二区高清不卡 | 欧美日韩亚 | 一区二区在线不卡 | 我我色综合 | 欧美午夜精品久久久久免费视 | 免费a国产| 亚洲精品一区二区 | 狠狠骚 | 91秦先生艺校小琴 | 久久成人久久 | 日韩一区二区福利 | 久久久精品综合 | 国产一二区视频 | www.久久久久久久久久久久 | 成人超碰在线 | 美女国产一区 | 国产高清视频 | 亚洲狠狠丁香婷婷综合久久久 | 久久久999免费视频 999久久久久久久久6666 | 国产成人免费视频 | 天天躁日日躁狠狠躁2018小说 | 久久91视频| 免费在线观看毛片 |