网易首页 > 网易号 > 正文 申请入驻

无监督方法实现C++JavaPython代码转换,程序员:出了bug怎么办?

0
分享至

点击上方 "Python人工智能技术" 关注,星标或者置顶

22点24分准时推送,第一时间送达

来自:公众号 机器之心 | 编辑:真经君

码农真经(ID:coder_experience)第 187 次推文 图源:百度

上一篇:万字长文,详尽PyCharm 教程

正文

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

想使用之前写的代码库但忧虑编程语言过时,想重写又嫌麻烦,怎么办?源到源编译器似乎是不错的选择。

transcompiler 系统,又称源到源编译器,可以将高级编程语言(如 C++ 或 Python)写成的源代码转换成另一种语言。此类工具主要为了提升互操作性,将用过时或废弃语言(如 COBOL、Python 2)写成的代码库移植到现代语言。它们通常依赖于手动编写的重写规则,并应用于源代码抽象语法树。

但是,transcompiler 存在一些缺陷,如转换结果通常缺乏可读性,无法遵循目标编程语言的规范,需要人类程序员进行手动修改才能准确运行。整个转换过程不仅耗时,还需要专家掌握源语言和目标语言的专业知识,因此这类代码转换项目的成本很高。

在自然语言翻译领域中,神经模型的性能大大超过基于规则的模型,但由于缺乏平行数据,神经模型在编程语言转换领域中的应用比较有限。那么,能否将自然语言翻译中的神经模型借鉴到编程语言转换中呢?最近,Facebook AI 研究院做了一些尝试。

Facebook 研究人员利用无监督机器翻译方法,训练出一种无监督神经 transcompiler——TransCoder。TransCoder 基于 GitHub 开源项目中的源代码训练而成,能够以高准确率实现 C++、Java 和 Python 三种编程语言之间的函数转换。

如下图所示,TransCoder 将 Python 代码转换成了 C++ 代码:

TransCoder 成功地将 Python 输入函数 SumOfKsubArray 转换成了 C++。TransCoder 推断出参数、变量的类型和函数的返回类型,将 Python deque() 转换成了 C++ 中的 deque<>。此外,它还准确地转换了 Python 的 for loop 和 range 函数。

下图展示了 C++ 和 Java 之间的转换:

还有 Python 与其他语言之间的转换:

该方法具备以下特点:

  • 仅需单语源代码即可实现编程语言转换,无需任何源语言或目标语言的专业知识;
  • TransCoder 能够成功掌握每种语言的特定复杂模式,并将其迁移至其他语言;
  • 这一完全无监督方法在性能上大幅超过利用规则方法和高级编程知识的商业化系统。

此外,研究人员还构建和发布了一个包含 852 个平行函数的测试集,以及用于检查转换结果准确性的单元测试。研究人员表示,相关代码和预训练模型将开源。

测试集中的平行函数示例。

无监督编程语言转换神器——TransCoder

TransCoder 使用的是带注意力的 seq2seq 模型,由编码器、解码器和 transformer 架构组成。研究人员表示,对于所有编程语言,一个模型足矣

在训练方面,研究人员遵循 Lample 等人 [32] 提出的无监督机器翻译三原则,即初始化、语言建模和回译,如下图 1 所示:

图 1:TransCoder 使用的无监督机器翻译三原则图示。

原则一:初始化

第一个原则,即利用跨语言遮蔽语言模型预训练进行模型初始化。由此,将表达相同指令的代码段映射至相同的表示,而不用在意是何种编程语言。

原则二:语言建模

第二个原则利用去噪自编码(Denoising Auto-Encoding,DAE),训练解码器使之总能生成有效的序列,即使输入数据带有噪声也是如此。也就是说增强编码器对输入噪声的稳健性。

回译

第三个原则回译,即令模型生成可用于训练的平行数据。

举例来说,当 Python → C++ 模型质量不错时,用它为 C++ → Python 模型生成更精确的数据,反之亦然。

下图展示了训练后获得的跨语言嵌入表示:

