
大規模言語モデル(LLM)は、コード生成において驚異的な性能を達成している。しかし、複雑なプログラミングタスクにおいては、一度の試行で正しい解決策を生成することは困難となるため、従来の研究ではコード生成の性能を向上させるためにプログラム修復アプローチが設計されてきた。本研究では、少数の例示(few-shot demonstrations)を用いて大規模言語モデルが自身の予測コードをデバッグする能力を学習させる「Self-Debugging」を提案する。特に、Self-Debuggingが「ラバーダックデバッグ(rubber duck debugging)」をモデルに学習させることを示している。すなわち、コードの正誤やエラーメッセージに関する人間のフィードバックが一切不要な状況下でも、モデルは実行結果を検証し、生成されたコードを自然言語で説明することで、自身の誤りを発見する能力を獲得できる。Self-Debuggingは、テキストからSQLを生成するSpiderデータセット、C++からPythonへの翻訳を目的としたTransCoder、およびテキストからPythonコードを生成するMBPPといった複数のコード生成ベンチマークにおいて、最先端の性能を達成した。Spiderベンチマークでは、予測の正しさを検証するユニットテストが存在しないため、Self-Debuggingはコードの説明を用いることで、ベースラインに対して2〜3%の一貫した改善を実現し、最も難易度の高い問題においては予測精度を9%向上させた。一方、ユニットテストが利用可能なTransCoderおよびMBPPでは、ベースラインの精度を最大12%まで向上させた。さらに、失敗した予測結果とフィードバックメッセージを再利用することで、Self-Debuggingはサンプル効率を顕著に改善し、10倍以上の候補プログラムを生成するベースラインモデルと同等またはそれ以上の性能を達成することができる。