DOCS/research/intent_classification/retraining_pipeline_plan.md

2.6 KiB

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

작성일: 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 원칙에 따라 테스트 먼저 작성 후 구현