自己修復とは、大規模言語モデルによるコード生成を改善する手法であり、モデルが自らのコードの誤りを内省して修正する。自己修復はコード生成の銀の弾丸か? で説明されている典型的なワークフローでは、コード生成モデルからプログラムをサンプリングし、仕様の一部として与えられたユニットテスト群に対して実行する。いずれかのテストに失敗した場合、エラーメッセージと誤ったプログラムをフィードバックモデルに与えてコードが失敗した理由を説明させ、そのフィードバックを修復モデルに渡して修正版を生成させる。フィードバックと修復の段階は同じモデルとの 1 回のやりとりで行うこともできるが、別々の段階として扱うことで、フィードバックそれ自体を研究できるようになる。
用法
この用語は LLM によるコード生成の研究において、候補プログラムを追加でサンプリングするだけでなく、最初の生成の後にデバッグと修復のループを加えるアプローチを指して用いられる。上記の論文は、自己修復を複雑なコーディングタスクの性能を高める方法として最近広く用いられるようになったものと位置づけ、その魅力として、デコーディング中の運の悪いサンプルによる誤りを克服できること、コンパイラ、静的解析ツール、実行エンジンといった記号的システムからのフィードバックを容易に取り込めること、人間のソフトウェアエンジニアがコードを書く際の試行錯誤のやり方を模倣していることを挙げている。同論文はまた、自己修復がコード生成以外でも、たとえば検索アシスタントにおけるハルシネーションの緩和に用いられてきたことにも触れている。
適用される場面
同論文で研究されている自己修復は、実行可能なユニットテストを伴う仕様を前提としており、失敗したプログラムが、修復の手がかりとなるエラーメッセージや一致しない例を生み出すことを必要とする。著者らは、現実の開発はこれと異なり、仕様は不完全で、文脈上の依存関係は長く、個々のコード片ごとにテストが存在することはまずないと指摘している。主なコストはモデル呼び出しの回数が増えることであり、そのため自己修復が割に合うかどうかは、同じ予算を独立したサンプルの追加に費やした場合のほうが良い結果になったかどうかに左右される。CodeLlama-13b-instruct、GPT-3.5、GPT-4 を HumanEval と APPS で測定した著者らの結果では、このコストを勘定に入れると改善はしばしば小さく一貫せず、予算を修復の繰り返しよりも多様な初期プログラムに充てたほうが改善が大きく、改善を主に制約しているのはモデルが自らのコードに与えるフィードバックの質であった — より強いモデルや人間によるフィードバックは修復を大幅に改善した。これらの知見は自己完結型の Python の問題を対象とした 1 件の研究によるものであり、確立した合意ではない。