Skip to main content
QUICK REVIEW

[论文解读] A deep language model for software code

Hoa Khanh Dam, Truyen Tran|arXiv (Cornell University)|Aug 9, 2016
Software Engineering Research参考文献 12被引用 69
一句话总结

本文提出了一种基于长短期记忆(LSTM)的深度学习语言模型,用于软件代码,以捕捉传统n-gram模型无法解决的长期依赖关系。在Java语料库上的评估表明,该LSTM模型在长序列上的困惑度相比RNN降低了高达27.2%,证明其在建模长距离代码依赖关系方面表现更优。

ABSTRACT

Existing language models such as n-grams for software code often fail to capture a long context where dependent code elements scatter far apart. In this paper, we propose a novel approach to build a language model for software code to address this particular issue. Our language model, partly inspired by human memory, is built upon the powerful deep learning-based Long Short Term Memory architecture that is capable of learning long-term dependencies which occur frequently in software code. Results from our intrinsic evaluation on a corpus of Java projects have demonstrated the effectiveness of our language model. This work contributes to realizing our vision for DeepSoft, an end-to-end, generic deep learning-based framework for modeling software and its development process.

研究动机与目标

  • 为解决n-gram模型在捕捉软件代码中远距离依赖标记时的局限性,即依赖的标记相距较远。
  • 开发一种基于深度学习的语言模型,能够学习源代码中的长距离上下文模式。
  • 评估LSTM架构在建模软件代码方面相较于标准RNN的性能表现。
  • 为DeepSoft奠定基础,DeepSoft是一个用于端到端软件建模与开发过程分析的通用深度学习框架。

提出的方法

  • 该模型使用长短期记忆(LSTM)循环神经网络,按顺序处理代码标记,并通过单元状态保持长期上下文。
  • 语言模型通过自回归建模估计代码序列的概率:P(s) = P(w₁) × ∏ₜ₌₂ᵏ P(wₜ|w₁:ₜ₋₁)。
  • 为每个代码标记学习固定维度D的词嵌入,稀有标记映射到<unk>。
  • 使用调优超参数(η=0.02, ρ=0.99, ε=10⁻⁷)的RMSprop进行训练,以在代码序列上实现最佳性能。
  • 从Java语料库中构建大小为N=1,000的固定词汇表,包含最频繁出现的代码标记。
  • 使用困惑度作为内在评估指标,计算公式为exp(−∑log P(s)/#words),值越低表示性能越好。

实验结果

研究问题

  • RQ1基于LSTM的语言模型能否有效捕捉n-gram模型无法建模的软件代码中的长期依赖关系?
  • RQ2LSTM模型在建模不同长度的代码序列时,其性能与标准RNN相比如何?
  • RQ3模型容量(例如,嵌入维度和序列长度)在多大程度上影响语言模型的性能?
  • RQ4从语言模型中学习到的表示能否有效用于下游软件工程任务?

主要发现

  • 在长度为500的序列上,LSTM模型相比标准RNN在困惑度降低方面实现了27.2%的提升,证明其在长序列建模方面表现更优。
  • 在短序列(长度为10)上,LSTM模型将困惑度降低了4.7%,表明在较短上下文下也保持了稳定的性能提升。
  • 在长度为100的序列上,LSTM模型相比RNN实现了11.1%的困惑度降低,且随着序列长度增加,性能进一步提升。
  • 在固定序列长度下调整嵌入维度时,LSTM模型在200维时实现了37.9%的性能提升,表明在更大模型中具有更优的学习动态。
  • 性能提升在长序列上最为显著,证实了其有效处理长距离依赖关系的能力。
  • 结果验证了LSTM学习有意义且富含上下文信息的代码序列表示的能力,支持其在端到端软件建模框架(如DeepSoft)中的应用。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

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