Skip to main content
QUICK REVIEW

[論文レビュー] Latent Programmer: Discrete Latent Codes for Program Synthesis

Joey Hong, David Dohan|arXiv (Cornell University)|Dec 1, 2020
Software Engineering Research参考文献 48被引用数 5
ひとこと要約

Latent Programmer (LP) は、入出力例から高レベルの計画(離散的潜在コード)を予測し、その後その計画に従ってターゲットプログラムを生成する二段階探索をガイドするニューラルプログラム合成手法である。特に複雑な合成タスクにおいて、RobustFill や Dual などのベースラインと比較して、長めのプログラムでは合成精度が10%以上向上する。

ABSTRACT

In many sequence learning tasks, such as program synthesis and document summarization, a key problem is searching over a large space of possible output sequences. We propose to learn representations of the outputs that are specifically meant for search: rich enough to specify the desired output but compact enough to make search more efficient. Discrete latent codes are appealing for this purpose, as they naturally allow sophisticated combinatorial search strategies. The latent codes are learned using a self-supervised learning principle, in which first a discrete autoencoder is trained on the output sequences, and then the resulting latent codes are used as intermediate targets for the end-to-end sequence prediction task. Based on these insights, we introduce the \emph{Latent Programmer}, a program synthesis method that first predicts a discrete latent code from input/output examples, and then generates the program in the target language. We evaluate the Latent Programmer on two domains: synthesis of string transformation programs, and generation of programs from natural language descriptions. We demonstrate that the discrete latent representation significantly improves synthesis accuracy.

研究の動機と目的

  • プログラム合成における巨大なプログラム空間の探索という課題に、人間のプログラミング行動にインspiredされた二段階探索戦略を導入することで対処すること。
  • プログラムの意味的で分離可能(ディセントレート)な高レベル表現を学習し、それらをプログラム生成をガイドする計画として利用すること。
  • 離散的潜在コードを中間計画として活用することで、特に長く複雑なプログラムにおいても合成精度を向上させること。
  • 高レベルの計画と低レベルの実装詳細を分離することで、プログラム空間のより効率的かつ多様な探索を可能にすること。

提案手法

  • 本手法は、各プログラムを離散的シンボルの系列にマッピングする、離散的潜在コード表現を学習するための離散オートエンコーダ(特に VQ-VAE)を用いる。
  • 潜在予測ネットワークを訓練し、入出力例から真の離散的潜在コード(高レベル計画)を予測する。これにより、要件から計画を学習する。
  • 潜在プログラムデコーダは、潜在系列に対するクロスアテンションを用いて、予測された潜在コードに条件づけられた形で、トークン単位でターゲット言語プログラムを生成する。
  • 二段階ビームサーチを採用:まず L 個の最良の潜在コードを生成し、その後各コードに対して B/L 個の最良のプログラムを生成する。
  • 学習中、変数名および引数名はノーマライズされ、ノイズを低減し、潜在コード学習の精度を向上させる。
  • 本手法は、I/O例を用いた文字列変換およびドキュメンテーション文字列からのコード生成という二つのドメインで評価され、BLEU および精度指標が用いられる。

実験結果

リサーチクエスチョン

  • RQ1自己教師付き表現学習によって学習された離散的潜在コードは、プログラム合成のための効果的な高レベル計画として機能するか?
  • RQ2潜在コードを用いた二段階探索は、エンドツーエンド手法と比較してプログラム合成精度を向上させるか?
  • RQ3Latent Programmer の性能は、特にベースラインと比較して、プログラム長に応じてどのようにスケーリングするか?
  • RQ4学習された潜在コードは、たとえばファイル操作やシステムコールといった共通のプログラミングパターンを特定できるように、意味的に解釈可能か?

主な発見

  • Latent Programmer は、RobustFill や Dual といった最先端のベースラインと比較して、長めのプログラムでは合成精度が10%以上向上する。
  • コード生成タスクでは、ビームサイズ100で BLEU スコア21.3 を達成し、次に優れたベースライン(17.2)を大きく上回る。
  • 本手法は、探索空間の複雑さが最も高い長めのプログラムにおいて特に高い向上を示し、計画に基づく探索の有効性を実証している。
  • 解釈可能性分析の結果、潜在トークンがファイル操作やシステムコールといった共通のプログラミングパターンと意味的にクラスタリングされていることが判明。これは、関連するプログラムトークンの TF-IDF 分析によって裏付けられている。
  • 変数名および引数名のノーマライズ(ARG_i および VAR_i に)は、プログラムエンコーダが意味的な潜在構造を学習する能力を顕著に向上させた。

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

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

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

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