图 5:跨语言 token 嵌入空间。

TransCoder 效果如何?

研究者进行了一系列实验,来评估 TransCoder 的效果。

具体而言,他们使用具备 6 个层、8 个注意力头的 transformer 架构,并将模型维度设置为 1024。此外,对所有编程语言均使用同一个编码器和解码器。

在跨语言语言模型预训练过程中,研究人员在 C++、Java 和 Python 这三种语言的批次中交替进行,它们由 32 个源代码序列构成,每个序列包含 512 个 token。

在训练阶段,研究人员和在去噪自编码和回译目标中交替进行,使用批大小约为 6000 个 token。

至于模型优化,研究人员使用的是 Adam 优化器,学习率为 10^4,学习率调度器与 Vaswani 等人 [45] 相同。

在实验中,研究人员使用 PyTorch 实现模型,并在 32 块 V100 GPU 上进行训练;使用 16 位浮点运算,以加速模型训练,降低模型内存占用。

实验结果

该研究使用三个评估度量指标:BLEU 值、参考匹配(reference match)和计算准确率。BLEU 值用于评估生成函数的质量;参考匹配用于评估转换结果完美匹配真值参考的比例;计算准确率用于评估当输入相同时,假设函数是否生成与参考相同的输出。

下表 1 展示了 TransCoder 在测试集上的结果,模型使用了贪婪解码(集束大小为 1)。

表 1:使用贪婪解码后,TransCoder 在测试集上的结果。

下表 2 展示了使用束搜索解码后的结果,并对比了 TransCoder 和现有基线方法的性能。

看起来,效果很不错。

不过,也有程序员吐槽:

简直是 debug 的地狱,出了问题程序猿两种语言的代码都得看……

参考内容:

https://arxiv.org/abs/2006.03511

--END--

谷歌CEO皮查伊「美国版后浪演讲」:You Will Prevail,你们终将胜利

趣味至上主义:这5个有趣的Python库带你花式编码!

哈工大、哈工程被禁用「工科神器」MATLAB,美国「实体名单」影响深入校园

Bug的噩梦:前端调试必备的7个“大杀器”

高薪职业,英年早秃?关于程序员,多的是你不知道的事……

马斯克SpaceX内部信曝光:戒骄戒躁,我们的首要任务是星际飞船

喜欢本文的朋友们,欢迎长按下图关注订阅号Python人工智能技术

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
湖人休赛季为挽留詹姆斯,可以先签后换获得的第三球星

湖人休赛季为挽留詹姆斯,可以先签后换获得的第三球星

阿雄侃篮球
2024-04-29 23:45:34
告别!亚洲第一飞人落幕,苏炳添轰10秒50,名次第5无缘达标奥运

告别!亚洲第一飞人落幕,苏炳添轰10秒50,名次第5无缘达标奥运

林小湜体育频道
2024-04-28 21:06:56
沈阳、大连、长治市频发恶性案件!你了解民众戾气为何如此重吗?

沈阳、大连、长治市频发恶性案件!你了解民众戾气为何如此重吗?

小毅讲历史
2024-04-29 11:17:34
“新冠疫苗之父”杨晓明被抓!个人履历曝光,评论区彻底失控!

“新冠疫苗之父”杨晓明被抓!个人履历曝光,评论区彻底失控!

古希腊掌管松饼的神
2024-04-28 09:10:08
运城高速回应问界M7追尾事故:养护车在移动作业,设有警示装置!司机曾下车施救

运城高速回应问界M7追尾事故:养护车在移动作业,设有警示装置!司机曾下车施救

和讯网
2024-04-29 15:38:11
年轻女子大脑里揪出20厘米长活虫!病因和多年前饮食有关

年轻女子大脑里揪出20厘米长活虫!病因和多年前饮食有关

南方都市报
2024-04-29 20:00:30
建议强制禁止隐藏式门把手,打破消费者厂家共同的困局

建议强制禁止隐藏式门把手,打破消费者厂家共同的困局

