本論文は、複雑なプログラミングタスクでは 1 回の試行で正しいプログラムを生成するのが難しいこと、そしてこれを回避するための従来の方法は、多数のサンプリングされた候補を再ランク付けするか、別個のコード修復モデルを学習させるかのいずれかであったという観察から出発する。本論文が提案する Self-Debugging は、そうではなく、事前学習済みの大規模言語モデルに対し、追加の学習を一切行わず few-shot のデモンストレーションだけで、自ら予測したコードをデバッグすることを教える。

Self-Debugging の 1 ターンは 3 つのステップから成る。モデルが候補コードを予測する 生成(Generation)、その予測を意味的に有用な形で処理する 説明(Explanation)(たとえばコードを自然言語で 1 行ずつ説明したり、サンプル入力に対する実行トレースを書いたりする)、そしてコードの正しさについてのメッセージを、モデル自身によって、あるいは外部からユニットテストの実行によって生成する フィードバック(Feedback) である。フィードバックが予測は正しいと示すか、最大ターン数に達した時点でデバッグは終了する。著者らは説明のステップを、プログラマーがコードを 1 行ずつ説明することでバグを見つけるラバーダックデバッグになぞらえ、これによってモデルは、正しさに関する人間のフィードバックやエラーメッセージなしに自らの誤りを特定できると論じている。

この手法は code-davinci-002(Codex)、gpt-3.5-turbo、gpt-4、StarCoder を用いて、3 種類のタスクで評価されている。ユニットテストが利用できない Spider での text-to-SQL、すべてのユニットテストが利用できる TransCoder での C++ から Python への翻訳、そして 3 つのユニットテストのうち 1 つだけがモデルに示される MBPP での text-to-Python である。

要点

  • Self-Debugging はファインチューニングなしで事前学習済みモデルを用いる。デバッグは完全に few-shot プロンプティングによって教えられる。
  • 本論文はいくつかのフィードバック形式を比較している。コードが正しいかどうかだけを述べる単純なフィードバック、実行結果を含むユニットテストフィードバック、コード説明フィードバック、そしてモデル自身が実行を 1 行ずつトレースする実行トレースフィードバック(このトレースはモデルが生成したものであり、実際にコードを実行して得たものではない)である。
  • ユニットテストのない Spider では、コード説明を伴う Self-Debugging はベースラインを 2〜3% 改善し、最も難しい問題での正解率を 9% 改善した。一方、単純なフィードバックだけでは目立った効果はなかった。説明がなければ、モデルは正しい SQL と誤った SQL を見分けるのに苦労するからである。
  • ユニットテストが利用できる TransCoder と MBPP では、Self-Debugging はベースラインの正解率を最大 12% 改善し、モデルは一般に、より豊かなフィードバック、特に実行情報が含まれる場合に恩恵を受ける。
  • サンプル効率も向上する。Spider では、貪欲デコーディングによる単一の予測にこれを適用するだけで、16 個のサンプルを用いるベースラインに匹敵し、本論文の言葉では、10 倍以上の候補プログラムを生成するベースラインモデルに匹敵するか、それを上回りうる。
  • ユニットテストの実行を伴わないアブレーションでは、コード実行が重要な役割を果たすことがわかったが、モデルは自己生成したフィードバックだけでも改善できる場合がある。実行なしでは、GPT-3.5 と GPT-4 は初期の予測に過信しがちである。
  • Spider で修正される初期の SQL クエリは、たいてい正解に近く、WHERE 条件の誤りや DISTINCT キーワードの欠落といった小さな誤りにとどまる。TransCoder と MBPP では、成功した修正の 60〜70% が、初期コードがすでに正解に近かった出力の不一致に対処するものであった。

補足

著者らは Self-Debugging を、1 行ずつの説明が中間的な推論を与える点で Chain-of-Thought プロンプティングと精神的に関連するものと位置づけ、コード生成に焦点を当て、誤りとその修正を明示的に述べる必要のないフィードバックを扱う点で、Reflexion のようなフィードバック付きプロンプティングの研究と対比している。今後の課題として、コード説明の能力が高まればデバッグ能力も高まるという仮説を立てており、予備的な結果では、意味的な誤りについてモデルが生成したメッセージは 1 行ずつの説明に何も上乗せしなかったと述べている。ここで用いた論文は arXiv の第 2 版で、日付は 2023 年 10 月 5 日である。著者らは Google DeepMind と UC Berkeley に所属している。