本論文は、ユーザーがコード生成のために書く要件は、どうしても曖昧であったり不十分であったりすることがあるにもかかわらず、現在の LLM は明確化を求めることなくそこから直接プログラムを生成するため、結果がユーザーの意図から外れやすいと論じる。通常は明確化のための質問をする人間の開発者とは対照的である。論文は、LLM にこの能力を持たせるうえでの 2 つの障壁を挙げる。1 つは いつ 質問するかの判断であり、明確に定義された要件について質問するとユーザーの時間を無駄にしてしまう。もう 1 つは 何を 質問するかの判断であり、漠然とした質問は的外れな回答を招く。

ClarifyGPT は、この両方に 4 つの段階で対処する。テスト入力の生成では、LLM にシード入力を生成させ、型を考慮したミューテーションを適用して、さらに多くの入力を作り出す。コードの一貫性チェックでは、要件に対して複数のコード解をサンプリングし、それらの入力で実行して、出力が食い違えば要件を曖昧とみなす。これは、明確な要件からは同じように振る舞う解が得られるという仮定に基づく。推論に基づく質問生成では、LLM に一貫しない解同士を比較させ、何が要件を曖昧にしているかを分析させたうえで、的を絞った質問を組み立てさせる。著者らはこの手法を Chain-of-Thought プロンプティングになぞらえている。強化されたコード生成では、質問と回答のペアを要件の docstring に追記し、洗練された要件から最終的なコードを生成する。人間の参加者なしで評価を行うために、著者らはユーザーシミュレーションの手法も提案している。これは、明確化のための質問と正解のテストケースを LLM に与え、ユーザーの代わりに回答させるものである。

要点

  • ClarifyGPT は、サンプリングした解が生成されたテスト入力に対して一致するかどうかを確認することで、そもそも質問すべきかどうかを判断する。そのため、曖昧でない要件は質問を一切経ずにそのままコード生成へ進む。
  • 10 人の参加者が生成された質問に回答する人手評価において、ClarifyGPT は GPT-4 の Pass@1 を MBPP-sanitized で 70.96% から 80.80% に、MBPP-ET で 51.52% から 60.19% に向上させた。
  • シミュレートしたユーザーフィードバックを用いた場合、HumanEval、HumanEval-ET、MBPP-sanitized、MBPP-ET にわたる平均 Pass@1 を、GPT-4 では 68.02% から 75.75% に、ChatGPT では 58.55% から 67.22% に改善した。
  • これらの実験では、Default、Chain-of-Thought、GPT-Engineer の各ベースラインを上回った。著者らは、すべての要件について明確化のための質問を行う GPT-Engineer に対する優位を、まず曖昧な要件を特定し、そのうえで的を絞った質問をすることに帰している。
  • シミュレートしたフィードバックでの性能は人間のフィードバックでの性能をわずかに下回った。著者らはこれを、シミュレーションが時にユーザーの意図と合わない回答を生成するためだと解釈しつつも、代替手段としての利用は依然として支持されるとしている。
  • プロンプト内のデモンストレーションの数を 0 から 3 に増やすと性能は向上し、1-shot の設定ですでに 3-shot に近い性能が得られた。

補足

著者らは 2 つの限界を挙げている。1 つは、このフレームワークには質問を行えるだけの十分な指示追従能力を持つ LLM が必要であり、インストラクションチューニングされていないモデルは対象外となること。もう 1 つは、テスト出力の比較に依存するため、画像やファイルのような複雑な入力を持つコードや、出力値を返さないコードには適さないことである。妥当性への脅威としては、公開ベンチマークからのデータ漏洩の可能性と、シミュレートしたユーザーの忠実度を挙げている。論文の日付は 2023 年 10 月で、著者らは中国科学院ソフトウェア研究所、北京航空航天大学、ヨーク大学、Huawei に所属している。