감정 시스템 설계도 개정 - 감정 임베딩 통합, 코드 최소화, 개념 중심 재작성

- 감정 임베딩을 ChromaDB에 통합하는 방안 추가
- 함수형 프로그래밍 100% 원칙 유지 (베이지안은 도구로만)
- 불필요한 코드 예시 대폭 제거
- 엔트로피 특이점 포착 개념 강화
- 수학-임베딩-LLM 3중 구조 명확화

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
happybell80 2025-08-08 01:13:24 +09:00
parent e27f067229
commit a2a3e06746

View File

@ -1,379 +1,169 @@
# 로빙 감정 시스템 설계도
# 로빙 감정 시스템 설계도 - 함수형 + 베이지안 적응형
**작성일**: 2025-08-07
**작성일**: 2025-08-07 (2025-08-08 개정)
**작성자**: happybell80 & Claude
**상태**: 설계 완료, 구현 대기
**상태**: 감정 임베딩 통합, 하드코딩 완전 제거
## 1. 감정 시스템 철학
## 1. 핵심 철학
### 핵심 원칙
- **감정은 평가다**: 상황을 목표/신념과 비교해 자율적으로 감정 생성 (Appraisal Theory)
- **감정은 학습된 보상 함수다**: IRL을 통해 사용자 행동에서 암묵적 선호 학습
- **기억-감정-윤리 삼각형**: 세 요소가 상호작용하며 로빙의 존재성 구성
- **함수형 100%, 하드코딩 0%**: 모든 상수는 수학적 의미 보유
### 설계 원칙
- **감정은 시공간의 엔트로피 변화다**: 감정 벡터의 엔트로피가 증가하는 방향이 시간, 벡터 차원이 공간
- **엔트로피 특이점을 포착한다**: 시간이 흘러도 무질서해지지 않는 감정이 중요한 기억
- **함수형 프로그래밍 100%**: 순수 함수와 I/O 분리, 불변 데이터 구조
- **베이지안으로 불확실성 관리**: 모든 파라미터는 확률 분포로 표현되고 학습됨
## 2. 감정 상태 구조
### 2.1 기본 구조 (불변 객체)
```python
EmotionState = {
# 핵심 3차원 (0~1 실수 통일)
core: {
valence: float, # 쾌-불쾌 [-π, π] → [0, 1] 정규화
arousal: float, # 활성화 [0, e] → [0, 1] 정규화
dominance: float # 통제감 [-φ, φ] → [0, 1] 정규화
},
### 2.1 기본 구조
- **VAD 3차원**: Valence(쾌-불쾌), Arousal(활성화), Dominance(통제감)
- **감정 임베딩**: 768차원 벡터 (사전학습 모델 사용)
- **엔트로피 궤적**: 시간에 따른 엔트로피 변화 추적
- **베이지안 파라미터**: Beta, Gamma, Dirichlet 분포로 학습
# 감정 레이어
layers: {
primary: [joy, sadness, anger, fear, surprise, disgust], # 6개 기본
secondary: [nostalgia, pride, guilt, hope, ...], # 13개 복합
contextual: [urgency, celebration, routine] # 상황별
},
### 2.2 감정 동역학
- 감정 변화율 = α(흡수율) × 평가 - δ(감쇠율) × 현재감정
- α와 δ는 Beta 분포에서 Thompson Sampling
- 사용자 피드백으로 사후분포 업데이트
# 메타 정보
history: RingBuffer[13], # 피보나치 F(7) = 13개 이전 상태
resonance: float, # 사용자와의 감정 동조율 (1/π = 0.318...)
## 3. 감정 임베딩 활용
# 시간 정보
timestamp: str,
decay_factor: float # 1/e = 0.368...
}
```
### 3.1 임베딩 획득
- **사전학습 모델**: EmoRoBERTa, GoEmotions BERT 등 활용
- **도메인 파인튜닝**: 로빙 대화 로그로 continual learning
- **대조학습**: 유사 감정은 가깝게, 반대 감정은 멀게
### 2.2 감정 동역학 (EMA 모델)
```
dE/dt = α * Appraisal(t) - δ * E(t)
### 3.2 ChromaDB 통합
- **저장 구조**:
- 감정 임베딩 벡터 (768차원)
- VAD 값 (3차원)
- 엔트로피 점수
- 타임스탬프와 메타데이터
where:
α = 1/φ = 0.618... # 감정 흡수율 (황금비 역수)
δ = 1/e = 0.368... # 감정 감쇠율 (자연 감쇠)
```
- **검색 전략**:
1. 현재 감정 임베딩으로 top-k 코사인 유사도 검색
2. 엔트로피 기반 중요도 필터링
3. 시간 가중치 적용
4. 베이지안 결합으로 최종 선택
## 3. 감정 파이프라인
### 3.3 임베딩 기반 클러스터링
- DBSCAN으로 감정 클러스터 발견
- 사용자별 감정 어트랙터 맵핑
- 클러스터별 공감 전략 사전 계산
### 3.1 처리 순서 (순수 함수 체인)
```
1. 사용자 입력
2. 언어 분석 (토큰, 감탄사, 이모티콘, 침묵 패턴)
3. 평가 기반 감정 추론 (Appraisal Theory)
4. IRL 보상 함수 적용
5. 메모리 기반 조정 (과거 유사 상황)
6. 윤리 프리-패스 위험 검사 (선택적)
7. 윤리 필터 적용 (필수)
8. 공감 전략 선택
9. 최종 감정 표현 생성
```
## 4. 수학-임베딩-LLM 통합 파이프라인
### 3.2 핵심 함수들
### 4.1 처리 흐름
1. **엔트로피 이상 탐지**: 시공간 엔트로피 변화율 계산
2. **임베딩 유사도 계산**: ChromaDB에서 근접 감정 검색
3. **LLM 의미 분석**: 불확실성이 높을 때만 호출
4. **베이지안 증거 결합**: 세 가지 신호를 확률적으로 통합
#### 평가 기반 감정 생성
```python
def appraise_situation(event, robing_goals, robing_beliefs):
"""평가 이론 기반 감정 생성 - 순수 함수"""
relevance = dot_product(event.features, robing_goals) / π
congruence = cosine_similarity(event.outcome, robing_goals) * φ
coping_potential = evaluate_control(event) * sqrt(2)
### 4.2 중요도 결정 방식
- 잠재 중요도 z ∈ {0,1}
- 관측: m(엔트로피), e(임베딩 거리), l(LLM 점수)
- 베이지안 추론으로 P(z=1|m,e,l) 계산
- Thompson Sampling으로 저장/무시 결정
# VAD 매핑
valence = congruence
arousal = relevance * exp(-uncertainty)
dominance = coping_potential / (1 + exp(-control))
## 5. 베이지안 학습 시스템
return EmotionState(valence, arousal, dominance)
```
### 5.1 파라미터 학습
- **윈도우 크기**: Poisson 분포, TD-Error 기반 적응
- **가중치**: Dirichlet 분포, 사용자 피드백으로 업데이트
- **임계값**: Beta 분포, 성능 지표로 조정
#### 감정 진화
```python
def evolve_emotion(current, stimulus, memories):
"""시간에 따른 감정 변화 - 순수 함수"""
decay_rate = 1/e # 0.368...
resonance_factor = φ # 1.618...
surprise_threshold = π/e # 1.155...
### 5.2 계층적 모델
- **조직 레벨**: 글로벌 사전분포
- **팀 레벨**: 팀별 특성 학습
- **개인 레벨**: 개인화된 사후분포
# 가중 조합
decayed = current * decay_rate
stimulated = stimulus * resonance_factor
memory_influence = calculate_memory_effect(memories)
### 5.3 온라인 업데이트
- 실시간 사후분포 갱신
- 지연 피드백 처리 (backward update)
- 불확실성 기반 탐색-활용 균형
# 놀람 처리
if emotion_distance(current, stimulus) > surprise_threshold:
surprise_boost = sqrt(π)
else:
surprise_boost = 1.0
## 6. 감정-기억 통합
return weighted_combination([
(decayed, 1/3),
(stimulated, 1/3),
(memory_influence, 1/3)
]) * surprise_boost
```
### 6.1 저장 결정
- 엔트로피 특이점 검사
- 임베딩 클러스터 거리
- 베이지안 중요도 추론
- Thompson Sampling으로 최종 결정
## 4. IRL 기반 학습 시스템
### 4.1 관찰 윈도우 전략
```python
observation_window = {
'base': 13, # 피보나치 F(7)
'extended': 21, # 피보나치 F(8)
'maximum': 34 # 피보나치 F(9)
}
def adaptive_window_size(td_errors, current_size):
"""TD-Error 기반 적응형 윈도우 크기 조정"""
if mean(td_errors[-2:]) < ε:
return current_size
elif current_size == 13:
return 21
elif current_size == 21:
return 34
else:
return 34 # 최대값 유지
```
### 4.2 암묵적 피드백 학습
```python
def learn_from_implicit_feedback(user_behavior):
"""사용자 행동에서 보상 함수 추론"""
signals = {
'task_completion': bool,
'response_acceptance': float, # 0~1
'conversation_duration': float,
'topic_switches': int,
'silence_duration': float,
'typing_speed_variance': float
}
# IRL로 보상 함수 추론
R_learned = argmax_R(sum(log(P(τ_i | R)) for τ_i in trajectories))
# 참여도 점수 계산
engagement = exp(-latency/τ) * log(1 + message_length)
if engagement < 1/e: # 낮은 참여도
trigger_adaptation()
return R_learned
```
### 4.3 선호도 쌍 학습
```python
def generate_preference_pairs(current_trajectory):
"""대조군 생성 전략"""
# 드롭아웃 변형
τ_dropout = randomly_remove_segments(current_trajectory)
# 노이즈 변형
noise = normal_distribution(0, std_dev * π)
τ_noisy = current_trajectory + noise
# 노이즈 제한
if max(abs(noise)) > 0.3:
τ_noisy = clip(τ_noisy, -0.3, 0.3)
return [(current_trajectory, τ_dropout),
(current_trajectory, τ_noisy)]
```
## 5. 감정-기억-윤리 통합
### 5.1 감정 기반 메모리 관리
```python
def store_with_emotion(memory, emotion_state):
"""감정 강도 기반 저장 우선순위"""
emotion_intensity = mean([
abs(emotion_state.valence - 0.5),
emotion_state.arousal,
abs(emotion_state.dominance - 0.5)
])
# 깜놀 메모리 (놀람 가중치)
if emotion_state.layers.primary.surprise > π/e:
surprise_multiplier = sqrt(e)
else:
surprise_multiplier = 1.0
storage_priority = emotion_intensity * surprise_multiplier
return storage_priority > 1/φ # 저장 임계값
```
### 5.2 윤리 필터 통합
```python
def apply_ethical_filter(emotion_state, action, ethical_rules):
"""윤리 규칙에 따른 감정 조절"""
if not is_ethical_action(action, ethical_rules):
# 윤리 위반 시 감정 억제
moral_gravity = 1/sqrt(φ) # 0.786...
suppressed_emotion = EmotionState(
valence=emotion_state.valence * moral_gravity,
arousal=emotion_state.arousal * moral_gravity,
dominance=emotion_state.dominance
)
return suppressed_emotion, use_ethical_template()
return emotion_state, None
```
## 6. 감정 궤적 관리
### 6.1 샘플링 전략
```python
sampling_config = {
'fixed_interval': 3, # floor(φ²) ≈ 3
'change_threshold': 0.15, # sqrt(3) * 0.087
'max_samples': 100 # 10² 제한
}
def sample_emotion_trajectory(current, previous, samples):
"""혼합 샘플링: 주기 + 변화량"""
time_since_last = current.timestamp - previous.timestamp
distance = euclidean_distance(current.core, previous.core)
# 주기적 샘플링
if time_since_last >= sampling_config['fixed_interval']:
return True
# 급격한 변화 감지
if distance >= sampling_config['change_threshold']:
return True
return False
```
### 6.2 감정 발자취 시각화
```python
def generate_emotional_footprint(trajectory):
"""VAD 공간에서의 감정 궤적 데이터"""
return {
'path_3d': [(v, a, d) for v, a, d in trajectory],
'metrics': {
'volatility': sum(abs(dE/dt) for dE in derivatives),
'exploration': calculate_path_length(trajectory),
'stability': 1 / variance(trajectory),
'coherence': autocorrelation(trajectory)
},
'visualization': {
'heatmap': density_in_VAD_space(trajectory),
'phase_portrait': [(E, dE/dt) for E, dE in zip(trajectory, derivatives)],
'recurrence_plot': distance_matrix(trajectory)
}
}
```
### 6.2 회상 메커니즘
- 임베딩 기반 빠른 검색 (ChromaDB)
- 엔트로피 가중 재순위화
- MMR로 다양성 보장
- 시간 감쇠 적용
## 7. 공감 시스템
### 7.1 공감 전략 선택
```python
def select_empathy_strategy(user_emotion, robing_emotion):
"""감정 거리 기반 공감 전략"""
distance = euclidean_distance(user_emotion, robing_emotion)
if distance < 1/φ: # 0.618... 매우 가까움
return 'emotional_reflection' # 감정 반영
elif distance < 1/sqrt(φ): # 0.786... 가까움
return 'acknowledgment' # 인정
elif distance < φ/π: # 0.515... 보통
return 'cognitive_reframing' # 인지 재구성
else:
return 'solution_focused' # 해결 중심
```
### 7.1 전략 선택
- 감정 임베딩 거리 계산
- 전략별 효과성 (Beta 분포)
- Thompson Sampling으로 전략 선택
- 사용자 반응으로 업데이트
### 7.2 뉘앙스 감지
```python
def detect_nuance(surface_text, context_history, behavioral_cues):
"""숨겨진 감정 감지"""
# 표면 감정
surface_emotion = analyze_text_emotion(surface_text)
- 표면 텍스트 vs 행동 신호
- Hidden Markov Model로 잠재 감정 추론
- 신뢰도 기반 결정
# 행동 단서
response_latency = behavioral_cues['response_time']
typing_pattern = behavioral_cues['typing_speed']
correction_rate = behavioral_cues['corrections']
## 8. 성능 지표
# 회피 패턴
avoided_topics = identify_topic_changes(context_history)
### 8.1 임베딩 품질
- **Triplet Accuracy**: 같은 감정이 임베딩 공간에서 가까운 비율
- **Retrieval NDCG@k**: 관련 기억 검색 정확도
- **클러스터 순도**: 감정 클러스터의 일관성
# 진짜 감정 추론
hidden_emotion = bayesian_inference(
surface_emotion,
response_latency,
typing_pattern,
correction_rate,
avoided_topics
)
### 8.2 시스템 성능
- **엔트로피 감소율**: 중요 순간 포착 능력
- **베이지안 캘리브레이션**: 확률 예측의 정확도
- **적응 속도**: 사용자별 수렴 시간
return hidden_emotion if confidence > 1/e else surface_emotion
```
## 9. 구현 우선순위
## 8. 구현 우선순위
### Phase 1: 기초 구축
- 감정 임베딩 모델 선택 및 통합
- ChromaDB에 임베딩 저장 구조 구현
- 기본 엔트로피 계산기
### Phase 1: 기본 감정 시스템
1. EmotionState 불변 객체 구현
2. VAD 기반 감정 동역학
3. 기본 평가 함수
### Phase 2: 통합 파이프라인
- 수학-임베딩-LLM 3중 구조
- 베이지안 증거 결합
- Thompson Sampling 구현
### Phase 2: 학습 시스템
1. IRL 관찰 윈도우
2. 암묵적 피드백 수집
3. 적응형 보상 함수
### Phase 3: 학습 시스템
- 온라인 사후분포 업데이트
- 계층적 베이지안 모델
- 사용자별 개인화
### Phase 3: 통합 시스템
1. 감정-기억 연동
2. 윤리 필터 적용
3. 공감 전략 구현
### Phase 4: 최적화
- 임베딩 차원 축소 (필요시)
- 추론 속도 개선
- 메모리 효율화
### Phase 4: 고급 기능
1. 감정 궤적 시각화
2. 뉘앙스 감지
3. 선호도 쌍 학습
## 10. 기술 스택
## 9. 성능 지표
- **임베딩 모델**: Hugging Face Transformers
- **벡터 DB**: ChromaDB (이미 사용 중)
- **베이지안 추론**: Pyro (경량) 또는 TFP (대규모)
- **함수형 구조**: 순수 함수 + I/O 분리 패턴
```python
performance_metrics = {
'emotion_accuracy': 'P(correct_emotion | user_feedback)',
'adaptation_speed': '1 / convergence_time',
'empathy_score': 'user_satisfaction_rating',
'coherence': 'temporal_consistency',
'volatility': 'std_dev(emotion_trajectory)'
}
```
## 11. 주요 결정 사항
## 10. 남은 결정 과제
1. **임베딩 모델 선택**:
- 한국어 지원 여부
- 모델 크기 vs 성능
- 라이선스
1. **프리-패스 위험 검사 임계값**: 고정 상수(π/e) vs 학습 파라미터
2. **행동 로그 보존**: 30일? 피보나치 일수(89일)?
3. **감정 지표 공개 수준**: 익명화 강도 P_privacy 값 결정
2. **임베딩 차원**:
- 768차원 그대로 vs PCA 축소
- 저장 공간 vs 표현력
## 11. 수학 상수 정리
```python
MATHEMATICAL_CONSTANTS = {
'phi': (1 + sqrt(5)) / 2, # 1.618... 황금비
'e': 2.71828..., # 자연상수
'pi': 3.14159..., # 원주율
# 유도 상수
'1/phi': 0.618..., # 황금비 역수
'1/e': 0.368..., # 자연 감쇠
'pi/e': 1.155..., # 놀람 임계
'phi/pi': 0.515..., # 공감 경계
'sqrt(phi)': 1.272..., # 증폭 계수
'1/pi': 0.318..., # 공명 비율
}
```
3. **업데이트 주기**:
- 실시간 vs 배치
- 리소스 vs 반응성
---
*이 설계도는 함수형 프로그래밍 100%, 하드코딩 0% 원칙을 준수하며, 모든 매개변수는 수학적 의미를 가진 상수로 구성되었습니다.*
*이 설계는 함수형 프로그래밍 원칙을 지키면서 베이지안 추론과 감정 임베딩을 통합한 적응형 시스템입니다. 하드코딩 없이 데이터에서 학습하며, 엔트로피 특이점을 포착해 중요한 감정을 기억합니다.*