BigCodeBench: 복잡하고 실용적인 코딩 작업 벤치마킹

Digest: HumanEval/MBPP는 단일 함수, 알고리즘 위주의 문제로 실제 개발에서 요구되는 다양한 라이브러리/API 조합 능력을 측정하지 못한다. BigCode 팀은 139개 Python 라이브러리(numpy, pandas, matplotlib, sklearn 등)를 활용해야 하는 1,140개 실용적 프로그래밍 과제로 구성된 BigCodeBench를 제안했다. 핵심 통찰은 실제 개발자의 코딩 작업 대부분이 알고리즘이 아닌 라이브러리 API 조합과 데이터 처리라는 것이다. GPT-4o가 61.1% (BigCodeBench-Complete, Table 2), 지시 기반에서는 51.1% (BigCodeBench-Instruct)를 기록하여, 기존 벤치마크 대비 훨씬 도전적인 평가를 제공한다.


메타데이터

항목내용
제목BigCodeBench: Benchmarking Code Generation with Diverse Function Calls and Complex Instructions
저자Terry Yue Zhuo, Minh Chien Vu, Jenny Chim, Han Hu, Wenhao Yu, Ratnadira Widyasari, Imam Nur Bani Yusuf, et al.
소속BigCode (Hugging Face, CSIRO 등 다기관)
연도2024
발표ICLR 2025, arXiv:2406.15877
링크arXiv, GitHub, Leaderboard
키워드BigCodeBench, API usage, library calls, practical coding, diverse functions

데이터셋 구성

규모 및 분할

항목내용
전체 크기1,140개 프로그래밍 과제
BigCodeBench-Complete함수 시그니처 + docstring 제공
BigCodeBench-Instruct자연어 지시만 제공 (더 어려움)
사용 라이브러리139개 Python 라이브러리
평균 테스트 케이스문제당 5.6개

라이브러리 분포 (상위 10개)

라이브러리등장 횟수도메인
numpy234수치 계산
pandas198데이터 처리
os/sys156시스템
matplotlib143시각화
re112정규표현식
json98데이터 형식
sklearn87머신러닝
datetime76시간 처리
collections65자료구조
itertools54반복자

Feature/Column 구조

필드설명예시
task_id고유 식별자BigCodeBench/42
complete_prompt함수 시그니처 + docstringdef task_func(df: pd.DataFrame):
instruct_prompt자연어 지시만"Write a function that..."
canonical_solution정답 코드참조 구현
test테스트 코드unit test 함수
libs사용해야 하는 라이브러리 목록["pandas", "numpy", "matplotlib"]

난이도 체계

난이도라이브러리 수비율
단순 (1-2 라이브러리)1-2개~30%
중간 (3-4 라이브러리)3-4개~45%
복잡 (5+ 라이브러리)5+개~25%

실제 데이터 예시

예시 1: 데이터 분석 + 시각화

# Prompt (Complete):
def task_func(df: pd.DataFrame) -> (pd.DataFrame, plt.Axes):
    """
    Given a DataFrame with columns 'Date' and 'Value',
    resample to monthly frequency, compute rolling mean
    with window=3, and plot the result.
 
    Returns:
        Tuple of (processed DataFrame, matplotlib Axes)
    """
 
# Solution:
import pandas as pd
import matplotlib.pyplot as plt
 
def task_func(df):
    df['Date'] = pd.to_datetime(df['Date'])
    df = df.set_index('Date').resample('M').mean()
    df['Rolling'] = df['Value'].rolling(window=3).mean()
    ax = df[['Value', 'Rolling']].plot()
    return df, ax

예시 2: 파일 처리 + 정규표현식

# Prompt (Instruct):
# "Write a function that reads all .log files in a directory,
#  extracts lines matching an IP address pattern, counts
#  occurrences of each IP, and returns a sorted dictionary."
 
# Solution involves: os, re, collections.Counter

예시 3: ML 파이프라인

# Prompt (Complete):
def task_func(X: np.ndarray, y: np.ndarray) -> dict:
    """
    Split data, train RandomForest and SVM classifiers,
    perform 5-fold cross-validation, and return a dict
    with model names as keys and mean accuracy as values.
    """
 
# Solution involves: sklearn, numpy

왜 이 연구를 하는가?

핵심 질문

LLM이 다양한 라이브러리 API를 조합하여 실용적인 프로그래밍 작업을 수행할 수 있는가?

기존 접근법의 한계

한계설명
알고리즘 편향HumanEval/MBPP/LeetCode는 알고리즘 위주, 실무에서는 라이브러리 활용이 핵심
단일 라이브러리DS-1000 등은 특정 라이브러리(pandas, numpy)에만 집중
비현실적 복잡도기존 벤치마크는 1-5줄로 풀리는 문제, 실무는 다중 라이브러리 조합 필요

핵심 통찰

실제 개발자의 코딩은 “알고리즘 구현”보다 “올바른 API를 올바른 순서로 조합”하는 것이다. 이를 평가하려면 다양한 라이브러리 조합을 요구하는 실용적 과제가 필요하다.


방법 (Method)

프레임워크 개요

graph TB
    A["ODEX 시드 과제<br/>(StackOverflow 기반)"] --> B["LLM으로 확장/변형<br/>(GPT-4 활용)"]
    B --> C["사람 검증 & 정제<br/>(3라운드)"]
    C --> D["BigCodeBench<br/>1,140 과제"]

    D --> E["Complete 모드<br/>(시그니처+docstring)"]
    D --> F["Instruct 모드<br/>(자연어 지시만)"]

    E --> G["Sandbox 실행<br/>(Docker 환경)"]
    F --> G
    G --> H["pass@1 / pass@5"]

발견 (Findings)

주요 결과 (pass@1)

모델CompleteInstruct
GPT-4o61.1%51.1%
Claude 3.5 Sonnet59.4%48.2%
DeepSeek-Coder-V254.2%42.8%
Llama 3 70B42.7%31.5%
CodeLlama 34B28.3%18.7%

(Table 2)

핵심 발견

  1. Complete vs Instruct 격차: 모든 모델에서 Instruct 성능이 ~10%p 낮음, 명세 이해 능력의 한계 (Table 2)
  2. 라이브러리 수와 난이도: 요구 라이브러리가 5개 이상이면 pass@1이 ~15%p 하락 (Figure 4)
  3. 오픈소스 vs 폐쇄: 오픈소스 최고(DeepSeek) 대비 GPT-4o가 ~7%p 리드 (Table 2)
  4. HumanEval과의 낮은 상관성: HumanEval 점수가 높아도 BigCodeBench에서 낮을 수 있음 — 다른 능력 측정

이론적 의의

실용적 코딩 능력의 새로운 차원

BigCodeBench는 “알고리즘 풀이 능력 ≠ 실용적 코딩 능력”이라는 중요한 관점을 제시했다. 이는 코드 LLM 개발이 알고리즘 문제 풀이를 넘어 API 이해와 라이브러리 조합 능력으로 확장되어야 함을 시사한다.


관련 연구


핵심 용어 정리

용어정의
BigCodeBench139개 Python 라이브러리 활용이 필요한 1,140개 실용 코딩 벤치마크
Complete 모드함수 시그니처와 docstring이 주어지는 평가 모드 (HumanEval과 유사)
Instruct 모드자연어 지시만 주어지는 더 어려운 평가 모드
ODEXOpen-Domain Execution benchmark, BigCodeBench의 시드 데이터 출처
Sandbox ExecutionDocker 등 격리 환경에서 생성 코드를 안전하게 실행하는 방식

태그

paper #2024 benchmark code_generation BigCodeBench API library practical_coding