# 의도 분류 재학습 파이프라인 설계

**작성일**: 2025-11-17  
**목적**: 라벨링된 데이터로 의도 분류기 재학습 및 개선 검증

## 1. 재학습 배치 스크립트 설계

### 1.1 입력 데이터
- `IntentReviewQueue`에서 `status='confirmed'` 또는 `status='corrected'`인 항목
- `true_intent`가 설정된 항목만 사용
- 최소 라벨링 개수: intent별 5개 이상 (통계적 유의성)

### 1.2 재학습 대상 모델
1. **Naive Bayes 분류기** (`app/services/intent_bayes.py`)
   - 라벨링된 메시지로 vocabulary 및 intent별 통계 업데이트
   - 기존 seed 데이터와 병합

2. **Ko-SRoBERTa Prototype** (`intent_prototypes` 테이블)
   - `true_intent`로 재라벨링된 메시지 임베딩으로 centroid 재계산
   - 기존 prototype과 가중 평균 또는 교체

### 1.3 재학습 스크립트 구조
```
scripts/retrain_intent_classifier.py
- 라벨링된 데이터 추출
- Naive Bayes 재학습
- Prototype 재계산
- 검증 (기존 테스트 세트)
- 롤백 가능한 백업 생성
```

## 2. 재학습 전후 측정

### 2.1 측정 지표
- **정확도**: 동일 테스트 샘플에서 `predicted_intent == true_intent` 비율
- **리뷰 큐 진입률**: low confidence 케이스 감소율
- **Intent별 F1-score**: intent별 성능 변화

### 2.2 측정 스크립트
```
scripts/measure_intent_improvement.py
- 재학습 전 baseline 측정
- 재학습 실행
- 재학습 후 측정
- 비교 리포트 생성
```

## 3. Active Learning 쿼리 전략

### 3.1 Uncertainty Sampling
- **Margin Sampling**: `confidence(predicted) - confidence(2nd)`가 작은 순서
- **Entropy Sampling**: 예측 분포의 엔트로피가 높은 순서

### 3.2 구현 위치
- `app/brain/intent_review.py`: `should_enqueue_for_review` 확장
- `app/state/intent_review_repository.py`: 우선순위 정렬 함수 추가

## 4. 암묵적 피드백 수집

### 4.1 암묵적 신호
- **재질문**: 같은 사용자가 짧은 시간 내에 유사한 질문 반복
- **세션 종료**: 응답 후 즉시 세션 종료 (불만족 가능성)
- **무응답**: 사용자가 응답 없이 다음 메시지 전송

### 4.2 구현 위치
- `app/services/conversation_service.py`: 세션 종료 감지
- `app/router/message_router.py`: 재질문 패턴 감지
- `app/brain/intent_review.py`: 암묵적 피드백 조건 추가

## 5. 구현 순서

1. **재학습 배치 스크립트** (TDD)
2. **재학습 전후 측정 스크립트** (TDD)
3. **쿼리 전략 구현** (TDD)
4. **암묵적 피드백 수집** (TDD)
5. **문서 업데이트**

---

**참고**: 각 단계는 TDD 원칙에 따라 테스트 먼저 작성 후 구현

