DOCS/journey/ideas/250807_로빙_감정_시스템_설계도.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동
- book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서)
- 빈 폴더 제거 (journey/assets/*)
2025-11-17 14:06:05 +09:00

516 lines
19 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 로빙 감정 시스템 설계도 - 함수형 + 베이지안 적응형
**작성일**: 2025-08-07 (2025-08-08 개정)
**작성자**: happybell80 & Claude
**상태**: Inside Out 2축 모델 통합, 예측-평가 피드백 루프 추가
## 1. 핵심 철학
### 설계 원칙
- **감정은 시공간의 엔트로피 변화다**: 감정 벡터의 엔트로피가 증가하는 방향이 시간, 벡터 차원이 공간
- **엔트로피 특이점을 포착한다**: 시간이 흘러도 무질서해지지 않는 감정이 중요한 기억
- **함수형 프로그래밍 100%**: 순수 함수와 I/O 분리, 불변 데이터 구조
- **베이지안으로 불확실성 관리**: 모든 파라미터는 확률 분포로 표현되고 학습됨
- **예측-평가 피드백 루프**: 사용자 반응을 예측하고 실제와 비교하며 진화
## 2. 감정 상태 구조
### 2.1 기본 구조
- **감정 임베딩**: 768차원 벡터 (사전학습 모델 사용) - 핵심 표현
- **엔트로피 궤적**: 시간에 따른 엔트로피 변화 추적
- **베이지안 파라미터**: Beta, Gamma, Dirichlet 분포로 학습
### 2.2 ONNX 모델 기반 7감정 모델
- **7개 감정 레이블 (AIHUB 학습 모델)**:
- Fear(공포), Surprise(놀람), Anger(분노), Sadness(슬픔), Neutral(중립), Happiness(행복), Disgust(혐오)
- BERT 기반 한국어 감정 분류 모델
- 442MB ONNX 모델로 실시간 추론
- **확장 가능성**:
- 추후 사회적 감정 추가 가능 (Anxiety, Envy, Embarrassment, Ennui)
- 현재는 7감정 기본 모델 사용
- **통합 방식**: 768차원 임베딩에서 7개 감정 확률 추출
### 2.3 감정 동역학
- 감정 변화율 = α(흡수율) × 평가 - δ(감쇠율) × 현재감정
- α와 δ는 Beta 분포에서 Thompson Sampling
- 기본정서는 빠른 α, 사회기능은 느린 α로 차별화
- 사용자 피드백으로 사후분포 업데이트
## 3. 감정 임베딩 활용
### 3.1 임베딩 획득
- **한국어 우선 모델**: ko-miniLM, multitask-e5, KoSimCSE
- **영어 모델은 백업**: EmoRoBERTa, GoEmotions BERT (번역 브릿지)
- **도메인 파인튜닝**: 로빙 대화 로그로 continual learning
- **대조학습**: 불안↔안도, 질투↔자긍심 등 반대쌍
### 3.2 ChromaDB 통합
- **저장 구조**:
- 감정 임베딩 벡터 (768차원)
- ONNX 모델 감정 분포 (7차원: fear, surprise, anger, sadness, neutral, happiness, disgust)
- 엔트로피 점수
- 타임스탬프와 메타데이터
- **검색 전략**:
1. 현재 감정 임베딩으로 top-k 코사인 유사도 검색
2. 엔트로피 기반 중요도 필터링
3. 시간 가중치 적용
4. 베이지안 결합으로 최종 선택
### 3.3 임베딩 기반 클러스터링
- **HDBSCAN으로 교체**: eps 민감도 문제 해결
- **UMAP 시각화**: 감정 지도 가시화 (선택)
- 사용자별 감정 어트랙터 맵핑
- 클러스터별 공감 전략 프롬프트 캐싱
## 4. 엔트로피 정의 및 계산
### 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 예측 시스템
**예측 대상**:
- 감정 전환 패턴 (기본정서 → 사회기능)
- 응답 길이 분포 (Gamma 분포)
- 주제 전환 확률 (Beta 분포)
- 대화 지속 시간
**베이지안 모델 구조**:
- 기본정서: Dirichlet(α_basic) - 5차원
- 사회기능: Dirichlet(α_social) - 4차원
- 저장/무시: Beta(α, β) - 성공률 추적
- 응답 길이: Gamma(k, θ) - 토큰 수 분포
### 5.2 평가 시스템
**오차 계산 (3종 병행)**:
- KL Divergence: 분포 차이 (0 근처 클리핑)
- Brier Score: 확률 예측 품질
- ECE: 캘리브레이션 오차
**학습 신호 생성**:
- 표준화된 z-score로 클리핑
- EMA(지수이동평균)로 평활화
- 특이점 구간에서만 학습률 2-3배 상승
- 학습 신호 = 오차 × 엔트로피_증가율 (편향 방지)
## 6. 수학-임베딩-LLM 통합 파이프라인
### 6.1 처리 흐름
1. **2축 감정 감지**: 기본정서(100ms) + 사회기능(500ms) 병렬 처리
2. **엔트로피 계산**: 프로토타입 소프트맥스 기반
3. **임베딩 유사도 계산**: ChromaDB에서 근접 감정 검색
4. **예측 생성**: 베이지안 추론으로 다음 상태 예측
5. **LLM 호출 결정**: 불확실성 임계값 기반 게이팅
6. **베이지안 증거 결합**: 모든 신호를 확률적으로 통합
7. **평가 및 학습**: 3종 오차(KL/Brier/ECE) 계산, 사후분포 업데이트
### 6.2 시퀀스 다이어그램
```mermaid
sequenceDiagram
participant User
participant Pipeline
participant Basic as 기본정서<br/>(에크먼)
participant Social as 사회기능<br/>(켈트너)
participant Predict as 예측 모듈
participant ChromaDB
participant LLM
participant Eval as 평가 모듈
User->>Pipeline: 텍스트 입력
par 2축 병렬 처리
Pipeline->>Basic: 즉각 반응 분석
Basic-->>Pipeline: Joy/Sadness/Anger/Fear/Disgust
and
Pipeline->>Social: 맥락 분석
Social-->>Pipeline: Anxiety/Envy/Embarrassment/Ennui
end
Pipeline->>Predict: 현재 감정 상태
Predict->>Predict: 베이지안 추론
Predict-->>Pipeline: 사용자 반응 예측
Pipeline->>ChromaDB: 감정 임베딩 검색
ChromaDB-->>Pipeline: 유사 감정 사례
alt 불확실성 높음
Pipeline->>LLM: 의미 분석 요청
LLM-->>Pipeline: 감정 해석
end
Pipeline-->>User: 감정 인식 답변
User-->>Pipeline: 실제 반응
Pipeline->>Eval: 예측 vs 실제
Eval->>Eval: 엔트로피 오차 계산
Eval-->>Predict: 사후분포 업데이트
```
#### 다이어그램 설명
1. **입력**: 사용자가 텍스트를 입력하면, 중앙 파이프라인이 이를 받습니다.
2. **감정 분석 (병렬)**: 입력된 텍스트는 '기본정서' 분석기와 '사회기능' 분석기로 동시에 전달되어 즉각적인 감정과 사회적 감정을 각각 분석합니다.
3. **반응 예측**: 분석된 현재 감정 상태를 기반으로, '예측 모듈'은 사용자가 어떻게 반응할지 미리 예측합니다.
4. **기억 회상**: 동시에, 파이프라인은 현재 감정과 유사한 과거의 기억들을 ChromaDB에서 찾아옵니다.
5. **LLM 개입 (선택적)**: 만약 상황이 불확실하거나 복잡하면(alt), LLM에게 더 깊은 의미 분석을 요청합니다.
6. **응답 및 피드백**: 종합된 정보를 바탕으로 사용자에게 응답하고, 사용자의 실제 반응을 피드백으로 받습니다.
7. **학습**: '평가 모듈'이 로빙의 예측과 사용자의 실제 반응을 비교하여 오차를 계산하고, 이 오차를 바탕으로 '예측 모듈'의 베이지안 모델을 업데이트(학습)합니다.
### 6.3 중요도 결정 방식
- 잠재 중요도 z ∈ {0,1}
- 관측: m(엔트로피), e(임베딩 거리), l(LLM 점수)
- 베이지안 추론으로 P(z=1|m,e,l) 계산
- Thompson Sampling으로 저장/무시 결정
## 7. 베이지안 학습 시스템
### 7.1 파라미터 체계
**감정 분포**:
- Dirichlet(α_basic): 5개 기본정서 사전-사후
- Dirichlet(α_social): 4개 사회기능 사전-사후
**의사결정**:
- Beta(α, β): 저장/무시 성공률 ("저장 후 대화 품질 향상 여부")
- Gamma(k, θ): 응답 길이(토큰 수), 반응 시간(초) 분포
**계층 구조**:
- 조직 → 팀 → 개인의 Dirichlet-Multinomial
- Cold start는 조직/팀 사전분포로 초기화
### 7.2 온라인 업데이트
- 실시간 사후분포 갱신
- 지연 피드백 처리 (backward update)
- 불확실성 기반 탐색-활용 균형
- EMA로 평활화, 특이점에서만 학습률 상승
### 7.3 학습 플로우
```mermaid
flowchart TD
A[사용자 피드백] --> B{피드백 타입}
B -->|명시적| C[즉시 업데이트]
B -->|암묵적| D[증거 누적]
C --> E[사후분포 계산]
D --> F[신뢰도 가중치]
F --> E
E --> G{계층 레벨}
G -->|개인| H[개인 파라미터 업데이트]
G -->|팀| I[팀 사전분포 조정]
G -->|조직| J[글로벌 사전분포 조정]
H --> K[Thompson Sampling]
I --> K
J --> K
K --> L[다음 행동 결정]
```
#### 다이어그램 설명
1. **피드백 수집**: 사용자의 명시적(예: 좋아요 버튼) 또는 암묵적(예: 후속 질문) 피드백을 받습니다.
2. **업데이트 방식 결정**: 피드백 타입에 따라 즉시 반영할지, 여러 증거를 누적하여 신뢰도를 조정한 후 반영할지 결정합니다.
3. **사후분포 계산**: 새로운 증거(피드백)를 바탕으로 베이즈 정리를 이용해 기존의 믿음(사전분포)을 업데이트합니다.
4. **업데이트 범위 결정**: 계산된 업데이트를 개인, 팀, 조직 중 어느 레벨의 파라미터에 적용할지 결정합니다.
5. **다음 행동 결정**: 업데이트된 믿음(사후분포)을 바탕으로, Thompson Sampling을 통해 다음 행동을 결정합니다. 이는 가장 좋은 선택(활용)과 새로운 시도(탐색) 사이의 균형을 맞춰줍니다.
## 8. 감정-기억 통합
### 8.1 저장 결정 및 안전장치
**저장 결정 흐름**:
- 엔트로피 특이점 검사
- 임베딩 클러스터 거리 (HDBSCAN)
- 베이지안 중요도 추론
- Thompson Sampling으로 최종 결정
**프라이버시 게이트**:
- PII 패턴 감지 (이름, 전화번호, 주민번호 등)
- 민감 주제 필터 (건강, 재무, 신원정보)
- 감지 시: 요약만 저장, 원문 폐기
- 24시간 내 opt-out 옵션 제공
### 8.2 회상 메커니즘
- 임베딩 기반 빠른 검색 (ChromaDB)
- 엔트로피 가중 재순위화
- MMR로 다양성 보장
- 시간 감쇠 적용
### 8.3 기억 회상 시퀀스
```mermaid
sequenceDiagram
participant Query as 현재 감정
participant ChromaDB
participant Filter as 필터링
participant Ranking as 재순위화
participant Response
Query->>ChromaDB: 감정 임베딩 벡터
ChromaDB->>ChromaDB: 코사인 유사도 검색
ChromaDB-->>Filter: top-100 후보
Filter->>Filter: 엔트로피 점수 확인
Filter->>Filter: 시간 가중치 적용
Filter-->>Ranking: 필터링된 후보 (20-30개)
Ranking->>Ranking: MMR 다양성 계산
Ranking->>Ranking: 베이지안 결합
Ranking-->>Response: 최종 5-10개 기억
Response-->>Query: 관련 기억 반환
```
#### 다이어그램 설명
1. **검색**: 현재 감정 상태를 나타내는 벡터로 ChromaDB에서 의미적으로 유사한 과거 기억 100개를 빠르게 찾아냅니다.
2. **필터링**: 찾아낸 100개의 기억 중, 중요도(엔트로피)가 높고 너무 오래되지 않은 기억들만 남겨 후보군을 20~30개로 줄입니다.
3. **재순위화**: 후보군 내에서 내용이 너무 비슷한 기억들은 제외하고(MMR 다양성), 베이지안 추론을 통해 현재 상황에 가장 적합한 순서로 정렬합니다.
4. **응답**: 최종적으로 선택된 5~10개의 가장 관련성 높은 기억을 로빙의 응답 생성에 사용합니다.
## 9. 공감 시스템
### 9.1 Inside Out 기반 공감 전략
**기본정서 대응**:
- Joy → 함께 기뻐하기, 축하
- Sadness → 위로, 경청
- Anger → 이해와 진정
- Fear → 안심시키기, 지지
- Disgust → 경계 존중
**사회기능 대응**:
- Anxiety → "불안은 준비 신호" (Inside Out 2 통찰)
- Envy → 성장 동기로 전환
- Embarrassment → 정상화, 수용
- Ennui → 새로운 자극 제안
### 9.2 예측 기반 선제적 공감
- 감정 전환 예측 (Sadness → Anger 가능성)
- 선제적 개입 (전환 전 완화)
- Thompson Sampling으로 전략 선택
- 실제 효과로 베이지안 업데이트
## 10. 성능 지표 및 목표치
### 10.1 핵심 KPI (3개월 목표)
- **ECE (Expected Calibration Error)**: ≤ 0.05
- 예측 확률과 실제 확률의 정렬도
- 측정: 10개 구간별 신뢰도-정확도 차이의 가중평균
- **Brier Score**: ≤ 0.18
- 확률 예측의 전반적 품질
- 측정: (예측 - 실제)² 평균
- **NDCG@10**: ≥ 0.6
- 감정 기반 기억 검색 품질
- 측정: 상위 10개 결과의 관련도 순위 정확성
### 10.2 보조 지표
- **응답시간**: 기본정서 100ms, 사회기능 500ms 이내
- **메모리 사용량**: 사용자당 100MB 이하
- **학습 수렴**: 100회 상호작용 내 안정화
- **프라이버시 보호율**: PII 100% 필터링
### 10.3 사용자 경험 지표
- **감정 인식 정확도**: 사용자 평가 4.0/5.0 이상
- **공감 반응 만족도**: NPS 40 이상
- **설명 이해도**: 80% 이상 "이해함" 응답
## 11. 구현 우선순위
### Phase 1: 기초 구축 (2주)
**함수형 설계 원칙**:
```
입력: 텍스트 → 임베딩 → 프로토타입 거리 → 소프트맥스 → 감정분포
```
- 9개 감정 프로토타입 정의 (순수 함수)
- 한국어 임베딩 모델 통합 (ko-miniLM 우선)
- ChromaDB 메타데이터 구조 확장
- 프로토타입 소프트맥스 엔트로피 계산
### Phase 2: 예측-평가 시스템 (3주)
**파이프라인 구성**:
```
예측: 현재상태 → 베이지안추론 → 예측분포
평가: 실제결과 → 오차계산(KL/Brier/ECE) → 사후업데이트
```
- 2헤드 병렬 처리 (async/await)
- 3종 오차 메트릭 구현
- 베이지안 파라미터 초기화
- 로깅 및 모니터링 설정
### Phase 3: 통합 및 안전장치 (2주)
**프라이버시 우선**:
```
PII감지 → 민감주제필터 → 저장결정 → 24hr옵트아웃
```
- Thompson Sampling 의사결정
- 프라이버시 게이트 구현
- 실시간 사후분포 업데이트
- 오류 처리 및 폴백 메커니즘
### Phase 4: 최적화 및 평가 (1주)
**성능 튜닝**:
```
측정 → 병목분석 → 최적화 → 재측정 → KPI검증
```
- 추론 속도 최적화 (타겟: 100ms/500ms)
- 메모리 사용량 프로파일링
- KPI 대시보드 구축
- A/B 테스트 프레임워크
## 12. 기술 스택
- **임베딩 모델**: Hugging Face Transformers
- **벡터 DB**: ChromaDB (이미 사용 중)
- **베이지안 추론**: Pyro (경량) 또는 TFP (대규모)
- **함수형 구조**: 순수 함수 + I/O 분리 패턴
## 13. 주요 결정 사항
### 13.1 모델 선택 기준
1. **한국어 성능**: ko-miniLM > multitask-e5 > KoSimCSE
2. **추론 속도**: 100ms 제약 내 실행 가능
3. **메모리**: 모델당 500MB 이하
4. **라이선스**: 상업적 사용 가능
### 13.2 데이터 현실성
- **실제 대화 로그**: 최소 1만건 수집 후 시작
- **라벨링**: 9개 감정 각 1,000개 이상
- **검증셋**: 20% 홀드아웃, 시간 기준 분할
- **드리프트 모니터링**: 주간 분포 변화 추적
### 13.3 함수형 아키텍처
1. **임베딩 모델 선택**:
- 한국어 지원 여부
- 모델 크기 vs 성능
- 라이선스
2. **임베딩 차원**:
- 768차원 그대로 vs PCA 축소
- 저장 공간 vs 표현력
3. **업데이트 주기**:
- 실시간 vs 배치
- 리소스 vs 반응성
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): 기본정서 이론 창시자
- **대처 켈트너** (UC Berkeley): 사회기능 감정 이론
- **리사 다무어** (임상심리학): 청소년 발달과 불안
### 핵심 통찰
1. **감정은 다층적**: 즉각적 기본정서 + 사회적 메타정서
2. **불안은 기능적**: 미래 대비 신호로 재해석 (Inside Out 2)
3. **감정 충돌이 성장**: 예측 오차가 클 때 학습 기회
4. **개성은 감정 혼합비**: 같은 상황, 다른 감정 조합
---
*이 설계는 픽사 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%, 측정 가능한 성과