Skip to main content
QUICK REVIEW

[论文解读] Modeling Vocabulary for Big Code Machine Learning

Hlib Babii, Andrea Janes|arXiv (Cornell University)|Apr 3, 2019
Software Engineering Research参考文献 68被引用 25
一句话总结

本文研究了在源代码上训练大规模神经语言模型(NLMs)时的关键词汇建模选择,表明诸如字节对编码(BPE)和策略性标记过滤等技术可将词汇量减少多达三个数量级。作者成功在包含10,106个项目的语料库上训练出性能具有竞争力的NLMs,训练速率达每分钟27个项目,从而实现了代码智能任务的可扩展预训练与迁移学习。

ABSTRACT

When building machine learning models that operate on source code, several decisions have to be made to model source-code vocabulary. These decisions can have a large impact: some can lead to not being able to train models at all, others significantly affect performance, particularly for Neural Language Models. Yet, these decisions are not often fully described. This paper lists important modeling choices for source code vocabulary, and explores their impact on the resulting vocabulary on a large-scale corpus of 14,436 projects. We show that a subset of decisions have decisive characteristics, allowing to train accurate Neural Language Models quickly on a large corpus of 10,106 projects.

研究动机与目标

  • 解决在机器学习模型中管理极其庞大且多样的源代码词汇表的挑战。
  • 研究不同的词汇建模决策如何影响词汇量、未登录词(OOV)率以及训练可行性。
  • 通过识别最优配置选择,实现大规模代码语料上神经语言模型(NLMs)的可扩展训练。
  • 证明通过适当的词汇建模,NLMs 可以高效训练并在代码补全与语言建模任务上取得具有竞争力的性能。

提出的方法

  • 分析14,436个开源项目,评估词汇建模选择对词汇量、标记数量和OOV率的影响。
  • 对标识符应用字节对编码(BPE)进行子词编码,以减少词汇量,同时保留语义含义。
  • 使用启发式过滤方法排除非英文源文件和罕见字面量,以减少噪声和词汇膨胀。
  • 在包含10,106个项目的大规模语料库上,使用LSTM和QRNN架构训练并评估多个NLMs。
  • 通过保持固定词汇表优化训练效率,实现与数据规模的线性扩展,并加快微调速度。
  • 在语言建模和代码补全任务上评估模型性能,以评估其表现与泛化能力。

实验结果

研究问题

  • RQ1不同的词汇建模选择(如标记过滤、大小写处理和子词分割)如何影响源代码中的词汇量和OOV率?
  • RQ2哪些建模选择的组合能够实现在大规模代码语料库(如10,000+个项目)上训练NLMs,而不会导致词汇爆炸?
  • RQ3BPE及其他子词技术在多大程度上可以减少词汇量,同时保持模型性能?
  • RQ4固定且受控的词汇表在多大程度上影响NLMs在大规模代码数据集上的训练速度与可扩展性?
  • RQ5在如此大规模的语料库上训练的NLMs能否在下游任务(如代码补全)中实现具有竞争力的性能?

主要发现

  • 词汇建模选择可使词汇量产生高达三个数量级的影响,其中最具影响力的选择是子词分割和对罕见或非英文标记的过滤。
  • 基于BPE的子词标记化对于控制词汇量至关重要;简单的启发式方法(如大小写拆分)不足以支持大规模训练。
  • 作者在不到一天的时间内成功在一个包含10,106个项目语料库上训练出一个神经语言模型,训练速率达每分钟27个项目,每秒处理50个源代码文件。
  • 该模型在语言建模和代码补全任务上均取得了具有竞争力的性能,证明了在代码上进行大规模预训练的可行性。
  • 固定词汇表可实现与数据规模的线性扩展,并支持快速微调——可能仅需几分钟——使迁移学习在代码智能应用中变得切实可行。
  • 本研究发现,BPE等高级技术与策略性过滤是避免OOV问题、使大规模代码NLMs成为可能的必要条件。

更好的研究,从现在开始

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

无需绑定信用卡

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