通常,代码补全建议是借助基于规则的语义引擎(SE)来实现的,这些引擎通常可以访问完整的存储库并理解其语义结构。最近的研究表明,大型语言模型(如 Codex 和 PaLM)可以提供更长更复杂的代码建议,这加速了实用产品(如 Copilot)的出现。然而,由机器学习(ML)支持的代码补全如何影响开发人员的生产力仍是一个没有明确答案的问题。

在最近发布的一篇博客中,谷歌介绍了他们如何将 ML 和 SE 结合起来,开发了一种新的基于 Transformer 的混合语义 ML 代码补全方法,现在可供谷歌内部开发人员使用。

在文中,他们讨论了如何将 ML 和 SE 结合起来:

  • 使用 ML 对 SE 单个 token 建议重新排序;

  • 使用 ML 应用单行和多行补全并使用 SE 检查正确性;

  • 通过 ML 对单个 token 语义建议使用单行和多行延续。

跨越 8 种编程语言,历时三个多月,谷歌将从 10000 多名内部开发人员中得到的的混合语义 ML 代码补全情况与对照组进行了比较,发现当可用单行 ML 补全时,他们的编码迭代时间(构建和测试之间的时间)减少了 6%,上下文切换(即离开 IDE)的时间减少了 7%。这些结果表明,ML 和 SE 的结合可以提高开发效率。谷歌表示,目前,他们 3% 的新代码(以字符为单位)是通过接受 ML 代码补全建议生成的。

 

 

原文链接:

https://ai.googleblog.com/2022/07/ml-enhanced-code-completion-improves.html