1. 왜 이런 것이 필요할까요? (배경)
요즘은 GitHub Copilot이나 ChatGPT 같은 AI 가 코딩을 도와줍니다. 마치 요리사가 레시피를 AI 에게 물어보며 요리를 하는 것처럼요.
하지만 문제가 생겼습니다.
- 학교에서: 학생이 숙제를 AI 에게 시켰는지, 직접 했는지 알 수 없게 되었습니다. (표절 문제)
- 회사에서: 코드가 AI 가 만든 것이라면 보안에 문제가 있거나 버그가 있을 수 있습니다.
기존의 텍스트 검사기는 "글쓰기"는 잘하지만, 코드의 복잡한 구조를 이해하지 못해 실패했습니다. 그래서 코드의 '뼈대'와 '흐름'까지 보는 새로운 탐정이 필요했습니다.
2. LLMSniffer 는 어떻게 작동할까요? (핵심 아이디어)
이 시스템은 세 가지 비밀 무기를 사용합니다.
🛠️ 무기 1: "주석 (설명글) 은 버려라!" (Comment Removal)
- 비유: AI 가 쓴 코드는 보통 "이 부분이 무엇을 하는지 설명해 드릴게요"라고 길고 자세한 설명 (주석) 을 달아놓는 경향이 있습니다. 마치 가짜 지문처럼요.
- 작동: LLMSniffer 는 코드를 분석하기 전에 이 설명글들을 모두 지워버립니다.
- 이유: 설명글에 의존하면 AI 가 쓴 것을 쉽게 알 수 있지만, 그건 '지문'을 보고 잡는 것이지 진짜 실력을 보는 게 아닙니다. 설명을 지우고 코드 자체의 구조와 논리만 보고 판단해야 진짜 실력 (사람 vs AI) 을 가릴 수 있습니다.
🧠 무기 2: "코드의 혈관 지도" (GraphCodeBERT)
- 비유: 일반적인 코딩 도구는 코드를 '문장'으로만 봅니다. 하지만 LLMSniffer 는 코드를 도시의 교통 지도처럼 봅니다.
- "A 변수가 어디서 만들어져서, B 함수로 흘러가서, C 에서 사용된다"는 데이터의 흐름을 그래프로 그립니다.
- 효과: AI 는 문장은 잘 쓰지만, 복잡한 변수 간의 흐름을 인간처럼 자연스럽게 연결하는 데는 아직 약점이 있습니다. 이 '흐름 지도'를 분석하면 AI 의 뻔한 패턴을 쉽게 찾아냅니다.
🎯 무기 3: "비교 학습" (Supervised Contrastive Learning)
- 비유: 이 방법은 음악 경연대회 심사와 비슷합니다.
- 기존 방식: "이 노래가 100 점 만점에 몇 점일까?"라고 점수만 매겼습니다.
- LLMSniffer 방식: "이 노래 (AI) 와 저 노래 (사람) 는 서로 얼마나 다른가?"를 집중적으로 비교합니다.
- 작동: 같은 종류 (사람이 쓴 것끼리, AI 가 쓴 것끼리) 는 서로 가까이 붙게 하고, 다른 종류는 멀리 떨어뜨리도록 훈련시킵니다.
- 결과: AI 가 쓴 코드는 한쪽으로 쏠리고, 사람이 쓴 코드는 다른 쪽으로 쏠려서 완벽하게 분리됩니다.
3. 실험 결과: 얼마나 잘할까요?
이 시스템은 두 가지 큰 시험 (GPTSniffer, Whodunit) 을 치렀습니다.
- 기존 방법: 70%~90% 정도의 정확도. (AI 가 쓴 것을 사람으로 오인하거나, 반대로 사람을 AI 로 오인하는 경우가 많았습니다.)
- LLMSniffer:
- 정확도 78% → 94.65% 로 대폭 상승!
- 특히 F1 점수(정확도와 빠르기를 모두 고려한 점수)가 크게 개선되었습니다.
- t-SNE 시각화 (그림 2): AI 가 쓴 코드와 사람이 쓴 코드가 완전히 분리된 두 개의 뭉치로 보였습니다. 마치 검은색 공과 흰색 공이 섞여있지 않고 따로 떨어져 있는 것처럼요.
4. 요약 및 결론
LLMSniffer는 단순히 "단어를 비교"하는 것이 아니라, **코드의 구조 (흐름)**를 보고 **불필요한 설명 (주석)**을 제거한 뒤, AI 와 사람의 코드를 서로 비교하며 학습하는 방식으로 작동합니다.
- 핵심 메시지: "AI 가 쓴 코드는 설명글이 너무 많고, 변수 흐름이 조금 어색합니다. 이걸 찾아내면 됩니다."
- 미래: 이 기술은 교육 현장의 공정한 평가를 돕고, 소프트웨어의 안전성을 지키는 데 큰 역할을 할 것입니다.
저자들은 이 모델의 모든 코드와 데이터를 공개하여 누구나 사용할 수 있게 했으며, 웹사이트에서도 실시간으로 코드를 붙여넣고 검사해 볼 수 있습니다.
한 줄 요약: "LLMSniffer 는 코드의 '속마음 (구조)'만 보고, '겉치레 (주석)'는 무시하며, AI 와 사람의 코드를 완벽하게 구별하는 초고성능 탐정입니다."
1. 문제 정의 (Problem)
대형 언어 모델 (LLM) 이 소프트웨어 개발에 급속히 확산되면서, AI 가 생성한 코드와 인간이 작성한 코드를 구분하는 것이 학술적 정직성, 코드 품질 보증, 소프트웨어 보안 측면에서 중요한 과제가 되었습니다.
- 기존 솔루션의 한계: GPTZero 나 DetectGPT 와 같은 기존 도구들은 자연어 텍스트에 최적화되어 있어, 구문과 구조적 특성이 복잡한 프로그래밍 언어 코드를 식별하는 데 어려움을 겪습니다.
- 핵심 과제: 주어진 코드 조각 x가 인간 작성 (0) 인지 LLM 생성 (1) 인지 판단하는 이진 분류 문제를 해결하는 것이 목표입니다.
2. 방법론 (Methodology)
저자들은 LLMSniffer라는 새로운 탐지 프레임워크를 제안하며, 이는 크게 세 가지 핵심 요소로 구성됩니다.
A. 전처리: 주석 제거 (Comment Removal)
- LLM 이 생성한 코드는 종종 알고리즘적 구조보다는 LLM 의 작성 스타일을 반영하는 상세한 설명 주석을 포함합니다.
- 모델이 표면적인 스타일적 단서 (주석 등) 에 의존하지 않고, 구문과 구조적 코드 속성을 기반으로 학습하도록 하기 위해 주석을 제거하는 전처리 단계를 도입했습니다.
B. 모델 아키텍처
- GraphCodeBERT 인코더:
- 단순 토큰 시퀀스뿐만 아니라 **데이터 흐름 그래프 (Data-flow graph)**를 함께 인코딩하여 변수 간의 의미적 의존성을 파악합니다.
[CLS] 토큰의 임베딩을 고정된 차원의 표현 (h∈R768) 으로 추출합니다.
- 프로젝션 헤드 (Projection Head):
- 대조 학습 (Contrastive Learning) 을 위해 h를 128 차원의 z로 매핑하는 2 층 MLP 입니다. 추론 시에는 제거됩니다.
- MLP 분류 헤드:
- 기존 연구에서 사용된 단순 선형 분류기 대신, **다층 퍼셉트론 (MLP)**을 사용하여 이진 분류를 수행합니다. 이는 비선형적인 임베딩 공간 구조를 더 잘 활용합니다.
C. 2 단계 학습 파이프라인
- 1 단계: 대조적 사전 학습 (Contrastive Pre-training)
- **지도 대조 손실 (Supervised Contrastive Loss, LSupCon)**을 사용하여 동일한 클래스 (인간/LLM) 의 표현은 밀집시키고, 다른 클래스의 표현은 분리되도록 인코더와 프로젝션 헤드를 미세 조정합니다.
- 이 단계는 분류기 훈련 전에 인코더가 구별력 있는 표현을 생성하도록 '워밍업' 역할을 합니다.
- 2 단계: 분류 미세 조정 (Classification Fine-tuning)
- 프로젝션 헤드를 제거하고 MLP 분류 헤드를 연결합니다.
- 전체 모델을 **이진 교차 엔트로피 손실 (Binary Cross-Entropy Loss)**로 끝에서 끝까지 (end-to-end) 미세 조정합니다.
3. 주요 기여 (Key Contributions)
- 최신 성능 달성: GraphCodeBERT 에 대조적 미세 조정, 주석 제거 전처리, MLP 분류 헤드를 결합하여 두 가지 벤치마크 (GPTSniffer, Whodunit) 에서 기존 최상위 성능 (SOTA) 을 달성했습니다.
- 성분 분석 (Ablation Study): 단순히 대조 학습을 적용하는 것만으로는 성능 향상이 없으며, MLP 분류 헤드의 도입과 주석 제거 전처리가 결합되어야 비로소 결정적인 성능 향상이 발생함을 입증했습니다.
- 오픈 소스 및 재현성: 모델 체크포인트, 데이터셋 (Hugging Face), 인터랙티브 Streamlit 데모, 비디오 시연을 공개하여 연구의 재현성을 보장했습니다.
4. 실험 결과 (Results)
두 가지 벤치마크 데이터셋에서 기존 베이스라인 대비 상당한 성능 개선을 보였습니다.
- GPTSniffer 벤치마크:
- 정확도: 70% → 78% (8%p 향상)
- F1 점수: 68% → 78% (10%p 향상)
- 기존 베이스라인은 정밀도는 높으나 재현율이 낮아 불균형이 있었으나, LLMSniffer 는 정밀도와 재현율을 동시에 개선했습니다.
- Whodunit 벤치마크:
- 정확도: 91% → 94.65%
- F1 점수: 91% → 94.64%
- 모든 지표에서 일관된 향상 (약 3.6%p) 을 보였습니다.
- 임베딩 시각화 (t-SNE):
- 기존 모델은 두 클래스가 중첩되어 명확한 결정 경계가 없었으나, LLMSniffer 는 AI 생성 코드가 밀집되고 고립된 클러스터를 형성하여 인간 작성 코드와 선형적으로 분리 가능함을 확인했습니다.
5. 의의 및 한계 (Significance & Limitations)
- 의의:
- 코드 생성 LLM 탐지 분야에서 **구조적 정보 (데이터 흐름 그래프)**와 지도 대조 학습의 효과를 처음으로 입증했습니다.
- 주석과 같은 표면적 스타일적 단서에 의존하지 않고 코드 본질적인 구조를 학습함으로써 일반화 성능을 높였습니다.
- 교육 및 보안 분야에서 AI 생성 코드 탐지를 위한 실용적인 도구를 제공합니다.
- 한계 및 향후 과제:
- 길이 제한: 512 토큰까지만 처리 가능하며, 긴 파일은 정확도 저하를 초래할 수 있습니다.
- 도메인 이동: 훈련 데이터와 테스트 데이터의 도메인 차이가 크더라도 잘 작동하지만, 완전히 다른 LLM 패밀리나 프로그래밍 패러다임에는 재학습이 필요할 수 있습니다.
- 적대적 공격: LLM 이 점점 더 인간과 유사한 코드를 생성하거나, 의도적인 난독화 (Obfuscation) 가 이루어질 경우 탐지 성능이 저하될 수 있으며, 이에 대한 대응은 여전히 미해결 과제입니다.
- 윤리적 주의: 오탐지 (False Positive) 로 인한 학생이나 개발자의 불이익을 방지하기 위해, 이 도구를 단독으로 결정적인 학술/직업적 판단의 기준으로 삼지 말고 인간 검토와 함께 사용해야 함을 강조합니다.
이 논문은 LLM 생성 코드 탐지를 위한 새로운 표준 아키텍처를 제시하며, 코드 구조와 대조 학습의 결합이 향후 연구의 중요한 방향임을 시사합니다.
매주 최고의 NLP 논문을 받아보세요.
스탠포드, 케임브리지, 프랑스 과학 아카데미 연구자들이 신뢰합니다.
받은편지함에서 구독을 확인해주세요.
문제가 발생했습니다. 다시 시도하시겠어요?
스팸 없음, 언제든 구독 취소 가능.
주간 다이제스트 — 가장 새로운 연구를 쉽게 설명.구독