"경량 파인튜닝 모델이 순정 대형 모델보다 법령 QA에서 우수한가?"
이 저장소는 그 가설을 검증하고 기각한 실험의 전 과정과 인프라를 공개합니다.
✅ 벡터 DB(Qdrant)가 사전 구축된 상태로 포함되어 있습니다.
git clone후 임베딩 없이start_rag_no_rebuild.bat하나로 즉시 실행 가능합니다.
RAG(Retrieval-Augmented Generation) 기반 법률 QA 시스템에서
도메인 특화 QLoRA 파인튜닝이 순정 모델의 성능을 능가할 수 있는가?
- 가설: 자율주행 법령으로 파인튜닝된 8B 모델 ≥ 순정 14B 모델
- 실험 환경: 동일 RAG 파이프라인, 15개 오답 유도형 함정 질문
- 독립 평가자: Claude Opus 4.6 (Thinking 모드), GPT-5.2-High
- 결과: 가설 기각
⚠️ 초기 README(2026-02-21)에는 LLM 채점 스크립트의 레이블 역전 오류로 인해
FT 모델 86.7%, 순정 모델 40%라는 완전히 뒤바뀐 수치가 기재되어 있었습니다.
아래는 교차 검증 후 2026-02-24 수정된 최종 수치입니다.
| 순위 | 모델 | 정답률 | 설명 |
|---|---|---|---|
| 1 | Non-FT Qwen3-14B + RAG | 90% | 순정, 답변 가장 상세 |
| 1 | Non-FT Qwen3-8B + RAG | 90% | 순정, 비용 대비 최고 효율 |
| 3 | Gemma3n E4B + RAG | 87% | ~4B 파라미터로 14B 대비 3%p 차이 |
| 4 | DTRO 8B (전력설비 도메인 FT) + RAG | 80% | 타 도메인 FT, RAG 부분 활용 |
| 5 | FT-8B Q8/CoT (자율주행 v5) + RAG | 60% | CoT 파인튜닝, +17%p 개선 |
| 6 | FT-8B Q4 (자율주행 v3) + RAG | 43% | 단순 QnA 파인튜닝 |
정답률 시각화:
Non-FT 14B ████████████████████████████████████████████████ 90%
Non-FT 8B ████████████████████████████████████████████████ 90%
Gemma3n E4B ██████████████████████████████████████████████░░ 87% ← 4B급
DTRO 8B ████████████████████████████████████████████░░░░ 80%
FT-8B Q8/CoT ██████████████████████████████████░░░░░░░░░░░░░ 60%
FT-8B Q4 █████████████████████████░░░░░░░░░░░░░░░░░░░░░░ 43%
자율주행 법령 파인튜닝 모델들은 RAG가 제공한 정확한 컨텍스트를 무시하고
학습된 내부 패턴을 우선하는 Context Bypass 현상을 일으켰습니다.
[동일 RAG 컨텍스트 제공]
Non-FT 8B → RAG 충실 참조 → ✅ 정답
FT-8B Q4 → 내부 패턴 우선 → ❌ 오답
4B급 Gemma3n E4B가 14B 대비 3%p 차이(87% vs 90%)에 불과했습니다.
파라미터 대비 효율: Gemma3n 21.7%/B > Qwen3-8B 11.3%/B > Qwen3-14B 6.4%/B
"모델을 키우는 것"보다 "RAG 품질을 높이는 것"이 비용 대비 효율적
Q8 (자동차손해배상보장법 운행자 책임 원칙) — 순정 모델 3개 전부 오답,
FT 모델(CoT v5, DTRO)만 정답. RAG 텍스트만으로는 도출 불가한 법리의 명시적 주입 효과.
입력 질문
│
▼
BGE-M3 임베딩 (multilingual, 다국어 고품질)
│
▼
Qdrant 벡터 DB 검색 (MMR + ColBERT 재순위화)
│
┌──────────────────────────────────────┐
│ 벡터 DB 구성 내용 │
│ ① 법령 원문 TXT (청크 임베딩) │
│ ② QnA 데이터셋 JSON (쌍 임베딩) │ ← 핵심 설계 선택
└──────────────────────────────────────┘
│
▼
상위 컨텍스트 추출
│
▼
[Ollama 로컬 LLM] → 응답 생성
QnA 데이터셋을 벡터 DB에 함께 임베딩하면 RAG 검색 정확도가 향상됩니다.
이는 비용 대비 효과로 파인튜닝을 능가하는 "Data-Centric RAG"의 핵심 설계입니다.
| 구성 요소 | 사용 기술 |
|---|---|
| LLM 서빙 | Ollama (로컬, 모델 교체 가능) |
| 임베딩 | BGE-M3 (FlagEmbedding) |
| 리랭킹 | ColBERT (FlagEmbedding) |
| 벡터 DB | Qdrant (로컬 스토리지) |
| 웹 서버 | Flask |
| UI | HTML/JS (Ollama 모델 드롭다운 자동 감지) |
벡터 DB(qdrant_storage/)가 이미 구축된 상태로 포함되어 있습니다.
별도 임베딩 작업 없이 클론 후 바로 실행 가능합니다.
git clone https://github.com/aremany/Legal_RAG_Chatbot_Qdrant_BGE
cd Legal_RAG_Chatbot_Qdrant_BGE
pip install -r requirements.txtstart_rag_no_rebuild.bat브라우저에서 http://localhost:5000 접속
데이터(data/ 폴더)를 수정했거나 처음부터 새로 임베딩하고 싶을 때만 실행:
start_rag.batUI 드롭다운에서 Ollama에 등록된 모델을 즉시 교체 가능합니다.
선택한 모델은 app_settings.json에 영속화되어 재시작 후에도 유지됩니다.
| 파일 | 설명 |
|---|---|
app_rag.py |
Flask 메인 서버, RAG 쿼리 처리 |
db_builder.py |
Qdrant 벡터 DB 구축 스크립트 |
add_adversarial_to_qdrant.py |
오답 유도형 QnA를 DB에 추가 |
data/dataset_dtro_style.json |
법령 QnA 750건 |
data/txt/ |
법령 원문 TXT 파일들 |
opus 4.6 채점.md |
Claude Opus 4.6 독립 채점 결과 원문 |
gpt52high 채점.md |
GPT-5.2-High 독립 채점 결과 원문 |
챗봇MANUAL.md |
운영 상세 매뉴얼 |
| 리소스 | 링크 |
|---|---|
| 파인튜닝 모델 (v3, 자율주행 법령) | HuggingFace |
| 파인튜닝 모델 (DTRO, 전력설비 도메인) | HuggingFace |
| 학습 데이터셋 v3 | HuggingFace 데이터셋 (DTRO) |
| 학습 데이터셋 v5 | HuggingFace 데이터셋 (CoT) |
qdrant_storage/,.venv/,__pycache__/는.gitignore로 제외- 채점 결과 파일의 개인 식별 정보 제거 후 활용 권장
- 모든 성능 수치는 해당 15개 테스트 질문셋 기준이며 통계적 일반화에 한계가 있음
본 프로젝트는 연구·학습 목적의 탐색적 실험입니다.
자율주행 시스템의 실제 판단 로직, 법률 자문, 또는 안전 크리티컬 용도로 사용하는 것을 권고하지 않습니다.
실험 결과 전체 분석은 모델 리포지토리 README를 참조하십시오.