--- id: wiki-2026-0508-emotional-ai-affective-computing title: Emotional AI (Affective Computing) category: 10_Wiki/Topics status: verified canonical_id: self aliases: [affective computing, emotion AI, sentiment analysis, emotion recognition, FER] duplicate_of: none source_trust_level: A confidence_score: 0.95 verification_status: applied tags: [ai, affective-computing, emotional-ai, sentiment, fer, multimodal, hci] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: Python framework: PyTorch / Transformers / DeepFace --- # Emotional AI (Affective Computing) ## 매 한 줄 > **"매 emotion 의 sense + 매 generate"**. Picard MIT (1997). 매 facial, voice, text, physiological. 매 modern: 매 multimodal LLM + valence-arousal regression. 매 ethical: 매 surveillance + cultural bias. ## 매 핵심 ### 매 emotion model - **Discrete** (Ekman): 매 6 basic — anger, fear, disgust, surprise, sadness, joy. - **Dimensional** (Russell): 매 valence × arousal. - **Plutchik wheel**: 매 8 + intensity. - **Appraisal** (Scherer): 매 cognitive evaluation. ### 매 modality - **Facial** (FER): 매 AU (action unit). - **Voice**: 매 prosody, pitch. - **Text**: 매 lexicon + transformer. - **Physiological**: 매 HRV, GSR, EEG. - **Body**: 매 posture, gait. - **Multimodal**: 매 fuse. ### 매 응용 1. **Customer service**: 매 sentiment. 2. **Mental health**: 매 mood track. 3. **Education**: 매 engagement. 4. **Auto**: 매 driver drowsiness. 5. **Marketing**: 매 ad reaction. 6. **Robot**: 매 emotional support. 7. **Game**: 매 dynamic difficulty. ### 매 ethical - **Privacy**: 매 emotion 의 surveil. - **Cultural bias**: 매 Ekman universality 의 contested. - **Inaccuracy**: 매 expression ≠ feeling. - **Manipulation**: 매 ad / dark pattern. - **Regulation**: 매 EU AI Act 의 emotion 의 high-risk. ## 💻 패턴 ### Text sentiment (transformers) ```python from transformers import pipeline pipe = pipeline('sentiment-analysis', model='cardiffnlp/twitter-roberta-base-sentiment') print(pipe("I love this!")) # 매 [{'label': 'POSITIVE', 'score': 0.99}] ``` ### Emotion classification (text, 7-class) ```python classifier = pipeline('text-classification', model='j-hartmann/emotion-english-distilroberta-base', top_k=None) result = classifier("I'm worried about tomorrow") # 매 [{'label': 'fear', 'score': 0.7}, ...] ``` ### Facial emotion (DeepFace) ```python from deepface import DeepFace result = DeepFace.analyze('selfie.jpg', actions=['emotion']) print(result[0]['dominant_emotion']) # 매 'happy' ``` ### Voice emotion (audio + Wav2Vec2) ```python import librosa import torch from transformers import Wav2Vec2ForSequenceClassification, Wav2Vec2FeatureExtractor model = Wav2Vec2ForSequenceClassification.from_pretrained('superb/wav2vec2-base-superb-er') fe = Wav2Vec2FeatureExtractor.from_pretrained('superb/wav2vec2-base-superb-er') def predict_emotion(audio_path): audio, sr = librosa.load(audio_path, sr=16000) inputs = fe(audio, sampling_rate=16000, return_tensors='pt') with torch.no_grad(): logits = model(**inputs).logits return model.config.id2label[logits.argmax().item()] ``` ### Valence-Arousal regression ```python class VARegressor(nn.Module): def __init__(self, backbone): super().__init__() self.backbone = backbone self.va_head = nn.Linear(backbone.hidden_dim, 2) # 매 valence, arousal def forward(self, x): feat = self.backbone(x) va = torch.tanh(self.va_head(feat)) # 매 [-1, 1] return va # 매 [batch, (valence, arousal)] ``` ### Multimodal fusion ```python class MultiModalEmotion(nn.Module): def __init__(self): super().__init__() self.face_enc = FacialEncoder() self.audio_enc = AudioEncoder() self.text_enc = TextEncoder() self.fusion = nn.Linear(768 * 3, 7) def forward(self, face, audio, text): ff = self.face_enc(face) fa = self.audio_enc(audio) ft = self.text_enc(text) return self.fusion(torch.cat([ff, fa, ft], dim=-1)) ``` ### Physiological (HRV stress) ```python import neurokit2 as nk def stress_from_ecg(ecg_signal, sr=1000): signals, info = nk.ecg_process(ecg_signal, sampling_rate=sr) hrv = nk.hrv_time(signals, sampling_rate=sr) rmssd = hrv['HRV_RMSSD'].iloc[0] return 'stressed' if rmssd < 30 else 'calm' ``` ### Cultural-aware (avoid bias) ```python def culturally_aware_predict(image, region): base_pred = model.predict(image) # 매 cultural calibration if region == 'east_asia': # 매 East Asian 의 less expressive baseline base_pred['happy'] *= 0.8 base_pred['neutral'] *= 1.2 return normalize(base_pred) ``` ### LLM-based emotion (modern) ```python def llm_emotion(text): prompt = f"""Classify the emotion in this text. Output JSON. Text: "{text}" Output: {{"primary": "...", "secondary": "...", "valence": -1 to 1, "arousal": 0 to 1}}""" return json.loads(llm.generate(prompt)) ``` ### Real-time engagement (online learning) ```python class EngagementTracker: def __init__(self, baseline=0.5): self.engagement = baseline self.history = [] def update(self, frame): emotion = analyze_face(frame) self.engagement = 0.9 * self.engagement + 0.1 * emotion['attention_score'] self.history.append(self.engagement) def is_disengaged(self): return np.mean(self.history[-30:]) < 0.3 ``` ### Affective response (chatbot) ```python def empathic_response(user_msg): emotion = classify(user_msg) if emotion in ('sad', 'fear'): return llm.generate(f"User feels {emotion}. Respond with validation first, then gentle reframe.\nUser: {user_msg}") return llm.generate(f"Respond to: {user_msg}") ``` ### Privacy-aware (on-device) ```python # 매 raw frame 의 server 의 send X def on_device_emotion(frame, local_model): emotion = local_model(frame) # 매 only summary 의 send return {'emotion': emotion, 'confidence': ...} ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | Customer support text | Sentiment + LLM | | Driver drowsiness | Facial + on-device | | Mental health | Multimodal + clinician | | Marketing | A/B + reaction | | Robot pet | Multimodal real-time | | Education | Engagement (eye + face) | **기본값**: 매 task-specific modality + 매 cultural calibration + 매 privacy on-device + 매 LLM augment + 매 ethical disclosure. ## 🔗 Graph - 부모: [[AI]] · [[Human Computer Interaction]] - 변형: [[Sentiment-Analysis]] · [[FER]] · [[Emotional-AI (Affective Computing)|Empathy-in-AI]] - Adjacent: [[Multimodal-LLM]] · [[Drama Management Systems]] · [[Dynamic Difficulty Adjustment (DDA)]] · [[EU-AI-Act]] ## 🤖 LLM 활용 **언제**: 매 customer experience. 매 health (with clinician). 매 robot interaction. **언제 X**: 매 surveillance. 매 manipulation. 매 EU high-risk. ## ❌ 안티패턴 - **Single-modality trust**: 매 noisy. - **Universal Ekman 의 assume**: 매 cultural bias. - **Express ≠ feel**: 매 mask. - **No consent**: 매 surveillance. - **Manipulate emotion**: 매 dark pattern. ## 🧪 검증 / 중복 - Verified (Picard 1997, Russell circumplex, Barrett constructionist). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-04-26 | EMOTION-AI auto | | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — emotion model + 매 text/voice/face/VA/multimodal code |