时间:2022-10-09 17:36:54 | 浏览:4190
还记得美国前一阵要招聘60岁的老程序员吗?都怪编程语言发展太快!
因为新冠疫情的缘故,美国一些地区的失业救济系统不堪重负,而这些系统都是上古语言COBOL写的。
然而,现在早已经是C/C++、Java、Python的天下了,把COBOL程序换成Python,何其难也。
远的不说,Python 2刚刚淘汰,过去的老程序手工转成Python 3也是个很大的工程。
既然AI能翻译自然语言,那也应该能翻译编程语言。
Facebook也是这么想的,所以他们最近提出了TransCoder,一个翻译编程语言的AI,现在可以在C++、Java、Python语言之间互译。
经翻译后的程序,成功运行的通过率最高可以达到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)预处理来初始化模型,这有些类似于自然语言的填空题。结果是表达相同指令的代码片段被映射到与编程语言无关的相同表示。