科技一哥 无监督方法实现C++,Java,Python代码转换,程序员:出了bug怎么办?( 二 )


原则二:语言建模
第二个原则利用去噪自编码(DenoisingAuto-Encoding , DAE) , 训练解码器使之总能生成有效的序列 , 即使输入数据带有噪声也是如此 。 也就是说增强编码器对输入噪声的稳健性 。
回译
第三个原则回译 , 即令模型生成可用于训练的平行数据 。
举例来说 , 当Python→C++模型质量不错时 , 用它为C++→Python模型生成更精确的数据 , 反之亦然 。
下图展示了训练后获得的跨语言嵌入表示:
科技一哥 无监督方法实现C++,Java,Python代码转换,程序员:出了bug怎么办?
文章图片
图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) 。
科技一哥 无监督方法实现C++,Java,Python代码转换,程序员:出了bug怎么办?
文章图片
表1:使用贪婪解码后 , TransCoder在测试集上的结果 。
下表2展示了使用束搜索解码后的结果 , 并对比了TransCoder和现有基线方法的性能 。
科技一哥 无监督方法实现C++,Java,Python代码转换,程序员:出了bug怎么办?
文章图片
看起来 , 效果很不错 。
不过 , 也有程序员吐槽:
简直是debug的地狱 , 出了问题程序猿两种语言的代码都得看……
科技一哥 无监督方法实现C++,Java,Python代码转换,程序员:出了bug怎么办?
文章图片
参考内容:
https://arxiv.org/abs/2006.03511


推荐阅读