Skip to main content
QUICK REVIEW

[論文レビュー] NatGen: Generative pre-training by "Naturalizing" source code

Saikat Chakraborty, Toufique Ahmed|arXiv (Cornell University)|Jun 15, 2022
Software Engineering Research被引用数 9
ひとこと要約

NatGenは、意味的に同等だが不自然なコードを人間が書いた自然なコードに変換する『自然化』という新しい事前学習目的を提案する。実際のコードに対して6つの意味を保つ変換を適用し、コード生成、翻訳、最適化のタスクで微調整することで、特にゼロショットおよび少データ設定において最先端の性能を達成し、CodeT5のようなモデルを上回る。

ABSTRACT

Pre-trained Generative Language models (e.g. PLBART, CodeT5, SPT-Code) for source code yielded strong results on several tasks in the past few years, including code generation and translation. These models have adopted varying pre-training objectives to learn statistics of code construction from very large-scale corpora in a self-supervised fashion; the success of pre-trained models largely hinges on these pre-training objectives. This paper proposes a new pre-training objective, "Naturalizing" of source code, exploiting code's bimodal, dual-channel (formal & natural channels) nature. Unlike natural language, code's bimodal, dual-channel nature allows us to generate semantically equivalent code at scale. We introduce six classes of semantic preserving transformations to introduce un-natural forms of code, and then force our model to produce more natural original programs written by developers. Learning to generate equivalent, but more natural code, at scale, over large corpora of open-source code, without explicit manual supervision, helps the model learn to both ingest & generate code. We fine-tune our model in three generative Software Engineering tasks: code generation, code translation, and code refinement with limited human-curated labeled data and achieve state-of-the-art performance rivaling CodeT5. We show that our pre-trained model is especially competitive at zero-shot and few-shot learning, and better at learning code properties (e.g., syntax, data flow).

研究の動機と目的

  • コード生成およびその他の生成的ソフトウェア工学タスクのための高品質なラベル付きデータの不足に対処する。
  • コードの二重チャネル性(形式的言語と自然言語)を活用し、モデルの理解力と生成力を向上させる自己教師付き事前学習目的を構築する。
  • 自然なコードを不自然な形式に変換し、元の形式に回復させるというスケーラブルで自己教師付きの方法を用いて、大規模なオープンソースコード上でモデルを事前学習する。
  • コードの自然さと意味の整合性に焦点を当てた事前学習タスクを通じて、低リソース設定(ゼロショットおよび少データ)におけるモデルの一般化力と性能を向上させる。
  • 『編集』、すなわちコードを自然化する能力を学習することで、標準的なノイズ除去目的よりも、下流の生成的タスクで優れた性能が得られることを示す。

提案手法

  • 実際の自然なソースコードに6つの意味を保つ変換を適用し、意味は保ちつつ構文や構造を変更した『不自然な』バージョンを生成する。
  • 元の自然なコードをターゲットとし、変換されたコードを入力として、モデルが元の形式を再構築するように、系列対系列の方法で学習する。
  • モデルが不自然なコードをその自然な同等物にマッピングするように学習するためのノイズ除去オートエンコーダーのタスクとして、事前学習目的を設計する。これには、深い意味的および構文的理解が求められる。
  • 人間によるラベルなしで、大規模なオープンソースコードのコーパス上で、この自然化目的に基づいて、変換器ベースのモデル(NatGen)を事前学習する。
  • 限られた人間が手作業でラベル付けしたデータを用いて、事前学習済みのNatGenモデルを、コード生成、コード翻訳、コード最適化の3つの下流タスクで微調整する。
  • CodeT5と同様のエンコーダ・デコーダアーキテクチャを採用するが、その事前学習目的を自然化タスクに置き換えることで、生成品質と転移性を向上させる。

実験結果

リサーチクエスチョン

  • RQ1不自然なコードを自然で開発者によって書かれたコードに変換する『自然化』に基づく事前学習目的が、下流の生成的ソフトウェア工学タスクにおけるモデル性能を向上させるか?
  • RQ2特に低リソース設定において、自然化事前学習目的は、マスクドトークン予測などの標準的なノイズ除去目的と比較して、下流の性能でどのように差をつけるか?
  • RQ3自然化タスクは、データフローなどの構文的・意味的特性(構造や流れ)を学ぶ能力をどの程度向上させるか?
  • RQ4コードの二重チャネル性(形式的言語と自然言語)は、従来のアプローチよりも効果的な自己教師付き事前学習目的を可能にするか?
  • RQ5自然化で事前学習したモデルは、豊富な微調整を経ずに、ゼロショットおよび少データ設定に効果的に一般化できるか?

主な発見

  • NatGenは、コード生成、コード翻訳、コード最適化のタスクで最先端の性能を達成し、CodeT5と同等またはそれを上回る性能を示した。
  • ゼロショットおよび少データ学習設定でも優れた性能を示しており、自然化事前学習目的による強力な一般化能力を示している。
  • 標準的なノイズ除去目的で事前学習したモデルと比較して、NatGenは構文的にも意味的にも人間が書いたコードに近いコードを生成した。
  • 自然化事前学習タスクは、データフローなどのコードの性質に関する性能向上が裏付けられるように、モデルに構造的・意味的整合性の高いコード理解と生成能力を効果的に学習させた。
  • この手法はスケーラブルで自己教師付きであり、事前学習には人間によるラベル付きデータを一切必要とせず、既存コードの自動変換に依存する。
  • 限られたラベル付きデータでNatGenを微調整した結果、優れた性能が得られた。これは、低データ環境下でもこの事前学習目的の有効性を示している。

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

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

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

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