科技一哥 无监督方法实现C++,Java,Python代码转换,程序员:出了bug怎么办?
机器之心报道
参与:魔王
Facebook提出的无监督代码转换方法TransCoder能够以高准确率实现C++、Java和Python三种编程语言之间的函数转换 。 只需单语源代码 , 无需任何源语言或目标语言的专业知识 。 看起来很不错 , 不过也有人吐槽:出了bug怎么办?两种语言都要看吗?(瑟瑟发抖……

文章图片
想使用之前写的代码库但忧虑编程语言过时 , 想重写又嫌麻烦 , 怎么办?源到源编译器似乎是不错的选择 。
transcompiler系统 , 又称源到源编译器 , 可以将高级编程语言(如C++或Python)写成的源代码转换成另一种语言 。 此类工具主要为了提升互操作性 , 将用过时或废弃语言(如COBOL、Python2)写成的代码库移植到现代语言 。 它们通常依赖于手动编写的重写规则 , 并应用于源代码抽象语法树 。
但是 , transcompiler存在一些缺陷 , 如转换结果通常缺乏可读性 , 无法遵循目标编程语言的规范 , 需要人类程序员进行手动修改才能准确运行 。 整个转换过程不仅耗时 , 还需要专家掌握源语言和目标语言的专业知识 , 因此这类代码转换项目的成本很高 。
在自然语言翻译领域中 , 神经模型的性能大大超过基于规则的模型 , 但由于缺乏平行数据 , 神经模型在编程语言转换领域中的应用比较有限 。 那么 , 能否将自然语言翻译中的神经模型借鉴到编程语言转换中呢?最近 , FacebookAI研究院做了一些尝试 。
Facebook研究人员利用无监督机器翻译方法 , 训练出一种无监督神经transcompiler——TransCoder 。 TransCoder基于GitHub开源项目中的源代码训练而成 , 能够以高准确率实现C++、Java和Python三种编程语言之间的函数转换 。
如下图所示 , TransCoder将Python代码转换成了C++代码:

文章图片
TransCoder成功地将Python输入函数SumOfKsubArray转换成了C++ 。 TransCoder推断出参数、变量的类型和函数的返回类型 , 将Pythondeque()转换成了C++中的deque 。 此外 , 它还准确地转换了Python的forloop和range函数 。
下图展示了C++和Java之间的转换:

文章图片
还有Python与其他语言之间的转换:

文章图片
【科技一哥 无监督方法实现C++,Java,Python代码转换,程序员:出了bug怎么办?】该方法具备以下特点:
仅需单语源代码即可实现编程语言转换 , 无需任何源语言或目标语言的专业知识;
TransCoder能够成功掌握每种语言的特定复杂模式 , 并将其迁移至其他语言;
这一完全无监督方法在性能上大幅超过利用规则方法和高级编程知识的商业化系统 。
此外 , 研究人员还构建和发布了一个包含852个平行函数的测试集 , 以及用于检查转换结果准确性的单元测试 。 研究人员表示 , 相关代码和预训练模型将开源 。

文章图片
测试集中的平行函数示例 。
无监督编程语言转换神器——TransCoder
TransCoder使用的是带注意力的seq2seq模型 , 由编码器、解码器和transformer架构组成 。 研究人员表示 , 对于所有编程语言 , 一个模型足矣 。
在训练方面 , 研究人员遵循Lample等人[32]提出的无监督机器翻译三原则 , 即初始化、语言建模和回译 , 如下图1所示:

文章图片
图1:TransCoder使用的无监督机器翻译三原则图示 。
原则一:初始化
第一个原则 , 即利用跨语言遮蔽语言模型预训练进行模型初始化 。 由此 , 将表达相同指令的代码段映射至相同的表示 , 而不用在意是何种编程语言 。
推荐阅读
- 科技一哥|荣耀30青春版图集赏析:触觉与视觉的完美享受
- 科技犬君|vs 索尼A9G 谁强?,上半年用户喜爱手机盘点;小米电视大师65英寸OLED
- 精选泛科技|结果如何?,一加8续航遭质疑:上半年最全机型横评出炉
- 科技犬君上半年用户喜爱手机盘点;小米电视大师65英寸OLED vs 索尼A9G 谁强?
- 科技生活快报TB5000mAh大电池还有65W超级快充!这些手机让你摆脱充电焦虑
- 精选泛科技一加8续航遭质疑:上半年最全机型横评出炉,结果如何?
- 阿拉图图科技说三星新机口碑虽好,但中国市场销量翻车,用户几乎跑光!
- 华为Mate30美科技界:华为再强大也只是一家民企,我们究竟在怕什么?
- 行业|高增长+高回撤!请收好这份“补票”名单,11只核心资产股入围,百亿科技股已跌出“深坑”
- 星星的娱乐爆料|今47岁彻底沦为配角,曾经的军旅一哥:因抛弃糟糠妻被全网怒骂
