Qwen 3:0.6B 기반 분류 모델의 성능 수치와 구성
이번 프로젝트에서 구현된 시스템은 RAG(검색 증강 생성)의 검색 효율을 높이기 위해 질문을 먼저 분류하는 전처리 단계를 둔다. 사용된 모델은 Qwen 3:0.6B(분류용)와 Qwen 3:4B(답변 생성용) 두 가지다. 특히 6억 개의 파라미터를 가진 초소형 모델인 Qwen 3:0.6B를 신뢰할 수 있는 분류기로 만드는 것이 이번 실험의 핵심이다.
모델 학습에는 오픈소스 프레임워크인 Unsloth와 QLora(Quantized Low-Rank Adaptation) 전략이 사용됐다. 학습 데이터셋은 약 850개의 항목으로 구성됐으며, 이를 훈련(Training), 검증(Eval), 테스트(Test) 데이터로 70%, 15%, 15% 비율로 분할해 사용했다. 성능 검증을 위해 131개의 통합 테스트 시나리오를 구축해 정확도를 측정했다.
측정 결과, 프롬프트 엔지니어링만 적용한 베이스라인 모델의 정확도는 약 10%(131개 중 13개 정답)에 그쳤다. 이후 Unsloth를 통해 파인튜닝을 진행한 1차 실험에서 정확도는 79%로 상승했다. 최종적으로 카테고리를 불투명 ID(Opaque ID)로 매핑하는 프롬프트 수정과 학습을 병행한 결과, 정확도는 약 92%까지 도달했다.
메타데이터 인식 RAG 파이프라인과 ID 매핑 작동 방식
전체 파이프라인은 '질문 입력 $\rightarrow$ 카테고리 분류 $\rightarrow$ 메타데이터 필터링 기반 벡터 검색 $\rightarrow$ 답변 생성' 순으로 작동한다. 단순히 벡터 데이터베이스 전체를 검색하는 대신, 분류 모델이 지정한 카테고리(예: pool, car, hvac, cooking) 내의 인덱스 항목으로 검색 범위를 좁혀 랭킹의 정확도를 높이는 구조다.
정확도를 79%에서 92%로 끌어올린 핵심 기제는 출력 형식을 '의미가 있는 문자열'에서 '의미가 없는 고정 길이 ID'로 변경한 점이다. 기존 방식에서는 모델이 'pool'이나 'hvac' 같은 카테고리 이름을 직접 출력하게 했다. 이 경우 'water heater'와 'pool'처럼 의미적으로 겹치는 단어가 포함된 카테고리 사이에서 모델이 혼동을 일으키는 경향이 있었다.
이를 해결하기 위해 각 카테고리를 의미적 중첩이 없는 두 글자의 불투명 ID로 매핑했다. 모델이 가변적인 카테고리 문자열 대신 고정된 형식의 코드를 출력하게 함으로써, 초소형 모델이 생성해야 할 출력 공간을 제한하고 예측의 일관성을 확보했다. 이는 모델이 텍스트의 의미론적 유사성에 매몰되지 않고, 학습된 매핑 규칙에 따라 정확한 식별자를 출력하도록 유도하는 효과를 낸다.
실무적 도입 시 고려사항과 운영 제약
개발자가 초소형 LLM을 특정 태스크의 분류기로 도입할 때 주목해야 할 점은 하이퍼파라미터 튜닝보다 데이터셋의 품질이 우선된다는 것이다. Unsloth가 제공하는 기본 파인튜닝 파라미터만으로도 충분한 시작점을 확보할 수 있으며, 실제 성능 향상은 학습 데이터의 정교함에서 결정된다.
운영 단계에서 주의할 점은 과적합(Overfitting)이다. 훈련 데이터에 없는 새로운 질문에 대해 모델이 어떻게 반응하는지 확인하기 위해, 반드시 분리된 테스트 데이터셋을 유지해야 한다. 또한, 사용자의 피드백을 통해 학습 데이터를 수정하고 재학습시키는 채널을 구축하는 것이 성능 유지의 핵심이다.
성능 최적화 관점에서 'ac'를 'air'로 바꾸는 식의 후처리(Post-processing) 단계는 구현이 쉽지만, 카테고리가 늘어날수록 유지보수 비용이 증가한다. 반면, 이번 사례처럼 출력 형식을 ID 기반으로 설계하는 방식은 모델의 추론 부하를 줄이면서도 정확도를 높일 수 있는 구조적 대안이 된다. 다만, 'water heater'가 'pool'로 분류되는 것과 같은 의미적 중첩 문제는 ID 매핑만으로 해결되지 않으며, 이는 더 세분화된 학습 데이터를 통해 해결해야 하는 영역이다.




