Skip to main content
QUICK REVIEW

[論文レビュー] SCELMo: Source Code Embeddings from Language Models

Rafael Michael Karampatsis, Charles Sutton|arXiv (Cornell University)|Apr 28, 2020
Software Engineering Research参考文献 29被引用数 34
ひとこと要約

SCELMoはJavaScriptコード上でELMo風の文脈埋め込みを訓練し、それをDeepBugsのバグ検出の改善に用いる。静的埋め込みや非文脈的ベースラインを上回る。さらにOOVの扱いと外部プロジェクトへの一般化を分析する。

ABSTRACT

Continuous embeddings of tokens in computer programs have been used to support a variety of software development tools, including readability, code search, and program repair. Contextual embeddings are common in natural language processing but have not been previously applied in software engineering. We introduce a new set of deep contextualized word representations for computer programs based on language models. We train a set of embeddings using the ELMo (embeddings from language models) framework of Peters et al (2018). We investigate whether these embeddings are effective when fine-tuned for the downstream task of bug detection. We show that even a low-dimensional embedding trained on a relatively small corpus of programs can improve a state-of-the-art machine learning system for bug detection.

研究の動機と目的

  • ソースコードの豊富で文脈的な表現を学習してソフトウェア工学タスクを改善する動機づけ。
  • ELMoフレームワークをソースコードに適用して文脈を考慮したトークン埋め込みを作成する。
  • 文脈化したコード埋め込みが静的埋め込みよりバグ検出性能を向上させるか評価する。
  • 未知プロジェクトへの一般化とOOVトークンの影響を評価する。

提案手法

  • JavaScriptコードのコーパスでELMoを訓練(150kファイル;訓練64,750ファイル、検証33,229ファイルにフィルタリング)。
  • コードをesprimaでトークン化し、膨張を抑制するため重複フィルタリングを適用。
  • 前向き/後向きLSTMあたりの埋め込みサイズを100特徴量とし、層表現を同等重みで結合する(s_j = 1/(L+1), γ = 1)。
  • SCELMo表現をDeepBugsのバグ検出器に文脈的特徴量として組み込み、3つのバグタイプに適用。
  • ランダム、Word2Vec、FastText、No-Context ELMoのベースラインと比較して利得を評価。
  • 2つのクエリバリアントを検討:固定文脈のNo-Context ELMoベースラインと特定のコード構造に対する完全なSCELMo文脈埋め込み。

実験結果

リサーチクエスチョン

  • RQ1SCELMoの文脈埋め込みはDeepBugsにおける静的埋め込みよりバグ検出精度を向上させるか。
  • RQ2SCELMoは非文脈的アプローチと比べてOOVトークンや複雑/入れ子の表現をどのように扱うか。
  • RQ3SCELMoは訓練コーパス外の未知プロジェクトにも一般化するか。
  • RQ4文脈埋め込みの利用が実際のバグ・マイニングシナリオや偽陽性率にどのような影響を与えるか。

主な発見

Bug TypeRandomWord2VecFastTextNo-Context ELMoSCELMo
Swapped Arguments86.18%87.38%89.55%90.02%92.11%
Wrong Binary Operator90.47%91.05%91.11%92.47%100.00%
Wrong Binary Operand75.56%77.06%79.74%81.71%84.23%
  • SCELMoは単純表現と複雑な表現の両方において、すべての静的ベースラインを大幅に上回る。
  • 検証セットの単一名表現ではSCELMoが92.11%対86.18%のrandom、89.55%対?Word2Vec (?) Swapped Argumentsで、Wrong Binary Operatorでは100.00%対90.47% random、Wrong Binary Operandでは84.23%対75.56% random。
  • 複雑な表現を含む場合でも、SCELMoはすべてのベースラインを凌駕し、Swapped Argumentsで92.27%対86.37% random、Wrong Binary Operatorで100.00%対91.12% random、Wrong Binary Operandで87.10%対72.73% random。
  • 外部の500プロジェクトのテストセットでは、SCELMoは静的埋め込みに対して顕著な利得を提供(例:Swapped Argumentsで84.25%対75.79%、Wrong Binary Operatorで99.99%対82.95%、Wrong Binary Operandで83.59%対67.46%)。
  • 非文脈的なELMoは既に静的ベースラインを上回っており、事前学習とサブワード処理の価値を示唆している。SCELMoは特にOOVトークンと複雑な表現に対して最大の改善をもたらす。
  • OOV分析ではベースラインの構成要素にOOVトークンが顕著に存在することを示しており、未知識別子と演算子の取り扱いにおけるSCELMoの優位性を浮き彬している。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。