‘AI가 인간을 능가할 수 있다’는 가정은 더이상 놀랍지 않습니다. 시간의 문제처럼 여겨지기도 하지요. 자율 주행에서 코드 작성까지, AI는 점점 빠르게 인간의 능력을 따라잡거나 능가하고 있습니다. 특히, 최근 개발된 LLM은 Python 코딩 문제 해결에서 90% 이상의 높은 정확도를 기록하며, 사람을 능가하는 성과를 보이는데요.
현장에서 AI의 코드를 그대로 적용될 수 있을까요? AI가 단순한 코드 조각을 넘어, 사람이 작성하는 복잡한 소프트웨어를 이해하고 개발할 수 있는 수준인지에 대해선 여전히 의문이 남습니다. 이러한 궁금증을 해결하기 위해 새로운 벤치크 REPOCOD가 등장했습니다. REPOCOD는 기존의 인위적이고 단순한 코드 생성 테스트에서 벗어나, 실제 프로젝트 환경에서 AI의 성능을 측정하는 데 중점을 둡니다.
코드 생성 벤치마크의 한계
퍼듀(Purdue) 대학교 연구팀은 오늘날 LLM의 코드 작성 능력이 실제 개발 환경에서 얼마나 유효한지에 대해 의문을 제기했습니다. 기존의 벤치마크인 HumanEval과 MBPP는 단일 코드 라인이나 짧은 함수 작성에 초점을 맞추고 있어 실제 소프트웨어 개발 과정에서 필요한 파일 또는 리포지토리(repository) 수준의 문맥 정보를 충분히 평가하지 못합니다. 연구진은 구체적으로 3가지 이유를 들어 새로운 데이터셋의 필요성을 제기합니다. 함께 살펴볼까요?
- 실제 코드 완성(Completion) 작업의 반영이 필요합니다. 기존의 HumanEval과 MBPP와 같은 벤치마크는 주로 인위적으로 제작된 코드 완성 문제들로, 소프트웨어 개발자들이 직면하는 실제 코드 작업을 충분히 대변하지 못합니다.
- 현실적인 작업 복잡도를 포함해야 합니다. 단편적으로 이뤄진 알고리즘 테스트와 달리 실제 개발 중에는 여러 함수, 파일, 클래스에 의존하게 되며, 복잡한 문맥을 요구하는 경우가 많습니다. 하지만 기존 벤치마크는 주로 독립적인 단일 코드 조각이나 짧은 함수에 집중하여, 프로젝트 수준의 문맥 이해와 생성 능력을 평가하지 못하고 있습니다.
- 신뢰할 수 있는 정확성 평가 기준이 필요합니다. 현재 사용되는 벤치마크들 중 일부는 유사도 기반 평가 지표를 사용하여 모델의 성능을 평가하지만 이 방식은 코드 생성의 정확성을 제대로 반영하지 못하는 경우가 많습니다. 일부 유사한 것과 실제로 동작하는 것은 다르기 때문입니다.
잘못된 지표 결과를 보여주는 두 가지 예시
위의 이미지는 실제 정답 테스트 데이터(GT; Ground Truth)와 LLM 생성 데이터를 비교하고 점수로 나타낸 결과입니다. CodeBLEU 벤치마크는 코드 생성 모델의 성능을 평가하기 위해 개발된 지표로, 구문(Syntax)과 문법 준수 여부 등을 평가합니다. 연구진은 위의 예시를 통해 현재 벤치마크가 어떻게 잘못됐는지 설명합니다.
(a)의 경우, CodeBLEU 점수가 58.06점으로 나타납니다. 상당히 낮은 점수로 보이지요? 하지만 실제로 LLM이 생성한 코드는 예측해야 할 코드와 기능적으로 동일합니다. 표현이 다르다는 이유로 유사도 기반 지표가 이를 부정확하게 판단한 것이지요. 반면, (b)의 경우에는 상대적으로 높은 점수를 기록했는데요. 모델이 기대했던 입력값과 다르기 때문에 실제로는 부정확하게 작동할 것입니다. 하지만 구문이 유사하다는 이유로 높은 점수를 기록했지요. 이처럼 코드를 파악할 때는 단순히 구문을 평가하는 점수에 의존할 것이 아니라 전체적인 맥락과 실제 사용성을 고려해야 합니다.
REPOCOD는 어떻게 구성되어 있나?
REPOCOD의 데이터 수집 파이프라인 및 인스턴스 구조
그렇다면 REPOCOD는 어떻게 구성되어 있을까요? REPOCOD는 실제 개발 환경에서의 코드 생성을 평가하기 위해 세 단계에 걸쳐 데이터를 수집합니다. 먼저, 저장소 선택 단계에서 Python을 주요 언어로 사용하고 데이터의 품질을 보장하기 위해 2000개 이상의 스타를 보유한 오픈 소스 저장소만을 선택했습니다.
그 다음, 타겟 함수 선택 단계에서는 각 저장소 내의 테스트 함수와 이에 연결된 타깃 함수를 식별하기 위해 정적 및 동적 분석 기법을 활용합니다. 여기서 정적 분석이란 코드의 구문과 구조를 검사하는 방법이고, 동적 분석은 실제로 테스트 함수가 실행될 때 호출되는 다른 함수들을 실시간으로 추적하여 실제로 어떤 함수가 어떻게 동작하는지를 확인하는 과정입니다.
마지막으로, 관련 테스트 케이스 수집 단계에서는 타겟 함수와 직접적으로 연결된 테스트 케이스만을 선택해 실행합니다. 이를 통해 전체 테스트 케이스를 실행하지 않고도 효율적으로 코드의 정확성을 검증할 수 있어, 평가의 정확성과 효율성을 모두 높였습니다.
AI의 진짜 코딩 실력은?
이제 새롭게 구성한 데이터셋과 함께 AI의 ‘진짜’ 코딩 실력을 확인해봐야 합니다. 그 결과는 어땠을까요? 연구진은 지금까지 제안된 SOTA 모델과 다양한 모델 사이즈로 비교해봤습니다.
REPOCOD에서 SOTA LLM의 Pass@1(%) 성능
평가 기준은 코드 생성 모델의 성능을 평가하는 지표 중 하나인 pass@1입니다. 모델이 첫 번째 시도에서 정확한 코드를 생성했는지를 측정하는 방식이지요. 코드 생성에서 모델은 일반적으로 여러 번의 시도로 여러 답안을 생성할 수 있지만, pass@1은 첫 번째로 생성한 코드가 정답과 일치할 확률을 의미합니다.
GPT-4o와 같은 상위 성능의 모델조차 REPOCOD에서 27.35%의 pass@1 성공률을 기록했습니다. 굉장히 높은 정확도를 요구하는 평가 기준이기는 합니다만, 단순한 코딩 과제에서는 높은 정확도를 자랑하는 기존 평가와는 달리 상당히 좋지 못한 결과가 나타났습니다. 또한, REPOCOD 내 리포지토리 수준의 문맥을 필요로 하는 문제에 대해선 10개의 모델 모두 30%를 넘지 못하며, 파일 간의 의존성을 정확히 이해하는 데 어려움을 겪었습니다.
일반적으로 알려진 것처럼, 모델의 크기가 클수록 성능이 약간 향상되는 경향이 있다는 점은 여전히 유효합니다. 그러나 코드 길이나 복잡도가 높아질수록 모델 크기의 이점이 크게 감소했으며, 이러한 문제를 해결하기 위해 단순히 모델의 크기를 키우는 접근은 부족하다는 결론입니다. LLM이 단순한 코드 생성이 아닌 실제 소프트웨어 개발 수준의 복잡한 작업을 수행하기 위해선 보다 뛰어난 문맥 이해와 추론 능력이 필요합니다.
AI가 사람을 대체할까요? 코딩하는 AI가 존재하더라도 구체적인 목표와 실제 평가는 인간의 영역입니다. AI와 인간이 각자 잘할 수 있는 영역은 다르고 각자의 위치에 맞는 목표가 있지요.
아직은 AI가 인간만큼 코드를 생성하지 못하지만, 새로운 벤치마크와 데이터가 누적되고 있습니다. 하지만 새로운 구조, 더 효율적인 제안 등을 하는 데 있어서 인간은 명확한 역할이 있는데요. AI가 아무리 발전해도 인간은 또 다른 역할을 찾을 수 있을 것만 같습니다.