Skip to main content
QUICK REVIEW

[論文レビュー] A Self-Attentional Neural Architecture for Code Completion with Multi-Task Learning

Fang Liu, Ge Li|arXiv (Cornell University)|Sep 16, 2019
Software Engineering Research参考文献 39被引用数 9
ひとこと要約

本稿では、階層的AST構造とTransformer-XLを用いて長距離依存関係をモデル化する、自己注意機構とマルチタスク学習を組み合わせたニューラルアーキテクチャを提案する。ASTノードの種別と値を同時に予測することで、3つの実世界データセットにおいて最先端の手法を上回る性能を達成し、関連するタスク間で知識を共有することに成功している。

ABSTRACT

Code completion, one of the most useful features in the Integrated Development Environments (IDEs), can accelerate software development by suggesting the libraries, APIs, and method names in real-time. Recent studies have shown that statistical language models can improve the performance of code completion tools through learning from large-scale software repositories. However, these models suffer from three major drawbacks: a) The hierarchical structural information of the programs is not fully utilized in the program's representation; b) In programs, the semantic relationships can be very long. Existing recurrent neural networks based language models are not sufficient to model the long-term dependency. c) Existing approaches perform a specific task in one model, which leads to the underuse of the information from related tasks. To address these challenges, in this paper, we propose a self-attentional neural architecture for code completion with multi-task learning. To utilize the hierarchical structural information of the programs, we present a novel method that considers the path from the predicting node to the root node. To capture the long-term dependency in the input programs, we adopt a self-attentional architecture based network as the base language model. To enable the knowledge sharing between related tasks, we creatively propose a Multi-Task Learning (MTL) framework to learn two related tasks in code completion jointly. Experiments on three real-world datasets demonstrate the effectiveness of our model when compared with state-of-the-art methods.

研究の動機と目的

  • コード補完のためのプログラム表現において、階層的構造情報が十分に活用されていない問題に対処する。
  • 再帰的モデルがソースコードにおける長期的依存関係を捉える能力に制限を受ける問題を克服する。
  • ノードの種別と値の予測といった関連するコード補完タスク間で知識共有を可能にすることで、性能を向上させる。
  • マルチタスク学習と自己注意メカニズムを統合し、ASTノードの種別と値の予測を同時に最適化する。
  • 提案アーキテクチャの有効性を、実世界のコード補完ベンチマーク上で実証する。

提案手法

  • 予測対象のASTノードからルートノードへのパスを符号化する新規手法を提案し、階層的構造情報を明示的にモデル化する。
  • RNN(例:LSTM)の制限を克服するため、コードシーケンスにおける長距離依存関係を捉える基盤言語モデルとしてTransformer-XLを採用する。
  • 2つの関連タスク(次のASTノードの種別と値の予測)を同時に学習するマルチタスク学習フレームワークを設計する。
  • 2つのタスク間で表現層を共有することで、トレーニング中に知識の転送と相互制約を実現する。
  • 未知語(OOV)トークンに対応するため、ポインタジェネレータ機構を採用し、コード補完におけるロバスト性を向上させる。
  • パースされたソースコードから得られるASTノードシーケンス上で、種別と値の両方の予測を最適化する損失関数を用いて、エンドツーエンドでモデルを学習する。

実験結果

リサーチクエスチョン

  • RQ1予測ノードからルートへの階層的パスをモデル化することで、コード補完の精度が向上するか?
  • RQ2RNNの代わりにTransformer-XLを用いることで、コードシーケンスにおける長距離依存関係のモデル化が顕著に向上するか?
  • RQ3マルチタスク学習による種別と値の予測の共同学習は、単一タスクモデルに比べて性能を向上させるか?
  • RQ4精度と再現率の観点から、提案アーキテクチャは最先端のモデルと比較してどのように差をつけるか?
  • RQ5種別と値の予測タスク間での知識共有は、一般化性能とロバスト性をどの程度向上させるか?

主な発見

  • 提案モデルは、3つの実世界のコード補完データセットにおいて最先端の性能を達成し、種別と値の両方の予測で先行するSOTA手法を上回った。
  • 階層的パス符号化の導入により、特に深くネストされた複雑なコードにおいて、構造的文脈を捉える能力が顕著に向上した。
  • Transformer-XLにより、遠く離れた意味的関係を持つコードスニペットに対しても、長距離依存関係のモデル化が改善され、性能向上が確認された。
  • マルチタスク学習により統計的に有意な改善が得られ、種別と値の予測の共同最適化が一般化性能の向上と過学習の低減に寄与した。
  • ポインタジェネレータ機構のおかげで、未知語トークンに対しても強いロバスト性を示し、実世界への適用性が向上した。
  • アブレーションスタディの結果、階層的符号化、自己注意、マルチタスク学習の各コンponentが、独立してかつ相乗的に性能向上に寄与していることが確認された。

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

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

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

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