
대규모 언어 모델(LLM)은 코드 생성 과제에서 놀라운 성능을 달성해왔다. 그러나 복잡한 프로그래밍 작업에서는 한 번의 시도로 정확한 해결책을 생성하는 것이 어려워지며, 이에 따라 이전 연구들은 코드 생성 성능을 향상시키기 위해 프로그램 복구 기법을 설계해왔다. 본 연구에서는 소수의 예시를 통해 대규모 언어 모델이 자체 예측한 프로그램을 디버깅할 수 있도록 가르치는 '셀프 디버깅(Self-Debugging)'을 제안한다. 특히, 셀프 디버깅이 언어 모델에게 '고무오리 디버깅(rubber duck debugging)'을 수행하도록 가르칠 수 있음을 보여주며, 코드의 정확성에 대한 인간의 피드백이나 오류 메시지 없이도, 실행 결과를 분석하고 생성된 코드를 자연어로 설명함으로써 자신의 오류를 스스로 식별할 수 있음을 입증한다. 셀프 디버깅은 텍스트-SQL 생성을 위한 Spider 데이터셋, C++에서 Python으로의 번역을 위한 TransCoder, 텍스트-파이썬 생성을 위한 MBPP 등 여러 코드 생성 벤치마크에서 최고 수준의 성능을 달성했다. Spider 벤치마크에서는 예측의 정확성을 검증할 수 있는 단위 테스트가 없지만, 코드 설명을 활용한 셀프 디버깅은 기준 모델 대비 일관되게 2~3% 향상시키며, 가장 어려운 난이도의 문제에서 예측 정확도를 9% 향상시켰다. TransCoder와 MBPP에서는 단위 테스트가 존재하므로, 셀프 디버깅은 기준 모델의 정확도를 최대 12%까지 향상시켰다. 동시에, 실패한 예측을 재사용하고 피드백 메시지를 활용함으로써 셀프 디버깅은 샘플 효율성을 크게 향상시켜, 10배 이상의 후보 프로그램을 생성하는 기준 모델과 비교해도 동등하거나 더 뛰어난 성능을 발휘할 수 있다.