Skip to main content
QUICK REVIEW

[论文解读] Splitting source code identifiers using Bidirectional LSTM Recurrent Neural Network

Vadim Markovtsev, Waren Long|arXiv (Cornell University)|May 26, 2018
Software Engineering Research被引用 5
一句话总结

本文提出一种双向长短期记忆网络(BiLSTM)循环神经网络,用于拆分无法通过传统启发式方法可靠拆分的多部分源代码标识符(例如,将 'FooBar' 拆分为 'foo bar')。该模型在来自开源项目的3490万条标识符上进行训练,实现了95%的精确率和96%的召回率,优于GRU、CNN和统计模型等基线模型,并显著减少了下游代码分析任务中的词汇表大小。

ABSTRACT

Programmers make rich use of natural language in the source code they write through identifiers and comments. Source code identifiers are selected from a pool of tokens which are strongly related to the meaning, naming conventions, and context. These tokens are often combined to produce more precise and obvious designations. Such multi-part identifiers count for 97% of all naming tokens in the Public Git Archive - the largest dataset of Git repositories to date. We introduce a bidirectional LSTM recurrent neural network to detect subtokens in source code identifiers. We trained that network on 41.7 million distinct splittable identifiers collected from 182,014 open source projects in Public Git Archive, and show that it outperforms several other machine learning models. The proposed network can be used to improve the upstream models which are based on source code identifiers, as well as improving developer experience allowing writing code without switching the keyboard case.

研究动机与目标

  • 解决缺乏空格分隔、命名规范启发式方法无法可靠处理的模糊多部分源代码标识符拆分挑战。
  • 通过准确的子词拆分减少词汇表大小,从而改善下游代码分析任务(如标识符嵌入、去重和主题建模)。
  • 探索深度学习(特别是双向LSTM)在源代码标记化任务中字符级序列建模的有效性。
  • 创建并发布目前公开可用的最大源代码标识符数据集,共4920万条,用于机器学习在代码领域的研究。

提出的方法

  • 使用字符级双向长短期记忆网络(BiLSTM)模型,同时从前向和后向处理标识符,以检测子词边界。
  • 模型采用两层堆叠的BiLSTM架构,每层包含256个单元,随后接一个时间分布式全连接层,使用Sigmoid激活函数预测分隔点(1 = 分隔,0 = 不分隔)。
  • 输入为小写标识符字符串,真实分隔边界以二值向量编码;模型使用Adam优化器,固定初始学习率为0.001进行训练。
  • 通过Hyperopt进行超参数调优,训练在两块NVIDIA GTX 1080 GPU上进行,共10个周期。
  • 在20%保留的验证集上,使用精确率、召回率和F1分数对模型进行评估。
  • 与多种基线模型进行比较:字符级最大似然模型、统计动态规划、梯度提升决策树、CNN和GRU。

实验结果

研究问题

  • RQ1深度学习模型是否能在拆分模糊源代码标识符方面超越启发式与统计方法?
  • RQ2BiLSTM模型在通过准确拆分复合标识符方面,能在多大程度上减少代码分析任务中的词汇表大小?
  • RQ3在该标识符拆分任务中,双向LSTM的性能与单向RNN、GRU和CNN相比如何?
  • RQ4在包含3490万条来自真实世界开源项目的多样化大规模数据集上进行训练,会产生何种影响?

主要发现

  • BiLSTM模型取得了最高的F1分数95.2%,精确率为94.7%,召回率为95.8%,优于所有其他模型,包括BiGRU、CNN和统计基线模型。
  • 该模型将数据集中唯一子词的数量从2,940,710个减少至1,065,153个,减少了64%,证明了显著的词汇表压缩效果。
  • 字符级最大似然模型通过前后向传递的逻辑与运算,实现了最高的精确率(96.6%),但召回率极低(57.3%),表明精确率与完整性之间存在权衡。
  • 在平均每个标识符仅有一个分隔点的前提下,该模型在约14个标识符后,错误发生的概率达到50%,表明其在实际应用中具有高度可靠性。
  • 该模型显著优于梯度提升决策树(F1: 92.8%)和未平滑的字符级n-gram模型(F1: 70.3%),证实了深度学习在该任务中的优越性。
  • 所提出的模型使开发人员可直接以小写或混合大小写输入标识符,无需切换大小写,从而减少击键次数,提升输入速度。

更好的研究,从现在开始

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

无需绑定信用卡

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