Jigsaw: 大規模言語モデルのコード生成に前/後処理を追加し精度改善

Jigsaw: Large Language Models meet Program Synthesis

https://arxiv.org/abs/2112.02969

ICSE'22, 2021/12/06

  • 大規模事前学習言語モデル(GPT-3, Codex.PTLMと呼ぶ)は自然言語からコード生成可能であるが,変数名変換とAST-to-AST変換による後処理モジュールを追加して生成コード(Pandas)の品質を向上さるJigsawを提案

f:id:e4exp:20211224193802p:plain
構造図

f:id:e4exp:20211224194114p:plain
言語モデルに投げる前の処理

モデル

  • 入力は自然言語記述とテストケース(入出力例)
  • モデルはPTLMをブラックボックスとして使用し,後処理ではAPI関数と引数の組み合わせ検索, PTMLの出力を修正する変換ルールの学習/更新を行う
    • 変数名の変換, 引数の変換についてはAutopandasツール(9)で使用されているアプローチを採用(GNN).PTLMの出力から自然言語によるクエリでメソッド名を抽出しデータを集め,学習.Autopandasのジェネレータを拡張し、リストや辞書のような複雑なデータ型を考慮し、考慮するAPIのセットを拡張
    • 演算子や括弧の付与に関してはAST-to-ASTの変換(BluePencil(26)ベース)で対応する
      • ユーザがJigsawの生成結果を修正したものを収集し,類似のデータをクラスタ化, クラスタ内の全データを扱える単一のAST変換をオンラインで学習させる
      • データ点が既存のクラスタ内にグループ化されるなら既存のクラスタのAST-AST変換がより一般的な変換として再学習可能かどうかを確認し、可能であれば再学習
    • 前処理として,コンテキストバンクから現在のクエリに類似した要素を選び,PTLMへ与えるコンテキストに追加する.類似性はtf-idf及びtransformerで算出する.コンテキストバンクは更新される

データ

  • 2つのデータセットを作成( PandasEval1 68個のPython Pandasタスク, PandasEval2 21のPandasタスク 25人のユーザと2回のセッションで実施したハッカソンで、図解として提示)

評価

  • Jigsawはコンテキスト選択戦略に関係なく、ブラックボックスPTLMより15%〜40%精度(Acc)が向上.PandasEval2_S2データセットで,後処理のコンテキストバンクを更新すると15~30%精度(Acc)向上