Team: I'm fine tuning
Project Period: 2025.10.17 ~ 2025.10.23
Status: ✅ Completed!
CodeNet 데이터셋을 활용하여 pretrained 모델을 구축하고, 데이콘 학습 데이터로 fine-tuning을 진행하여 코드 유사도 판별 모델의 성능을 평가하는 프로젝트입니다.
- Pretraining: CodeNet 데이터셋으로 pretrained 모델 구축 ✅
- Fine-tuning: 데이콘 경진대회 데이터로 모델 미세 조정 ✅
- Evaluation: 모델 성능 평가 및 분석 ✅
| 모델명 | 담당자 | 구현 방식 | Public Score | Private Score |
|---|---|---|---|---|
| CodeBERT (HuggingFace) | 이홍기 | microsoft/codebert-base | 92.84% | 92.86% |
| RoBERTa-small | 황호성 | Custom Implementation | 91.67% | 91.64% |
| Custom BERT | 조병률 | From Scratch | 86.33% | 86.32% |
| RoleBERT | 오정탁 | Role Embedding | 93.17% | 93.18% |
| Contrastive Learning | 이서율 | Dual Encoder + AST | 62.18% | 62.03% |
python preprocessing/preprocess_corpus.py- 핵심: microsoft/codebert-base 사전학습 모델 활용
- 학습 방식: MLM (Masked Language Modeling) + RTD (Replaced Token Detection)
- 특징:
- 대규모 사전학습 데이터의 효과
- Transfer Learning 최대 활용
사용법:
python tokenizers/bpe_tokenizer_LeeHonggi.py
python train/codebert_LeeHonggi.py- 핵심: RoBERTa 최적화 기법 적용
- Tokenizer: Unigram (32k vocab)
- 특징:
- 효과적인 전처리 (좌측 절단, 최소화)
- 구조/리터럴 마커 활용 (
<str>,<num>,<indent>) - Custom 모델 중 최고 성능 🥈
사용법:
# 1. Unigram 토크나이저 학습 (먼저 실행)
python tokenizers/unigram_tokenizer_HwangHosung.py
# 2-A. 로컬에서 프리트레이닝
python train/pretrain_roberta_HwangHosung.py --mode train
# 2-B. 또는 허깅페이스 모델 확인
python train/pretrain_roberta_HwangHosung.py --mode load
# 3. 로컬 프리트레이닝 모델 사용
python train/finetune_roberta_HwangHosung.py --model local
# 3-1. 허깅페이스 프리트레이닝 모델 사용
python train/finetune_roberta_HwangHosung.py --model huggingface
# 3-2. 허깅페이스 파인튜닝 모델 로드만
python train/finetune_roberta_HwangHosung.py --model huggingface --mode load
# 4. 추론 - 허깅페이스 모델 사용
python inference/inference_HwangHosung.py \
--model huggingface \
--test ./data/test.csv \
--output ./inference/submission.csv
# 4-1. 추론 - 로컬 모델 사용
python inference/inference_HwangHosung.py \
--model local \
--test ./data/test.csv \
--output ./inference/submission_local.csv- 핵심: 처음부터 구축한 BERT 아키텍처
- 학습 방식: MLM (Masked Language Modeling)
- 특징:
- 기본에 충실한 구현
- Baseline 역할
- 확장 가능한 구조
사용법:
# 1-A. custombert 사용
python train/pretrain_custombert_ByeongRyul.py
# 1-B. electra 사용
python train/pretrain_electra_ByeongRyul.py
# 2. 파인튜닝
python train/finetune_ByeongRyul.py
# 3. 추론
python inference/inference_ByeongRyul.py- 핵심: Role Embedding 추가
- 학습 방식: MLM + Role Prediction
- 특징:
- 구문 정보(KEYWORD, IDENTIFIER 등) 명시적 활용
- AST 기반 코드 정규화
- 혁신적 시도
사용법:
python train/pretrain_rolebert_JeongTak.py
python train/finetune_JeongTak.py- 핵심: MoCo 기반 듀얼 인코더
- 구조: Text Encoder + AST-GNN
- 특징:
- AST 구조 정보 활용
- Hard Negative Mining
- 실험적 접근
사용법:
python tokenizers/unigram_tokenizer_LeeSeoYul.py
python train/pretrain_LeeSeoYul.py
python inference/inference_LeeSeoYul.py- 주석 제거 (
remove_comments) - 식별자 정규화 (
alpha_rename) - 변수명/함수명/클래스명 익명화 - 공백 정규화 - 연속 개행을 최대 2개로 제한
- 코드 포맷팅 (
black) - 88자 줄 길이 기준 - 중복 제거 - SHA1 해시 기반
각 모델별로 최적화된 토크나이저를 /tokenizers 폴더에 구현:
- 희귀 식별자 처리에 안정적
- 소규모 데이터에 빠른 수렴
- 특수 토큰:
<indent>,<dedent>,<str>,<num>등
- RoBERTa/CodeBERT 표준
- vocab_size: 32k-50k
- 안정적 성능
- Custom BERT 구현
- vocab_size: 32k
code-similarity/
├── README.md # 프로젝트 메인 문서
├── .gitignore # Git 제외 파일 설정
├── preprocessing/ # 데이터 전처리
│ └── preprocess_corpus.py # 코퍼스 전처리 스크립트
├── tokenizers/ # 토크나이저 구현
│ ├── unigram_tokenizer_HwangHosung.py # Unigram (황호성)
│ ├── unigram_tokenizer_LeeSeoYul.py # Unigram (이서율)
│ ├── bpe_tokenizer_LeeHonggi.py # BPE (이홍기)
│ └── sentencepiece_tokenizer.py # SentencePiece (조병률)
├── train/ # 학습 스크립트
│ ├── codebert_LeeHonggi.py # CodeBERT 학습 (이홍기)
│ ├── pretrain_roberta_HwangHosung.py # RoBERTa Pretrain (황호성)
│ ├── finetune_roberta_HwangHosung.py # RoBERTa Finetune (황호성)
│ ├── pretrain_rolebert_JeongTak.py # RoleBERT Pretrain (오정탁)
│ ├── finetune_JeongTak.py # RoleBERT Finetune (오정탁)
│ └── pretrain_LeeSeoYul.py # Contrastive Pretrain (이서율)
│ └── pretrain_custombert_ByeongRyul.py # Custombert Pretrain (조병률)
│ └── pretrain_electra_ByeongRyul.py # Electra Pretrain (조병률)
│ └── finetune_ByeongRyul.py # Finetune (조병률)
├── inference/ # 추론 스크립트
│ ├── inference_HwangHosung.py # RoBERTa 추론 (황호성)
│ └── inference_LeeSeoYul.py # Contrastive 추론 (이서율)
│ └── inference_ByeongRyul.py # 두개 모델 추론 (조병률)
├── models/ # 모델 아키텍처 정의
├── data/ # 데이터셋
│ ├── train.csv # 학습 데이터
│ ├── test.csv # 테스트 데이터
│ └── code_corpus_processed.parquet # 전처리된 코퍼스
├── meeting-notes/ # 회의록 모음
│ ├── 2025-10-17.md # 킥오프 회의록
│ ├── 2025-10-20.md # 전처리 및 토크나이저 결정
│ ├── 2025-10-21.md # 전처리 완료 및 학습 시작
│ └── 2025-10-22.md # 최종 결과 공유
├── notebooks/ # 실험 노트북
└── docs/ # 문서 및 자료
└── 발표자료.md # 최종 발표자료
- 출처: IBM Research
- 설명: 대규모 프로그래밍 문제 및 솔루션 데이터셋
- 링크: CodeNet GitHub
- 용도: Pretrained 모델 구축
- 처리 결과: 604,124개 중복 제거 → 2,639,300개 샘플
- 출처: 데이콘
- 설명: 코드 유사도 판별 태스크 데이터
- 링크: 대회 페이지
- 용도: Fine-tuning 및 평가
- CodeBERT: CodeBERT: A Pre-Trained Model for Programming and Natural Languages (EMNLP 2020)
- RoBERTa: RoBERTa: A Robustly Optimized BERT Pretraining Approach (arXiv 2019)
- MoCo: Momentum Contrast for Unsupervised Visual Representation Learning (CVPR 2020)
- ELECTRA: ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators (ICLR 2020)
- CodeBERT 아키텍처 학습
- CodeBERT 사전 학습 방식 이해
- Fine-tuning 방법론 연구
- 각자 학습 내용 정리 및 공유
- 데이터 전처리 방식 결정 (중복 제거)
- 토크나이저 옵션 검토 (WordPiece vs BPE)
- 데이터 전처리 파이프라인 구축
- 전처리 완료 및 메타데이터 생성
- Fine-tuning 환경 구축
- 각 모델별 학습 진행
- CodeBERT Fine-tuning (이홍기)
- RoBERTa-small Fine-tuning (황호성)
- Custom BERT 학습 (조병률)
- RoleBERT 학습 (오정탁)
- Contrastive Learning 학습 (이서율)
- 하이퍼파라미터 튜닝
- 모델 성능 평가
- 결과 분석 및 시각화
- 최종 보고서 작성
- HuggingFace 사전학습 모델 (이홍기) > Custom 최적화 (황호성) > Custom Baseline (조병률)
- 대규모 데이터 학습 효과가 압도적
- Transfer Learning의 힘
- 황호성의 전처리 방법: +4.5%p 성능 향상
- 좌측 절단(Left Truncation) 전략 효과적
- 과도한 정제보다 적절한 최소화가 중요
- 복잡한 구조 < 최적화된 단순 구조
- 표준 Transformer: 안정적, 효율적
- 구조 정보는 보조적으로 활용
- AdamW + Warmup Scheduler 표준
- Learning Rate: 2e-5 ~ 6e-4
- Full Fine-tuning이 효과적
- Unigram: 희귀 식별자 안정적, 소규모 데이터 적합
- BPE: 표준적, 대규모 vocab 안정적
- Special Tokens 설계 중요 (
<str>,<num>,<indent>)
| 팀원 | 역할 | 주요 기여 |
|---|---|---|
| 이홍기 | CodeBERT (HF) | HF 모델 활용 |
| 황호성 | RoBERTa-small | 전처리 최적화, Custom 중 최고 |
| 조병률 | Custom BERT | Baseline 제공, 기본 구현 |
| 오정탁 | RoleBERT | 혁신적 Role Embedding, 코드 정규화 |
| 이서율 | Contrastive | 대조학습 + AST, 실험적 접근 |
프로젝트 진행 중 회의 내용:
프로젝트의 상세한 분석과 인사이트는 다음 문서에서 확인할 수 있습니다:
이 보고서는 다음 내용을 포함합니다:
- 각 모델의 아키텍처 상세 분석
- 전처리 및 토크나이저 비교
- 학습 전략 및 하이퍼파라미터 비교
- 성능 분석 및 인사이트
- 향후 개선 방향
- 대규모 사전학습 모델 활용 - Transfer Learning의 위력
- 효과적인 전처리 - 좌측 절단, 적절한 최소화
- 안정적인 학습 전략 - AdamW, Warmup, Scheduler
- 다양한 접근법 시도 - 5가지 다른 방법론
- 앙상블 - 여러 모델 조합으로 성능 향상 가능
- 데이터 증강 - 더 많은 학습 데이터 활용
- 구조 정보 통합 - AST/Role 정보의 경량 통합
- 하이퍼파라미터 튜닝 - 더 세밀한 최적화
프로젝트 관련 문의사항이 있으시면 팀원에게 연락해주세요.
Team: I'm fine tuning
Project Period: 2025.10.17 ~ 2025.10.23
Last Updated: 2025.10.24
Status: ✅ Completed