程序员失业第一步?斯坦福研究员用AI从编译器反馈中学习改Bug( 二 )
本文插图
模型架构图拆解:
本文插图
本文插图
训练方法:自监督学习
本文使用的另外一种技术是自监督学习 。
带标签的程序Bug修复数据集很小 , 但在互联网上有大量未带标签的程序代码可用 。
例如 , GitHub上拥有超过3000万个公共存储仓库 。 使用大量免费的可用代码来改善学习程序的Bug修复 , 将大大增强系统的可伸缩性和稳定可靠性 。
本文插图
本文的步骤如下:
1、从GitHub和Codeforce等在线资源中收集未带标签的有效程序(上图 左) 。
2、设计随机程序破坏程序代码(例如 , 删除/插入/替换token) , 并破坏未标记程序(上图 中) 。
3、损坏的程序会报错(上图 右) 。
这样 , 人们就可以创建许多新的程序修复示例<broken code, error message, fixed code>。
程序Bug修复模型
本文在两个基准任务上应用和评估的修复模型(称为DrRepair):
- 纠正学生编写的C程序(DeepFix数据集)
- 纠正C ++程序合成的输出(SPoC数据集)
本文插图
3 应用
应用于DeepFix(修正学生程序)
在DeepFix中 , 任务是更正学生在入门编程课中编写的C程序 , 以便它们能通过编译 。 输入程序可能有多行报错 , 因此需要迭代应用修复模型 , 一次解决一个报错 。
本文插图
例如 , 上图显示了DeepFix中的示例程序 , 该程序有一个编译器错误 , 指出“i未声明” 。
这时应用修复模型DrRepair就派上用场了 , 它通过插入以下声明来修复此错误:i在第5行中 。
完成此修复后 , 还有另外一个错误 , 该错误为
本文插图
。
再次应用修复模型:这次 , DrRepair模型在第12行中插入了分号 , 程序编译成功!
这种方法也即是迭代优化的思想:逐步运行修复模型并逐步修复报错 。
使用报错信息 , 程序反馈图和自监督的预训练有什么影响?
在DeepFix上研究的现有修复系统未使用编译器报错信息 , 它们旨在直接将有Bug的代码转换为固定代码 。
为了首先查看使用报错信息的效果,本文尝试从系统中删除所有技术:使用编译器消息 , 程序反馈图和预训练 。
下图中没有编译器的模型版本在DeepFix上实现了34%的修复精度 , 与现有系统相当 。 现在将编译器提示信息添加到输入中 , 作者发现该模型实现了更好的性能提升和泛化性(准确度为62.5%) 。
这表明 , 通过访问报错信息 , 模型可以基于反馈学习正确的归纳偏差来修复代码 。
本文插图
接下来 , 作者添加了程序反馈图和自监督的预训练 。 作者发现这两者都作出了进一步的性能提升(“ours: base+graph” 以及“ours: base+graph+pretrain”) , 并且本文的最终系统可以修复DeepFix中68.2%的含Bug程序!
应用于SPoC(自然语言编码)
- 凤翔|炒股酬懒不酬勤,钝感者最成功?这家"佛系"私募7年满仓,收益率碾压同行!如何做到的?第一步很关键
- 失业者|北美观察丨疫情下的美国经济:纾困攻防战再度开打 大批失业者恐坠“救助悬崖”
- 找准赛道 在技术浪潮中厚积薄发
- 高校|这5种大学生特别不值钱,毕业就是失业,名校也不例外
- 美国|美国首次申请失业救济人数仍居高不下 上周为74.2万人
- 爆品會圈|年薪八十万的还被鄙视,程序员真的不如大学老师吗?
- 冬季的夜空|她带了三个闺蜜,吃饭消费480,结账时没想到,程序员和女孩相亲
- 南京社区教育|玄武区“三好学堂”走进红山街道辖区幼儿园,“帮助孩子迈好第一步”
- 静默如初|不再吃香,师范生需要留意,这3种教师以后将面临“失业”
- 百分点|澳大利亚10月份失业率升至7.0%