LLM이 생성한 코드, 어떻게 탐지할까? – 코드 패러프레이징 탐지 연구 소개

최근 대형 언어 모델(LLM)의 발전으로 인해 코드 생성 기술이 급격히 발전하고 있습니다. 개발자들은 ChatGPT, Gemini-Pro 등의 LLM을 활용하여 코드를 작성하거나 자동 완성 기능을 사용하고 있습니다. 하지만 이러한 기술이 발전하면서 지적 재산권 보호 문제도 함께 제기되고 있습니다. 악의적인 사용자는 LLM을 이용하여 기존 코드의 패러프레이즈(의미를 유지하면서 표현만 변경하는 것)를 수행하고, 이를 마치 새로운 코드인 것처럼 사용할 수 있습니다.

이러한 문제를 해결하기 위해 연세대학교 계산이론 연구실은 LLM이 생성한 코드와 사람이 작성한 코드의 차이를 분석하고, 특정 LLM이 생성한 코드인지 여부를 판별하는 연구를 진행했습니다.

lpcode_overview.png

위 그림은 악의적인 사용자가 LLM을 사용하여 기존 코드를 대상으로 패러프레이징을 수행하는 과정 및 코딩 스타일 특징들을 사용하여 패러프레이징 여부 및 패러프레이즈를 수행한 LLM을 추적하는 본 연구의 전반적인 과정을 보여주고 있습니다.

연구 목표

다음과 같은 두 가지 주요 목표를 설정했습니다.

  1. 주어진 코드가 LLM이 패러프레이징한 것인지 탐지하는 것 (LLM Code Paraphrasing Detection)
  2. 특정 코드가 어느 LLM에서 생성되었는지 추적하는 것 (LLM Provenance Tracking)

이를 위해 LLM이 생성한 코드와 사람이 작성한 코드의 스타일적 차이를 분석하는 방법을 개발하고, 새로운 데이터셋과 탐지 모델을 구축했습니다.

LPcode 데이터셋 구축

이 데이터셋은 사람이 작성한 코드와 다양한 LLM이 해당 코드를 패러프레이징한 결과를 포함하고 있습니다.

lpcode_dataset_overview.png

데이터셋 구축 과정

  1. GitHub에서 인간이 작성한 코드 수집 – 2020년 이전에 생성된 오픈소스 코드(라이선스가 Apache, BSD, MIT인 코드)만을 선별하여 LLM이 학습에 사용하지 않은 데이터를 확보했습니다.
  2. LLM을 사용하여 코드 패러프레이징 수행 – 수집된 코드를 ChatGPT, Gemini-Pro, WizardCoder, DeepSeek-Coder에 입력하여 변형된 코드 버전을 생성했습니다.
  3. 데이터 필터링 및 정제 – 원본 코드와 LLM이 변형한 코드 사이의 유사도를 분석하여 지나치게 유사한 데이터는 제거하고, 코드가 올바르게 파싱될 수 있도록 정리했습니다.
  4. 데이터 익명화 처리 – 코드에 포함된 이메일, URL, 전화번호 등의 개인정보를 자동으로 제거하여 연구 윤리를 준수했습니다.

최종적으로 C, C++, Java, Python 네 가지 프로그래밍 언어로 구성된 21,355개의 코드 샘플이 데이터셋에 포함되었습니다.