Skip to main content
QUICK REVIEW

[論文レビュー] CodeEditor: Learning to Edit Source Code with Pre-trained Models

Jia Li, Ge Li|arXiv (Cornell University)|Oct 31, 2022
Software Engineering Research被引用数 9
ひとこと要約

この論文では、実世界の編集パターンに焦点を当てた新しい事前学習タスクを用いて、変更されたコードバージョンを正解バージョンに修正する能力を学ぶ、CodeEditorと呼ばれる事前学習済みコード編集モデルを提案する。自動生成された多様なコード変更を用いて訓練することで、微調整、少数 shot、ゼロ shotの設定において、ベンチマークデータセットで最大26.6%の向上を達成し、最先端の性能を発揮する。

ABSTRACT

Developers often perform repetitive code editing activities for various reasons (e.g., code refactoring) during software development. Pre-trained code editing models have achieved the state-of-the-art (SOTA) results. Pre-trained models are first pre-trained with pre-training tasks and fine-tuned with the code editing task. Existing pre-training tasks mainly are code infilling tasks (e.g., masked language modeling), which are derived from the natural language processing field and are not designed for automatic code editing. This paper proposes a novel pre-training task specialized in code editing and presents an effective pre-trained code editing model named CodeEditor. Our pre-training task further improves the performance and generalization ability of code editing models. Specifically, we collect lots of real-world code snippets as the ground truth and use a powerful generator to rewrite them into mutated versions. Then, we pre-train our CodeEditor to edit mutated versions into the corresponding ground truth, to learn edit patterns. We conduct experiments on four code editing datasets and evaluate the pre-trained CodeEditor in three settings. (1) In the fine-tuning setting, we train the pre-trained CodeEditor with four datasets and evaluate it on the test data. CodeEditor outperforms the SOTA baselines by 15%, 25.5%, and 9.4% and 26.6% on four datasets. (2) In the few-shot setting, we train the pre-trained CodeEditor with limited data and evaluate it on the test data. CodeEditor substantially performs better than all baselines. (3) In the zero-shot setting, CodeEditor correctly edits 1,113 programs while the SOTA baselines can not work.

研究の動機と目的

  • 既存のコード編集のための事前学習タスクが自然言語処理由来であり、実際のコード編集パターンに最適化されていないという限界を解消すること。
  • 現実的で多様なコード変更から学習することで、コード編集モデルの性能と一般化能力を向上させること。
  • 実世界のコードを正解として用い、強力な生成モデルで妥当な変更バージョンを生成することで、意味のある編集パターンをよりよく捉えることのできる事前学習タスクを設計すること。
  • 少数 shot やゼロ shotの状況を含む現実的な設定でモデルを評価し、その頑健性と一般化能力を示すこと。
  • 編集位置のアノテーションを必要としない、より実用的で効果的な自動コード編集のアプローチを提供すること。

提案手法

  • GitHub などのオープンソースレポジトリから収集した実世界のコードスニペットを、レビュー済みかつ本番環境で使用可能な正解コードとして確保する。
  • 強力なニューラル生成モデルを用いて、正解コードを構文的・意味的に異なるが文法的に正しい、妥当な変更バージョンに自動的に再書き換えする。
  • モデルが変更されたコードを元の正解バージョンに戻すことを学ぶ、新しい事前学習タスクを設計し、エンドツーエンドで編集パターンを学習する。
  • シーケンス・トゥ・シーケンスフレームワークを用いて、この編集-変更ペアのデータで CodeEditor モデルを事前学習させ、明示的な位置アノテーションなしにコード変更を特定・修正できるようにする。
  • 微調整、少数 shot、ゼロ shotの設定で、下流のコード編集データセットに対して事前学習済みの CodeEditor を微調整し、性能と一般化能力を評価する。
  • 変更されたサンプルが常に元のコードと異なるように保証し、Trivial あるいは誤解を招く事前学習例を回避する。これは、ELECTRA や SSR のような手法とは異なり、変更がほとんどない例を避けることを意図している。

実験結果

リサーチクエスチョン

  • RQ1コード編集に特化した事前学習タスクは、マスクド言語モデルのような一般的なコード埋め込みタスクを上回ることができるか?
  • RQ2現実的で多様なコード変更を用いた事前学習により、未観測の編集パターンへの一般化能力が向上するか?
  • RQ3微調整なしに、ゼロ shot や少数 shot の設定で強力な性能を発揮できるか?
  • RQ4さまざまなコード編集ベンチマークにおいて、CodeEditor は最先端のモデルと比べて編集精度と頑健性で優れているか?
  • RQ5変更から元のコードへの編集ペアから学習することで、標準的な事前学習目的よりも良い編集パターンの理解が得られるか?

主な発見

  • 微調整設定では、4つの異なるコード編集データセットで、SOTAベースラインをそれぞれ15%、25.5%、9.4%、26.6%上回った。
  • 少数 shot 設定では、完全な訓練データで微調整されたSOTAモデル即ち、より高いデータ効率と一般化能力を示している。
  • ゼロ shot 設定では、微調整なしに1,113のプログラムを正しく編集できたが、SOTAベースラインは完全に失敗した。これは、強いインダクティブバイアスと一般化能力を示している。
  • 本研究で提案する事前学習タスクは、ランダムなマスキングではなく、現実的で多様な編集パターンに焦点を当てることで、モデルの性能と一般化能力を顕著に向上させた。
  • CodeEditor は編集位置のアノテーションを必要とせず、自動的に編集箇所を特定・修正できるため、実世界での利用に向けより実用的である。
  • 同様に、入力と出力が同一の例(Trivialな例)を避けることで、モデルの混乱を軽減し、学習効率を向上させた。

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

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

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

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