diff --git a/ideas/250807_로빙_감정_시스템_설계도.md b/ideas/250807_로빙_감정_시스템_설계도.md index 2cf4e3b..ad2dc44 100644 --- a/ideas/250807_로빙_감정_시스템_설계도.md +++ b/ideas/250807_로빙_감정_시스템_설계도.md @@ -42,9 +42,10 @@ ## 3. 감정 임베딩 활용 ### 3.1 임베딩 획득 -- **사전학습 모델**: EmoRoBERTa, GoEmotions BERT 등 활용 +- **한국어 우선 모델**: ko-miniLM, multitask-e5, KoSimCSE +- **영어 모델은 백업**: EmoRoBERTa, GoEmotions BERT (번역 브릿지) - **도메인 파인튜닝**: 로빙 대화 로그로 continual learning -- **대조학습**: 유사 감정은 가깝게, 반대 감정은 멀게 +- **대조학습**: 불안↔안도, 질투↔자긍심 등 반대쌍 ### 3.2 ChromaDB 통합 - **저장 구조**: @@ -60,56 +61,75 @@ 4. 베이지안 결합으로 최종 선택 ### 3.3 임베딩 기반 클러스터링 -- DBSCAN으로 감정 클러스터 발견 +- **HDBSCAN으로 교체**: eps 민감도 문제 해결 +- **UMAP 시각화**: 감정 지도 가시화 (선택) - 사용자별 감정 어트랙터 맵핑 -- 클러스터별 공감 전략 사전 계산 +- 클러스터별 공감 전략 프롬프트 캐싱 -## 4. 예측-평가 피드백 루프 +## 4. 엔트로피 정의 및 계산 -### 4.1 예측 시스템 +### 4.1 프로토타입 소프트맥스 방식 +**흐름**: +1. 768차원 임베딩과 9개 감정 프로토타입 간 거리 계산 +2. 거리를 소프트맥스로 확률 분포 p로 변환 +3. 엔트로피 H(p) = -Σ(p_i × log p_i) 계산 +4. 특이점 = 엔트로피 급증 + 분류 확률 하락 + +### 4.2 2헤드 분리 구조 +**기본정서 헤드 (100ms)**: +- 5개 감정: Joy, Sadness, Anger, Fear, Disgust +- 낮은 temperature로 결단력 유지 +- 즉각적 반응 처리 + +**사회기능 헤드 (500ms)**: +- 4개 감정: Anxiety, Envy, Embarrassment, Ennui +- 문맥/담화 길이 반영 +- attention window 확장 + +**통합 방식**: +- p_total = w × p_basic + (1-w) × p_social +- w는 발화 길이, 담화 위치, 채널(Slack/이메일)로 동적 결정 +- Beta 분포 사후 기대값으로 w 학습 + +## 5. 예측-평가 피드백 루프 + +### 5.1 예측 시스템 **예측 대상**: -- 사용자의 감정 변화 (기본정서 → 사회기능 전환) -- 응답 길이와 패턴 (짧은 답변 vs 긴 대화) -- 다음 주제 전환 확률 -- 대화 종료 가능성 +- 감정 전환 패턴 (기본정서 → 사회기능) +- 응답 길이 분포 (Gamma 분포) +- 주제 전환 확률 (Beta 분포) +- 대화 지속 시간 -**베이지안 예측 모델**: -```python -# 기본정서 분포 (에크먼 5개) -P(basic_emotion_t+1 | history) = Dirichlet([joy, sadness, anger, fear, disgust]) +**베이지안 모델 구조**: +- 기본정서: Dirichlet(α_basic) - 5차원 +- 사회기능: Dirichlet(α_social) - 4차원 +- 저장/무시: Beta(α, β) - 성공률 추적 +- 응답 길이: Gamma(k, θ) - 토큰 수 분포 -# 사회기능 분포 (켈트너 4개) -P(social_emotion_t+1 | context) = Dirichlet([anxiety, envy, embarrassment, ennui]) +### 5.2 평가 시스템 +**오차 계산 (3종 병행)**: +- KL Divergence: 분포 차이 (0 근처 클리핑) +- Brier Score: 확률 예측 품질 +- ECE: 캘리브레이션 오차 -# Thompson Sampling으로 예측 -predicted_emotion = sample_from_posterior() -``` +**학습 신호 생성**: +- 표준화된 z-score로 클리핑 +- EMA(지수이동평균)로 평활화 +- 특이점 구간에서만 학습률 2-3배 상승 +- 학습 신호 = 오차 × 엔트로피_증가율 (편향 방지) -### 4.2 평가 시스템 -**시공간 엔트로피 활용**: -- **시간축**: 예측과 실제의 시간차 엔트로피 -- **공간축**: 768차원 임베딩 공간에서의 예측 오차 -- **특이점**: 예측이 크게 빗나간 순간 = 중요 학습 기회 +## 6. 수학-임베딩-LLM 통합 파이프라인 -**오차 계산**: -``` -예측 오차 = KL_divergence(predicted_distribution, actual_observation) -엔트로피 증가 = H(t+1) - H(t) -학습 신호 = 오차 × 엔트로피_증가율 -``` - -## 5. 수학-임베딩-LLM 통합 파이프라인 - -### 5.1 처리 흐름 +### 6.1 처리 흐름 1. **2축 감정 감지**: 기본정서(100ms) + 사회기능(500ms) 병렬 처리 -2. **엔트로피 이상 탐지**: 시공간 엔트로피 변화율 계산 +2. **엔트로피 계산**: 프로토타입 소프트맥스 기반 3. **임베딩 유사도 계산**: ChromaDB에서 근접 감정 검색 -4. **예측 생성**: 사용자 다음 반응 예측 -5. **LLM 의미 분석**: 불확실성이 높을 때만 호출 +4. **예측 생성**: 베이지안 추론으로 다음 상태 예측 +5. **LLM 호출 결정**: 불확실성 임계값 기반 게이팅 6. **베이지안 증거 결합**: 모든 신호를 확률적으로 통합 -7. **평가 및 학습**: 예측 vs 실제 비교, 사후분포 업데이트 +7. **평가 및 학습**: 3종 오차(KL/Brier/ECE) 계산, 사후분포 업데이트 -### 5.2 시퀀스 다이어그램 +### 6.2 시퀀스 다이어그램 ```mermaid sequenceDiagram @@ -152,30 +172,34 @@ sequenceDiagram Eval-->>Predict: 사후분포 업데이트 ``` -### 5.3 중요도 결정 방식 +### 6.3 중요도 결정 방식 - 잠재 중요도 z ∈ {0,1} - 관측: m(엔트로피), e(임베딩 거리), l(LLM 점수) - 베이지안 추론으로 P(z=1|m,e,l) 계산 - Thompson Sampling으로 저장/무시 결정 -## 6. 베이지안 학습 시스템 +## 7. 베이지안 학습 시스템 -### 6.1 파라미터 학습 -- **윈도우 크기**: Poisson 분포, TD-Error 기반 적응 -- **가중치**: Dirichlet 분포, 사용자 피드백으로 업데이트 -- **임계값**: Beta 분포, 성능 지표로 조정 +### 7.1 파라미터 체계 +**감정 분포**: +- Dirichlet(α_basic): 5개 기본정서 사전-사후 +- Dirichlet(α_social): 4개 사회기능 사전-사후 -### 6.2 계층적 모델 -- **조직 레벨**: 글로벌 사전분포 -- **팀 레벨**: 팀별 특성 학습 -- **개인 레벨**: 개인화된 사후분포 +**의사결정**: +- Beta(α, β): 저장/무시 성공률 ("저장 후 대화 품질 향상 여부") +- Gamma(k, θ): 응답 길이(토큰 수), 반응 시간(초) 분포 -### 6.3 온라인 업데이트 +**계층 구조**: +- 조직 → 팀 → 개인의 Dirichlet-Multinomial +- Cold start는 조직/팀 사전분포로 초기화 + +### 7.2 온라인 업데이트 - 실시간 사후분포 갱신 - 지연 피드백 처리 (backward update) - 불확실성 기반 탐색-활용 균형 +- EMA로 평활화, 특이점에서만 학습률 상승 -### 6.4 학습 플로우 +### 7.3 학습 플로우 ```mermaid flowchart TD @@ -199,21 +223,28 @@ flowchart TD K --> L[다음 행동 결정] ``` -## 7. 감정-기억 통합 +## 8. 감정-기억 통합 -### 7.1 저장 결정 +### 8.1 저장 결정 및 안전장치 +**저장 결정 흐름**: - 엔트로피 특이점 검사 -- 임베딩 클러스터 거리 +- 임베딩 클러스터 거리 (HDBSCAN) - 베이지안 중요도 추론 - Thompson Sampling으로 최종 결정 -### 7.2 회상 메커니즘 +**프라이버시 게이트**: +- PII 패턴 감지 (이름, 전화번호, 주민번호 등) +- 민감 주제 필터 (건강, 재무, 신원정보) +- 감지 시: 요약만 저장, 원문 폐기 +- 24시간 내 opt-out 옵션 제공 + +### 8.2 회상 메커니즘 - 임베딩 기반 빠른 검색 (ChromaDB) - 엔트로피 가중 재순위화 - MMR로 다양성 보장 - 시간 감쇠 적용 -### 7.3 기억 회상 시퀀스 +### 8.3 기억 회상 시퀀스 ```mermaid sequenceDiagram @@ -238,9 +269,9 @@ sequenceDiagram Response-->>Query: 관련 기억 반환 ``` -## 8. 공감 시스템 +## 9. 공감 시스템 -### 8.1 Inside Out 기반 공감 전략 +### 9.1 Inside Out 기반 공감 전략 **기본정서 대응**: - Joy → 함께 기뻐하기, 축하 - Sadness → 위로, 경청 @@ -254,63 +285,103 @@ sequenceDiagram - Embarrassment → 정상화, 수용 - Ennui → 새로운 자극 제안 -### 8.2 예측 기반 선제적 공감 +### 9.2 예측 기반 선제적 공감 - 감정 전환 예측 (Sadness → Anger 가능성) - 선제적 개입 (전환 전 완화) - Thompson Sampling으로 전략 선택 - 실제 효과로 베이지안 업데이트 -## 9. 성능 지표 +## 10. 성능 지표 및 목표치 -### 9.1 임베딩 품질 -- **Triplet Accuracy**: 같은 감정이 임베딩 공간에서 가까운 비율 -- **Retrieval NDCG@k**: 관련 기억 검색 정확도 -- **클러스터 순도**: 감정 클러스터의 일관성 +### 10.1 핵심 KPI (3개월 목표) +- **ECE (Expected Calibration Error)**: ≤ 0.05 + - 예측 확률과 실제 확률의 정렬도 + - 측정: 10개 구간별 신뢰도-정확도 차이의 가중평균 + +- **Brier Score**: ≤ 0.18 + - 확률 예측의 전반적 품질 + - 측정: (예측 - 실제)² 평균 + +- **NDCG@10**: ≥ 0.6 + - 감정 기반 기억 검색 품질 + - 측정: 상위 10개 결과의 관련도 순위 정확성 -### 9.2 예측 정확도 -- **KL Divergence**: 예측 vs 실제 감정 분포 -- **시간 예측 오차**: 감정 전환 타이밍 -- **학습 수렴 속도**: 예측 개선 속도 +### 10.2 보조 지표 +- **응답시간**: 기본정서 100ms, 사회기능 500ms 이내 +- **메모리 사용량**: 사용자당 100MB 이하 +- **학습 수렴**: 100회 상호작용 내 안정화 +- **프라이버시 보호율**: PII 100% 필터링 -### 9.3 시스템 성능 -- **엔트로피 감소율**: 중요 순간 포착 능력 -- **베이지안 캘리브레이션**: 확률 예측의 정확도 -- **적응 속도**: 사용자별 수렴 시간 +### 10.3 사용자 경험 지표 +- **감정 인식 정확도**: 사용자 평가 4.0/5.0 이상 +- **공감 반응 만족도**: NPS 40 이상 +- **설명 이해도**: 80% 이상 "이해함" 응답 -## 10. 구현 우선순위 +## 11. 구현 우선순위 -### Phase 1: 기초 구축 -- Inside Out 9개 감정 정의 (기본 5 + 사회 4) -- 감정 임베딩 모델 선택 및 통합 -- ChromaDB에 2축 감정 저장 구조 -- 기본 엔트로피 계산기 +### Phase 1: 기초 구축 (2주) +**함수형 설계 원칙**: +``` +입력: 텍스트 → 임베딩 → 프로토타입 거리 → 소프트맥스 → 감정분포 +``` +- 9개 감정 프로토타입 정의 (순수 함수) +- 한국어 임베딩 모델 통합 (ko-miniLM 우선) +- ChromaDB 메타데이터 구조 확장 +- 프로토타입 소프트맥스 엔트로피 계산 -### Phase 2: 예측-평가 시스템 -- 기본정서 예측 모듈 (100ms) -- 사회기능 예측 모듈 (500ms) -- 예측 오차 계산 및 로깅 -- 엔트로피 특이점 탐지 +### Phase 2: 예측-평가 시스템 (3주) +**파이프라인 구성**: +``` +예측: 현재상태 → 베이지안추론 → 예측분포 +평가: 실제결과 → 오차계산(KL/Brier/ECE) → 사후업데이트 +``` +- 2헤드 병렬 처리 (async/await) +- 3종 오차 메트릭 구현 +- 베이지안 파라미터 초기화 +- 로깅 및 모니터링 설정 -### Phase 3: 통합 파이프라인 -- 2축 병렬 처리 구현 -- 베이지안 증거 결합 -- Thompson Sampling 구현 +### Phase 3: 통합 및 안전장치 (2주) +**프라이버시 우선**: +``` +PII감지 → 민감주제필터 → 저장결정 → 24hr옵트아웃 +``` +- Thompson Sampling 의사결정 +- 프라이버시 게이트 구현 - 실시간 사후분포 업데이트 +- 오류 처리 및 폴백 메커니즘 -### Phase 4: 학습 및 최적화 -- 온라인 학습 시스템 -- 개인화된 감정 모델 -- 추론 속도 개선 -- 메모리 효율화 +### Phase 4: 최적화 및 평가 (1주) +**성능 튜닝**: +``` +측정 → 병목분석 → 최적화 → 재측정 → KPI검증 +``` +- 추론 속도 최적화 (타겟: 100ms/500ms) +- 메모리 사용량 프로파일링 +- KPI 대시보드 구축 +- A/B 테스트 프레임워크 -## 11. 기술 스택 +## 12. 기술 스택 - **임베딩 모델**: Hugging Face Transformers - **벡터 DB**: ChromaDB (이미 사용 중) - **베이지안 추론**: Pyro (경량) 또는 TFP (대규모) - **함수형 구조**: 순수 함수 + I/O 분리 패턴 -## 12. 주요 결정 사항 +## 13. 주요 결정 사항 + +### 13.1 모델 선택 기준 +1. **한국어 성능**: ko-miniLM > multitask-e5 > KoSimCSE +2. **추론 속도**: 100ms 제약 내 실행 가능 +3. **메모리**: 모델당 500MB 이하 +4. **라이선스**: 상업적 사용 가능 + +### 13.2 데이터 현실성 +- **실제 대화 로그**: 최소 1만건 수집 후 시작 +- **라벨링**: 9개 감정 각 1,000개 이상 +- **검증셋**: 20% 홀드아웃, 시간 기준 분할 +- **드리프트 모니터링**: 주간 분포 변화 추적 + +### 13.3 함수형 아키텍처 1. **임베딩 모델 선택**: - 한국어 지원 여부 @@ -325,7 +396,58 @@ sequenceDiagram - 실시간 vs 배치 - 리소스 vs 반응성 -## 13. Inside Out 모델의 학술적 근거 +4. **하드코딩 제거**: + - 모든 임계값은 환경변수화 + - 감정 레이블은 설정 파일로 관리 + - 모델 경로는 동적 로딩 + +## 14. skill-embedding 서비스 통합 방안 + +### 14.1 현재 구조 분석 +**skill-embedding 서비스**: +- 포트: 8502 (HTTP API) +- 기능: 텍스트 → 768차원 벡터 변환 +- 모델: sentence-transformers 기반 + +### 14.2 확장 방안 (흐름 중심) + +**감정 프로토타입 엔드포인트 추가**: +``` +POST /emotion/prototypes +입력: {"text": "...", "mode": "basic" | "social"} +처리: + 1. 텍스트 임베딩 생성 + 2. 9개 프로토타입과 거리 계산 + 3. 소프트맥스로 확률 분포 변환 + 4. 엔트로피 계산 +출력: {"distribution": [...], "entropy": 0.x, "dominant": "joy"} +``` + +**2헤드 병렬 처리**: +``` +POST /emotion/analyze +입력: {"text": "...", "context": {...}} +처리: + - 병렬 실행: + - 기본정서 헤드 (100ms 타임아웃) + - 사회기능 헤드 (500ms 타임아웃) + - 가중 결합 (w 동적 계산) +출력: {"basic": {...}, "social": {...}, "combined": {...}} +``` + +### 14.3 함수형 설계 원칙 +- **불변성**: 모든 프로토타입은 읽기 전용 +- **순수 함수**: 부작용 없는 변환 체인 +- **조합 가능**: 각 단계를 독립적으로 테스트 +- **타입 안전**: TypeScript/Pydantic 스키마 + +### 14.4 성능 최적화 +- **캐싱**: LRU 캐시로 반복 계산 방지 +- **배치 처리**: 여러 텍스트 동시 처리 +- **비동기**: FastAPI async 엔드포인트 +- **연결 풀링**: ChromaDB 연결 재사용 + +## 15. Inside Out 모델의 학술적 근거 ### 과학 자문진 - **폴 에크먼** (UC San Francisco): 기본정서 이론 창시자 @@ -340,4 +462,34 @@ sequenceDiagram --- -*이 설계는 픽사 Inside Out의 2축 감정 모델을 기반으로, 함수형 프로그래밍과 베이지안 추론을 통합한 예측-평가 적응형 시스템입니다. 로빙이 사용자 반응을 예측하고 평가하며 진화하는 진정한 디지털 동료가 됩니다.* \ No newline at end of file +*이 설계는 픽사 Inside Out의 2축 감정 모델을 기반으로, 함수형 프로그래밍과 베이지안 추론을 통합한 예측-평가 적응형 시스템입니다. 로빙이 사용자 반응을 예측하고 평가하며 진화하는 진정한 디지털 동료가 됩니다.* + +## 16. 검증 및 모니터링 + +### 16.1 단위 테스트 전략 +```python +# 함수형 테스트 예시 (의사코드) +def test_emotion_entropy(): + # Given: 명확한 감정 + clear_emotion = [0.9, 0.05, 0.05, 0, 0, 0, 0, 0, 0] + assert entropy(clear_emotion) < 0.5 + + # Given: 혼재된 감정 + mixed_emotion = [0.11] * 9 + assert entropy(mixed_emotion) > 2.0 +``` + +### 16.2 통합 테스트 +- **엔드투엔드**: 텍스트 입력 → 감정 분석 → 저장 → 회상 +- **부하 테스트**: 동시 100명 사용자, 응답시간 측정 +- **장애 시나리오**: ChromaDB 다운, 모델 로딩 실패 + +### 16.3 프로덕션 모니터링 +- **Prometheus 메트릭**: 응답시간, 오차율, 처리량 +- **Grafana 대시보드**: 실시간 KPI 시각화 +- **알람**: ECE > 0.07 또는 Brier > 0.2 시 알림 +- **로그 분석**: 특이점 패턴, 오류 추세 + +--- + +**핵심 원칙**: 함수형 100%, 하드코딩 0%, 측정 가능한 성과 \ No newline at end of file