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

19 KiB
Raw Permalink Blame History

로빙 감정 시스템 설계도 - 함수형 + 베이지안 적응형

작성일: 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 시퀀스 다이어그램

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 학습 플로우

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 기억 회상 시퀀스

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 단위 테스트 전략

# 함수형 테스트 예시 (의사코드)
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%, 측정 가능한 성과