2달 전

Break-It-Fix-It: 프로그램 수정을 위한 비지도 학습

Yasunaga, Michihiro ; Liang, Percy
Break-It-Fix-It: 프로그램 수정을 위한 비지도 학습
초록

우리는 수리 작업을 고려합니다: 주어진 평가자(예: 컴파일러)가 입력의 품질을 평가할 때, 목표는 나쁜 예제(예: 구문 오류가 있는 코드)를 좋은 예제(예: 구문 오류가 없는 코드)로 변환하는 수정자를 훈련시키는 것입니다. 기존 연구에서는 휴리스틱(예: 토큰 제거)을 사용하여 좋은 예제를 손상시켜 (나쁨, 좋음) 쌍으로 구성된 학습 데이터를 생성합니다. 그러나 이 합성적으로 생성된 데이터로 훈련된 수정자는 실제 나쁜 입력의 분포에 잘 일반화하지 못합니다. 이 간극을 메우기 위해, 우리는 두 가지 핵심 아이디어를 가진 새로운 훈련 접근 방식인 Break-It-Fix-It (BIFI)를 제안합니다: (i) 실제 나쁜 입력에서 수정자의 출력을 평가자로 확인하고, 좋은(수정된) 출력을 학습 데이터에 추가하며, (ii) 좋은 코드에서 현실적인 나쁜 코드를 생성하기 위한 파괴자를 훈련시킵니다. 이러한 아이디어를 바탕으로, 우리는 파괴자와 수정자를 동시에 사용하여 더 많은 쌍 데이터를 생성하면서 반복적으로 업데이트합니다. 우리는 BIFI를 두 개의 코드 수리 데이터셋에 대해 평가했습니다: GitHub-Python은 우리가 소개한 새로운 데이터셋으로, AST 파싱 오류가 있는 Python 코드를 수리하는 것이 목표입니다; 그리고 DeepFix는 컴파일러 오류가 있는 C 코드를 수리하는 것이 목표입니다. BIFI는 기존 방법보다 우수한 성능을 보여주며, GitHub-Python에서 90.5%의 수리 정확도(+28.5%)와 DeepFix에서 71.7%의 수리 정확도(+5.6%)를 달성했습니다. 특히, BIFI는 어떤 라벨링된 데이터도 필요하지 않습니다; 우리는 이를 다양한 수리 작업의 비지도 학습을 위한 강력한 출발점이 될 것으로 기대합니다.

Break-It-Fix-It: 프로그램 수정을 위한 비지도 학습 | 최신 연구 논문 | HyperAI초신경