boostcampaitech8/pro-nlp-generationfornlp-nlp-02

pro-nlp-generationfornlp-nlp-02 created by GitHub Classroom

Jupyter Notebook

2

221 commits

updated Jan 9, 2026

See the code

README

수능 문제 풀이 프로젝트

💬 프로젝트 소개

  • 프로젝트 전체 기간 (3주) : 12월 15일 (월) 10:00 ~ 1월 6일 (화) 19:00
  • 프로젝트 목적: 수능에 최적화된 모델을 만들어 수능 국어, 사회 과목을 잘 푸는 AI 모델을 구현하는 것

🗂️ 팀원 소개

팀원역할/태스크 주제상세 수행 태스크 및 관련 기술
강민우Baseline 코드 작성,
Knowledge Distillation 데이터 제작 및 실험
- Unsloth와 BnB를 통한 Training 코드 작성
- LLM을 통해 Distillation을 위한 데이터 생성
- Distillation 데이터 SFT 진행
김차미Baseline 코드 작성,
RAFT
- Baseline Refactoring
- Prompt Engineering
- RAFT 데이터 생성 및 학습 진행
박서연RAG, 데이터 정제,
Test time scaling
- RAG 데이터 세팅, RAG context 수집
- LLM을 이용한 데이터 정제
- Test time scaling 진행
방재연 (팀장)DPO 실험 진행, 데이터 EDA,
vLLM, 외부데이터 수집 및 실험,
- trl DPO trainer 활용 실험 세팅
- train data 내 어휘 다양성 분석, 토픽 모델링 진행
- 외부 데이터 수집 및 실험
이호준RAG 데이터, RAG 리트리버 및 서버 구현,
Knowledge Distillation 데이터 제작 및 실험
- RAG 데이터를 수집 및 전처리
- RAG를 위한 retrieve,rerank 기능 구현 및 RAG 서버 구현
- LLM을 통해 Distillation을 위한 데이터 생성
- Distillation 데이터 SFT 진행
조민서데이터 EDA, 외부데이터 수집 및 실험,
데이터 정제, DPO
- Baseline 데이터 EDA 및 외부데이터 수집
- Rule based 데이터 전처리 및 LLM을 이용한 데이터 정제
- DPO 데이터 셋 구축

💫 솔루션 및 결과

목표: 작은 모델을 가지고 다양한 방법론을 적용하여 성능을 높이자!

image (8)

Test Time Scaling

모델이 알고 있는 문제와 모르는 문제를 분리해서 풀면 성능이 오를 것이다.

모델이 무엇을 알고 있고, 무엇을 모르고 있는지를 알 수 있을까?

여러 번 inference를 진행했을 때 모델이 항상 같은 답변을 내놓지 않는다면 모델이 헷갈리고 있음을 알 수 있음

→ Test 단계의 sampling을 통해 모델이 알고 있는 지식, 헷갈리는 지식을 나눌 수 있을 것!


최종 모델

Distillation 모델 @ Huggingface: r-jelly/Qwen3-30B-A3B-Distill-Qwen3-4B-thinking-2507-Adapter

RAFT 모델 @ Huggingface: ccharmii/qwen3-4b-thinking-RAFT-adapter


결과

단계적용 방법론Public Macro F1
학습 없는 Inferencex0.6027
Test-time ScalingDistillation + Sampling + Judge + Selective RAFT⭐ 0.6701
  • 단순 추론 시 0.6027이었던 베이스라인 성능을, Knowledge Distillation과 RAFT 방법론을 통해 단계적으로 향상
  • Test-time scaling을 통해 Distillation 모델의 장점과 RAFT 모델의 장점을 융합
  • 최종적으로 0.6701의 Macro F1 Score를 달성, 작은 모델에서도 효율적인 파이프라인 설계를 통해 유의미한 성능 개선이 가능함을 확인

✏️ Wrap-up Report

Wrap-up Report 바로가기


🛠️ 실행 방법

라이브러리 설치

# git repository clone
git clone https://github.com/boostcampaitech8/pro-nlp-generationfornlp-nlp-02.git

# 가상환경 + 의존성 설치
uv venv
source .venv/bin/activate
uv sync

모델 학습

# config 디렉토리 내 각 train yaml 파일 참고
python train.py --config config/train.yaml

