科技一哥 无监督方法实现C++,Java,Python代码转换,程序员:出了bug怎么办?( 二 )
原则二:语言建模
第二个原则利用去噪自编码(DenoisingAuto-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块V100GPU上进行训练;使用16位浮点运算 , 以加速模型训练 , 降低模型内存占用 。
实验结果
该研究使用三个评估度量指标:BLEU值、参考匹配(referencematch)和计算准确率 。 BLEU值用于评估生成函数的质量;参考匹配用于评估转换结果完美匹配真值参考的比例;计算准确率用于评估当输入相同时 , 假设函数是否生成与参考相同的输出 。
下表1展示了TransCoder在测试集上的结果 , 模型使用了贪婪解码(集束大小为1) 。

文章图片
表1:使用贪婪解码后 , TransCoder在测试集上的结果 。
下表2展示了使用束搜索解码后的结果 , 并对比了TransCoder和现有基线方法的性能 。

文章图片
看起来 , 效果很不错 。
不过 , 也有程序员吐槽:
简直是debug的地狱 , 出了问题程序猿两种语言的代码都得看……

文章图片
参考内容:
https://arxiv.org/abs/2006.03511
推荐阅读
- 科技一哥|荣耀30青春版图集赏析:触觉与视觉的完美享受
- 科技犬君|vs 索尼A9G 谁强?,上半年用户喜爱手机盘点;小米电视大师65英寸OLED
- 精选泛科技|结果如何?,一加8续航遭质疑:上半年最全机型横评出炉
- 科技犬君上半年用户喜爱手机盘点;小米电视大师65英寸OLED vs 索尼A9G 谁强?
- 科技生活快报TB5000mAh大电池还有65W超级快充!这些手机让你摆脱充电焦虑
- 精选泛科技一加8续航遭质疑:上半年最全机型横评出炉,结果如何?
- 阿拉图图科技说三星新机口碑虽好,但中国市场销量翻车,用户几乎跑光!
- 华为Mate30美科技界:华为再强大也只是一家民企,我们究竟在怕什么?
- 行业|高增长+高回撤!请收好这份“补票”名单,11只核心资产股入围,百亿科技股已跌出“深坑”
- 星星的娱乐爆料|今47岁彻底沦为配角,曾经的军旅一哥:因抛弃糟糠妻被全网怒骂