刘远举
2024-04-28 21:05:30
国运来了挡都挡不住?俄乌战争最起码给中国又争取了五年时间

国运来了挡都挡不住?俄乌战争最起码给中国又争取了五年时间

曾经年少
2024-03-05 11:38:53
很多现代口头禅都是古代妓院行话

很多现代口头禅都是古代妓院行话

牛锅巴小钒
2024-04-29 18:00:27
要废了?巴萨的梅西接班人将被英超球队退货,巴萨也不想要他了

要废了?巴萨的梅西接班人将被英超球队退货,巴萨也不想要他了

星耀国际足坛
2024-04-29 23:58:46
跟LV三公子逛美术馆被偶遇,Lisa守得云开见月明?男方似仍在考验

跟LV三公子逛美术馆被偶遇,Lisa守得云开见月明?男方似仍在考验

新金牌娱乐观察家
2024-04-29 09:12:51
不受美胁迫,中方再抛227亿美债,美又一银行倒闭,俄站出来补刀

不受美胁迫,中方再抛227亿美债,美又一银行倒闭,俄站出来补刀

农村阿祖
2024-04-29 19:30:58
遭到重创!Shams:森林狼主帅芬奇可能遭遇髌腱撕裂

遭到重创!Shams:森林狼主帅芬奇可能遭遇髌腱撕裂

懂球帝
2024-04-29 13:04:14
太炸裂!阿尔巴尼亚新闻女主播西装内搭空气出镜,胸前引发争议

太炸裂!阿尔巴尼亚新闻女主播西装内搭空气出镜,胸前引发争议

娱乐百灵鸟V3
2024-04-29 06:20:07
再这么搞下去,失业的人只会越来越多!政府该做些什么?

再这么搞下去,失业的人只会越来越多!政府该做些什么?

鹏飞深文
2024-04-27 13:40:46
万科突发!

万科突发!

券商中国
2024-04-29 15:01:54
谁是小丑?饭桌上周鸿祎被网红质疑,面露凶光的周鸿祎直接回怼!

谁是小丑?饭桌上周鸿祎被网红质疑,面露凶光的周鸿祎直接回怼!

小白探影8
2024-04-29 20:31:02
谁要是把她认出来,绝对是高手!她当年可以说红得发紫

谁要是把她认出来,绝对是高手!她当年可以说红得发紫

侃侃人物讲
2024-04-29 16:59:44
弃用2大主力却拿下大胜,王世龙杀人诛心:不上大外是在留力新疆

弃用2大主力却拿下大胜,王世龙杀人诛心:不上大外是在留力新疆

后仰大风车
2024-04-29 23:23:28
俄罗斯军方高层拒绝认罪,网友疯传手持武器照片,曝光内幕!

俄罗斯军方高层拒绝认罪,网友疯传手持武器照片,曝光内幕!

莫叔运动世界
2024-04-25 12:53:10
2024-04-30 00:08:49
程序员小乐
程序员小乐
有趣有内涵
3163文章数 9489关注度
往期回顾 全部

科技要闻

马斯克收获大礼,李彦宏梅开二度?

头条要闻

周鸿祎近10天里热搜不断 背后是360市值蒸发4000多亿

头条要闻

周鸿祎近10天里热搜不断 背后是360市值蒸发4000多亿

体育要闻

足球童话!执教16年,从业余联赛到德甲

娱乐要闻

田馥甄遭抵制,蔡依林却能稳稳捞金?

财经要闻

建信人寿巨亏40亿 部分产品退保率93%

汽车要闻

配置更丰富 静态体验2024款欧拉好猫

态度原创

时尚
亲子
游戏
健康
公开课

学会这一招,0成本get上镜脸

亲子要闻

宝宝的口味能有多重,从哥哥手里抢辣条吃。

索尼补丁和谐《剑星》引众怒 / 《Hades 2》会尽快开启“抢先体验”

春天野菜不知不识莫乱吃

公开课

父亲年龄越大孩子越不聪明?

无障碍浏览 进入关怀版