Inference

# config 디렉토리 내 yaml 파일 참고
python -m src.vllm_inference.run_vllm_inference --config config/vllm_inference.yaml

📁 프로젝트 구조

├── config/     # 실행 argument config yaml
│   ├── DPO_train.yaml
│   ├── eval.yaml
│   ├── inference.yaml
│   ├── retriever_server.yaml
│   ├── retriever_test.yaml
│   ├── train_raft.yaml
│   ├── train.yaml
│   ├── vllm_eval.yaml
│   ├── vllm_inference_raft.yaml
│   └── vllm_inference.yaml
│
├── notebooks/    # 데이터 및 프롬프트 실험 관련 ipynb 파일
│   ├── background_RAG.py
│   ├── check_train_test_duplicates.ipynb
│   ├── compare_inf_csv.ipynb
│   ├── data_refinement.ipynb
│   ├── dpo_generate_wrong_cot.ipynb
│   ├── dpo_llm_as_a_judge_v2.ipynb
│   ├── dpo_llm_as_a_judge.ipynb
│   ├── EDA_prompt_tok_length.ipynb
│   ├── EDA.ipynb
│   ├── generate_cot_data_v2.ipynb
│   ├── new_train_eda_w_preprocess.ipynb
│   ├── RAFT_CoT_final.ipynb
│   ├── RAFT_CoT.ipynb
│   ├── rag_chunking.ipynb
│   ├── RAG_paragraph.ipynb
│   ├── RAG_prompt_tuning.ipynb
│   ├── rag_quality_test.ipynb
│   ├── reasoning_ensemble.ipynb
│   ├── retriever_test.ipynb
│   ├── split_train_data.ipynb
│   └── wiki_load.ipynb
│
├── src/     # 학습 및 inference 관련 소스 코드
│   ├── __init__.py
│   ├── data/            # datasets 클래스
│   │   ├── __init__.py
│   │   ├── load_data.py
│   │   ├── postprocessor/    # 후처리 로직, base 기반으로 방법론에 따라 확장
│   │   │   ├── __init__.py
│   │   │   ├── base.py
│   │   │   ├── generative.py
│   │   │   └── raft.py
│   │   └── preprocessor/     # 전처리 로직, base 기반으로 방법론에 따라 확장
│   │       ├── __init__.py
│   │       ├── base.py
│   │       ├── dpo.py
│   │       ├── generative.py
│   │       └── raft.py
│   │
│   ├── model/           # 모델 로딩 및 양자화 클래스
│   │   ├── __init__.py
│   │   └── loader.py
│   │ 
│   ├── prompts/       
│   │   ├── __init__.py
│   │   ├── base.py
│   │   ├── distill.py
│   │   ├── dpo.py
│   │   ├── raft.py
│   │   └── stubborn.py
│   │
│   ├── retriever/       # RAG 및 Retrival 관련 클래스
│   │   ├── __init__.py
│   │   ├── base.py
│   │   ├── retriever_client.py
│   │   ├── retriever.py
│   │   ├── server/
│   │   │   ├── __init__.py
│   │   │   ├── README.md
│   │   │   ├── retriever_routes.py
│   │   │   ├── retriever_schema.py
│   │   │   ├── retriever_server.py
│   │   │   └── retriever_service.py
│   │   └── strategies/
│   │       ├── __init__.py
│   │       ├── base_strategy.py
│   │       ├── bm25_strategy.py
│   │       ├── dense_strategy.py
│   │       ├── rerank_strategy.py
│   │       └── sparse_strategy.py
│   │ 
│   ├── trainer/       # trainer 클래스 구현, base 기반으로 방법론에 따라 확장
│   │   ├── __init__.py
│   │   ├── base.py
│   │   ├── dpo.py
│   │   └── generative.py
│   │
│   ├── utils/
│   │   ├── arguments.py
│   │   ├── metrics.py
│   │   ├── save_results.py
│   │   ├── tokenizer.py
│   │   └── wandb_logger.py
│   │
│   └── vllm_inference/      # vllm 추론 실행 코드
│       ├── __init__.py
│       ├── run_vllm_inference.py
│       └── vllm_utils.py
├── dpo_train.py
├── generative_inference.py
├── inference.py
├── pyproject.toml
├── README.md
├── train.py
└── uv.lock

