From 0878a9d5713fe5ec90715a98ec82c37a7ad976c9 Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Mon, 17 Nov 2025 12:18:51 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EC=9E=AC=ED=95=99=EC=8A=B5=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=B4=ED=94=84=EB=9D=BC=EC=9D=B8=20=EC=84=A4=EA=B3=84=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=20=EC=83=81=ED=99=A9=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- research/intent_classification/README.md | 12 +-- .../retraining_pipeline_plan.md | 81 +++++++++++++++++++ 2 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 research/intent_classification/retraining_pipeline_plan.md diff --git a/research/intent_classification/README.md b/research/intent_classification/README.md index 8cc647a..007d28f 100644 --- a/research/intent_classification/README.md +++ b/research/intent_classification/README.md @@ -47,17 +47,19 @@ ## 로빙 프로젝트 적용 현황 -### 구현 완료 +### 구현 완료 (2025-11-17) - ✅ 사용자 피드백 수집 (좋아요/싫어요) - ✅ 리뷰 큐 진입 로직 (low confidence, error, negative feedback) -- ✅ 관리자 라벨링 API +- ✅ 관리자 라벨링 API (조회/라벨링/통계) - ✅ 데이터 수집 파이프라인 (100% 수집률 달성) +- ✅ 코드 작성 원칙 준수 (router → services → state) -### 다음 단계 -- [ ] 재학습 배치 구현 +### 진행 중 (2025-11-17) +- [ ] 재학습 배치 스크립트 구현 (TDD) - [ ] 재학습 전후 정확도 비교 측정 +- [ ] Active Learning 쿼리 전략 구현 (uncertainty sampling, margin sampling) +- [ ] 암묵적 피드백 수집 (재질문, 세션 종료 등) - [ ] Few-shot learning 기법 적용 -- [ ] 암묵적 피드백 통합 ## 관련 연구 분야 diff --git a/research/intent_classification/retraining_pipeline_plan.md b/research/intent_classification/retraining_pipeline_plan.md new file mode 100644 index 0000000..78203cb --- /dev/null +++ b/research/intent_classification/retraining_pipeline_plan.md @@ -0,0 +1,81 @@ +# 의도 분류 재학습 파이프라인 설계 + +**작성일**: 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 원칙에 따라 테스트 먼저 작성 후 구현 +