一句话:提出 LaMirage,融合符号与神经技术修复低代码公式语言中的最后一英里错误,在真实基准上超越基线。
低代码平台(如 Excel、PowerApps)用户常以领域特定公式语言编写程序,但容易引入少量语法或语义错误,导致公式失效;这些错误虽只需少量编辑即可修复,用户却难以定位和修正。论文将生成这类编辑的问题形式化为“最后一英里修复”(last-mile repair)问题,并提出 LaMirage:一种最后一英里修复引擎生成器。LaMirage 接收文法与领域特定约束/规则,用符号方法生成满足文法与约束的候选编辑,用神经方法定位错误并对候选修复排序,从而选出最自然的修复。作者在 400 个真实 Excel 和 Power Fx 公式上与当前最好的神经与符号方法比较,LaMirage 均取得更优结果,并公开基准以推动低代码领域研究。
Most users of low-code platforms, such as Excel and PowerApps, write programs in domain-specific formula languages to carry out nontrivial tasks. Often users can write most of the program they want, but introduce small mistakes that yield broken formulas. These mistakes, which can be both syntactic and semantic, are hard for low-code users to identify and fix, even though they can be resolved with just a few edits. We formalize the problem of producing such edits as the last-mile repair problem. To address this problem, we developed LaMirage, a LAst-MIle RepAir-engine GEnerator that combines symbolic and neural techniques to perform last-mile repair in low-code formula languages. LaMirage takes a grammar and a set of domain-specific constraints/rules, which jointly approximate the target language, and uses these to generate a repair engine that can fix formulas in that language. To tackle the challenges of localizing errors and ranking candidate repairs, LaMirage leverages neural techniques, whereas it relies on symbolic methods to generate candidate edits. This combination allows LaMirage to find repairs that satisfy the provided grammar and constraints, and then pick the most natural repair. We compare LaMirage to state-of-the-art neural and symbolic approaches on 400 real Excel and Power Fx formulas, where LaMirage outperforms all baselines. We release these benchmarks to encourage subsequent work in low-code domains.
@article{paperbot1431,
title = {Neurosymbolic repair for low-code formula languages},
author = {Rohan Bavishi and Harshit Joshi and José Cambronero and Anna Fariha and Sumit Gulwani and Vu Le and Ivan Radiček and Ashish Tiwari},
journal = {Proceedings of the ACM on Programming Languages},
volume = {6},
number = {OOPSLA2},
year = {2022},
doi = {10.1145/3563327}
}