boostcampaitech8/pro-nlp-generationfornlp-nlp-02

pro-nlp-generationfornlp-nlp-02 created by GitHub Classroom

Jupyter Notebook

2

221 commits

updated Jan 9, 2026

See the code

README

수능 문제 풀이 프로젝트

💬 프로젝트 소개

  • 프로젝트 전체 기간 (3주) : 12월 15일 (월) 10:00 ~ 1월 6일 (화) 19:00
  • 프로젝트 목적: 수능에 최적화된 모델을 만들어 수능 국어, 사회 과목을 잘 푸는 AI 모델을 구현하는 것

🗂️ 팀원 소개

팀원역할/태스크 주제상세 수행 태스크 및 관련 기술
강민우Baseline 코드 작성,
Knowledge Distillation 데이터 제작 및 실험
- Unsloth와 BnB를 통한 Training 코드 작성
- LLM을 통해 Distillation을 위한 데이터 생성
- Distillation 데이터 SFT 진행
김차미Baseline 코드 작성,
RAFT
- Baseline Refactoring
- Prompt Engineering
- RAFT 데이터 생성 및 학습 진행
박서연RAG, 데이터 정제,
Test time scaling
- RAG 데이터 세팅, RAG context 수집
- LLM을 이용한 데이터 정제
- Test time scaling 진행
방재연 (팀장)DPO 실험 진행, 데이터 EDA,
vLLM, 외부데이터 수집 및 실험,
- trl DPO trainer 활용 실험 세팅
- train data 내 어휘 다양성 분석, 토픽 모델링 진행
- 외부 데이터 수집 및 실험
이호준RAG 데이터, RAG 리트리버 및 서버 구현,
Knowledge Distillation 데이터 제작 및 실험
- RAG 데이터를 수집 및 전처리
- RAG를 위한 retrieve,rerank 기능 구현 및 RAG 서버 구현
- LLM을 통해 Distillation을 위한 데이터 생성
- Distillation 데이터 SFT 진행
조민서데이터 EDA, 외부데이터 수집 및 실험,
데이터 정제, DPO
- Baseline 데이터 EDA 및 외부데이터 수집
- Rule based 데이터 전처리 및 LLM을 이용한 데이터 정제
- DPO 데이터 셋 구축

💫 솔루션 및 결과

목표: 작은 모델을 가지고 다양한 방법론을 적용하여 성능을 높이자!

image (8)

Test Time Scaling

모델이 알고 있는 문제와 모르는 문제를 분리해서 풀면 성능이 오를 것이다.

모델이 무엇을 알고 있고, 무엇을 모르고 있는지를 알 수 있을까?

여러 번 inference를 진행했을 때 모델이 항상 같은 답변을 내놓지 않는다면 모델이 헷갈리고 있음을 알 수 있음

→ Test 단계의 sampling을 통해 모델이 알고 있는 지식, 헷갈리는 지식을 나눌 수 있을 것!


최종 모델

Distillation 모델 @ Huggingface: r-jelly/Qwen3-30B-A3B-Distill-Qwen3-4B-thinking-2507-Adapter

RAFT 모델 @ Huggingface: ccharmii/qwen3-4b-thinking-RAFT-adapter


결과

단계적용 방법론Public Macro F1
학습 없는 Inferencex0.6027
Test-time ScalingDistillation + Sampling + Judge + Selective RAFT⭐ 0.6701
  • 단순 추론 시 0.6027이었던 베이스라인 성능을, Knowledge Distillation과 RAFT 방법론을 통해 단계적으로 향상
  • Test-time scaling을 통해 Distillation 모델의 장점과 RAFT 모델의 장점을 융합
  • 최종적으로 0.6701의 Macro F1 Score를 달성, 작은 모델에서도 효율적인 파이프라인 설계를 통해 유의미한 성능 개선이 가능함을 확인

✏️ Wrap-up Report

Wrap-up Report 바로가기


🛠️ 실행 방법

라이브러리 설치

# git repository clone
git clone https://github.com/boostcampaitech8/pro-nlp-generationfornlp-nlp-02.git

# 가상환경 + 의존성 설치
uv venv
source .venv/bin/activate
uv sync

모델 학습

# config 디렉토리 내 각 train yaml 파일 참고
python train.py --config config/train.yaml

