自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用AI實(shí)現(xiàn)C++、Java、Python代碼互譯,運(yùn)行成功率最高達(dá)80.9%

新聞 人工智能
Facebook最近提出了TransCoder,一個翻譯編程語言的AI,現(xiàn)在可以在C++、Java、Python語言之間互譯。

 本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。

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

因?yàn)樾鹿谝咔榈木壒?,美國一些地區(qū)的失業(yè)救濟(jì)系統(tǒng)不堪重負(fù),而這些系統(tǒng)都是上古語言COBOL寫的。

[[329480]]

然而,現(xiàn)在早已經(jīng)是C/C++、Java、Python的天下了,把COBOL程序換成Python,何其難也。

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

既然AI能翻譯自然語言,那也應(yīng)該能翻譯編程語言。

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

[[329481]]

經(jīng)翻譯后的程序,成功運(yùn)行的通過率最高可以達(dá)到80.9%。

而且TransCoder是一種無監(jiān)督學(xué)習(xí)算法,意味著不需要大量成對的、標(biāo)記的編程代碼數(shù)據(jù)集進(jìn)行訓(xùn)練。

如果這項(xiàng)技術(shù)達(dá)到實(shí)用化程度,對廣大程序員來說真是巨大福音??!

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

用AI實(shí)現(xiàn)C++、Java、Python代碼互譯,運(yùn)行成功率最高達(dá)80.9%

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

TransCoder充分利用了編程語言的特點(diǎn),比如像for、while、if這些關(guān)鍵詞以及通用的數(shù)學(xué)運(yùn)算符。

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

用AI實(shí)現(xiàn)C++、Java、Python代碼互譯,運(yùn)行成功率最高達(dá)80.9%

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

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

那么以上這些關(guān)鍵詞的嵌入是如何獲得的?

Facebook提出了實(shí)現(xiàn)無監(jiān)督編程語言機(jī)器翻譯的三個原則。

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

用AI實(shí)現(xiàn)C++、Java、Python代碼互譯,運(yùn)行成功率最高達(dá)80.9%

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

最后是反向翻譯,它允許模型生成可用于訓(xùn)練的并行數(shù)據(jù)。每當(dāng)Python轉(zhuǎn)C++模型變得更好時(shí),它就會為C++轉(zhuǎn)Python模型生成更精確的數(shù)據(jù),反之亦然。

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

我們觀察到,TransCoder成功地理解了每種語言特有的語法、數(shù)據(jù)結(jié)構(gòu)、函數(shù)庫和方法。

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

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

用AI實(shí)現(xiàn)C++、Java、Python代碼互譯,運(yùn)行成功率最高達(dá)80.9%

實(shí)驗(yàn)結(jié)果

為了訓(xùn)練TransCoder,F(xiàn)acebook在GitHub上尋找了280萬個開源代碼庫進(jìn)行訓(xùn)練,其中包含數(shù)百億個token。

用AI實(shí)現(xiàn)C++、Java、Python代碼互譯,運(yùn)行成功率最高達(dá)80.9%

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

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

另外NLP翻譯中的BLEU也不宜作為代碼翻譯的衡量標(biāo)準(zhǔn),因?yàn)檫@只能表示實(shí)際代碼和參考代碼之間的語法差異。

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

用AI實(shí)現(xiàn)C++、Java、Python代碼互譯,運(yùn)行成功率最高達(dá)80.9%

以此為標(biāo)準(zhǔn),C++轉(zhuǎn)Java的代碼的計(jì)算正確率為60.9%,而Java轉(zhuǎn)C++的計(jì)算正確率為80.9%。

Facebook不是唯一開發(fā)AI代碼生成系統(tǒng)的公司。前不久微軟Build大會上,OpenAI就演示了一個在GitHub數(shù)據(jù)上訓(xùn)練的模型,僅根據(jù)注釋內(nèi)容即可生成對應(yīng)功能的代碼。

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

也許美國社保系統(tǒng)的COBOL就靠它解決了。

論文地址:

https://arxiv.org/abs/2006.03511

 

責(zé)任編輯:張燕妮 來源: 量子位
相關(guān)推薦

2020-06-16 16:25:05

C++JavaPython

2023-11-10 15:36:10

2025-02-12 10:05:00

AILLM訓(xùn)練

2018-05-20 11:30:39

大數(shù)據(jù)紅包表白

2012-10-23 14:27:55

無奈大裁員濾鏡拍照

2019-05-09 19:00:40

量子加密加密技術(shù)安全

2023-10-30 10:29:50

C++最小二乘法

2010-11-18 10:59:00

求職

2024-01-03 17:39:23

云計(jì)算混合云

2021-01-20 18:13:52

VRAR守門員

2020-02-27 15:37:03

手機(jī)App竊聽移動應(yīng)用

2023-08-21 13:30:18

預(yù)測機(jī)器學(xué)習(xí)

2021-04-21 15:22:40

機(jī)器人人工智能系統(tǒng)

2014-08-29 10:05:02

2016-10-28 15:58:29

大數(shù)據(jù)就業(yè)成功率

2017-10-18 09:49:57

ERP信息化CIO

2013-01-22 17:39:57

360瀏覽器搶票專版

2021-09-24 09:52:13

登陸頁面注冊流程設(shè)計(jì)

2015-05-20 14:20:32

大數(shù)據(jù)如何表白成功率高

2022-04-02 18:37:25

面試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號