Skip to main content
QUICK REVIEW

[論文レビュー] Improving Tree-Structured Decoder Training for Code Generation via Mutual Learning

Binbin Xie, Jinsong Su|arXiv (Cornell University)|May 31, 2021
Natural Language Processing Techniques被引用数 4
ひとこと要約

本論文では、2つのSeq2Treeモデルを同時に学習することで、木構造のコード生成を向上させる相互学習フレームワークを提案する。1つは前順走査(pre-order traversal)を用い、もう1つは幅優先走査(breadth-first traversal)を用いてデコードする。学習中にモデル同士が交互に知識蒸留を行うことで、補完的な文脈モデリングが可能となり、コード生成ベンチマークで顕著な性能向上が達成される。

ABSTRACT

Code generation aims to automatically generate a piece of code given an input natural language utterance. Currently, among dominant models, it is treated as a sequence-to-tree task, where a decoder outputs a sequence of actions corresponding to the pre-order traversal of an Abstract Syntax Tree. However, such a decoder only exploits the preorder traversal based preceding actions, which are insufficient to ensure correct action predictions. In this paper, we first throughly analyze the context modeling difference between neural code generation models with different traversals based decodings (preorder traversal vs breadth-first traversal), and then propose to introduce a mutual learning framework to jointly train these models. Under this framework, we continuously enhance both two models via mutual distillation, which involves synchronous executions of two one-to-one knowledge transfers at each training step. More specifically, we alternately choose one model as the student and the other as its teacher, and require the student to fit the training data and the action prediction distributions of its teacher. By doing so, both models can fully absorb the knowledge from each other and thus could be improved simultaneously. Experimental results and in-depth analysis on several benchmark datasets demonstrate the effectiveness of our approach. We release our code at https://github.com/DeepLearnXMU/CGML.

研究の動機と目的

  • コード生成における前順走査ベースのデコーダーの限界を解決する。これは垂直的依存関係にのみ依存するため、重要な水平的文脈を逃す可能性がある。
  • 幅優先走査ベースのデコーディングが、ニューラルコード生成における文脈モデリングを補完する可能性を調査する。
  • 異なる走査戦略を有する2つのモデルが、学習中に同期的な知識蒸留を用いてお互いに向上させる相互学習フレームワークを開発する。
  • 共同学習フレームワークが、推論の複雑さやモデルサイズを増加させることなく、モデル性能を向上させることを示す。
  • 複数のベンチマークデータセットにおいて、フレームワークの有効性と一般化能力を検証する。

提案手法

  • 前順走査(標準的手法)を用いるSeq2Treeモデルと、幅優先走査を用いるSeq2Treeモデルの両方を訓練する。
  • 各学習ステップで、一方のモデルを学生(student)とし、もう一方を教師(teacher)とする相互蒸留メカニズムを実装する。
  • 各ステップで、学生モデルは真値のアクションと、教師モデルが予測するアクション分布の両方に適合するように学習する。
  • 学習ステップを進めるごとに学生・教師の役割を交代させることで、対称的な知識移転と相互的改善を実現する。
  • Tranxモデルをベースアーキテクチャとし、同じデコーダ構造を維持しつつ幅優先走査デコーディングをサポートするように変更を加える。
  • 知識蒸留損失を適用し、学生のアクション予測分布を教師のものに一致させることで、一般化性能とロバストネスを向上させる。

実験結果

リサーチクエスチョン

  • RQ1幅優先走査ベースのデコーディングは、前順走査による文脈モデリングと補完的であると言えるか?
  • RQ2異なる走査戦略を持つモデル間での相互知識蒸留は、コード生成性能にどのように影響するか?
  • RQ3提案された相互学習フレームワークは、多様なコード生成ベンチマークにおけるモデルの一般化性能とロバストネスを向上させるか?
  • RQ4相互学習フレームワークは、モデルサイズや推論の複雑さを増加させることなく、モデル性能を向上させられるか?
  • RQ5異なる走査戦略を持つ2つのモデルは、特定のコード生成エラー(例:誤った関数名や引数の生成)の処理において、どのように比較されるか?

主な発見

  • 提案された相互学習フレームワークは、Django、Python-300、Java-100を含む複数のベンチマークデータセットで、顕著なコード生成性能の向上を達成した。
  • 相互学習によって強化されたモデルは、ほぼすべてのテストグループでベースラインモデルを上回り、正確一致(exact match)とBLEUスコアで一貫した向上が見られた。
  • 事例研究では、相互学習モデルが、誤った関数名や引数の生成といった一般的な誤りを、両走査戦略の長所を組み合わせることで効果的に是正できた。
  • 幅優先走査デコーダー単体でも競争力のある性能を達成しており、非前順走査の走査法がコード生成に実用的かつ効果的であることが示された。
  • 相互学習フレームワークにより、1つのLSTMデコーダーを用いながらも、state-of-the-artの二重再帰デコーダー(Alvarez-Melis and Jaakkola, 2017)を上回る性能を両モデルが達成した。
  • フレームワークは強力な一般化性能を示し、多様なプログラミング言語やコードの複雑さのレベルにおいて一貫した向上が確認された。

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

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

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

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