Skip to main content
QUICK REVIEW

[论文解读] Open Vocabulary Learning on Source Code with a Graph-Structured Cache

Milan Cvitkovic, Badal Singh|arXiv (Cornell University)|Oct 18, 2018
Machine Learning in Materials Science被引用 20
一句话总结

本文提出了一种图结构缓存(GSC),以解决源代码表示中的开放词汇挑战,通过将未登录词编码为与代码中使用位置相连的节点。当与抽象语法树(AST)上的图神经网络结合时,GSC在代码补全任务上性能提升超过100%,在变量命名任务上性能提升超过100%,训练时间仅增加30%。

ABSTRACT

Machine learning models that take computer program source code as input typically use Natural Language Processing (NLP) techniques. However, a major challenge is that code is written using an open, rapidly changing vocabulary due to, e.g., the coinage of new variable and method names. Reasoning over such a vocabulary is not something for which most NLP methods are designed. We introduce a Graph-Structured Cache to address this problem; this cache contains a node for each new word the model encounters with edges connecting each word to its occurrences in the code. We find that combining this graph-structured cache strategy with recent Graph-Neural-Network-based models for supervised learning on code improves the models' performance on a code completion task and a variable naming task --- with over $100\%$ relative improvement on the latter --- at the cost of a moderate increase in computation time.

研究动机与目标

  • 解决源代码中开放词汇学习的挑战,其中新变量名和方法名不断被引入。
  • 通过引入动态、上下文感知的词汇处理机制,提升图神经网络模型在代码表示任务上的性能。
  • 使模型能够在不依赖固定封闭词汇表的情况下,对未登录词进行推理。
  • 评估图结构缓存(GSC)在真实世界代码生成与补全任务中的有效性。

提出的方法

  • 图结构缓存(GSC)为代码中遇到的每个新词引入一个节点,并通过边将其与代码中所有使用该词的位置相连。
  • 将GSC集成到抽象语法树(AST)中,形成增强图,再由图神经网络(GNN)处理该图以执行下游任务。
  • 采用Pointer Sentinel Mixture模型架构,其中解码器结合对GSC节点和封闭词汇表的注意力机制,以预测单词。
  • GSC使模型能够同时关注代码的结构上下文以及罕见或未见单词的语义和句法角色。
  • 模型使用GNN在AST和GSC上传播表示,捕捉代码元素及其名称之间的关系依赖。
  • GSC在推理和训练过程中动态构建,每个新词均作为节点添加,并与代码中其出现的位置相连。

实验结果

研究问题

  • RQ1图结构缓存能否提升模型在涉及未登录词的代码表示任务上的性能?
  • RQ2与指针网络等更简单的未登录词处理机制相比,GSC的关联结构有何优势?
  • RQ3在变量命名任务中,GSC在已见和未见代码仓库之间泛化能力的提升程度如何?
  • RQ4尽管计算成本增加,GSC的引入是否在代码补全和变量命名任务中带来可测量的性能提升?
  • RQ5GSC架构中的哪些组件对性能至关重要,它们各自如何贡献?

主要发现

  • 与基线模型相比,图结构缓存使代码补全任务的模型准确率至少提升了7%。
  • 在变量命名任务中,GSC相对于基线模型实现了103%的相对性能提升。
  • GSC优于Pointer Sentinel模型,表明对词语使用关系的信息是性能提升的关键。
  • 模型在已见和未见测试仓库之间均保持了强劲的性能,表明泛化能力得到改善。
  • 由于图中边数增加,计算成本约提高了30%,主要源于GSC的引入。
  • 消融实验确认,图结构以及对GSC节点的注意力机制均为实现性能提升所必需。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。