Inference

# config 디렉토리 내 yaml 파일 참고
python -m src.vllm_inference.run_vllm_inference --config config/vllm_inference.yaml

📁 프로젝트 구조

├── config/     # 실행 argument config yaml
│   ├── DPO_train.yaml
│   ├── eval.yaml
│   ├── inference.yaml
│   ├── retriever_server.yaml
│   ├── retriever_test.yaml
│   ├── train_raft.yaml
│   ├── train.yaml
│   ├── vllm_eval.yaml
│   ├── vllm_inference_raft.yaml
│   └── vllm_inference.yaml
│
├── notebooks/    # 데이터 및 프롬프트 실험 관련 ipynb 파일
│   ├── background_RAG.py
│   ├── check_train_test_duplicates.ipynb
│   ├── compare_inf_csv.ipynb
│   ├── data_refinement.ipynb
│   ├── dpo_generate_wrong_cot.ipynb
│   ├── dpo_llm_as_a_judge_v2.ipynb
│   ├── dpo_llm_as_a_judge.ipynb
│   ├── EDA_prompt_tok_length.ipynb
│   ├── EDA.ipynb
│   ├── generate_cot_data_v2.ipynb
│   ├── new_train_eda_w_preprocess.ipynb
│   ├── RAFT_CoT_final.ipynb
│   ├── RAFT_CoT.ipynb
│   ├── rag_chunking.ipynb
│   ├── RAG_paragraph.ipynb
│   ├── RAG_prompt_tuning.ipynb
│   ├── rag_quality_test.ipynb
│   ├── reasoning_ensemble.ipynb
│   ├── retriever_test.ipynb
│   ├── split_train_data.ipynb
│   └── wiki_load.ipynb
│
├── src/     # 학습 및 inference 관련 소스 코드
│   ├── __init__.py
│   ├── data/            # datasets 클래스
│   │   ├── __init__.py
│   │   ├── load_data.py
│   │   ├── postprocessor/    # 후처리 로직, base 기반으로 방법론에 따라 확장
│   │   │   ├── __init__.py
│   │   │   ├── base.py
│   │   │   ├── generative.py
│   │   │   └── raft.py
│   │   └── preprocessor/     # 전처리 로직, base 기반으로 방법론에 따라 확장
│   │       ├── __init__.py
│   │       ├── base.py
│   │       ├── dpo.py
│   │       ├── generative.py
│   │       └── raft.py
│   │
│   ├── model/           # 모델 로딩 및 양자화 클래스
│   │   ├── __init__.py
│   │   └── loader.py
│   │ 
│   ├── prompts/       
│   │   ├── __init__.py
│   │   ├── base.py
│   │   ├── distill.py
│   │   ├── dpo.py
│   │   ├── raft.py
│   │   └── stubborn.py
│   │
│   ├── retriever/       # RAG 및 Retrival 관련 클래스
│   │   ├── __init__.py
│   │   ├── base.py
│   │   ├── retriever_client.py
│   │   ├── retriever.py
│   │   ├── server/
│   │   │   ├── __init__.py
│   │   │   ├── README.md
│   │   │   ├── retriever_routes.py
│   │   │   ├── retriever_schema.py
│   │   │   ├── retriever_server.py
│   │   │   └── retriever_service.py
│   │   └── strategies/
│   │       ├── __init__.py
│   │       ├── base_strategy.py
│   │       ├── bm25_strategy.py
│   │       ├── dense_strategy.py
│   │       ├── rerank_strategy.py
│   │       └── sparse_strategy.py
│   │ 
│   ├── trainer/       # trainer 클래스 구현, base 기반으로 방법론에 따라 확장
│   │   ├── __init__.py
│   │   ├── base.py
│   │   ├── dpo.py
│   │   └── generative.py
│   │
│   ├── utils/
│   │   ├── arguments.py
│   │   ├── metrics.py
│   │   ├── save_results.py
│   │   ├── tokenizer.py
│   │   └── wandb_logger.py
│   │
│   └── vllm_inference/      # vllm 추론 실행 코드
│       ├── __init__.py
│       ├── run_vllm_inference.py
│       └── vllm_utils.py
├── dpo_train.py
├── generative_inference.py
├── inference.py
├── pyproject.toml
├── README.md
├── train.py
└── uv.lock