Spaces:
Sleeping
Sleeping
Deminiko
commited on
Commit
·
25e624c
0
Parent(s):
Initial import: Emoji AI Avatar
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .env.example +7 -0
- .gitignore +5 -0
- AGENTS.md +5 -0
- LICENSE +21 -0
- README.md +210 -0
- app.py +595 -0
- avatar/__init__.py +28 -0
- avatar/emotion_wheel.py +459 -0
- avatar/sentiment_ai_analysis.py +206 -0
- avatar/sentiment_emoji_map.py +232 -0
- avatar/sentiment_keyword_map.py +335 -0
- avatar/sentiment_multi_emotion.py +503 -0
- avatar/sentiment_transformer.py +201 -0
- evaluation/__init__.py +22 -0
- evaluation/accuracy_benchmark.py +260 -0
- evaluation/comprehensive_emotion_test.py +212 -0
- evaluation/debug_failures.py +31 -0
- evaluation/debug_sarcasm.py +22 -0
- evaluation/emotion_statistics.py +241 -0
- evaluation/emotion_test_suite.py +843 -0
- evaluation/emotion_test_suite_v2.py +991 -0
- evaluation/emotion_test_suite_v3.py +877 -0
- evaluation/live_stream_test.py +202 -0
- evaluation/report_generator.py +320 -0
- evaluation/reports/comparison_binary-v1_2025-12-01_18-23-47.md +184 -0
- evaluation/reports/comparison_binary-v1_2025-12-01_18-24-59.md +184 -0
- evaluation/reports/comparison_binary-v1_2025-12-01_18-30-05.md +184 -0
- evaluation/reports/comparison_binary-v1_2025-12-01_18-36-10.md +184 -0
- evaluation/reports/comparison_binary-v1_2025-12-01_18-38-15.md +184 -0
- evaluation/reports/comparison_binary-v1_2025-12-01_18-39-42.md +184 -0
- evaluation/reports/comparison_binary-v1_2025-12-01_18-44-50.md +184 -0
- evaluation/reports/comparison_binary-v1_2025-12-01_18-46-46.md +184 -0
- evaluation/reports/comparison_binary-v2_2025-12-01_18-23-47.md +205 -0
- evaluation/reports/comparison_binary-v2_2025-12-01_18-24-59.md +205 -0
- evaluation/reports/comparison_binary-v2_2025-12-01_18-30-05.md +205 -0
- evaluation/reports/comparison_binary-v2_2025-12-01_18-36-10.md +205 -0
- evaluation/reports/comparison_binary-v2_2025-12-01_18-38-15.md +205 -0
- evaluation/reports/comparison_binary-v2_2025-12-01_18-39-42.md +205 -0
- evaluation/reports/comparison_binary-v2_2025-12-01_18-44-50.md +205 -0
- evaluation/reports/comparison_binary-v2_2025-12-01_18-46-46.md +205 -0
- evaluation/reports/comparison_multi-v1_2025-12-01_18-23-47.md +200 -0
- evaluation/reports/comparison_multi-v1_2025-12-01_18-24-59.md +200 -0
- evaluation/reports/comparison_multi-v1_2025-12-01_18-30-05.md +200 -0
- evaluation/reports/comparison_multi-v1_2025-12-01_18-36-10.md +200 -0
- evaluation/reports/comparison_multi-v1_2025-12-01_18-38-15.md +196 -0
- evaluation/reports/comparison_multi-v1_2025-12-01_18-39-42.md +196 -0
- evaluation/reports/comparison_multi-v1_2025-12-01_18-44-50.md +196 -0
- evaluation/reports/comparison_multi-v1_2025-12-01_18-46-46.md +193 -0
- evaluation/reports/comparison_multi-v2_2025-12-01_18-23-47.md +206 -0
- evaluation/reports/comparison_multi-v2_2025-12-01_18-24-59.md +206 -0
.env.example
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Environment Variables
|
| 2 |
+
|
| 3 |
+
# Google Gemini API Key (optional - uses mock if not set)
|
| 4 |
+
GEMINI_API_KEY=your-api-key-here
|
| 5 |
+
|
| 6 |
+
# Optional: Enable ML-based sentiment analysis
|
| 7 |
+
# USE_ML_SENTIMENT=false
|
.gitignore
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__pycache__
|
| 2 |
+
.docs
|
| 3 |
+
.venv
|
| 4 |
+
tests
|
| 5 |
+
.env
|
AGENTS.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
develop an emoji based avatar, that will containe a serie of emojis to show expresions and sentiments, that will be selected trough a sentiment analysis system that read a chat history between an user and an llm, the emoji avatar will be show for both the human and machine, so the system detect wich one is writting and detect the chat cotnainer to represent the current sentiment, so would read the ai stream or the user writting in real time to represent the changes on sentiment trough an emoji predefined emotions pallette,
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
activate .venv before any comamnd on terminal:
|
| 5 |
+
".\.venv\Scripts\activate ; python app.py",
|
LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
MIT License
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2025 Nicolas Larenas
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 21 |
+
SOFTWARE.
|
README.md
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: Emoji AI Avatar
|
| 3 |
+
emoji: 😊
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: purple
|
| 6 |
+
sdk: gradio
|
| 7 |
+
sdk_version: "6.0.0"
|
| 8 |
+
python_version: "3.10"
|
| 9 |
+
app_file: app.py
|
| 10 |
+
pinned: false
|
| 11 |
+
suggested_hardware: "cpu-basic"
|
| 12 |
+
short_description: Real-time emoji sentiment avatars for chat
|
| 13 |
+
tags:
|
| 14 |
+
- mcp-in-action-track-enterprise
|
| 15 |
+
- mcp-in-action-track-consumer
|
| 16 |
+
- mcp-in-action-track-creative
|
| 17 |
+
- Google-Gemini-API
|
| 18 |
+
- sentiment-analysis
|
| 19 |
+
- emoji
|
| 20 |
+
- chatbot
|
| 21 |
+
- gradio
|
| 22 |
+
- transformer
|
| 23 |
+
- distilbert
|
| 24 |
+
---
|
| 25 |
+
|
| 26 |
+
# 😊 Emoji AI Avatar 🤖
|
| 27 |
+
|
| 28 |
+
**Real-time emoji avatars that reflect the sentiment of your conversation!**
|
| 29 |
+
|
| 30 |
+
Watch as both your emoji and the AI's emoji change dynamically based on the emotional tone of messages.
|
| 31 |
+
|
| 32 |
+
## ✨ Features
|
| 33 |
+
|
| 34 |
+
- **Transformer-Based Sentiment Analysis**: Uses DistilBERT (91%+ accuracy) for precise emotion detection
|
| 35 |
+
- **Real-time Updates**: Analyzes messages as you type and as AI responds
|
| 36 |
+
- **Dual Emoji Avatars**: Separate emoji displays for user and AI
|
| 37 |
+
- **Streaming Support**: AI emoji updates during response generation
|
| 38 |
+
- **100+ Emotion States**: Comprehensive sentiment coverage from joy to despair
|
| 39 |
+
- **Beautiful UI**: Modern, responsive Gradio interface
|
| 40 |
+
- **Evaluation Framework**: CI/CD-ready testing with accuracy benchmarks
|
| 41 |
+
|
| 42 |
+
## 🚀 Quick Start
|
| 43 |
+
|
| 44 |
+
### Local Development
|
| 45 |
+
|
| 46 |
+
```bash
|
| 47 |
+
# Clone the repository
|
| 48 |
+
git clone https://github.com/NLarchive/Emoji-AI-Avatar.git
|
| 49 |
+
cd emoji-ai-avatar
|
| 50 |
+
|
| 51 |
+
# Create virtual environment
|
| 52 |
+
python -m venv .venv
|
| 53 |
+
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
| 54 |
+
|
| 55 |
+
# Install dependencies
|
| 56 |
+
pip install -r requirements.txt
|
| 57 |
+
|
| 58 |
+
# Run the app (uses mock AI by default)
|
| 59 |
+
python app.py
|
| 60 |
+
|
| 61 |
+
# Or with hot reload
|
| 62 |
+
gradio app.py
|
| 63 |
+
```
|
| 64 |
+
|
| 65 |
+
### With Gemini API
|
| 66 |
+
|
| 67 |
+
```bash
|
| 68 |
+
# Set your API key
|
| 69 |
+
export GEMINI_API_KEY='your-api-key-here'
|
| 70 |
+
|
| 71 |
+
# Run the app
|
| 72 |
+
python app.py
|
| 73 |
+
```
|
| 74 |
+
|
| 75 |
+
## 🎭 Emoji Palette
|
| 76 |
+
|
| 77 |
+
### User Emotions (Based on Transformer Classification)
|
| 78 |
+
| Emoji | Sentiment | Accuracy |
|
| 79 |
+
|-------|-----------|----------|
|
| 80 |
+
| 😢 | Sadness/Negative | 100% |
|
| 81 |
+
| 😊 | Happiness/Positive | 100% |
|
| 82 |
+
| 😐 | Neutral | ~50% |
|
| 83 |
+
|
| 84 |
+
The system detects **100+ specific emotions** (both transformer and multi-emotion models) including:
|
| 85 |
+
- **Positive**: joy, happiness, excitement, enthusiasm, love, gratitude, etc.
|
| 86 |
+
- **Negative**: sadness, anger, fear, anxiety, frustration, disgust, etc.
|
| 87 |
+
- **Neutral**: thinking, uncertain, confused, etc.
|
| 88 |
+
|
| 89 |
+
## 🏗️ Project Structure
|
| 90 |
+
|
| 91 |
+
```
|
| 92 |
+
emoji-ai-avatar/
|
| 93 |
+
├── app.py # Main Gradio application
|
| 94 |
+
├── avatar/ # Sentiment analysis + utils
|
| 95 |
+
│ ├── __init__.py
|
| 96 |
+
│ ├── sentiment_transformer.py # DistilBERT-based binary analyzer
|
| 97 |
+
│ ├── sentiment_multi_emotion.py # Multi-emotion (RoBERTa) analyzer
|
| 98 |
+
│ ├── sentiment_emoji_map.py # Sentiment → Emoji mapping
|
| 99 |
+
│ ├── sentiment_keyword_map.py # Keyword→emotion mapping used by analyzer
|
| 100 |
+
├── llm-inference/ # LLM client module
|
| 101 |
+
│ ├── __init__.py
|
| 102 |
+
│ └── gemini_client.py # Gemini API wrapper
|
| 103 |
+
├── mcp-client/ # MCP protocol client
|
| 104 |
+
│ ├── __init__.py
|
| 105 |
+
│ └── mcp_client.py # MCP client implementation
|
| 106 |
+
├── evaluation/ # Testing & benchmarking + reports
|
| 107 |
+
│ ├── __init__.py
|
| 108 |
+
│ ├── emotion_test_suite.py # 100+ emotion test cases
|
| 109 |
+
│ ├── accuracy_benchmark.py # Speed/accuracy measurement
|
| 110 |
+
│ ├── live_stream_test.py # Transition testing
|
| 111 |
+
│ ├── report_generator.py # Markdown/JSON reports
|
| 112 |
+
│ ├── run_evaluation.py # Full evaluation runner
|
| 113 |
+
│ └── reports/ # Generated reports
|
| 114 |
+
├── tests/ # Unit tests
|
| 115 |
+
├── requirements.txt # Python dependencies
|
| 116 |
+
└── README.md
|
| 117 |
+
```
|
| 118 |
+
|
| 119 |
+
## 📊 Evaluation Results
|
| 120 |
+
|
| 121 |
+
Run the evaluation framework:
|
| 122 |
+
|
| 123 |
+
```bash
|
| 124 |
+
python -m evaluation.run_evaluation
|
| 125 |
+
```
|
| 126 |
+
|
| 127 |
+
**Latest Results (approx):**
|
| 128 |
+
- Weighted accuracy and wheel-aware evaluation results are recorded in evaluation/reports
|
| 129 |
+
- Full test suites (V1, V2, V3) are available — expected overall accuracy ~90% depending on model and suite
|
| 130 |
+
|
| 131 |
+
| Category | Count | Accuracy |
|
| 132 |
+
|----------|-------|----------|
|
| 133 |
+
| Positive Emotions | 40+ | 100% |
|
| 134 |
+
| Negative Emotions | 50+ | 100% |
|
| 135 |
+
| Neutral/Edge Cases | 10+ | ~40% |
|
| 136 |
+
|
| 137 |
+
## 🧪 Testing
|
| 138 |
+
|
| 139 |
+
```bash
|
| 140 |
+
# Run all tests
|
| 141 |
+
python -m pytest avatar/tests/ -v
|
| 142 |
+
|
| 143 |
+
# Run evaluation benchmark
|
| 144 |
+
python -m evaluation.run_evaluation
|
| 145 |
+
```
|
| 146 |
+
|
| 147 |
+
## 🔧 Configuration
|
| 148 |
+
|
| 149 |
+
### Environment Variables
|
| 150 |
+
|
| 151 |
+
| Variable | Description | Required |
|
| 152 |
+
|----------|-------------|----------|
|
| 153 |
+
| `GEMINI_API_KEY` | Google Gemini API key | No (uses mock if not set) |
|
| 154 |
+
|
| 155 |
+
### Customization
|
| 156 |
+
|
| 157 |
+
Edit `avatar/emoji_mapper.py` to customize emoji mappings:
|
| 158 |
+
|
| 159 |
+
```python
|
| 160 |
+
mapper = EmojiMapper(
|
| 161 |
+
custom_mappings={"excitement": "🎉", "love": "❤️"}
|
| 162 |
+
)
|
| 163 |
+
```
|
| 164 |
+
|
| 165 |
+
## 📝 How It Works
|
| 166 |
+
|
| 167 |
+
1. **User Input**: When you type a message, it's analyzed by DistilBERT
|
| 168 |
+
2. **Sentiment Classification**: Model outputs positive/negative with confidence
|
| 169 |
+
3. **User Emoji Update**: Your avatar emoji changes to reflect your mood
|
| 170 |
+
4. **AI Processing**: The message is sent to Gemini (or mock)
|
| 171 |
+
5. **Streaming Response**: As AI generates a response, its emoji updates
|
| 172 |
+
6. **Final Analysis**: Both emojis settle on their final states
|
| 173 |
+
|
| 174 |
+
## 🚀 Deployment
|
| 175 |
+
|
| 176 |
+
### Hugging Face Spaces
|
| 177 |
+
|
| 178 |
+
1. Create a new Space on Hugging Face
|
| 179 |
+
2. Select "Gradio" as the SDK
|
| 180 |
+
3. Push this repository to the Space
|
| 181 |
+
4. Add `GEMINI_API_KEY` to Space Secrets
|
| 182 |
+
5. The app will auto-deploy!
|
| 183 |
+
|
| 184 |
+
### Docker
|
| 185 |
+
|
| 186 |
+
```dockerfile
|
| 187 |
+
FROM python:3.10-slim
|
| 188 |
+
|
| 189 |
+
WORKDIR /app
|
| 190 |
+
COPY . .
|
| 191 |
+
RUN pip install -r requirements.txt
|
| 192 |
+
|
| 193 |
+
EXPOSE 7860
|
| 194 |
+
CMD ["python", "app.py"]
|
| 195 |
+
```
|
| 196 |
+
|
| 197 |
+
## 🤝 Contributing
|
| 198 |
+
|
| 199 |
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
| 200 |
+
|
| 201 |
+
## 📄 License
|
| 202 |
+
|
| 203 |
+
MIT License — see LICENSE file. (Copyright © 2025 Nicolas Larenas)
|
| 204 |
+
|
| 205 |
+
## 🙏 Acknowledgments
|
| 206 |
+
|
| 207 |
+
- [Gradio](https://gradio.app/) - For the amazing UI framework
|
| 208 |
+
- [Google Gemini](https://ai.google.dev/) - For the AI capabilities
|
| 209 |
+
- [Hugging Face](https://huggingface.co/) - For hosting, deployment, and transformers
|
| 210 |
+
- [DistilBERT](https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english) - For sentiment analysis
|
app.py
ADDED
|
@@ -0,0 +1,595 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Emoji AI Avatar - Main Gradio Application
|
| 3 |
+
Real-time emoji avatars based on chat sentiment analysis
|
| 4 |
+
With MCP (Model Context Protocol) server integration
|
| 5 |
+
"""
|
| 6 |
+
|
| 7 |
+
import gradio as gr
|
| 8 |
+
import os
|
| 9 |
+
import socket
|
| 10 |
+
import sys
|
| 11 |
+
import time
|
| 12 |
+
import importlib.util
|
| 13 |
+
from pathlib import Path
|
| 14 |
+
|
| 15 |
+
# Add parent directory to path for imports
|
| 16 |
+
ROOT_DIR = Path(__file__).parent
|
| 17 |
+
sys.path.insert(0, str(ROOT_DIR))
|
| 18 |
+
|
| 19 |
+
# Import from modular avatar structure
|
| 20 |
+
from avatar import SentimentAnalyzer, EmojiMapper
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def _load_module_from_path(module_name: str, file_path: str):
|
| 24 |
+
"""Helper to load a module from a file path with hyphens in directory name"""
|
| 25 |
+
spec = importlib.util.spec_from_file_location(module_name, file_path)
|
| 26 |
+
if spec and spec.loader:
|
| 27 |
+
module = importlib.util.module_from_spec(spec)
|
| 28 |
+
spec.loader.exec_module(module)
|
| 29 |
+
return module
|
| 30 |
+
raise ImportError(f"Could not load {module_name} from {file_path}")
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
# Load GeminiClient from llm-inference module
|
| 34 |
+
_gemini_module = _load_module_from_path(
|
| 35 |
+
"gemini_client",
|
| 36 |
+
str(ROOT_DIR / "llm-inference" / "gemini_client.py")
|
| 37 |
+
)
|
| 38 |
+
GeminiClient = _gemini_module.GeminiClient
|
| 39 |
+
|
| 40 |
+
# Load MCPClient from mcp-client module
|
| 41 |
+
_mcp_module = _load_module_from_path(
|
| 42 |
+
"mcp_client",
|
| 43 |
+
str(ROOT_DIR / "mcp-client" / "mcp_client.py")
|
| 44 |
+
)
|
| 45 |
+
MCPClient = _mcp_module.MCPClient
|
| 46 |
+
|
| 47 |
+
# Load environment variables from .env file
|
| 48 |
+
from dotenv import load_dotenv
|
| 49 |
+
load_dotenv()
|
| 50 |
+
|
| 51 |
+
# Initialize components
|
| 52 |
+
api_key = os.environ.get('GEMINI_API_KEY')
|
| 53 |
+
print(f"🔑 API Key loaded: {'Yes (' + api_key[:10] + '...)' if api_key else 'No'}")
|
| 54 |
+
gemini = GeminiClient(api_key=api_key)
|
| 55 |
+
sentiment_analyzer = SentimentAnalyzer()
|
| 56 |
+
emoji_mapper = EmojiMapper()
|
| 57 |
+
mcp_client = MCPClient()
|
| 58 |
+
|
| 59 |
+
# Streaming velocity control (seconds between yields)
|
| 60 |
+
STREAM_DELAY = 0.05 # 50ms delay for smooth, readable streaming
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
def get_emoji_html(emoji: str, label: str, size: int = 64) -> str:
|
| 64 |
+
"""Generate styled emoji HTML - instant updates, no fade"""
|
| 65 |
+
return f"""
|
| 66 |
+
<div style="text-align: center; padding: 10px; min-height: 90px;">
|
| 67 |
+
<div style="font-size: {size}px; line-height: 1;">{emoji}</div>
|
| 68 |
+
<div style="font-size: 12px; color: #666; margin-top: 5px;">{label}</div>
|
| 69 |
+
</div>
|
| 70 |
+
"""
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
custom_css = """
|
| 74 |
+
.emoji-container {
|
| 75 |
+
display: flex;
|
| 76 |
+
justify-content: space-around;
|
| 77 |
+
padding: 20px;
|
| 78 |
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
| 79 |
+
border-radius: 15px;
|
| 80 |
+
margin-bottom: 20px;
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
.emoji-box {
|
| 84 |
+
background: white;
|
| 85 |
+
border-radius: 15px;
|
| 86 |
+
padding: 15px 30px;
|
| 87 |
+
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
|
| 88 |
+
min-width: 120px;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
.chat-container {
|
| 92 |
+
border-radius: 15px;
|
| 93 |
+
overflow: hidden;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
input[type="text"] {
|
| 97 |
+
border-radius: 8px;
|
| 98 |
+
border: 1px solid #ddd;
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
button {
|
| 102 |
+
border-radius: 8px;
|
| 103 |
+
}
|
| 104 |
+
"""
|
| 105 |
+
|
| 106 |
+
# Build Gradio Interface
|
| 107 |
+
with gr.Blocks(title="Emoji AI Avatar") as demo:
|
| 108 |
+
gr.Markdown("""
|
| 109 |
+
# 😊 Emoji AI Avatar Chat 🤖
|
| 110 |
+
|
| 111 |
+
Watch the emojis change based on the **sentiment** of your conversation!
|
| 112 |
+
Both your messages and AI responses are analyzed in real-time.
|
| 113 |
+
Connect to **MCP servers** on Hugging Face to add new skills!
|
| 114 |
+
""")
|
| 115 |
+
|
| 116 |
+
# Tabs for Chat and MCP Configuration
|
| 117 |
+
with gr.Tabs():
|
| 118 |
+
# ========== CHAT TAB ==========
|
| 119 |
+
with gr.TabItem("💬 Chat", id="chat-tab"):
|
| 120 |
+
# Emoji Display Row
|
| 121 |
+
with gr.Row(elem_classes="emoji-container"):
|
| 122 |
+
with gr.Column(elem_classes="emoji-box"):
|
| 123 |
+
user_emoji_display = gr.HTML(
|
| 124 |
+
get_emoji_html("😐", "You: waiting..."),
|
| 125 |
+
label="Your Emoji"
|
| 126 |
+
)
|
| 127 |
+
with gr.Column(elem_classes="emoji-box"):
|
| 128 |
+
ai_emoji_display = gr.HTML(
|
| 129 |
+
get_emoji_html("😐", "AI: neutral"),
|
| 130 |
+
label="AI Emoji"
|
| 131 |
+
)
|
| 132 |
+
|
| 133 |
+
# MCP Status indicator
|
| 134 |
+
mcp_status_display = gr.HTML(
|
| 135 |
+
value='<div style="text-align: center; padding: 5px; color: #666; font-size: 12px;">🔌 MCP: Not connected</div>',
|
| 136 |
+
label="MCP Status"
|
| 137 |
+
)
|
| 138 |
+
|
| 139 |
+
# Chat Interface
|
| 140 |
+
chatbot = gr.Chatbot(
|
| 141 |
+
label="Chat History",
|
| 142 |
+
height=400,
|
| 143 |
+
)
|
| 144 |
+
|
| 145 |
+
# Message input and send button in row
|
| 146 |
+
with gr.Row():
|
| 147 |
+
msg = gr.Textbox(
|
| 148 |
+
placeholder="Type your message here... Try expressing different emotions!",
|
| 149 |
+
label="Message",
|
| 150 |
+
scale=9,
|
| 151 |
+
)
|
| 152 |
+
submit_btn = gr.Button("Send", variant="primary", scale=1)
|
| 153 |
+
|
| 154 |
+
# Timer for live emoji updates
|
| 155 |
+
timer = gr.Timer(0.1) # Update every 100ms
|
| 156 |
+
|
| 157 |
+
# Use MCP checkbox
|
| 158 |
+
use_mcp_checkbox = gr.Checkbox(
|
| 159 |
+
label="🔌 Use MCP Context (enhances AI with MCP knowledge)",
|
| 160 |
+
value=False,
|
| 161 |
+
info="When enabled, MCP provides grounding context to enhance Gemini's responses"
|
| 162 |
+
)
|
| 163 |
+
|
| 164 |
+
# Example messages - 2 examples as requested
|
| 165 |
+
gr.Examples(
|
| 166 |
+
examples=[
|
| 167 |
+
"Hello! How are you?", # Short text example
|
| 168 |
+
"I've been working on this complex machine learning project for weeks now, and I'm really excited about the progress we've made. The neural network is finally converging and the accuracy metrics are looking promising. Can you help me understand how to further optimize the hyperparameters?", # Long text example
|
| 169 |
+
],
|
| 170 |
+
inputs=msg,
|
| 171 |
+
label="Try these examples:"
|
| 172 |
+
)
|
| 173 |
+
|
| 174 |
+
# Sentiment Legend
|
| 175 |
+
with gr.Accordion("Emoji Legend", open=False):
|
| 176 |
+
gr.Markdown("""
|
| 177 |
+
### Emotion → Emoji Mapping (Unified for User & AI)
|
| 178 |
+
|
| 179 |
+
**Positive Emotions:**
|
| 180 |
+
| 😄 Joy | 😊 Happiness | 🤩 Excitement | 🥰 Love | 🥹 Gratitude |
|
| 181 |
+
|--------|--------------|---------------|---------|--------------|
|
| 182 |
+
| 😌 Contentment | 🤗 Hope | 😎 Pride | 😆 Amusement | 😮💨 Relief |
|
| 183 |
+
|
| 184 |
+
**Curious/Surprise:**
|
| 185 |
+
| 🧐 Curiosity | 😲 Surprise | 😯 Anticipation | 🤯 Wonder | 🙃 Playful |
|
| 186 |
+
|--------------|-------------|-----------------|-----------|------------|
|
| 187 |
+
|
| 188 |
+
**Negative Emotions:**
|
| 189 |
+
| 😠 Anger | 😤 Frustration | 😒 Annoyance | 🤢 Disgust | 😏 Contempt |
|
| 190 |
+
|----------|----------------|--------------|------------|-------------|
|
| 191 |
+
| 😢 Sadness | 😭 Grief | 😞 Disappointment | 🥺 Hurt | 😨 Fear |
|
| 192 |
+
|
| 193 |
+
**Other Emotions:**
|
| 194 |
+
| 😰 Anxiety | 😟 Worry | 😬 Nervousness | 😕 Confusion | 😳 Embarrassment |
|
| 195 |
+
|------------|---------|----------------|--------------|------------------|
|
| 196 |
+
| 😔 Shame | 🥱 Boredom | 😶 Loneliness | 🤨 Skepticism | 😐 Neutral |
|
| 197 |
+
""")
|
| 198 |
+
|
| 199 |
+
# ========== MCP CONFIGURATION TAB ==========
|
| 200 |
+
with gr.TabItem("🔌 MCP Configuration", id="mcp-tab"):
|
| 201 |
+
gr.Markdown("""
|
| 202 |
+
## MCP Server Configuration
|
| 203 |
+
|
| 204 |
+
Connect to **MCP (Model Context Protocol)** servers on Hugging Face Spaces
|
| 205 |
+
to add new skills and capabilities to your chatbot!
|
| 206 |
+
|
| 207 |
+
MCP servers provide specialized tools and functions that can be used during chat.
|
| 208 |
+
""")
|
| 209 |
+
|
| 210 |
+
with gr.Row():
|
| 211 |
+
with gr.Column(scale=3):
|
| 212 |
+
mcp_url_input = gr.Textbox(
|
| 213 |
+
label="MCP Server URL",
|
| 214 |
+
placeholder="e.g., MCP-1st-Birthday/QuantumArchitect-MCP",
|
| 215 |
+
value="https://huggingface.co/spaces/MCP-1st-Birthday/QuantumArchitect-MCP",
|
| 216 |
+
info="Enter the Hugging Face Space URL or just the space name (owner/repo)"
|
| 217 |
+
)
|
| 218 |
+
with gr.Column(scale=1):
|
| 219 |
+
connect_btn = gr.Button("🔌 Connect", variant="primary")
|
| 220 |
+
disconnect_btn = gr.Button("❌ Disconnect", variant="secondary")
|
| 221 |
+
|
| 222 |
+
# Connection status
|
| 223 |
+
mcp_connection_status = gr.HTML(
|
| 224 |
+
value='<div style="padding: 15px; background: #f0f0f0; border-radius: 8px; margin: 10px 0;"><b>Status:</b> Not connected</div>'
|
| 225 |
+
)
|
| 226 |
+
|
| 227 |
+
# Available tools/endpoints
|
| 228 |
+
mcp_tools_display = gr.Textbox(
|
| 229 |
+
label="Available Tools/Endpoints",
|
| 230 |
+
lines=8,
|
| 231 |
+
interactive=False,
|
| 232 |
+
placeholder="Connect to an MCP server to see available tools..."
|
| 233 |
+
)
|
| 234 |
+
|
| 235 |
+
# Test MCP
|
| 236 |
+
gr.Markdown("### Test MCP Connection")
|
| 237 |
+
with gr.Row():
|
| 238 |
+
test_message = gr.Textbox(
|
| 239 |
+
label="Test Message",
|
| 240 |
+
placeholder="Enter a test message for the MCP server...",
|
| 241 |
+
scale=4
|
| 242 |
+
)
|
| 243 |
+
test_btn = gr.Button("🧪 Test", variant="secondary", scale=1)
|
| 244 |
+
|
| 245 |
+
test_result = gr.Textbox(
|
| 246 |
+
label="Test Result",
|
| 247 |
+
lines=5,
|
| 248 |
+
interactive=False
|
| 249 |
+
)
|
| 250 |
+
|
| 251 |
+
# Example MCP servers
|
| 252 |
+
gr.Markdown("""
|
| 253 |
+
### Example MCP Servers on Hugging Face
|
| 254 |
+
|
| 255 |
+
| Server | Description |
|
| 256 |
+
|--------|-------------|
|
| 257 |
+
| `MCP-1st-Birthday/QuantumArchitect-MCP` | Quantum computing architecture assistant |
|
| 258 |
+
| `gradio/tool-mcp` | General purpose tool server |
|
| 259 |
+
|
| 260 |
+
Click on a server name above and paste it into the URL field to connect.
|
| 261 |
+
""")
|
| 262 |
+
|
| 263 |
+
# ========== EVENT HANDLERS ==========
|
| 264 |
+
|
| 265 |
+
# Live typing sentiment update - updates as user types each character
|
| 266 |
+
def update_user_emoji_live(text: str):
|
| 267 |
+
"""Update user emoji in real-time as they type - EVERY KEYSTROKE"""
|
| 268 |
+
if not text or not text.strip():
|
| 269 |
+
return get_emoji_html("😐", "You: waiting...")
|
| 270 |
+
|
| 271 |
+
# Analyze sentiment on every keystroke for live updates
|
| 272 |
+
# The analyzer now focuses on the LAST SENTENCE for accuracy
|
| 273 |
+
sentiment = sentiment_analyzer.analyze(text)
|
| 274 |
+
emoji = emoji_mapper.get_emoji(sentiment["label"])
|
| 275 |
+
return get_emoji_html(emoji, f"You: {sentiment['label']}")
|
| 276 |
+
|
| 277 |
+
# MCP Connection handlers
|
| 278 |
+
def connect_to_mcp(url: str):
|
| 279 |
+
"""Connect to MCP server"""
|
| 280 |
+
result = mcp_client.connect(url)
|
| 281 |
+
if result["success"]:
|
| 282 |
+
# Show capabilities
|
| 283 |
+
caps_info = ""
|
| 284 |
+
if mcp_client.mcp_capabilities:
|
| 285 |
+
caps_list = "<br>".join([f"• {c}" for c in mcp_client.mcp_capabilities[:10]])
|
| 286 |
+
caps_info = f"<br><br><b>Capabilities:</b><br>{caps_list}"
|
| 287 |
+
|
| 288 |
+
status_html = f'''
|
| 289 |
+
<div style="padding: 15px; background: #d4edda; border-radius: 8px; margin: 10px 0; border: 1px solid #c3e6cb;">
|
| 290 |
+
<b>✅ Status:</b> Connected to <code>{mcp_client.space_name}</code><br>
|
| 291 |
+
<small>URL: {mcp_client.space_url}</small><br>
|
| 292 |
+
<small>{mcp_client.mcp_description}</small>
|
| 293 |
+
{caps_info}
|
| 294 |
+
</div>
|
| 295 |
+
'''
|
| 296 |
+
tools = mcp_client.list_tools()
|
| 297 |
+
mcp_indicator = f'<div style="text-align: center; padding: 5px; color: #28a745; font-size: 12px;">🔌 MCP: {mcp_client.space_name} (provides context for AI)</div>'
|
| 298 |
+
return status_html, tools, mcp_indicator
|
| 299 |
+
else:
|
| 300 |
+
status_html = f'''
|
| 301 |
+
<div style="padding: 15px; background: #f8d7da; border-radius: 8px; margin: 10px 0; border: 1px solid #f5c6cb;">
|
| 302 |
+
<b>❌ Status:</b> Connection failed<br>
|
| 303 |
+
<small>{result["message"]}</small>
|
| 304 |
+
</div>
|
| 305 |
+
'''
|
| 306 |
+
return status_html, "Connection failed", '<div style="text-align: center; padding: 5px; color: #666; font-size: 12px;">🔌 MCP: Not connected</div>'
|
| 307 |
+
|
| 308 |
+
def disconnect_from_mcp():
|
| 309 |
+
"""Disconnect from MCP server"""
|
| 310 |
+
mcp_client.disconnect()
|
| 311 |
+
status_html = '<div style="padding: 15px; background: #f0f0f0; border-radius: 8px; margin: 10px 0;"><b>Status:</b> Disconnected</div>'
|
| 312 |
+
mcp_indicator = '<div style="text-align: center; padding: 5px; color: #666; font-size: 12px;">🔌 MCP: Not connected</div>'
|
| 313 |
+
return status_html, "", mcp_indicator
|
| 314 |
+
|
| 315 |
+
def test_mcp_connection(message: str):
|
| 316 |
+
"""Test the MCP connection - shows context that would be provided to Gemini"""
|
| 317 |
+
if not mcp_client.connected:
|
| 318 |
+
return "❌ Not connected to any MCP server. Please connect first."
|
| 319 |
+
if not message.strip():
|
| 320 |
+
return "Please enter a test message."
|
| 321 |
+
|
| 322 |
+
# Show what context would be provided to Gemini
|
| 323 |
+
context = mcp_client.get_context_for_llm(message)
|
| 324 |
+
if context:
|
| 325 |
+
return f"✅ MCP Context for this message:\n\n{context}"
|
| 326 |
+
else:
|
| 327 |
+
return "⚠️ No context retrieved from MCP for this message."
|
| 328 |
+
|
| 329 |
+
# Chat with MCP integration - MCP provides CONTEXT for Gemini
|
| 330 |
+
def stream_chat_with_mcp(message: str, history: list, use_mcp: bool):
|
| 331 |
+
"""
|
| 332 |
+
Stream chat response with MCP as grounding context.
|
| 333 |
+
MCP provides context/skills that enhance Gemini's responses.
|
| 334 |
+
"""
|
| 335 |
+
if not message.strip():
|
| 336 |
+
yield (
|
| 337 |
+
history,
|
| 338 |
+
get_emoji_html("😐", "You: neutral"),
|
| 339 |
+
get_emoji_html("😐", "AI: neutral"),
|
| 340 |
+
)
|
| 341 |
+
return
|
| 342 |
+
|
| 343 |
+
# Analyze user message sentiment immediately
|
| 344 |
+
user_sentiment = sentiment_analyzer.analyze(message)
|
| 345 |
+
user_emoji = emoji_mapper.get_emoji(user_sentiment["label"])
|
| 346 |
+
user_emoji_html = get_emoji_html(user_emoji, f"You: {user_sentiment['label']}")
|
| 347 |
+
|
| 348 |
+
# Create new history with user message
|
| 349 |
+
new_history = list(history) + [{"role": "user", "content": message}]
|
| 350 |
+
|
| 351 |
+
# Initial state - show MCP context gathering if enabled
|
| 352 |
+
if use_mcp and mcp_client.connected:
|
| 353 |
+
current_ai_emoji = "🔌"
|
| 354 |
+
current_ai_label = f"AI + MCP ({mcp_client.space_name}): gathering context..."
|
| 355 |
+
else:
|
| 356 |
+
current_ai_emoji = "🤔"
|
| 357 |
+
current_ai_label = "AI: thinking..."
|
| 358 |
+
|
| 359 |
+
yield (
|
| 360 |
+
new_history,
|
| 361 |
+
user_emoji_html,
|
| 362 |
+
get_emoji_html(current_ai_emoji, current_ai_label),
|
| 363 |
+
)
|
| 364 |
+
|
| 365 |
+
# Get MCP context if enabled
|
| 366 |
+
mcp_context = ""
|
| 367 |
+
if use_mcp and mcp_client.connected:
|
| 368 |
+
mcp_context = mcp_client.get_context_for_llm(message)
|
| 369 |
+
if mcp_context:
|
| 370 |
+
# Update status to show we got context
|
| 371 |
+
yield (
|
| 372 |
+
new_history,
|
| 373 |
+
user_emoji_html,
|
| 374 |
+
get_emoji_html("🧠", f"AI + MCP: processing with context..."),
|
| 375 |
+
)
|
| 376 |
+
|
| 377 |
+
# Build the enhanced message with MCP context
|
| 378 |
+
if mcp_context:
|
| 379 |
+
enhanced_message = f"""You have access to MCP context. Use this information to provide a more informed response.
|
| 380 |
+
|
| 381 |
+
**MCP Context:**
|
| 382 |
+
{mcp_context}
|
| 383 |
+
|
| 384 |
+
**User Question:**
|
| 385 |
+
{message}
|
| 386 |
+
|
| 387 |
+
Please answer the user's question, incorporating the MCP context where relevant. Be conversational and helpful."""
|
| 388 |
+
else:
|
| 389 |
+
enhanced_message = message
|
| 390 |
+
|
| 391 |
+
# Stream Gemini response (with MCP context if available)
|
| 392 |
+
full_response = ""
|
| 393 |
+
chunk_count = 0
|
| 394 |
+
last_emotion = ""
|
| 395 |
+
last_yield_time = time.time()
|
| 396 |
+
|
| 397 |
+
for chunk in gemini.stream_chat(enhanced_message):
|
| 398 |
+
full_response += chunk
|
| 399 |
+
chunk_count += 1
|
| 400 |
+
|
| 401 |
+
# Velocity control
|
| 402 |
+
current_time = time.time()
|
| 403 |
+
elapsed = current_time - last_yield_time
|
| 404 |
+
if elapsed < STREAM_DELAY:
|
| 405 |
+
time.sleep(STREAM_DELAY - elapsed)
|
| 406 |
+
last_yield_time = time.time()
|
| 407 |
+
|
| 408 |
+
# Update AI emoji every 2 chunks
|
| 409 |
+
if chunk_count % 2 == 0:
|
| 410 |
+
partial_sentiment = sentiment_analyzer.analyze(full_response)
|
| 411 |
+
detected_emotion = partial_sentiment["label"]
|
| 412 |
+
if detected_emotion != last_emotion and detected_emotion:
|
| 413 |
+
last_emotion = detected_emotion
|
| 414 |
+
current_ai_emoji = emoji_mapper.get_emoji(detected_emotion)
|
| 415 |
+
# Show MCP indicator if using MCP
|
| 416 |
+
if mcp_context:
|
| 417 |
+
current_ai_label = f"AI+MCP: {detected_emotion}"
|
| 418 |
+
else:
|
| 419 |
+
current_ai_label = f"AI: {detected_emotion}"
|
| 420 |
+
|
| 421 |
+
# Add MCP indicator to response if context was used
|
| 422 |
+
display_response = full_response
|
| 423 |
+
if mcp_context and chunk_count == 1:
|
| 424 |
+
display_response = f"🔌 *Using {mcp_client.space_name} context*\n\n{full_response}"
|
| 425 |
+
elif mcp_context:
|
| 426 |
+
display_response = f"🔌 *Using {mcp_client.space_name} context*\n\n{full_response}"
|
| 427 |
+
|
| 428 |
+
display_history = list(history) + [
|
| 429 |
+
{"role": "user", "content": message},
|
| 430 |
+
{"role": "assistant", "content": display_response}
|
| 431 |
+
]
|
| 432 |
+
|
| 433 |
+
yield (
|
| 434 |
+
display_history,
|
| 435 |
+
user_emoji_html,
|
| 436 |
+
get_emoji_html(current_ai_emoji, current_ai_label),
|
| 437 |
+
)
|
| 438 |
+
|
| 439 |
+
# Final sentiment analysis
|
| 440 |
+
final_sentiment = sentiment_analyzer.analyze(full_response)
|
| 441 |
+
final_emoji = emoji_mapper.get_emoji(final_sentiment["label"])
|
| 442 |
+
|
| 443 |
+
# Final response with MCP indicator if used
|
| 444 |
+
final_response = full_response
|
| 445 |
+
if mcp_context:
|
| 446 |
+
final_response = f"🔌 *Using {mcp_client.space_name} context*\n\n{full_response}"
|
| 447 |
+
final_label = f"AI+MCP: {final_sentiment['label']}"
|
| 448 |
+
else:
|
| 449 |
+
final_label = f"AI: {final_sentiment['label']}"
|
| 450 |
+
|
| 451 |
+
final_history = list(history) + [
|
| 452 |
+
{"role": "user", "content": message},
|
| 453 |
+
{"role": "assistant", "content": final_response}
|
| 454 |
+
]
|
| 455 |
+
|
| 456 |
+
yield (
|
| 457 |
+
final_history,
|
| 458 |
+
user_emoji_html,
|
| 459 |
+
get_emoji_html(final_emoji, final_label),
|
| 460 |
+
)
|
| 461 |
+
|
| 462 |
+
# Listen to text input changes for live emoji update
|
| 463 |
+
# Use both timer.tick AND msg.input for maximum responsiveness
|
| 464 |
+
timer.tick(
|
| 465 |
+
update_user_emoji_live,
|
| 466 |
+
inputs=[msg],
|
| 467 |
+
outputs=[user_emoji_display],
|
| 468 |
+
)
|
| 469 |
+
|
| 470 |
+
# Also use .input() for immediate keystroke feedback (Gradio 6 compatible)
|
| 471 |
+
msg.input(
|
| 472 |
+
update_user_emoji_live,
|
| 473 |
+
inputs=[msg],
|
| 474 |
+
outputs=[user_emoji_display],
|
| 475 |
+
)
|
| 476 |
+
|
| 477 |
+
# MCP connection buttons
|
| 478 |
+
connect_btn.click(
|
| 479 |
+
connect_to_mcp,
|
| 480 |
+
inputs=[mcp_url_input],
|
| 481 |
+
outputs=[mcp_connection_status, mcp_tools_display, mcp_status_display],
|
| 482 |
+
)
|
| 483 |
+
|
| 484 |
+
disconnect_btn.click(
|
| 485 |
+
disconnect_from_mcp,
|
| 486 |
+
outputs=[mcp_connection_status, mcp_tools_display, mcp_status_display],
|
| 487 |
+
)
|
| 488 |
+
|
| 489 |
+
# Test MCP button
|
| 490 |
+
test_btn.click(
|
| 491 |
+
test_mcp_connection,
|
| 492 |
+
inputs=[test_message],
|
| 493 |
+
outputs=[test_result],
|
| 494 |
+
)
|
| 495 |
+
|
| 496 |
+
# Handle message submission with streaming (now with MCP support)
|
| 497 |
+
msg.submit(
|
| 498 |
+
stream_chat_with_mcp,
|
| 499 |
+
[msg, chatbot, use_mcp_checkbox],
|
| 500 |
+
[chatbot, user_emoji_display, ai_emoji_display],
|
| 501 |
+
).then(
|
| 502 |
+
lambda: "",
|
| 503 |
+
None,
|
| 504 |
+
msg,
|
| 505 |
+
).then(
|
| 506 |
+
lambda: get_emoji_html("😐", "You: waiting..."),
|
| 507 |
+
None,
|
| 508 |
+
user_emoji_display,
|
| 509 |
+
)
|
| 510 |
+
|
| 511 |
+
submit_btn.click(
|
| 512 |
+
stream_chat_with_mcp,
|
| 513 |
+
[msg, chatbot, use_mcp_checkbox],
|
| 514 |
+
[chatbot, user_emoji_display, ai_emoji_display],
|
| 515 |
+
).then(
|
| 516 |
+
lambda: "",
|
| 517 |
+
None,
|
| 518 |
+
msg,
|
| 519 |
+
).then(
|
| 520 |
+
lambda: get_emoji_html("😐", "You: waiting..."),
|
| 521 |
+
None,
|
| 522 |
+
user_emoji_display,
|
| 523 |
+
)
|
| 524 |
+
|
| 525 |
+
# Clear button
|
| 526 |
+
clear_btn = gr.Button("Clear Chat", variant="secondary")
|
| 527 |
+
|
| 528 |
+
def clear_chat():
|
| 529 |
+
gemini.reset_chat() # Reset Gemini chat history too
|
| 530 |
+
return [], get_emoji_html("😐", "You: waiting..."), get_emoji_html("😐", "AI: neutral")
|
| 531 |
+
|
| 532 |
+
clear_btn.click(
|
| 533 |
+
clear_chat,
|
| 534 |
+
None,
|
| 535 |
+
[chatbot, user_emoji_display, ai_emoji_display],
|
| 536 |
+
)
|
| 537 |
+
|
| 538 |
+
|
| 539 |
+
def _is_port_free(port: int) -> bool:
|
| 540 |
+
"""Return True if localhost:port is available for binding."""
|
| 541 |
+
try:
|
| 542 |
+
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
| 543 |
+
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
| 544 |
+
s.bind(("127.0.0.1", port))
|
| 545 |
+
return True
|
| 546 |
+
except OSError:
|
| 547 |
+
return False
|
| 548 |
+
|
| 549 |
+
|
| 550 |
+
def _choose_port(preferred: int | None = None, start: int = 7861, end: int = 7870) -> int:
|
| 551 |
+
"""Choose an available port.
|
| 552 |
+
|
| 553 |
+
Priority:
|
| 554 |
+
1. Environment variable GRADIO_SERVER_PORT
|
| 555 |
+
2. preferred argument
|
| 556 |
+
3. scan range start..end
|
| 557 |
+
4. ephemeral port (bind port 0)
|
| 558 |
+
"""
|
| 559 |
+
# 1. environment override
|
| 560 |
+
env_port = os.environ.get("GRADIO_SERVER_PORT") or os.environ.get("PORT")
|
| 561 |
+
if env_port:
|
| 562 |
+
try:
|
| 563 |
+
p = int(env_port)
|
| 564 |
+
if _is_port_free(p):
|
| 565 |
+
return p
|
| 566 |
+
except Exception:
|
| 567 |
+
pass
|
| 568 |
+
|
| 569 |
+
# 2. preferred
|
| 570 |
+
if preferred and _is_port_free(preferred):
|
| 571 |
+
return preferred
|
| 572 |
+
|
| 573 |
+
# 3. scan range
|
| 574 |
+
for p in range(start, end + 1):
|
| 575 |
+
if _is_port_free(p):
|
| 576 |
+
return p
|
| 577 |
+
|
| 578 |
+
# 4. ephemeral fallback
|
| 579 |
+
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
| 580 |
+
s.bind(("127.0.0.1", 0))
|
| 581 |
+
return s.getsockname()[1]
|
| 582 |
+
|
| 583 |
+
|
| 584 |
+
if __name__ == "__main__":
|
| 585 |
+
# Prefer 7861..7870, but choose automatically if occupied.
|
| 586 |
+
preferred_port = 7861
|
| 587 |
+
port = _choose_port(preferred=preferred_port, start=7861, end=7870)
|
| 588 |
+
print(f"🚀 Starting Gradio on 127.0.0.1:{port}")
|
| 589 |
+
|
| 590 |
+
demo.launch(
|
| 591 |
+
server_name="127.0.0.1",
|
| 592 |
+
server_port=port,
|
| 593 |
+
share=False,
|
| 594 |
+
css=custom_css,
|
| 595 |
+
)
|
avatar/__init__.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Avatar Module - Emotion detection and emoji mapping
|
| 3 |
+
|
| 4 |
+
Components:
|
| 5 |
+
- sentiment_transformer: Binary sentiment detection (DistilBERT) - positive/negative
|
| 6 |
+
- sentiment_multi_emotion: Multi-class emotion detection (RoBERTa) - 7 emotions
|
| 7 |
+
- sentiment_emoji_map: Emotion to emoji mapping
|
| 8 |
+
|
| 9 |
+
Usage:
|
| 10 |
+
# Binary model (faster, ~93% accuracy on polarity):
|
| 11 |
+
from avatar import SentimentAnalyzer
|
| 12 |
+
analyzer = SentimentAnalyzer()
|
| 13 |
+
|
| 14 |
+
# Multi-emotion model (more granular, 7 emotions):
|
| 15 |
+
from avatar import MultiEmotionAnalyzer
|
| 16 |
+
analyzer = MultiEmotionAnalyzer()
|
| 17 |
+
|
| 18 |
+
# Emoji mapping:
|
| 19 |
+
from avatar import EmojiMapper
|
| 20 |
+
mapper = EmojiMapper()
|
| 21 |
+
emoji = mapper.get_emoji("happiness")
|
| 22 |
+
"""
|
| 23 |
+
|
| 24 |
+
from .sentiment_transformer import SentimentAnalyzer
|
| 25 |
+
from .sentiment_multi_emotion import MultiEmotionAnalyzer
|
| 26 |
+
from .sentiment_emoji_map import EmojiMapper
|
| 27 |
+
|
| 28 |
+
__all__ = ["SentimentAnalyzer", "MultiEmotionAnalyzer", "EmojiMapper"]
|
avatar/emotion_wheel.py
ADDED
|
@@ -0,0 +1,459 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Emotion Wheel - Graph-based emotion categorization and similarity
|
| 4 |
+
|
| 5 |
+
Implements an emotion wheel/graph where:
|
| 6 |
+
- Emotions are grouped into categories
|
| 7 |
+
- Similar emotions are acceptable substitutes
|
| 8 |
+
- Contradictory emotions are failures
|
| 9 |
+
- Allows natural variation in emotion detection
|
| 10 |
+
|
| 11 |
+
Based on Plutchik's Wheel of Emotions with extensions
|
| 12 |
+
"""
|
| 13 |
+
|
| 14 |
+
from typing import Dict, List, Set, Tuple, Optional
|
| 15 |
+
from dataclasses import dataclass
|
| 16 |
+
from enum import Enum
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
class EmotionCategory(Enum):
|
| 20 |
+
"""Main emotion categories on the wheel"""
|
| 21 |
+
JOY = "joy"
|
| 22 |
+
TRUST = "trust"
|
| 23 |
+
FEAR = "fear"
|
| 24 |
+
SURPRISE = "surprise"
|
| 25 |
+
SADNESS = "sadness"
|
| 26 |
+
DISGUST = "disgust"
|
| 27 |
+
ANGER = "anger"
|
| 28 |
+
ANTICIPATION = "anticipation"
|
| 29 |
+
# Extended categories
|
| 30 |
+
LOVE = "love" # Joy + Trust
|
| 31 |
+
GUILT = "guilt" # Joy opposite area
|
| 32 |
+
NEUTRAL = "neutral" # Center
|
| 33 |
+
CONFUSION = "confusion" # Between fear and surprise
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
@dataclass
|
| 37 |
+
class EmotionNode:
|
| 38 |
+
"""Single emotion in the wheel"""
|
| 39 |
+
name: str
|
| 40 |
+
category: EmotionCategory
|
| 41 |
+
intensity: str # "high", "medium", "low"
|
| 42 |
+
emoji: str
|
| 43 |
+
adjacent_categories: List[EmotionCategory] # Similar categories
|
| 44 |
+
opposite_category: Optional[EmotionCategory] # Contradictory
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
class EmotionWheel:
|
| 48 |
+
"""
|
| 49 |
+
Emotion Wheel Graph for categorizing and relating emotions
|
| 50 |
+
|
| 51 |
+
Structure (Plutchik-inspired):
|
| 52 |
+
|
| 53 |
+
JOY
|
| 54 |
+
/ \
|
| 55 |
+
ANTICIPATION TRUST
|
| 56 |
+
| |
|
| 57 |
+
ANGER FEAR
|
| 58 |
+
\ /
|
| 59 |
+
DISGUST-SADNESS
|
| 60 |
+
|
|
| 61 |
+
SURPRISE
|
| 62 |
+
|
| 63 |
+
Center: NEUTRAL
|
| 64 |
+
Combinations: LOVE (Joy+Trust), CONFUSION (Fear+Surprise)
|
| 65 |
+
"""
|
| 66 |
+
|
| 67 |
+
# Category relationships - adjacent categories are similar
|
| 68 |
+
CATEGORY_WHEEL = {
|
| 69 |
+
EmotionCategory.JOY: {
|
| 70 |
+
"adjacent": [EmotionCategory.TRUST, EmotionCategory.ANTICIPATION, EmotionCategory.LOVE],
|
| 71 |
+
"opposite": EmotionCategory.SADNESS,
|
| 72 |
+
},
|
| 73 |
+
EmotionCategory.TRUST: {
|
| 74 |
+
"adjacent": [EmotionCategory.JOY, EmotionCategory.FEAR, EmotionCategory.LOVE],
|
| 75 |
+
"opposite": EmotionCategory.DISGUST,
|
| 76 |
+
},
|
| 77 |
+
EmotionCategory.FEAR: {
|
| 78 |
+
"adjacent": [EmotionCategory.TRUST, EmotionCategory.SURPRISE, EmotionCategory.CONFUSION],
|
| 79 |
+
"opposite": EmotionCategory.ANGER,
|
| 80 |
+
},
|
| 81 |
+
EmotionCategory.SURPRISE: {
|
| 82 |
+
"adjacent": [EmotionCategory.FEAR, EmotionCategory.SADNESS, EmotionCategory.CONFUSION],
|
| 83 |
+
"opposite": EmotionCategory.ANTICIPATION,
|
| 84 |
+
},
|
| 85 |
+
EmotionCategory.SADNESS: {
|
| 86 |
+
"adjacent": [EmotionCategory.SURPRISE, EmotionCategory.DISGUST, EmotionCategory.GUILT],
|
| 87 |
+
"opposite": EmotionCategory.JOY,
|
| 88 |
+
},
|
| 89 |
+
EmotionCategory.DISGUST: {
|
| 90 |
+
"adjacent": [EmotionCategory.SADNESS, EmotionCategory.ANGER],
|
| 91 |
+
"opposite": EmotionCategory.TRUST,
|
| 92 |
+
},
|
| 93 |
+
EmotionCategory.ANGER: {
|
| 94 |
+
"adjacent": [EmotionCategory.DISGUST, EmotionCategory.ANTICIPATION],
|
| 95 |
+
"opposite": EmotionCategory.FEAR,
|
| 96 |
+
},
|
| 97 |
+
EmotionCategory.ANTICIPATION: {
|
| 98 |
+
"adjacent": [EmotionCategory.ANGER, EmotionCategory.JOY],
|
| 99 |
+
"opposite": EmotionCategory.SURPRISE,
|
| 100 |
+
},
|
| 101 |
+
# Extended categories
|
| 102 |
+
EmotionCategory.LOVE: {
|
| 103 |
+
"adjacent": [EmotionCategory.JOY, EmotionCategory.TRUST],
|
| 104 |
+
"opposite": EmotionCategory.DISGUST,
|
| 105 |
+
},
|
| 106 |
+
EmotionCategory.GUILT: {
|
| 107 |
+
"adjacent": [EmotionCategory.SADNESS, EmotionCategory.FEAR],
|
| 108 |
+
"opposite": EmotionCategory.JOY,
|
| 109 |
+
},
|
| 110 |
+
EmotionCategory.NEUTRAL: {
|
| 111 |
+
"adjacent": [cat for cat in EmotionCategory], # Center connects to all
|
| 112 |
+
"opposite": None,
|
| 113 |
+
},
|
| 114 |
+
EmotionCategory.CONFUSION: {
|
| 115 |
+
"adjacent": [EmotionCategory.FEAR, EmotionCategory.SURPRISE, EmotionCategory.NEUTRAL],
|
| 116 |
+
"opposite": EmotionCategory.JOY,
|
| 117 |
+
},
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
# Map each emotion to its category
|
| 121 |
+
EMOTION_CATEGORIES: Dict[str, EmotionCategory] = {
|
| 122 |
+
# === JOY FAMILY ===
|
| 123 |
+
"ecstasy": EmotionCategory.JOY,
|
| 124 |
+
"joy": EmotionCategory.JOY,
|
| 125 |
+
"happiness": EmotionCategory.JOY,
|
| 126 |
+
"delight": EmotionCategory.JOY,
|
| 127 |
+
"elation": EmotionCategory.JOY,
|
| 128 |
+
"euphoria": EmotionCategory.JOY,
|
| 129 |
+
"excitement": EmotionCategory.JOY,
|
| 130 |
+
"thrill": EmotionCategory.JOY,
|
| 131 |
+
"enthusiasm": EmotionCategory.JOY,
|
| 132 |
+
"cheerfulness": EmotionCategory.JOY,
|
| 133 |
+
"contentment": EmotionCategory.JOY,
|
| 134 |
+
"satisfaction": EmotionCategory.JOY,
|
| 135 |
+
"pleasure": EmotionCategory.JOY,
|
| 136 |
+
"relief": EmotionCategory.JOY,
|
| 137 |
+
"serenity": EmotionCategory.JOY,
|
| 138 |
+
"calm": EmotionCategory.JOY,
|
| 139 |
+
"relaxed": EmotionCategory.JOY,
|
| 140 |
+
"amusement": EmotionCategory.JOY,
|
| 141 |
+
"playful": EmotionCategory.JOY,
|
| 142 |
+
"silly": EmotionCategory.JOY,
|
| 143 |
+
"mischievous": EmotionCategory.JOY,
|
| 144 |
+
"funny": EmotionCategory.JOY,
|
| 145 |
+
"hope": EmotionCategory.JOY,
|
| 146 |
+
"optimism": EmotionCategory.JOY,
|
| 147 |
+
|
| 148 |
+
# === TRUST FAMILY ===
|
| 149 |
+
"trust": EmotionCategory.TRUST,
|
| 150 |
+
"acceptance": EmotionCategory.TRUST,
|
| 151 |
+
"admiration": EmotionCategory.TRUST,
|
| 152 |
+
"confidence": EmotionCategory.TRUST,
|
| 153 |
+
|
| 154 |
+
# === LOVE FAMILY (Joy + Trust) ===
|
| 155 |
+
"love": EmotionCategory.LOVE,
|
| 156 |
+
"adoration": EmotionCategory.LOVE,
|
| 157 |
+
"affection": EmotionCategory.LOVE,
|
| 158 |
+
"tenderness": EmotionCategory.LOVE,
|
| 159 |
+
"caring": EmotionCategory.LOVE,
|
| 160 |
+
"compassion": EmotionCategory.LOVE,
|
| 161 |
+
"empathy": EmotionCategory.LOVE,
|
| 162 |
+
"gratitude": EmotionCategory.LOVE,
|
| 163 |
+
"thankful": EmotionCategory.LOVE,
|
| 164 |
+
"sympathy": EmotionCategory.LOVE,
|
| 165 |
+
|
| 166 |
+
# === FEAR FAMILY ===
|
| 167 |
+
"fear": EmotionCategory.FEAR,
|
| 168 |
+
"terror": EmotionCategory.FEAR,
|
| 169 |
+
"horror": EmotionCategory.FEAR,
|
| 170 |
+
"dread": EmotionCategory.FEAR,
|
| 171 |
+
"anxiety": EmotionCategory.FEAR,
|
| 172 |
+
"worry": EmotionCategory.FEAR,
|
| 173 |
+
"nervousness": EmotionCategory.FEAR,
|
| 174 |
+
"apprehension": EmotionCategory.FEAR,
|
| 175 |
+
"panic": EmotionCategory.FEAR,
|
| 176 |
+
|
| 177 |
+
# === SURPRISE FAMILY ===
|
| 178 |
+
"surprise": EmotionCategory.SURPRISE,
|
| 179 |
+
"astonishment": EmotionCategory.SURPRISE,
|
| 180 |
+
"shock": EmotionCategory.SURPRISE,
|
| 181 |
+
"startled": EmotionCategory.SURPRISE,
|
| 182 |
+
"amazement": EmotionCategory.SURPRISE,
|
| 183 |
+
"wonder": EmotionCategory.SURPRISE,
|
| 184 |
+
"awe": EmotionCategory.SURPRISE,
|
| 185 |
+
"curiosity": EmotionCategory.SURPRISE,
|
| 186 |
+
"interest": EmotionCategory.SURPRISE,
|
| 187 |
+
"fascination": EmotionCategory.SURPRISE,
|
| 188 |
+
"intrigue": EmotionCategory.SURPRISE,
|
| 189 |
+
|
| 190 |
+
# === SADNESS FAMILY ===
|
| 191 |
+
"sadness": EmotionCategory.SADNESS,
|
| 192 |
+
"sorrow": EmotionCategory.SADNESS,
|
| 193 |
+
"grief": EmotionCategory.SADNESS,
|
| 194 |
+
"melancholy": EmotionCategory.SADNESS,
|
| 195 |
+
"disappointment": EmotionCategory.SADNESS,
|
| 196 |
+
"dejection": EmotionCategory.SADNESS,
|
| 197 |
+
"despair": EmotionCategory.SADNESS,
|
| 198 |
+
"hopelessness": EmotionCategory.SADNESS,
|
| 199 |
+
"loneliness": EmotionCategory.SADNESS,
|
| 200 |
+
"hurt": EmotionCategory.SADNESS,
|
| 201 |
+
"misery": EmotionCategory.SADNESS,
|
| 202 |
+
"nostalgia": EmotionCategory.SADNESS,
|
| 203 |
+
"longing": EmotionCategory.SADNESS,
|
| 204 |
+
"yearning": EmotionCategory.SADNESS,
|
| 205 |
+
"pessimism": EmotionCategory.SADNESS,
|
| 206 |
+
|
| 207 |
+
# === DISGUST FAMILY ===
|
| 208 |
+
"disgust": EmotionCategory.DISGUST,
|
| 209 |
+
"revulsion": EmotionCategory.DISGUST,
|
| 210 |
+
"contempt": EmotionCategory.DISGUST,
|
| 211 |
+
"disdain": EmotionCategory.DISGUST,
|
| 212 |
+
"loathing": EmotionCategory.DISGUST,
|
| 213 |
+
"scorn": EmotionCategory.DISGUST,
|
| 214 |
+
"sarcasm": EmotionCategory.DISGUST,
|
| 215 |
+
|
| 216 |
+
# === ANGER FAMILY ===
|
| 217 |
+
"anger": EmotionCategory.ANGER,
|
| 218 |
+
"rage": EmotionCategory.ANGER,
|
| 219 |
+
"fury": EmotionCategory.ANGER,
|
| 220 |
+
"irritation": EmotionCategory.ANGER,
|
| 221 |
+
"annoyance": EmotionCategory.ANGER,
|
| 222 |
+
"frustration": EmotionCategory.ANGER,
|
| 223 |
+
"exasperation": EmotionCategory.ANGER,
|
| 224 |
+
"resentment": EmotionCategory.ANGER,
|
| 225 |
+
"hostility": EmotionCategory.ANGER,
|
| 226 |
+
"bitterness": EmotionCategory.ANGER,
|
| 227 |
+
"envy": EmotionCategory.ANGER,
|
| 228 |
+
"jealousy": EmotionCategory.ANGER,
|
| 229 |
+
|
| 230 |
+
# === ANTICIPATION FAMILY ===
|
| 231 |
+
"anticipation": EmotionCategory.ANTICIPATION,
|
| 232 |
+
"determination": EmotionCategory.ANTICIPATION,
|
| 233 |
+
"inspiration": EmotionCategory.ANTICIPATION,
|
| 234 |
+
"pride": EmotionCategory.ANTICIPATION,
|
| 235 |
+
"triumph": EmotionCategory.ANTICIPATION,
|
| 236 |
+
|
| 237 |
+
# === GUILT FAMILY (Sadness + Fear area) ===
|
| 238 |
+
"shame": EmotionCategory.GUILT,
|
| 239 |
+
"embarrassment": EmotionCategory.GUILT,
|
| 240 |
+
"guilt": EmotionCategory.GUILT,
|
| 241 |
+
"regret": EmotionCategory.GUILT,
|
| 242 |
+
"remorse": EmotionCategory.GUILT,
|
| 243 |
+
"humiliation": EmotionCategory.GUILT,
|
| 244 |
+
|
| 245 |
+
# === CONFUSION FAMILY (Fear + Surprise) ===
|
| 246 |
+
"confused": EmotionCategory.CONFUSION,
|
| 247 |
+
"confusion": EmotionCategory.CONFUSION,
|
| 248 |
+
"puzzled": EmotionCategory.CONFUSION,
|
| 249 |
+
"perplexed": EmotionCategory.CONFUSION,
|
| 250 |
+
"bewildered": EmotionCategory.CONFUSION,
|
| 251 |
+
"baffled": EmotionCategory.CONFUSION,
|
| 252 |
+
"uncertain": EmotionCategory.CONFUSION,
|
| 253 |
+
|
| 254 |
+
# === NEUTRAL FAMILY (Center) ===
|
| 255 |
+
"neutral": EmotionCategory.NEUTRAL,
|
| 256 |
+
"thinking": EmotionCategory.NEUTRAL,
|
| 257 |
+
"contemplative": EmotionCategory.NEUTRAL,
|
| 258 |
+
"pensive": EmotionCategory.NEUTRAL,
|
| 259 |
+
"reflective": EmotionCategory.NEUTRAL,
|
| 260 |
+
"ambivalent": EmotionCategory.NEUTRAL,
|
| 261 |
+
"indifferent": EmotionCategory.NEUTRAL,
|
| 262 |
+
"boredom": EmotionCategory.NEUTRAL,
|
| 263 |
+
"tiredness": EmotionCategory.NEUTRAL,
|
| 264 |
+
"exhaustion": EmotionCategory.NEUTRAL,
|
| 265 |
+
"fatigue": EmotionCategory.NEUTRAL,
|
| 266 |
+
"weariness": EmotionCategory.NEUTRAL,
|
| 267 |
+
"sleepy": EmotionCategory.NEUTRAL,
|
| 268 |
+
}
|
| 269 |
+
|
| 270 |
+
def __init__(self):
|
| 271 |
+
"""Initialize emotion wheel"""
|
| 272 |
+
self._build_similarity_graph()
|
| 273 |
+
|
| 274 |
+
def _build_similarity_graph(self):
|
| 275 |
+
"""Build graph of emotion similarities"""
|
| 276 |
+
self.similarity_graph: Dict[str, Set[str]] = {}
|
| 277 |
+
|
| 278 |
+
# For each emotion, find all similar emotions
|
| 279 |
+
for emotion, category in self.EMOTION_CATEGORIES.items():
|
| 280 |
+
similar = set()
|
| 281 |
+
|
| 282 |
+
# Same category emotions are very similar
|
| 283 |
+
for other_emotion, other_cat in self.EMOTION_CATEGORIES.items():
|
| 284 |
+
if other_cat == category:
|
| 285 |
+
similar.add(other_emotion)
|
| 286 |
+
|
| 287 |
+
# Adjacent category emotions are somewhat similar
|
| 288 |
+
if category in self.CATEGORY_WHEEL:
|
| 289 |
+
adjacent_cats = self.CATEGORY_WHEEL[category]["adjacent"]
|
| 290 |
+
for other_emotion, other_cat in self.EMOTION_CATEGORIES.items():
|
| 291 |
+
if other_cat in adjacent_cats:
|
| 292 |
+
similar.add(other_emotion)
|
| 293 |
+
|
| 294 |
+
self.similarity_graph[emotion] = similar
|
| 295 |
+
|
| 296 |
+
def get_category(self, emotion: str) -> Optional[EmotionCategory]:
|
| 297 |
+
"""Get the category of an emotion"""
|
| 298 |
+
return self.EMOTION_CATEGORIES.get(emotion.lower())
|
| 299 |
+
|
| 300 |
+
def get_opposite_category(self, emotion: str) -> Optional[EmotionCategory]:
|
| 301 |
+
"""Get the opposite/contradictory category"""
|
| 302 |
+
category = self.get_category(emotion)
|
| 303 |
+
if category and category in self.CATEGORY_WHEEL:
|
| 304 |
+
return self.CATEGORY_WHEEL[category].get("opposite")
|
| 305 |
+
return None
|
| 306 |
+
|
| 307 |
+
def are_similar(self, emotion1: str, emotion2: str) -> bool:
|
| 308 |
+
"""Check if two emotions are similar (same or adjacent category)"""
|
| 309 |
+
e1 = emotion1.lower()
|
| 310 |
+
e2 = emotion2.lower()
|
| 311 |
+
|
| 312 |
+
if e1 == e2:
|
| 313 |
+
return True
|
| 314 |
+
|
| 315 |
+
if e1 in self.similarity_graph:
|
| 316 |
+
return e2 in self.similarity_graph[e1]
|
| 317 |
+
|
| 318 |
+
return False
|
| 319 |
+
|
| 320 |
+
def are_contradictory(self, emotion1: str, emotion2: str) -> bool:
|
| 321 |
+
"""Check if two emotions are contradictory (opposite categories)"""
|
| 322 |
+
cat1 = self.get_category(emotion1)
|
| 323 |
+
cat2 = self.get_category(emotion2)
|
| 324 |
+
|
| 325 |
+
if not cat1 or not cat2:
|
| 326 |
+
return False
|
| 327 |
+
|
| 328 |
+
# Check if cat2 is opposite of cat1
|
| 329 |
+
if cat1 in self.CATEGORY_WHEEL:
|
| 330 |
+
opposite = self.CATEGORY_WHEEL[cat1].get("opposite")
|
| 331 |
+
if opposite == cat2:
|
| 332 |
+
return True
|
| 333 |
+
|
| 334 |
+
# Check reverse
|
| 335 |
+
if cat2 in self.CATEGORY_WHEEL:
|
| 336 |
+
opposite = self.CATEGORY_WHEEL[cat2].get("opposite")
|
| 337 |
+
if opposite == cat1:
|
| 338 |
+
return True
|
| 339 |
+
|
| 340 |
+
return False
|
| 341 |
+
|
| 342 |
+
def get_similarity_score(self, expected: str, detected: str) -> Tuple[float, str]:
|
| 343 |
+
"""
|
| 344 |
+
Calculate similarity score between expected and detected emotion
|
| 345 |
+
|
| 346 |
+
Returns:
|
| 347 |
+
Tuple of (score, relationship_type)
|
| 348 |
+
- score: 1.0 = exact, 0.8 = same category, 0.5 = adjacent, 0.0 = opposite
|
| 349 |
+
- relationship_type: "exact", "same_category", "adjacent", "distant", "opposite"
|
| 350 |
+
"""
|
| 351 |
+
e1 = expected.lower()
|
| 352 |
+
e2 = detected.lower()
|
| 353 |
+
|
| 354 |
+
# Exact match
|
| 355 |
+
if e1 == e2:
|
| 356 |
+
return (1.0, "exact")
|
| 357 |
+
|
| 358 |
+
cat1 = self.get_category(e1)
|
| 359 |
+
cat2 = self.get_category(e2)
|
| 360 |
+
|
| 361 |
+
if not cat1 or not cat2:
|
| 362 |
+
return (0.3, "unknown")
|
| 363 |
+
|
| 364 |
+
# Same category
|
| 365 |
+
if cat1 == cat2:
|
| 366 |
+
return (0.8, "same_category")
|
| 367 |
+
|
| 368 |
+
# Check if adjacent
|
| 369 |
+
if cat1 in self.CATEGORY_WHEEL:
|
| 370 |
+
adjacent = self.CATEGORY_WHEEL[cat1]["adjacent"]
|
| 371 |
+
if cat2 in adjacent:
|
| 372 |
+
return (0.5, "adjacent")
|
| 373 |
+
|
| 374 |
+
# Check if opposite
|
| 375 |
+
if self.are_contradictory(e1, e2):
|
| 376 |
+
return (0.0, "opposite")
|
| 377 |
+
|
| 378 |
+
# Distant but not opposite
|
| 379 |
+
return (0.2, "distant")
|
| 380 |
+
|
| 381 |
+
def get_emotions_in_category(self, category: EmotionCategory) -> List[str]:
|
| 382 |
+
"""Get all emotions in a category"""
|
| 383 |
+
return [e for e, c in self.EMOTION_CATEGORIES.items() if c == category]
|
| 384 |
+
|
| 385 |
+
def get_all_categories(self) -> List[EmotionCategory]:
|
| 386 |
+
"""Get all emotion categories"""
|
| 387 |
+
return list(EmotionCategory)
|
| 388 |
+
|
| 389 |
+
def visualize_wheel(self) -> str:
|
| 390 |
+
"""Generate ASCII visualization of the emotion wheel"""
|
| 391 |
+
lines = [
|
| 392 |
+
"╔══════════════════════════════════════════════════════════════════╗",
|
| 393 |
+
"║ EMOTION WHEEL GRAPH ║",
|
| 394 |
+
"╠══════════════════════════════════════════════════════════════════╣",
|
| 395 |
+
"║ ║",
|
| 396 |
+
"║ JOY 😊 ║",
|
| 397 |
+
"║ / \\ ║",
|
| 398 |
+
"║ / \\ ║",
|
| 399 |
+
"║ ANTICIPATION 🤗 TRUST 🤝 ║",
|
| 400 |
+
"║ | \\ / | ║",
|
| 401 |
+
"║ | \\ / | ║",
|
| 402 |
+
"║ | LOVE 🥰 | ║",
|
| 403 |
+
"║ | | | ║",
|
| 404 |
+
"║ ANGER 😠 NEUTRAL 😐 FEAR 😨 ║",
|
| 405 |
+
"║ | | | ║",
|
| 406 |
+
"║ | CONFUSION 😕 | ║",
|
| 407 |
+
"║ | / \\ | ║",
|
| 408 |
+
"║ \\ / \\ / ║",
|
| 409 |
+
"║ DISGUST 🤢 SURPRISE 😮 ║",
|
| 410 |
+
"║ \\ / ║",
|
| 411 |
+
"║ \\ / ║",
|
| 412 |
+
"║ SADNESS 😢 ║",
|
| 413 |
+
"║ | ║",
|
| 414 |
+
"║ GUILT 😣 ║",
|
| 415 |
+
"║ ║",
|
| 416 |
+
"╠══════════════════════════════════════════════════════════════════╣",
|
| 417 |
+
"║ RELATIONSHIPS: ║",
|
| 418 |
+
"║ ─── Adjacent (similar) ═══ Opposite (contradictory) ║",
|
| 419 |
+
"║ ║",
|
| 420 |
+
"║ JOY ═══ SADNESS TRUST ═══ DISGUST FEAR ═══ ANGER ║",
|
| 421 |
+
"║ SURPRISE ═══ ANTICIPATION ║",
|
| 422 |
+
"╚══════════════════════════════════════════════════════════════════╝",
|
| 423 |
+
]
|
| 424 |
+
return "\n".join(lines)
|
| 425 |
+
|
| 426 |
+
|
| 427 |
+
# Singleton instance
|
| 428 |
+
_wheel_instance = None
|
| 429 |
+
|
| 430 |
+
def get_emotion_wheel() -> EmotionWheel:
|
| 431 |
+
"""Get singleton emotion wheel instance"""
|
| 432 |
+
global _wheel_instance
|
| 433 |
+
if _wheel_instance is None:
|
| 434 |
+
_wheel_instance = EmotionWheel()
|
| 435 |
+
return _wheel_instance
|
| 436 |
+
|
| 437 |
+
|
| 438 |
+
if __name__ == "__main__":
|
| 439 |
+
wheel = EmotionWheel()
|
| 440 |
+
|
| 441 |
+
print(wheel.visualize_wheel())
|
| 442 |
+
print()
|
| 443 |
+
|
| 444 |
+
# Test similarity scores
|
| 445 |
+
test_pairs = [
|
| 446 |
+
("joy", "happiness"), # Same category
|
| 447 |
+
("joy", "love"), # Adjacent
|
| 448 |
+
("joy", "sadness"), # Opposite
|
| 449 |
+
("anger", "frustration"), # Same category
|
| 450 |
+
("fear", "anxiety"), # Same category
|
| 451 |
+
("confusion", "puzzled"), # Same category
|
| 452 |
+
("happiness", "anger"), # Distant
|
| 453 |
+
]
|
| 454 |
+
|
| 455 |
+
print("\nSimilarity Tests:")
|
| 456 |
+
print("-" * 60)
|
| 457 |
+
for e1, e2 in test_pairs:
|
| 458 |
+
score, rel = wheel.get_similarity_score(e1, e2)
|
| 459 |
+
print(f"{e1:15} vs {e2:15} → {score:.1f} ({rel})")
|
avatar/sentiment_ai_analysis.py
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Sentiment AI Analysis - Core sentiment/emotion detection engine
|
| 3 |
+
|
| 4 |
+
Analyzes text and detects emotions using keyword matching
|
| 5 |
+
Focuses on the LAST SENTENCE for real-time accuracy
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import re
|
| 9 |
+
from typing import Dict, Any
|
| 10 |
+
from .sentiment_keyword_map import KeywordMap
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
class SentimentAnalyzer:
|
| 14 |
+
"""
|
| 15 |
+
Ultra-fast emotion analyzer optimized for real-time detection
|
| 16 |
+
|
| 17 |
+
Detects 50+ emotions from text as it's being typed or streamed
|
| 18 |
+
Focuses on the LAST SENTENCE/PHRASE for accurate real-time updates
|
| 19 |
+
"""
|
| 20 |
+
|
| 21 |
+
SENTENCE_SEPARATORS = re.compile(r'[.!?;:\n]+')
|
| 22 |
+
|
| 23 |
+
def __init__(self, custom_keywords: Dict[str, str] = None):
|
| 24 |
+
"""Initialize with keyword mappings"""
|
| 25 |
+
self.keyword_map = KeywordMap(custom_keywords)
|
| 26 |
+
self._word_pattern = re.compile(r'\b\w+\b')
|
| 27 |
+
|
| 28 |
+
def _get_last_sentence(self, text: str) -> str:
|
| 29 |
+
"""
|
| 30 |
+
Extract the last sentence/phrase from text
|
| 31 |
+
|
| 32 |
+
This ensures emoji reflects CURRENT sentiment, not cumulative
|
| 33 |
+
"""
|
| 34 |
+
parts = self.SENTENCE_SEPARATORS.split(text)
|
| 35 |
+
parts = [p.strip() for p in parts if p.strip()]
|
| 36 |
+
|
| 37 |
+
if not parts:
|
| 38 |
+
return text.strip()
|
| 39 |
+
|
| 40 |
+
return parts[-1]
|
| 41 |
+
|
| 42 |
+
def _analyze_segment(self, text: str, position_weight: float = 1.0) -> Dict[str, float]:
|
| 43 |
+
"""
|
| 44 |
+
Analyze a text segment and return emotion scores
|
| 45 |
+
|
| 46 |
+
Args:
|
| 47 |
+
text: Text to analyze
|
| 48 |
+
position_weight: Multiplier for recency (higher = more recent)
|
| 49 |
+
|
| 50 |
+
Returns:
|
| 51 |
+
Dict mapping emotions to scores
|
| 52 |
+
"""
|
| 53 |
+
text_lower = text.lower()
|
| 54 |
+
words = self._word_pattern.findall(text_lower)
|
| 55 |
+
|
| 56 |
+
if not words:
|
| 57 |
+
return {}
|
| 58 |
+
|
| 59 |
+
emotion_scores: Dict[str, float] = {}
|
| 60 |
+
negation_active = False
|
| 61 |
+
intensifier_active = False
|
| 62 |
+
|
| 63 |
+
# Process words with position weighting
|
| 64 |
+
word_count = len(words)
|
| 65 |
+
for idx, word in enumerate(words):
|
| 66 |
+
# Position weight: last word gets full weight, first gets 0.5
|
| 67 |
+
word_position_weight = 0.5 + (0.5 * (idx / max(word_count - 1, 1)))
|
| 68 |
+
|
| 69 |
+
# Check for negation
|
| 70 |
+
if self.keyword_map.is_negation(word):
|
| 71 |
+
negation_active = True
|
| 72 |
+
continue
|
| 73 |
+
|
| 74 |
+
# Check for intensifier
|
| 75 |
+
if self.keyword_map.is_intensifier(word):
|
| 76 |
+
intensifier_active = True
|
| 77 |
+
continue
|
| 78 |
+
|
| 79 |
+
# Check if word maps to emotion
|
| 80 |
+
emotion = self.keyword_map.get_emotion_for_word(word)
|
| 81 |
+
if emotion:
|
| 82 |
+
# Handle negation
|
| 83 |
+
if negation_active:
|
| 84 |
+
emotion = self.keyword_map.get_opposite_emotion(emotion)
|
| 85 |
+
negation_active = False
|
| 86 |
+
|
| 87 |
+
# Calculate score with position weighting
|
| 88 |
+
base_score = 1.5 if intensifier_active else 1.0
|
| 89 |
+
final_score = base_score * word_position_weight * position_weight
|
| 90 |
+
intensifier_active = False
|
| 91 |
+
|
| 92 |
+
# Accumulate
|
| 93 |
+
emotion_scores[emotion] = emotion_scores.get(emotion, 0) + final_score
|
| 94 |
+
else:
|
| 95 |
+
negation_active = False
|
| 96 |
+
intensifier_active = False
|
| 97 |
+
|
| 98 |
+
return emotion_scores
|
| 99 |
+
|
| 100 |
+
def analyze(self, text: str) -> Dict[str, Any]:
|
| 101 |
+
"""
|
| 102 |
+
Analyze text and return detected emotion
|
| 103 |
+
|
| 104 |
+
FOCUSES ON LAST SENTENCE for real-time accuracy
|
| 105 |
+
|
| 106 |
+
Args:
|
| 107 |
+
text: Text to analyze
|
| 108 |
+
|
| 109 |
+
Returns:
|
| 110 |
+
Dict with 'label' (emotion), 'score', and 'details'
|
| 111 |
+
"""
|
| 112 |
+
if not text or not text.strip():
|
| 113 |
+
return {"label": "neutral", "score": 0.0, "details": {}}
|
| 114 |
+
|
| 115 |
+
# Get the last sentence (what user is currently typing)
|
| 116 |
+
last_sentence = self._get_last_sentence(text)
|
| 117 |
+
|
| 118 |
+
# Analyze last sentence with full weight
|
| 119 |
+
last_sentence_scores = self._analyze_segment(last_sentence, position_weight=2.0)
|
| 120 |
+
|
| 121 |
+
# If found emotions in last sentence, use those
|
| 122 |
+
if last_sentence_scores:
|
| 123 |
+
primary_emotion = max(last_sentence_scores, key=lambda k: last_sentence_scores[k])
|
| 124 |
+
max_score = last_sentence_scores[primary_emotion]
|
| 125 |
+
normalized_score = min(max_score / 3.0, 1.0)
|
| 126 |
+
return {
|
| 127 |
+
"label": primary_emotion,
|
| 128 |
+
"score": normalized_score,
|
| 129 |
+
"details": {"segment": "last_sentence", "text": last_sentence[:50]}
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
# Fallback: analyze full text if last sentence has no emotion words
|
| 133 |
+
full_text_scores = self._analyze_segment(text, position_weight=1.0)
|
| 134 |
+
|
| 135 |
+
if not full_text_scores:
|
| 136 |
+
return {"label": "neutral", "score": 0.0, "details": {"segment": "none"}}
|
| 137 |
+
|
| 138 |
+
primary_emotion = max(full_text_scores, key=lambda k: full_text_scores[k])
|
| 139 |
+
max_score = full_text_scores[primary_emotion]
|
| 140 |
+
normalized_score = min(max_score / 3.0, 1.0)
|
| 141 |
+
|
| 142 |
+
return {
|
| 143 |
+
"label": primary_emotion,
|
| 144 |
+
"score": normalized_score,
|
| 145 |
+
"details": {"segment": "full_text", "all_emotions": full_text_scores}
|
| 146 |
+
}
|
| 147 |
+
|
| 148 |
+
|
| 149 |
+
if __name__ == "__main__":
|
| 150 |
+
print("=" * 60)
|
| 151 |
+
print("Testing Sentiment Analyzer")
|
| 152 |
+
print("=" * 60)
|
| 153 |
+
|
| 154 |
+
analyzer = SentimentAnalyzer()
|
| 155 |
+
|
| 156 |
+
test_cases = [
|
| 157 |
+
("I am so happy today!", "happiness"),
|
| 158 |
+
("I love this!", "love"),
|
| 159 |
+
("This is exciting!", "excitement"),
|
| 160 |
+
("Thank you so much!", "gratitude"),
|
| 161 |
+
("I am really sad", "sadness"),
|
| 162 |
+
("This makes me angry", "anger"),
|
| 163 |
+
("I am scared", "fear"),
|
| 164 |
+
("So frustrating!", "frustration"),
|
| 165 |
+
("I am curious about this", "curiosity"),
|
| 166 |
+
("Wow, that is amazing!", "amazement"),
|
| 167 |
+
("I am so confused", "confused"),
|
| 168 |
+
("I miss you", "longing"),
|
| 169 |
+
]
|
| 170 |
+
|
| 171 |
+
print("\nBasic Emotion Detection:")
|
| 172 |
+
passed = 0
|
| 173 |
+
for text, expected in test_cases:
|
| 174 |
+
result = analyzer.analyze(text)
|
| 175 |
+
match = expected in result["label"] or result["label"] == expected
|
| 176 |
+
status = "✓" if match else "✗"
|
| 177 |
+
if match:
|
| 178 |
+
passed += 1
|
| 179 |
+
print(f"{status} '{text}' → {result['label']}")
|
| 180 |
+
|
| 181 |
+
print(f"\n{passed}/{len(test_cases)} tests passed")
|
| 182 |
+
|
| 183 |
+
print("\n" + "=" * 60)
|
| 184 |
+
print("Last Sentence Focus Tests (Real-Time Updates)")
|
| 185 |
+
print("=" * 60)
|
| 186 |
+
|
| 187 |
+
multi_tests = [
|
| 188 |
+
("I love this! But now I am angry", "anger"),
|
| 189 |
+
("Happy day! Wait, I'm confused", "confused"),
|
| 190 |
+
("Great work! This is frustrating", "frustration"),
|
| 191 |
+
("Sad news. But I'm grateful now", "gratitude"),
|
| 192 |
+
("I was scared. Now I'm excited!", "excitement"),
|
| 193 |
+
]
|
| 194 |
+
|
| 195 |
+
print("\nLast Sentence Detection:")
|
| 196 |
+
passed_multi = 0
|
| 197 |
+
for text, expected in multi_tests:
|
| 198 |
+
result = analyzer.analyze(text)
|
| 199 |
+
match = expected in result["label"] or result["label"] == expected
|
| 200 |
+
status = "✓" if match else "✗"
|
| 201 |
+
if match:
|
| 202 |
+
passed_multi += 1
|
| 203 |
+
print(f"{status} '{text[:50]}...' → {result['label']}")
|
| 204 |
+
|
| 205 |
+
print(f"\n{passed_multi}/{len(multi_tests)} tests passed")
|
| 206 |
+
print("\n✅ Sentiment Analyzer ready!")
|
avatar/sentiment_emoji_map.py
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Sentiment Emoji Map - Maps emotion labels to face emojis
|
| 3 |
+
|
| 4 |
+
This module maps detected emotions to visual emoji representations
|
| 5 |
+
Unified for both user and AI (same emojis for all)
|
| 6 |
+
|
| 7 |
+
Version 2.0: Added new emotions for multi-emotion model support
|
| 8 |
+
"""
|
| 9 |
+
|
| 10 |
+
from typing import Dict, Optional
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
class EmojiMapper:
|
| 14 |
+
"""Maps emotion labels to face emojis - unified for user and AI"""
|
| 15 |
+
|
| 16 |
+
EMOTION_EMOJIS: Dict[str, str] = {
|
| 17 |
+
# === POSITIVE EMOTIONS (High Arousal) ===
|
| 18 |
+
"ecstasy": "🤩",
|
| 19 |
+
"joy": "😁",
|
| 20 |
+
"happiness": "😊",
|
| 21 |
+
"delight": "😄",
|
| 22 |
+
"elation": "😆",
|
| 23 |
+
"euphoria": "🥳",
|
| 24 |
+
"excitement": "😃",
|
| 25 |
+
"thrill": "😝",
|
| 26 |
+
"enthusiasm": "😀",
|
| 27 |
+
"cheerfulness": "😊",
|
| 28 |
+
|
| 29 |
+
# === POSITIVE EMOTIONS (Medium Arousal) ===
|
| 30 |
+
"contentment": "😌",
|
| 31 |
+
"satisfaction": "😏",
|
| 32 |
+
"pleasure": "😋",
|
| 33 |
+
"relief": "😮💨",
|
| 34 |
+
"serenity": "😇",
|
| 35 |
+
"calm": "😌",
|
| 36 |
+
"relaxed": "😎",
|
| 37 |
+
"pride": "😤",
|
| 38 |
+
"confidence": "😎",
|
| 39 |
+
"triumph": "😏",
|
| 40 |
+
|
| 41 |
+
# === LOVE & AFFECTION ===
|
| 42 |
+
"love": "🥰",
|
| 43 |
+
"adoration": "😍",
|
| 44 |
+
"affection": "🥰",
|
| 45 |
+
"tenderness": "🤗",
|
| 46 |
+
"caring": "🤗",
|
| 47 |
+
"compassion": "🥹",
|
| 48 |
+
"empathy": "🥹",
|
| 49 |
+
"gratitude": "🙏",
|
| 50 |
+
"thankful": "😊",
|
| 51 |
+
|
| 52 |
+
# === INTEREST & CURIOSITY ===
|
| 53 |
+
"curiosity": "🧐",
|
| 54 |
+
"interest": "🤔",
|
| 55 |
+
"fascination": "😯",
|
| 56 |
+
"wonder": "😲",
|
| 57 |
+
"awe": "😮",
|
| 58 |
+
"amazement": "😲",
|
| 59 |
+
"intrigue": "🤨",
|
| 60 |
+
|
| 61 |
+
# === SURPRISE ===
|
| 62 |
+
"surprise": "😮",
|
| 63 |
+
"astonishment": "😱",
|
| 64 |
+
"shock": "😳",
|
| 65 |
+
"startled": "😧",
|
| 66 |
+
|
| 67 |
+
# === NEUTRAL / THINKING ===
|
| 68 |
+
"neutral": "😐",
|
| 69 |
+
"thinking": "🤔",
|
| 70 |
+
"contemplative": "🤔",
|
| 71 |
+
"pensive": "😔",
|
| 72 |
+
"reflective": "🤔",
|
| 73 |
+
"uncertain": "😕",
|
| 74 |
+
"ambivalent": "😐",
|
| 75 |
+
"indifferent": "😑",
|
| 76 |
+
|
| 77 |
+
# === CONFUSION ===
|
| 78 |
+
"confused": "😕",
|
| 79 |
+
"confusion": "😕",
|
| 80 |
+
"puzzled": "🤨",
|
| 81 |
+
"perplexed": "😵💫",
|
| 82 |
+
"bewildered": "😵",
|
| 83 |
+
"baffled": "🤯",
|
| 84 |
+
|
| 85 |
+
# === NEGATIVE EMOTIONS (Low Arousal) ===
|
| 86 |
+
"sadness": "😢",
|
| 87 |
+
"sorrow": "😭",
|
| 88 |
+
"grief": "😭",
|
| 89 |
+
"melancholy": "😔",
|
| 90 |
+
"disappointment": "😞",
|
| 91 |
+
"dejection": "😩",
|
| 92 |
+
"despair": "😫",
|
| 93 |
+
"hopelessness": "😿",
|
| 94 |
+
"loneliness": "🥺",
|
| 95 |
+
"hurt": "😢",
|
| 96 |
+
"misery": "😣",
|
| 97 |
+
|
| 98 |
+
# === FEAR & ANXIETY ===
|
| 99 |
+
"fear": "😨",
|
| 100 |
+
"terror": "😱",
|
| 101 |
+
"horror": "😱",
|
| 102 |
+
"dread": "😰",
|
| 103 |
+
"anxiety": "😰",
|
| 104 |
+
"worry": "😟",
|
| 105 |
+
"nervousness": "😬",
|
| 106 |
+
"apprehension": "😧",
|
| 107 |
+
"panic": "😱",
|
| 108 |
+
|
| 109 |
+
# === ANGER & FRUSTRATION ===
|
| 110 |
+
"anger": "😠",
|
| 111 |
+
"rage": "🤬",
|
| 112 |
+
"fury": "😡",
|
| 113 |
+
"irritation": "😤",
|
| 114 |
+
"annoyance": "🙄",
|
| 115 |
+
"frustration": "😤",
|
| 116 |
+
"exasperation": "😫",
|
| 117 |
+
"resentment": "😒",
|
| 118 |
+
"hostility": "😠",
|
| 119 |
+
"bitterness": "😖",
|
| 120 |
+
|
| 121 |
+
# === DISGUST & CONTEMPT ===
|
| 122 |
+
"disgust": "🤢",
|
| 123 |
+
"revulsion": "🤮",
|
| 124 |
+
"contempt": "😒",
|
| 125 |
+
"disdain": "🙄",
|
| 126 |
+
"loathing": "😤",
|
| 127 |
+
"scorn": "😏",
|
| 128 |
+
|
| 129 |
+
# === SHAME & EMBARRASSMENT ===
|
| 130 |
+
"shame": "😳",
|
| 131 |
+
"embarrassment": "😳",
|
| 132 |
+
"guilt": "😣",
|
| 133 |
+
"regret": "😔",
|
| 134 |
+
"remorse": "😞",
|
| 135 |
+
"humiliation": "🫣",
|
| 136 |
+
|
| 137 |
+
# === BOREDOM & TIREDNESS ===
|
| 138 |
+
"boredom": "😑",
|
| 139 |
+
"tiredness": "😴",
|
| 140 |
+
"exhaustion": "😩",
|
| 141 |
+
"fatigue": "🥱",
|
| 142 |
+
"weariness": "😮💨",
|
| 143 |
+
"sleepy": "😴",
|
| 144 |
+
|
| 145 |
+
# === ENVY & JEALOUSY ===
|
| 146 |
+
"envy": "😒",
|
| 147 |
+
"jealousy": "🙄",
|
| 148 |
+
|
| 149 |
+
# === PLAYFUL & SILLY ===
|
| 150 |
+
"playful": "😜",
|
| 151 |
+
"silly": "🤪",
|
| 152 |
+
"mischievous": "😈",
|
| 153 |
+
"teasing": "😏",
|
| 154 |
+
"sarcastic": "😏",
|
| 155 |
+
"witty": "😎",
|
| 156 |
+
"amusement": "😂",
|
| 157 |
+
"funny": "🤣",
|
| 158 |
+
|
| 159 |
+
# === SPECIAL STATES ===
|
| 160 |
+
"sympathy": "🥹",
|
| 161 |
+
"nostalgia": "🥲",
|
| 162 |
+
"hope": "🙂",
|
| 163 |
+
"optimism": "😊",
|
| 164 |
+
"pessimism": "😕",
|
| 165 |
+
"longing": "🥺",
|
| 166 |
+
"yearning": "😢",
|
| 167 |
+
|
| 168 |
+
# === NEW IN V2 ===
|
| 169 |
+
"determination": "😤",
|
| 170 |
+
"inspiration": "🤩", # Changed from ✨ to face emoji
|
| 171 |
+
"anticipation": "🤗",
|
| 172 |
+
"trust": "😊", # Changed from 🤝 to face emoji
|
| 173 |
+
"acceptance": "😌",
|
| 174 |
+
"sarcasm": "🙄",
|
| 175 |
+
|
| 176 |
+
# === NEW IN V3 - Context Emotions ===
|
| 177 |
+
"indifferent": "😐",
|
| 178 |
+
"admiration": "🤩",
|
| 179 |
+
"despair": "����",
|
| 180 |
+
"greeting": "😊", # Changed from 👋 to face emoji
|
| 181 |
+
"heartbreak": "😭", # Changed from 💔 to face emoji,
|
| 182 |
+
|
| 183 |
+
# === LEGACY MAPPINGS ===
|
| 184 |
+
"very_negative": "😭",
|
| 185 |
+
"negative": "😠",
|
| 186 |
+
"slightly_negative": "😕",
|
| 187 |
+
"slightly_positive": "🙂",
|
| 188 |
+
"positive": "😊",
|
| 189 |
+
"very_positive": "🤩",
|
| 190 |
+
|
| 191 |
+
# Default
|
| 192 |
+
"default": "😐",
|
| 193 |
+
"ready": "😐",
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
+
def __init__(self, custom_emojis: Optional[Dict[str, str]] = None):
|
| 197 |
+
"""Initialize with default or custom emoji mappings"""
|
| 198 |
+
self.emojis = self.EMOTION_EMOJIS.copy()
|
| 199 |
+
if custom_emojis:
|
| 200 |
+
self.emojis.update(custom_emojis)
|
| 201 |
+
|
| 202 |
+
def get_emoji(self, emotion: str) -> str:
|
| 203 |
+
"""
|
| 204 |
+
Get emoji for a given emotion
|
| 205 |
+
|
| 206 |
+
Args:
|
| 207 |
+
emotion: Emotion label (e.g., 'joy', 'anger', 'curiosity')
|
| 208 |
+
|
| 209 |
+
Returns:
|
| 210 |
+
Face emoji string
|
| 211 |
+
"""
|
| 212 |
+
emotion_clean = emotion.lower().strip().replace(" ", "_").replace("-", "_")
|
| 213 |
+
return self.emojis.get(emotion_clean, self.emojis.get("default", "😐"))
|
| 214 |
+
|
| 215 |
+
def get_all_emojis(self) -> Dict[str, str]:
|
| 216 |
+
"""Get all emotion→emoji mappings"""
|
| 217 |
+
return self.emojis.copy()
|
| 218 |
+
|
| 219 |
+
|
| 220 |
+
if __name__ == "__main__":
|
| 221 |
+
mapper = EmojiMapper()
|
| 222 |
+
test_emotions = [
|
| 223 |
+
"joy", "happiness", "love", "sadness", "anger",
|
| 224 |
+
"fear", "surprise", "disgust", "curiosity", "neutral"
|
| 225 |
+
]
|
| 226 |
+
|
| 227 |
+
print("Emotion → Emoji Mappings:")
|
| 228 |
+
for emotion in test_emotions:
|
| 229 |
+
emoji = mapper.get_emoji(emotion)
|
| 230 |
+
print(f" {emotion:20} → {emoji}")
|
| 231 |
+
|
| 232 |
+
print(f"\nTotal emotions: {len(mapper.get_all_emojis())}")
|
avatar/sentiment_keyword_map.py
ADDED
|
@@ -0,0 +1,335 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Sentiment Keyword Mapping - Direct keyword to emotion mapping
|
| 3 |
+
|
| 4 |
+
This module maintains the word→emotion mappings
|
| 5 |
+
It's the data layer for sentiment analysis
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
from typing import Dict, Set, Optional
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
class KeywordMap:
|
| 12 |
+
"""Maps emotion keywords to standardized emotion labels"""
|
| 13 |
+
|
| 14 |
+
EMOTION_KEYWORDS: Dict[str, str] = {
|
| 15 |
+
# JOY / HAPPINESS
|
| 16 |
+
"happy": "happiness",
|
| 17 |
+
"happiness": "happiness",
|
| 18 |
+
"joyful": "joy",
|
| 19 |
+
"joy": "joy",
|
| 20 |
+
"glad": "happiness",
|
| 21 |
+
"pleased": "happiness",
|
| 22 |
+
"delighted": "delight",
|
| 23 |
+
"cheerful": "cheerfulness",
|
| 24 |
+
"merry": "joy",
|
| 25 |
+
"jolly": "joy",
|
| 26 |
+
"elated": "elation",
|
| 27 |
+
"ecstatic": "ecstasy",
|
| 28 |
+
"euphoric": "euphoria",
|
| 29 |
+
"thrilled": "thrill",
|
| 30 |
+
"overjoyed": "joy",
|
| 31 |
+
"blissful": "contentment",
|
| 32 |
+
|
| 33 |
+
# EXCITEMENT / ENTHUSIASM
|
| 34 |
+
"excited": "excitement",
|
| 35 |
+
"exciting": "excitement",
|
| 36 |
+
"enthusiastic": "enthusiasm",
|
| 37 |
+
"eager": "enthusiasm",
|
| 38 |
+
"pumped": "excitement",
|
| 39 |
+
"hyped": "excitement",
|
| 40 |
+
"stoked": "excitement",
|
| 41 |
+
"psyched": "excitement",
|
| 42 |
+
|
| 43 |
+
# LOVE / AFFECTION
|
| 44 |
+
"love": "love",
|
| 45 |
+
"loving": "love",
|
| 46 |
+
"adore": "adoration",
|
| 47 |
+
"cherish": "love",
|
| 48 |
+
"affection": "affection",
|
| 49 |
+
"fond": "affection",
|
| 50 |
+
"caring": "caring",
|
| 51 |
+
"tender": "tenderness",
|
| 52 |
+
"warm": "affection",
|
| 53 |
+
"devoted": "love",
|
| 54 |
+
|
| 55 |
+
# GRATITUDE
|
| 56 |
+
"grateful": "gratitude",
|
| 57 |
+
"thankful": "gratitude",
|
| 58 |
+
"thanks": "gratitude",
|
| 59 |
+
"thank": "gratitude",
|
| 60 |
+
"appreciate": "gratitude",
|
| 61 |
+
"blessed": "gratitude",
|
| 62 |
+
|
| 63 |
+
# CONTENTMENT / SATISFACTION
|
| 64 |
+
"good": "happiness",
|
| 65 |
+
"great": "happiness",
|
| 66 |
+
"excellent": "happiness",
|
| 67 |
+
"awesome": "happiness",
|
| 68 |
+
"ok": "contentment",
|
| 69 |
+
"okay": "contentment",
|
| 70 |
+
"fine": "contentment",
|
| 71 |
+
"well": "contentment",
|
| 72 |
+
"content": "contentment",
|
| 73 |
+
"satisfied": "satisfaction",
|
| 74 |
+
"peaceful": "serenity",
|
| 75 |
+
"serene": "serenity",
|
| 76 |
+
"calm": "calm",
|
| 77 |
+
"relaxed": "relaxed",
|
| 78 |
+
"comfortable": "contentment",
|
| 79 |
+
"cozy": "contentment",
|
| 80 |
+
"pleasant": "pleasure",
|
| 81 |
+
|
| 82 |
+
# INTEREST / CURIOSITY
|
| 83 |
+
"curious": "curiosity",
|
| 84 |
+
"interested": "interest",
|
| 85 |
+
"intrigued": "intrigue",
|
| 86 |
+
"fascinated": "fascination",
|
| 87 |
+
"captivated": "fascination",
|
| 88 |
+
"wondering": "curiosity",
|
| 89 |
+
"wonder": "wonder",
|
| 90 |
+
|
| 91 |
+
# SURPRISE / AWE
|
| 92 |
+
"surprised": "surprise",
|
| 93 |
+
"surprising": "surprise",
|
| 94 |
+
"amazed": "amazement",
|
| 95 |
+
"amazing": "amazement",
|
| 96 |
+
"astonished": "astonishment",
|
| 97 |
+
"shocked": "shock",
|
| 98 |
+
"stunned": "shock",
|
| 99 |
+
"wow": "amazement",
|
| 100 |
+
"incredible": "amazement",
|
| 101 |
+
"unbelievable": "astonishment",
|
| 102 |
+
"awesome": "awe",
|
| 103 |
+
"awe": "awe",
|
| 104 |
+
|
| 105 |
+
# SADNESS
|
| 106 |
+
"sad": "sadness",
|
| 107 |
+
"unhappy": "sadness",
|
| 108 |
+
"depressed": "despair",
|
| 109 |
+
"miserable": "misery",
|
| 110 |
+
"sorrowful": "sorrow",
|
| 111 |
+
"grief": "grief",
|
| 112 |
+
"grieving": "grief",
|
| 113 |
+
"heartbroken": "grief",
|
| 114 |
+
"devastated": "despair",
|
| 115 |
+
"gloomy": "melancholy",
|
| 116 |
+
"melancholy": "melancholy",
|
| 117 |
+
"down": "sadness",
|
| 118 |
+
"tearful": "sadness",
|
| 119 |
+
"crying": "sorrow",
|
| 120 |
+
|
| 121 |
+
# LONELINESS
|
| 122 |
+
"lonely": "loneliness",
|
| 123 |
+
"alone": "loneliness",
|
| 124 |
+
"isolated": "loneliness",
|
| 125 |
+
"abandoned": "loneliness",
|
| 126 |
+
"forsaken": "loneliness",
|
| 127 |
+
|
| 128 |
+
# DISAPPOINTMENT
|
| 129 |
+
"disappointed": "disappointment",
|
| 130 |
+
"letdown": "disappointment",
|
| 131 |
+
"dismayed": "disappointment",
|
| 132 |
+
"disheartened": "disappointment",
|
| 133 |
+
|
| 134 |
+
# FEAR / ANXIETY
|
| 135 |
+
"afraid": "fear",
|
| 136 |
+
"scared": "fear",
|
| 137 |
+
"frightened": "fear",
|
| 138 |
+
"terrified": "terror",
|
| 139 |
+
"horrified": "horror",
|
| 140 |
+
"fearful": "fear",
|
| 141 |
+
"anxious": "anxiety",
|
| 142 |
+
"nervous": "nervousness",
|
| 143 |
+
"worried": "worry",
|
| 144 |
+
"worrying": "worry",
|
| 145 |
+
"uneasy": "anxiety",
|
| 146 |
+
"tense": "nervousness",
|
| 147 |
+
"stressed": "anxiety",
|
| 148 |
+
"panicked": "panic",
|
| 149 |
+
"panicking": "panic",
|
| 150 |
+
"dread": "dread",
|
| 151 |
+
"dreading": "dread",
|
| 152 |
+
"apprehensive": "apprehension",
|
| 153 |
+
|
| 154 |
+
# ANGER
|
| 155 |
+
"angry": "anger",
|
| 156 |
+
"mad": "anger",
|
| 157 |
+
"furious": "fury",
|
| 158 |
+
"enraged": "rage",
|
| 159 |
+
"outraged": "rage",
|
| 160 |
+
"livid": "fury",
|
| 161 |
+
"irate": "anger",
|
| 162 |
+
"irritated": "irritation",
|
| 163 |
+
"annoyed": "annoyance",
|
| 164 |
+
"frustrated": "frustration",
|
| 165 |
+
"frustrating": "frustration",
|
| 166 |
+
"aggravated": "irritation",
|
| 167 |
+
"infuriated": "fury",
|
| 168 |
+
"pissed": "anger",
|
| 169 |
+
"resentful": "resentment",
|
| 170 |
+
"bitter": "bitterness",
|
| 171 |
+
"hostile": "hostility",
|
| 172 |
+
"hate": "anger",
|
| 173 |
+
"hating": "anger",
|
| 174 |
+
"terrible": "anger",
|
| 175 |
+
"horrible": "disgust",
|
| 176 |
+
"awful": "disgust",
|
| 177 |
+
|
| 178 |
+
# DISGUST
|
| 179 |
+
"disgusted": "disgust",
|
| 180 |
+
"disgusting": "disgust",
|
| 181 |
+
"gross": "disgust",
|
| 182 |
+
"revolting": "revulsion",
|
| 183 |
+
"repulsed": "revulsion",
|
| 184 |
+
"sickened": "disgust",
|
| 185 |
+
"nauseated": "disgust",
|
| 186 |
+
"appalled": "disgust",
|
| 187 |
+
|
| 188 |
+
# CONTEMPT
|
| 189 |
+
"contempt": "contempt",
|
| 190 |
+
"disdain": "disdain",
|
| 191 |
+
"scorn": "scorn",
|
| 192 |
+
"dismissive": "contempt",
|
| 193 |
+
"condescending": "contempt",
|
| 194 |
+
|
| 195 |
+
# SHAME / EMBARRASSMENT
|
| 196 |
+
"ashamed": "shame",
|
| 197 |
+
"shameful": "shame",
|
| 198 |
+
"embarrassed": "embarrassment",
|
| 199 |
+
"embarrassing": "embarrassment",
|
| 200 |
+
"humiliated": "humiliation",
|
| 201 |
+
"mortified": "humiliation",
|
| 202 |
+
"guilty": "guilt",
|
| 203 |
+
"regret": "regret",
|
| 204 |
+
"remorseful": "remorse",
|
| 205 |
+
"sorry": "regret",
|
| 206 |
+
|
| 207 |
+
# CONFUSION
|
| 208 |
+
"confused": "confused",
|
| 209 |
+
"confusing": "confused",
|
| 210 |
+
"puzzled": "puzzled",
|
| 211 |
+
"perplexed": "perplexed",
|
| 212 |
+
"bewildered": "bewildered",
|
| 213 |
+
"baffled": "baffled",
|
| 214 |
+
"lost": "confused",
|
| 215 |
+
"uncertain": "uncertain",
|
| 216 |
+
|
| 217 |
+
# BOREDOM
|
| 218 |
+
"bored": "boredom",
|
| 219 |
+
"boring": "boredom",
|
| 220 |
+
"dull": "boredom",
|
| 221 |
+
"uninterested": "boredom",
|
| 222 |
+
"tedious": "boredom",
|
| 223 |
+
|
| 224 |
+
# TIREDNESS
|
| 225 |
+
"tired": "tiredness",
|
| 226 |
+
"exhausted": "exhaustion",
|
| 227 |
+
"weary": "weariness",
|
| 228 |
+
"fatigued": "fatigue",
|
| 229 |
+
"sleepy": "sleepy",
|
| 230 |
+
"drowsy": "sleepy",
|
| 231 |
+
"drained": "exhaustion",
|
| 232 |
+
|
| 233 |
+
# ENVY / JEALOUSY
|
| 234 |
+
"jealous": "jealousy",
|
| 235 |
+
"envious": "envy",
|
| 236 |
+
"covetous": "envy",
|
| 237 |
+
|
| 238 |
+
# NOSTALGIA
|
| 239 |
+
"nostalgic": "nostalgia",
|
| 240 |
+
"reminiscing": "nostalgia",
|
| 241 |
+
"miss": "longing",
|
| 242 |
+
"missing": "longing",
|
| 243 |
+
"longing": "longing",
|
| 244 |
+
"yearning": "yearning",
|
| 245 |
+
|
| 246 |
+
# PLAYFUL / AMUSEMENT
|
| 247 |
+
"playful": "playful",
|
| 248 |
+
"silly": "silly",
|
| 249 |
+
"goofy": "silly",
|
| 250 |
+
"mischievous": "mischievous",
|
| 251 |
+
"teasing": "teasing",
|
| 252 |
+
"joking": "playful",
|
| 253 |
+
"funny": "amusement",
|
| 254 |
+
"hilarious": "amusement",
|
| 255 |
+
"lol": "amusement",
|
| 256 |
+
"haha": "amusement",
|
| 257 |
+
"hehe": "amusement",
|
| 258 |
+
"lmao": "amusement",
|
| 259 |
+
"rofl": "amusement",
|
| 260 |
+
|
| 261 |
+
# EMPATHY / SYMPATHY
|
| 262 |
+
"sympathetic": "sympathy",
|
| 263 |
+
"empathetic": "empathy",
|
| 264 |
+
"compassionate": "compassion",
|
| 265 |
+
"understanding": "empathy",
|
| 266 |
+
"supportive": "caring",
|
| 267 |
+
}
|
| 268 |
+
|
| 269 |
+
# Intensifiers that strengthen emotion
|
| 270 |
+
INTENSIFIERS: Set[str] = {
|
| 271 |
+
"very", "really", "extremely", "so", "incredibly", "absolutely",
|
| 272 |
+
"totally", "completely", "utterly", "deeply", "truly", "highly",
|
| 273 |
+
"super", "mega", "ultra", "insanely", "ridiculously"
|
| 274 |
+
}
|
| 275 |
+
|
| 276 |
+
# Negations that flip emotion
|
| 277 |
+
NEGATIONS: Set[str] = {
|
| 278 |
+
"not", "no", "never", "dont", "doesnt", "didnt", "wont",
|
| 279 |
+
"cant", "cannot", "couldnt", "wouldnt", "shouldnt", "isnt",
|
| 280 |
+
"arent", "wasnt", "werent", "hardly", "barely", "neither"
|
| 281 |
+
}
|
| 282 |
+
|
| 283 |
+
# Emotion opposites for negation handling
|
| 284 |
+
EMOTION_OPPOSITES: Dict[str, str] = {
|
| 285 |
+
"happiness": "sadness",
|
| 286 |
+
"joy": "sadness",
|
| 287 |
+
"love": "neutral",
|
| 288 |
+
"hope": "despair",
|
| 289 |
+
"excitement": "boredom",
|
| 290 |
+
"calm": "anxiety",
|
| 291 |
+
"confidence": "fear",
|
| 292 |
+
"satisfaction": "disappointment",
|
| 293 |
+
"sadness": "happiness",
|
| 294 |
+
"anger": "calm",
|
| 295 |
+
"fear": "confidence",
|
| 296 |
+
"boredom": "excitement",
|
| 297 |
+
"despair": "hope",
|
| 298 |
+
"anxiety": "calm",
|
| 299 |
+
}
|
| 300 |
+
|
| 301 |
+
def __init__(self, custom_keywords: Optional[Dict[str, str]] = None):
|
| 302 |
+
"""Initialize with default or custom keywords"""
|
| 303 |
+
self.keywords = self.EMOTION_KEYWORDS.copy()
|
| 304 |
+
if custom_keywords:
|
| 305 |
+
self.keywords.update(custom_keywords)
|
| 306 |
+
|
| 307 |
+
def get_emotion_for_word(self, word: str) -> Optional[str]:
|
| 308 |
+
"""Get emotion for a single word"""
|
| 309 |
+
word_clean = word.lower().strip()
|
| 310 |
+
return self.keywords.get(word_clean)
|
| 311 |
+
|
| 312 |
+
def is_intensifier(self, word: str) -> bool:
|
| 313 |
+
"""Check if word is an intensifier"""
|
| 314 |
+
return word.lower() in self.INTENSIFIERS
|
| 315 |
+
|
| 316 |
+
def is_negation(self, word: str) -> bool:
|
| 317 |
+
"""Check if word is a negation"""
|
| 318 |
+
return word.lower() in self.NEGATIONS
|
| 319 |
+
|
| 320 |
+
def get_opposite_emotion(self, emotion: str) -> str:
|
| 321 |
+
"""Get opposite emotion (for negation handling)"""
|
| 322 |
+
return self.EMOTION_OPPOSITES.get(emotion, "neutral")
|
| 323 |
+
|
| 324 |
+
def get_all_emotions(self) -> Dict[str, str]:
|
| 325 |
+
"""Get all emotion keywords"""
|
| 326 |
+
return self.keywords.copy()
|
| 327 |
+
|
| 328 |
+
|
| 329 |
+
if __name__ == "__main__":
|
| 330 |
+
kmap = KeywordMap()
|
| 331 |
+
print(f"Loaded {len(kmap.keywords)} keywords")
|
| 332 |
+
print(f"Sample: 'happy' -> {kmap.get_emotion_for_word('happy')}")
|
| 333 |
+
print(f"Sample: 'sad' -> {kmap.get_emotion_for_word('sad')}")
|
| 334 |
+
print(f"Is 'very' intensifier? {kmap.is_intensifier('very')}")
|
| 335 |
+
print(f"Is 'not' negation? {kmap.is_negation('not')}")
|
avatar/sentiment_multi_emotion.py
ADDED
|
@@ -0,0 +1,503 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Sentiment Multi-Emotion Analyzer - Advanced emotion detection using multi-class models
|
| 4 |
+
|
| 5 |
+
Uses RoBERTa-based emotion classifier for 7+ emotion detection:
|
| 6 |
+
- anger, disgust, fear, joy, neutral, sadness, surprise
|
| 7 |
+
|
| 8 |
+
This provides granular emotion detection instead of just positive/negative
|
| 9 |
+
"""
|
| 10 |
+
|
| 11 |
+
import torch
|
| 12 |
+
from transformers import pipeline, AutoModelForSequenceClassification, AutoTokenizer
|
| 13 |
+
from typing import Dict, Any, List, Optional
|
| 14 |
+
import warnings
|
| 15 |
+
import re
|
| 16 |
+
|
| 17 |
+
warnings.filterwarnings("ignore", category=UserWarning)
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
class MultiEmotionAnalyzer:
|
| 21 |
+
"""
|
| 22 |
+
Multi-class emotion analyzer using DistilRoBERTa
|
| 23 |
+
|
| 24 |
+
Detects 7 core emotions: anger, disgust, fear, joy, neutral, sadness, surprise
|
| 25 |
+
Maps to extended emotion vocabulary for nuanced emoji display
|
| 26 |
+
"""
|
| 27 |
+
|
| 28 |
+
# Core emotion to polarity mapping
|
| 29 |
+
EMOTION_TO_POLARITY = {
|
| 30 |
+
"joy": "positive",
|
| 31 |
+
"surprise": "positive", # Generally positive context
|
| 32 |
+
"neutral": "neutral",
|
| 33 |
+
"sadness": "negative",
|
| 34 |
+
"anger": "negative",
|
| 35 |
+
"fear": "negative",
|
| 36 |
+
"disgust": "negative",
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
# Extended emotion mapping from core emotions + context
|
| 40 |
+
EXTENDED_EMOTION_MAP = {
|
| 41 |
+
# Joy variations based on intensity/context
|
| 42 |
+
"joy": {
|
| 43 |
+
"high_confidence": "ecstasy",
|
| 44 |
+
"medium_confidence": "joy",
|
| 45 |
+
"low_confidence": "contentment",
|
| 46 |
+
},
|
| 47 |
+
# Sadness variations
|
| 48 |
+
"sadness": {
|
| 49 |
+
"high_confidence": "grief",
|
| 50 |
+
"medium_confidence": "sadness",
|
| 51 |
+
"low_confidence": "melancholy",
|
| 52 |
+
},
|
| 53 |
+
# Anger variations
|
| 54 |
+
"anger": {
|
| 55 |
+
"high_confidence": "rage",
|
| 56 |
+
"medium_confidence": "anger",
|
| 57 |
+
"low_confidence": "irritation",
|
| 58 |
+
},
|
| 59 |
+
# Fear variations
|
| 60 |
+
"fear": {
|
| 61 |
+
"high_confidence": "terror",
|
| 62 |
+
"medium_confidence": "fear",
|
| 63 |
+
"low_confidence": "anxiety",
|
| 64 |
+
},
|
| 65 |
+
# Disgust variations
|
| 66 |
+
"disgust": {
|
| 67 |
+
"high_confidence": "revulsion",
|
| 68 |
+
"medium_confidence": "disgust",
|
| 69 |
+
"low_confidence": "contempt",
|
| 70 |
+
},
|
| 71 |
+
# Surprise variations
|
| 72 |
+
"surprise": {
|
| 73 |
+
"high_confidence": "astonishment",
|
| 74 |
+
"medium_confidence": "surprise",
|
| 75 |
+
"low_confidence": "curiosity",
|
| 76 |
+
},
|
| 77 |
+
# Neutral variations
|
| 78 |
+
"neutral": {
|
| 79 |
+
"high_confidence": "neutral",
|
| 80 |
+
"medium_confidence": "neutral",
|
| 81 |
+
"low_confidence": "neutral",
|
| 82 |
+
},
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
# Context keywords for emotion refinement
|
| 86 |
+
# IMPORTANT: More specific patterns (heartbreak, hopeless) must come BEFORE
|
| 87 |
+
# general patterns (love, hope) to avoid false matches
|
| 88 |
+
CONTEXT_REFINEMENTS = {
|
| 89 |
+
# === OVERRIDE PATTERNS (check first) ===
|
| 90 |
+
|
| 91 |
+
# Heartbreak-related words (negative - despite "heart" being in love keywords)
|
| 92 |
+
"heartbreak_keywords": ["heartbroken", "heartbreak", "broke my heart", "heart is broken", "shattered heart"],
|
| 93 |
+
"heartbreak_emotion": "grief",
|
| 94 |
+
"heartbreak_polarity": "negative",
|
| 95 |
+
|
| 96 |
+
# Hopelessness-related words (negative - despite "hope" being positive)
|
| 97 |
+
"hopelessness_keywords": ["hopeless", "hopelessness", "no hope", "lost all hope", "without hope"],
|
| 98 |
+
"hopelessness_emotion": "despair",
|
| 99 |
+
"hopelessness_polarity": "negative",
|
| 100 |
+
|
| 101 |
+
# Sarcasm-related words (negative - often masking frustration)
|
| 102 |
+
"sarcasm_keywords": ["oh great,", "just what i needed", "yeah right", "oh wonderful,", "just perfect", "oh fantastic", "exactly what i wanted", "wow, fantastic", "that's exactly", "that is exactly", "oh wonderful"],
|
| 103 |
+
"sarcasm_emotion": "sarcasm",
|
| 104 |
+
"sarcasm_polarity": "negative",
|
| 105 |
+
|
| 106 |
+
# Indifferent/neutral-related words (neutral) - short responses
|
| 107 |
+
"indifferent_keywords": ["meh", "whatever", "don't care", "doesn't matter", "indifferent", "fine i guess", "i'm fine", "just fine", "i guess so", "sure whatever"],
|
| 108 |
+
"indifferent_emotion": "indifferent",
|
| 109 |
+
"indifferent_polarity": "neutral",
|
| 110 |
+
|
| 111 |
+
# === POSITIVE PATTERNS ===
|
| 112 |
+
|
| 113 |
+
# Love-related words (but NOT heartbroken)
|
| 114 |
+
"love_keywords": ["love", "adore", "beloved", "darling", "sweetheart"],
|
| 115 |
+
"love_emotion": "love",
|
| 116 |
+
"love_polarity": "positive",
|
| 117 |
+
|
| 118 |
+
# Best/compliments (positive)
|
| 119 |
+
"compliment_keywords": ["you're the best", "you are the best", "best ever", "you're amazing", "you are amazing"],
|
| 120 |
+
"compliment_emotion": "admiration",
|
| 121 |
+
"compliment_polarity": "positive",
|
| 122 |
+
|
| 123 |
+
# Gratitude-related words
|
| 124 |
+
"gratitude_keywords": ["thank", "grateful", "appreciate", "thankful", "gratitude"],
|
| 125 |
+
"gratitude_emotion": "gratitude",
|
| 126 |
+
"gratitude_polarity": "positive",
|
| 127 |
+
|
| 128 |
+
# Excitement-related words
|
| 129 |
+
"excitement_keywords": ["excited", "exciting", "thrilled", "can't wait", "pumped"],
|
| 130 |
+
"excitement_emotion": "excitement",
|
| 131 |
+
"excitement_polarity": "positive",
|
| 132 |
+
|
| 133 |
+
# Hope-related words
|
| 134 |
+
"hope_keywords": ["hope", "hopeful", "optimistic", "looking forward"],
|
| 135 |
+
"hope_emotion": "hope",
|
| 136 |
+
"hope_polarity": "positive",
|
| 137 |
+
|
| 138 |
+
# Nostalgia-related words (positive - fond memories)
|
| 139 |
+
"nostalgia_keywords": ["nostalgic", "nostalgia", "remember when", "miss the old", "good old days"],
|
| 140 |
+
"nostalgia_emotion": "nostalgia",
|
| 141 |
+
"nostalgia_polarity": "positive",
|
| 142 |
+
|
| 143 |
+
# Confusion-related words (negative - distressing)
|
| 144 |
+
"confusion_keywords": ["confused", "confusing", "puzzled", "don't understand", "baffled", "perplexed", "bewildered"],
|
| 145 |
+
"confusion_emotion": "confused",
|
| 146 |
+
"confusion_polarity": "negative",
|
| 147 |
+
|
| 148 |
+
# Longing-related words (negative - painful desire)
|
| 149 |
+
"longing_keywords": ["longing", "yearning", "yearn", "i miss you", "miss you so much", "miss him", "miss her"],
|
| 150 |
+
"longing_emotion": "longing",
|
| 151 |
+
"longing_polarity": "negative",
|
| 152 |
+
|
| 153 |
+
# Playful-related words
|
| 154 |
+
"playful_keywords": ["lol", "haha", "hehe", "😂", "🤣", "playful", "silly", "joking", "kidding"],
|
| 155 |
+
"playful_emotion": "playful",
|
| 156 |
+
"playful_polarity": "positive",
|
| 157 |
+
|
| 158 |
+
# Pride-related words
|
| 159 |
+
"pride_keywords": ["proud", "pride", "accomplished", "achieved"],
|
| 160 |
+
"pride_emotion": "pride",
|
| 161 |
+
"pride_polarity": "positive",
|
| 162 |
+
|
| 163 |
+
# Embarrassment-related words
|
| 164 |
+
"embarrassment_keywords": ["embarrassed", "embarrassing", "awkward", "cringe"],
|
| 165 |
+
"embarrassment_emotion": "embarrassment",
|
| 166 |
+
"embarrassment_polarity": "negative",
|
| 167 |
+
|
| 168 |
+
# Sympathy-related words (positive - showing care)
|
| 169 |
+
"sympathy_keywords": ["sorry for", "sympathize", "sympathy", "feel for you", "my condolences", "so sorry to hear"],
|
| 170 |
+
"sympathy_emotion": "sympathy",
|
| 171 |
+
"sympathy_polarity": "positive",
|
| 172 |
+
|
| 173 |
+
# Empathy-related words (positive - showing understanding)
|
| 174 |
+
"empathy_keywords": ["empathize", "empathy", "empathetic", "understand how you feel", "feel what you're feeling", "i understand", "i know how you feel"],
|
| 175 |
+
"empathy_emotion": "empathy",
|
| 176 |
+
"empathy_polarity": "positive",
|
| 177 |
+
|
| 178 |
+
# Compassion-related words (positive - showing care)
|
| 179 |
+
"compassion_keywords": ["compassion", "compassionate", "feel compassion", "care about", "caring"],
|
| 180 |
+
"compassion_emotion": "compassion",
|
| 181 |
+
"compassion_polarity": "positive",
|
| 182 |
+
|
| 183 |
+
# Awe/Wonder-related words (positive - not fear)
|
| 184 |
+
"awe_keywords": ["awe", "in awe", "awe-inspiring", "awesome", "awestruck", "wonder", "wondrous", "marvelous"],
|
| 185 |
+
"awe_emotion": "awe",
|
| 186 |
+
"awe_polarity": "positive",
|
| 187 |
+
|
| 188 |
+
# Fascination/Interest-related words (positive)
|
| 189 |
+
"fascination_keywords": ["fascinated", "fascinating", "intrigued", "intriguing", "captivated", "captivating", "curious"],
|
| 190 |
+
"fascination_emotion": "fascination",
|
| 191 |
+
"fascination_polarity": "positive",
|
| 192 |
+
|
| 193 |
+
# Calm/Peace-related words (positive)
|
| 194 |
+
"calm_keywords": ["calm", "peaceful", "serene", "tranquil", "relaxed", "at peace", "zen"],
|
| 195 |
+
"calm_emotion": "calm",
|
| 196 |
+
"calm_polarity": "positive",
|
| 197 |
+
|
| 198 |
+
# Tenderness-related words (positive)
|
| 199 |
+
"tenderness_keywords": ["tender", "tenderness", "gently", "softly", "warmth"],
|
| 200 |
+
"tenderness_emotion": "tenderness",
|
| 201 |
+
"tenderness_polarity": "positive",
|
| 202 |
+
|
| 203 |
+
# Affection-related words (positive)
|
| 204 |
+
"affection_keywords": ["affection", "affectionate", "fond", "fondness", "warmly"],
|
| 205 |
+
"affection_emotion": "affection",
|
| 206 |
+
"affection_polarity": "positive",
|
| 207 |
+
|
| 208 |
+
# Shock-related words (negative - distressing)
|
| 209 |
+
"shock_keywords": ["shock", "shocked", "in shock", "shocking"],
|
| 210 |
+
"shock_emotion": "shock",
|
| 211 |
+
"shock_polarity": "negative",
|
| 212 |
+
|
| 213 |
+
# Thinking-related words (neutral)
|
| 214 |
+
"thinking_keywords": ["thinking", "think about", "contemplating", "pondering", "considering", "let me think"],
|
| 215 |
+
"thinking_emotion": "thinking",
|
| 216 |
+
"thinking_polarity": "neutral",
|
| 217 |
+
|
| 218 |
+
# Silly-related words (positive - fun)
|
| 219 |
+
"silly_keywords": ["silly", "goofy", "dorky", "being silly", "acting silly"],
|
| 220 |
+
"silly_emotion": "silly",
|
| 221 |
+
"silly_polarity": "positive",
|
| 222 |
+
|
| 223 |
+
# Determination-related words (positive)
|
| 224 |
+
"determination_keywords": ["determined", "determination", "won't give up", "never give up", "nothing will stop"],
|
| 225 |
+
"determination_emotion": "determination",
|
| 226 |
+
"determination_polarity": "positive",
|
| 227 |
+
|
| 228 |
+
# Anticipation-related words (positive)
|
| 229 |
+
"anticipation_keywords": ["anticipating", "anticipation", "looking forward", "eagerly awaiting"],
|
| 230 |
+
"anticipation_emotion": "anticipation",
|
| 231 |
+
"anticipation_polarity": "positive",
|
| 232 |
+
|
| 233 |
+
# Trust-related words (positive)
|
| 234 |
+
"trust_keywords": ["trust", "believe in you", "have faith", "rely on you", "count on you"],
|
| 235 |
+
"trust_emotion": "trust",
|
| 236 |
+
"trust_polarity": "positive",
|
| 237 |
+
}
|
| 238 |
+
|
| 239 |
+
def __init__(self, model_name: str = "j-hartmann/emotion-english-distilroberta-base"):
|
| 240 |
+
"""
|
| 241 |
+
Initialize multi-emotion classifier
|
| 242 |
+
|
| 243 |
+
Args:
|
| 244 |
+
model_name: HuggingFace model for 7-class emotion detection
|
| 245 |
+
Default: j-hartmann/emotion-english-distilroberta-base
|
| 246 |
+
Outputs: anger, disgust, fear, joy, neutral, sadness, surprise
|
| 247 |
+
"""
|
| 248 |
+
self.model_name = model_name
|
| 249 |
+
self.device = "cuda" if torch.cuda.is_available() else "cpu"
|
| 250 |
+
|
| 251 |
+
print(f"📊 Loading multi-emotion model: {model_name}")
|
| 252 |
+
print(f" Device: {self.device}")
|
| 253 |
+
|
| 254 |
+
try:
|
| 255 |
+
# Initialize the pipeline with top_k to get all emotion scores
|
| 256 |
+
self.pipeline = pipeline(
|
| 257 |
+
"text-classification",
|
| 258 |
+
model=model_name,
|
| 259 |
+
device=0 if self.device == "cuda" else -1,
|
| 260 |
+
top_k=None, # Return all emotion scores
|
| 261 |
+
)
|
| 262 |
+
self.model_loaded = True
|
| 263 |
+
print(f"✓ Multi-emotion model loaded (7 emotions)")
|
| 264 |
+
except Exception as e:
|
| 265 |
+
print(f"⚠️ Failed to load multi-emotion model: {e}")
|
| 266 |
+
print(f" Falling back to binary sentiment model")
|
| 267 |
+
self.model_loaded = False
|
| 268 |
+
# Fallback to binary model
|
| 269 |
+
self.pipeline = pipeline(
|
| 270 |
+
"sentiment-analysis",
|
| 271 |
+
model="distilbert-base-uncased-finetuned-sst-2-english",
|
| 272 |
+
device=0 if self.device == "cuda" else -1,
|
| 273 |
+
)
|
| 274 |
+
|
| 275 |
+
def _get_last_sentence(self, text: str) -> str:
|
| 276 |
+
"""Extract last sentence for real-time accuracy"""
|
| 277 |
+
parts = re.split(r'[.!?;:\n]+', text)
|
| 278 |
+
parts = [p.strip() for p in parts if p.strip()]
|
| 279 |
+
return parts[-1] if parts else text.strip()
|
| 280 |
+
|
| 281 |
+
def _check_context_keywords(self, text: str) -> Optional[tuple]:
|
| 282 |
+
"""
|
| 283 |
+
Check for context keywords that indicate specific emotions
|
| 284 |
+
|
| 285 |
+
Returns:
|
| 286 |
+
Tuple of (emotion, polarity) if context match found, None otherwise
|
| 287 |
+
"""
|
| 288 |
+
text_lower = text.lower().strip()
|
| 289 |
+
text_clean = text_lower.rstrip('?!.,')
|
| 290 |
+
|
| 291 |
+
# Special handling for very short responses (exact match)
|
| 292 |
+
SHORT_NEUTRAL_WORDS = {"fine", "ok", "okay", "sure", "alright", "k", "kk",
|
| 293 |
+
"yep", "yup", "nope", "nah", "yes", "no", "maybe",
|
| 294 |
+
"i guess", "i suppose", "perhaps"}
|
| 295 |
+
if text_clean in SHORT_NEUTRAL_WORDS:
|
| 296 |
+
return ("neutral", "neutral")
|
| 297 |
+
|
| 298 |
+
# Check each context category
|
| 299 |
+
for key, value in self.CONTEXT_REFINEMENTS.items():
|
| 300 |
+
if key.endswith("_keywords"):
|
| 301 |
+
base_key = key.replace("_keywords", "")
|
| 302 |
+
emotion_key = f"{base_key}_emotion"
|
| 303 |
+
polarity_key = f"{base_key}_polarity"
|
| 304 |
+
|
| 305 |
+
keywords = value
|
| 306 |
+
emotion = self.CONTEXT_REFINEMENTS.get(emotion_key)
|
| 307 |
+
polarity = self.CONTEXT_REFINEMENTS.get(polarity_key)
|
| 308 |
+
|
| 309 |
+
if emotion and any(kw in text_lower for kw in keywords):
|
| 310 |
+
return (emotion, polarity)
|
| 311 |
+
|
| 312 |
+
return None
|
| 313 |
+
|
| 314 |
+
def _get_intensity_level(self, score: float) -> str:
|
| 315 |
+
"""Map confidence score to intensity level"""
|
| 316 |
+
if score >= 0.7:
|
| 317 |
+
return "high_confidence"
|
| 318 |
+
elif score >= 0.4:
|
| 319 |
+
return "medium_confidence"
|
| 320 |
+
else:
|
| 321 |
+
return "low_confidence"
|
| 322 |
+
|
| 323 |
+
def _refine_emotion(self, base_emotion: str, score: float, text: str) -> tuple:
|
| 324 |
+
"""
|
| 325 |
+
Refine base emotion using context and intensity
|
| 326 |
+
|
| 327 |
+
Returns:
|
| 328 |
+
Tuple of (refined_emotion, polarity)
|
| 329 |
+
"""
|
| 330 |
+
# First check for context-specific emotions
|
| 331 |
+
context_result = self._check_context_keywords(text)
|
| 332 |
+
if context_result:
|
| 333 |
+
return context_result # Returns (emotion, polarity)
|
| 334 |
+
|
| 335 |
+
# Otherwise use intensity-based refinement
|
| 336 |
+
intensity = self._get_intensity_level(score)
|
| 337 |
+
emotion_variants = self.EXTENDED_EMOTION_MAP.get(base_emotion, {})
|
| 338 |
+
refined_emotion = emotion_variants.get(intensity, base_emotion)
|
| 339 |
+
|
| 340 |
+
# Use base emotion polarity
|
| 341 |
+
polarity = self.EMOTION_TO_POLARITY.get(base_emotion, "neutral")
|
| 342 |
+
|
| 343 |
+
return (refined_emotion, polarity)
|
| 344 |
+
|
| 345 |
+
def analyze(self, text: str) -> Dict[str, Any]:
|
| 346 |
+
"""
|
| 347 |
+
Analyze text and return detected emotion with details
|
| 348 |
+
|
| 349 |
+
Args:
|
| 350 |
+
text: Input text to analyze
|
| 351 |
+
|
| 352 |
+
Returns:
|
| 353 |
+
Dict with 'label' (emotion), 'score', 'polarity', and 'details'
|
| 354 |
+
"""
|
| 355 |
+
if not text or not text.strip():
|
| 356 |
+
return {
|
| 357 |
+
"label": "neutral",
|
| 358 |
+
"score": 0.0,
|
| 359 |
+
"polarity": "neutral",
|
| 360 |
+
"details": {"segment": "empty"}
|
| 361 |
+
}
|
| 362 |
+
|
| 363 |
+
# Use last sentence for real-time accuracy
|
| 364 |
+
last_sentence = self._get_last_sentence(text)
|
| 365 |
+
truncated = last_sentence[:512]
|
| 366 |
+
|
| 367 |
+
try:
|
| 368 |
+
if self.model_loaded:
|
| 369 |
+
# Multi-emotion model returns all scores
|
| 370 |
+
results = self.pipeline(truncated)
|
| 371 |
+
|
| 372 |
+
if isinstance(results, list) and len(results) > 0:
|
| 373 |
+
if isinstance(results[0], list):
|
| 374 |
+
results = results[0]
|
| 375 |
+
|
| 376 |
+
# Sort by score to get top emotion
|
| 377 |
+
sorted_results = sorted(results, key=lambda x: x['score'], reverse=True)
|
| 378 |
+
top_result = sorted_results[0]
|
| 379 |
+
|
| 380 |
+
base_emotion = top_result['label'].lower()
|
| 381 |
+
score = top_result['score']
|
| 382 |
+
|
| 383 |
+
# Refine emotion based on context - returns (emotion, polarity)
|
| 384 |
+
refined_emotion, polarity = self._refine_emotion(base_emotion, score, truncated)
|
| 385 |
+
|
| 386 |
+
# Get all emotion scores for details
|
| 387 |
+
all_scores = {r['label'].lower(): r['score'] for r in sorted_results}
|
| 388 |
+
|
| 389 |
+
return {
|
| 390 |
+
"label": refined_emotion,
|
| 391 |
+
"base_emotion": base_emotion,
|
| 392 |
+
"score": score,
|
| 393 |
+
"polarity": polarity,
|
| 394 |
+
"details": {
|
| 395 |
+
"segment": "last_sentence",
|
| 396 |
+
"text": truncated[:50],
|
| 397 |
+
"model": self.model_name,
|
| 398 |
+
"all_scores": all_scores,
|
| 399 |
+
}
|
| 400 |
+
}
|
| 401 |
+
else:
|
| 402 |
+
# Fallback binary model
|
| 403 |
+
result = self.pipeline(truncated, truncation=True)
|
| 404 |
+
if isinstance(result, list):
|
| 405 |
+
result = result[0]
|
| 406 |
+
|
| 407 |
+
raw_label = result.get("label", "NEUTRAL").upper()
|
| 408 |
+
score = result.get("score", 0.0)
|
| 409 |
+
|
| 410 |
+
if raw_label == "POSITIVE":
|
| 411 |
+
base_emotion = "joy"
|
| 412 |
+
polarity = "positive"
|
| 413 |
+
elif raw_label == "NEGATIVE":
|
| 414 |
+
base_emotion = "sadness"
|
| 415 |
+
polarity = "negative"
|
| 416 |
+
else:
|
| 417 |
+
base_emotion = "neutral"
|
| 418 |
+
polarity = "neutral"
|
| 419 |
+
|
| 420 |
+
# Refine emotion based on context - returns (emotion, polarity)
|
| 421 |
+
refined_emotion, ctx_polarity = self._refine_emotion(base_emotion, score, truncated)
|
| 422 |
+
# Use context polarity if it differs (more specific)
|
| 423 |
+
if ctx_polarity:
|
| 424 |
+
polarity = ctx_polarity
|
| 425 |
+
|
| 426 |
+
return {
|
| 427 |
+
"label": refined_emotion,
|
| 428 |
+
"base_emotion": base_emotion,
|
| 429 |
+
"score": score,
|
| 430 |
+
"polarity": polarity,
|
| 431 |
+
"details": {
|
| 432 |
+
"segment": "last_sentence",
|
| 433 |
+
"text": truncated[:50],
|
| 434 |
+
"model": "binary-fallback",
|
| 435 |
+
}
|
| 436 |
+
}
|
| 437 |
+
|
| 438 |
+
except Exception as e:
|
| 439 |
+
print(f"⚠️ Multi-emotion analyzer error: {e}")
|
| 440 |
+
return {
|
| 441 |
+
"label": "neutral",
|
| 442 |
+
"score": 0.0,
|
| 443 |
+
"polarity": "neutral",
|
| 444 |
+
"details": {"error": str(e)}
|
| 445 |
+
}
|
| 446 |
+
|
| 447 |
+
def get_all_emotions(self, text: str) -> Dict[str, float]:
|
| 448 |
+
"""Get scores for all detected emotions"""
|
| 449 |
+
result = self.analyze(text)
|
| 450 |
+
return result.get("details", {}).get("all_scores", {})
|
| 451 |
+
|
| 452 |
+
|
| 453 |
+
# Backward compatible SentimentAnalyzer alias
|
| 454 |
+
class SentimentAnalyzer(MultiEmotionAnalyzer):
|
| 455 |
+
"""Alias for backward compatibility with existing code"""
|
| 456 |
+
pass
|
| 457 |
+
|
| 458 |
+
|
| 459 |
+
if __name__ == "__main__":
|
| 460 |
+
print("=" * 70)
|
| 461 |
+
print("Testing Multi-Emotion Analyzer")
|
| 462 |
+
print("=" * 70)
|
| 463 |
+
|
| 464 |
+
analyzer = MultiEmotionAnalyzer()
|
| 465 |
+
|
| 466 |
+
test_cases = [
|
| 467 |
+
# Core emotions
|
| 468 |
+
"I am so happy today!",
|
| 469 |
+
"I feel terrible and sad",
|
| 470 |
+
"I'm really angry about this!",
|
| 471 |
+
"I'm scared of what might happen",
|
| 472 |
+
"That's disgusting!",
|
| 473 |
+
"Wow, I didn't expect that!",
|
| 474 |
+
"The weather is okay",
|
| 475 |
+
|
| 476 |
+
# Extended emotions
|
| 477 |
+
"I love you so much!",
|
| 478 |
+
"Thank you, I'm so grateful!",
|
| 479 |
+
"I can't wait for tomorrow!",
|
| 480 |
+
"I miss you",
|
| 481 |
+
"LOL that's hilarious",
|
| 482 |
+
"I'm so proud of myself",
|
| 483 |
+
"This is so embarrassing",
|
| 484 |
+
"I'm sorry for your loss",
|
| 485 |
+
|
| 486 |
+
# Edge cases
|
| 487 |
+
"I'm thinking about it",
|
| 488 |
+
"I feel silly today",
|
| 489 |
+
"I am good",
|
| 490 |
+
]
|
| 491 |
+
|
| 492 |
+
print("\nEmotion Predictions:")
|
| 493 |
+
print("-" * 70)
|
| 494 |
+
for text in test_cases:
|
| 495 |
+
result = analyzer.analyze(text)
|
| 496 |
+
emoji = "😊" if result["polarity"] == "positive" else \
|
| 497 |
+
"😢" if result["polarity"] == "negative" else "😐"
|
| 498 |
+
|
| 499 |
+
print(f"{emoji} '{text[:45]:45}' → {result['label']:15} ({result['base_emotion']}) [{result['score']:.2f}]")
|
| 500 |
+
|
| 501 |
+
print("\n" + "=" * 70)
|
| 502 |
+
print("✅ Multi-Emotion Analyzer ready!")
|
| 503 |
+
print("=" * 70)
|
avatar/sentiment_transformer.py
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Sentiment Transformer - Fast neural sentiment/emotion detection
|
| 3 |
+
|
| 4 |
+
Uses DistilBERT + emotion classification head for real-time emotion detection
|
| 5 |
+
No keywords required — pure transformer-based analysis
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import torch
|
| 9 |
+
from transformers import pipeline
|
| 10 |
+
from typing import Dict, Any
|
| 11 |
+
import warnings
|
| 12 |
+
|
| 13 |
+
warnings.filterwarnings("ignore", category=UserWarning)
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
class SentimentAnalyzer:
|
| 17 |
+
"""
|
| 18 |
+
Transformer-based sentiment analyzer using DistilBERT
|
| 19 |
+
|
| 20 |
+
Fast, accurate emotion detection without keyword hardcoding
|
| 21 |
+
Supports 6+ emotion classes: joy, sadness, anger, fear, surprise, neutral
|
| 22 |
+
"""
|
| 23 |
+
|
| 24 |
+
# Emotion label mappings from HF model outputs
|
| 25 |
+
EMOTION_LABEL_MAP = {
|
| 26 |
+
"POSITIVE": "happiness",
|
| 27 |
+
"NEGATIVE": "sadness",
|
| 28 |
+
"NEUTRAL": "neutral",
|
| 29 |
+
# Extended emotion labels if using multi-class model
|
| 30 |
+
"joy": "joy",
|
| 31 |
+
"sadness": "sadness",
|
| 32 |
+
"anger": "anger",
|
| 33 |
+
"fear": "fear",
|
| 34 |
+
"surprise": "surprise",
|
| 35 |
+
"disgust": "disgust",
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
# Greeting patterns that should be neutral (not sad/negative)
|
| 39 |
+
GREETING_PATTERNS = [
|
| 40 |
+
"how are you", "how're you", "how r u", "how r you",
|
| 41 |
+
"how is it going", "how's it going", "hows it going",
|
| 42 |
+
"what's up", "whats up", "wassup", "sup",
|
| 43 |
+
"how do you do", "how ya doing", "how you doing",
|
| 44 |
+
"what is up", "what is going on", "what's going on",
|
| 45 |
+
"how have you been", "how've you been",
|
| 46 |
+
"are you okay", "are you ok", "you okay", "you ok",
|
| 47 |
+
"how was your day", "how's your day",
|
| 48 |
+
"how do you feel", "how are things",
|
| 49 |
+
]
|
| 50 |
+
|
| 51 |
+
def __init__(self, model_name: str = "distilbert-base-uncased-finetuned-sst-2-english"):
|
| 52 |
+
"""
|
| 53 |
+
Initialize transformer-based sentiment classifier
|
| 54 |
+
|
| 55 |
+
Args:
|
| 56 |
+
model_name: HuggingFace model identifier
|
| 57 |
+
- distilbert-base-uncased-finetuned-sst-2-english (3-class: positive/negative/neutral)
|
| 58 |
+
- Use local cache to avoid repeated downloads
|
| 59 |
+
"""
|
| 60 |
+
self.model_name = model_name
|
| 61 |
+
self.device = "cuda" if torch.cuda.is_available() else "cpu"
|
| 62 |
+
|
| 63 |
+
print(f"📊 Loading sentiment model: {model_name}")
|
| 64 |
+
print(f" Device: {self.device}")
|
| 65 |
+
|
| 66 |
+
# Initialize the pipeline
|
| 67 |
+
self.pipeline = pipeline(
|
| 68 |
+
"sentiment-analysis",
|
| 69 |
+
model=model_name,
|
| 70 |
+
device=0 if self.device == "cuda" else -1,
|
| 71 |
+
)
|
| 72 |
+
|
| 73 |
+
print(f"✓ Model loaded and ready")
|
| 74 |
+
|
| 75 |
+
def _get_last_sentence(self, text: str) -> str:
|
| 76 |
+
"""Extract last sentence for real-time accuracy"""
|
| 77 |
+
import re
|
| 78 |
+
parts = re.split(r'[.!?;:\n]+', text)
|
| 79 |
+
parts = [p.strip() for p in parts if p.strip()]
|
| 80 |
+
return parts[-1] if parts else text.strip()
|
| 81 |
+
|
| 82 |
+
def _is_greeting_or_question(self, text: str) -> bool:
|
| 83 |
+
"""Check if text is a common greeting/question that should be neutral"""
|
| 84 |
+
text_lower = text.lower().strip()
|
| 85 |
+
# Remove punctuation for matching
|
| 86 |
+
text_clean = text_lower.rstrip('?!.')
|
| 87 |
+
|
| 88 |
+
for pattern in self.GREETING_PATTERNS:
|
| 89 |
+
if pattern in text_clean:
|
| 90 |
+
return True
|
| 91 |
+
return False
|
| 92 |
+
|
| 93 |
+
def analyze(self, text: str) -> Dict[str, Any]:
|
| 94 |
+
"""
|
| 95 |
+
Analyze text and return detected emotion
|
| 96 |
+
|
| 97 |
+
Focuses on LAST SENTENCE for real-time updates
|
| 98 |
+
|
| 99 |
+
Args:
|
| 100 |
+
text: Input text to analyze
|
| 101 |
+
|
| 102 |
+
Returns:
|
| 103 |
+
Dict with 'label' (emotion), 'score', and 'details'
|
| 104 |
+
"""
|
| 105 |
+
if not text or not text.strip():
|
| 106 |
+
return {
|
| 107 |
+
"label": "neutral",
|
| 108 |
+
"score": 0.0,
|
| 109 |
+
"details": {"segment": "empty"}
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
# Use last sentence for real-time accuracy
|
| 113 |
+
last_sentence = self._get_last_sentence(text)
|
| 114 |
+
|
| 115 |
+
# Check for greetings/common questions first - should be neutral
|
| 116 |
+
if self._is_greeting_or_question(last_sentence):
|
| 117 |
+
return {
|
| 118 |
+
"label": "neutral",
|
| 119 |
+
"score": 0.85,
|
| 120 |
+
"details": {
|
| 121 |
+
"segment": "greeting",
|
| 122 |
+
"text": last_sentence[:50],
|
| 123 |
+
"model": "greeting_override",
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
# Truncate to max 512 tokens (BERT limit) for efficiency
|
| 128 |
+
truncated = last_sentence[:512]
|
| 129 |
+
|
| 130 |
+
try:
|
| 131 |
+
# Get prediction from transformer
|
| 132 |
+
result = self.pipeline(truncated, truncation=True)
|
| 133 |
+
|
| 134 |
+
if isinstance(result, list):
|
| 135 |
+
result = result[0]
|
| 136 |
+
|
| 137 |
+
# Extract label and score
|
| 138 |
+
raw_label = result.get("label", "NEUTRAL").upper()
|
| 139 |
+
raw_score = result.get("score", 0.0)
|
| 140 |
+
|
| 141 |
+
# Map to emotion label
|
| 142 |
+
emotion_label = self.EMOTION_LABEL_MAP.get(raw_label, "neutral").lower()
|
| 143 |
+
|
| 144 |
+
return {
|
| 145 |
+
"label": emotion_label,
|
| 146 |
+
"score": min(raw_score, 1.0),
|
| 147 |
+
"details": {
|
| 148 |
+
"segment": "last_sentence",
|
| 149 |
+
"text": truncated[:50],
|
| 150 |
+
"model": self.model_name,
|
| 151 |
+
}
|
| 152 |
+
}
|
| 153 |
+
except Exception as e:
|
| 154 |
+
print(f"⚠️ Transformer error: {e}")
|
| 155 |
+
return {
|
| 156 |
+
"label": "neutral",
|
| 157 |
+
"score": 0.0,
|
| 158 |
+
"details": {"error": str(e)}
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
|
| 162 |
+
if __name__ == "__main__":
|
| 163 |
+
print("=" * 70)
|
| 164 |
+
print("Testing Sentiment Transformer Analyzer")
|
| 165 |
+
print("=" * 70)
|
| 166 |
+
|
| 167 |
+
analyzer = SentimentAnalyzer()
|
| 168 |
+
|
| 169 |
+
test_cases = [
|
| 170 |
+
"I am so happy today!",
|
| 171 |
+
"I am good",
|
| 172 |
+
"I'm okay",
|
| 173 |
+
"I love this!",
|
| 174 |
+
"This is exciting!",
|
| 175 |
+
"I am really sad",
|
| 176 |
+
"This makes me angry",
|
| 177 |
+
"I am scared",
|
| 178 |
+
"I am confused",
|
| 179 |
+
"I miss you",
|
| 180 |
+
"The weather is nice",
|
| 181 |
+
"This is terrible",
|
| 182 |
+
"I don't know what to think",
|
| 183 |
+
"Absolutely amazing experience!",
|
| 184 |
+
"Completely disappointed with this product",
|
| 185 |
+
]
|
| 186 |
+
|
| 187 |
+
print("\nSentiment Predictions:")
|
| 188 |
+
print("-" * 70)
|
| 189 |
+
for text in test_cases:
|
| 190 |
+
result = analyzer.analyze(text)
|
| 191 |
+
emoji = "😊" if "happiness" in result["label"] or result["label"] == "positive" else \
|
| 192 |
+
"😢" if "sadness" in result["label"] else \
|
| 193 |
+
"😠" if result["label"] == "anger" else \
|
| 194 |
+
"😨" if result["label"] == "fear" else \
|
| 195 |
+
"😐"
|
| 196 |
+
|
| 197 |
+
print(f"{emoji} '{text[:50]:50}' → {result['label']:15} ({result['score']:.2f})")
|
| 198 |
+
|
| 199 |
+
print("\n" + "=" * 70)
|
| 200 |
+
print("✅ Sentiment Transformer ready!")
|
| 201 |
+
print("=" * 70)
|
evaluation/__init__.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Evaluation Module - Emotion detection testing and benchmarking
|
| 4 |
+
|
| 5 |
+
Components:
|
| 6 |
+
- emotion_test_suite: Comprehensive emotion detection tests
|
| 7 |
+
- accuracy_benchmark: Speed and accuracy measurements
|
| 8 |
+
- live_stream_test: Real-time emotion transition testing
|
| 9 |
+
- report_generator: Evaluation report generation
|
| 10 |
+
"""
|
| 11 |
+
|
| 12 |
+
from .emotion_test_suite import EmotionTestSuite
|
| 13 |
+
from .accuracy_benchmark import AccuracyBenchmark
|
| 14 |
+
from .live_stream_test import LiveStreamTest
|
| 15 |
+
from .report_generator import ReportGenerator
|
| 16 |
+
|
| 17 |
+
__all__ = [
|
| 18 |
+
"EmotionTestSuite",
|
| 19 |
+
"AccuracyBenchmark",
|
| 20 |
+
"LiveStreamTest",
|
| 21 |
+
"ReportGenerator",
|
| 22 |
+
]
|
evaluation/accuracy_benchmark.py
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Accuracy Benchmark - Speed and accuracy measurement for sentiment analysis
|
| 4 |
+
|
| 5 |
+
Measures:
|
| 6 |
+
- Detection speed (ms per text)
|
| 7 |
+
- Accuracy per emotion
|
| 8 |
+
- Overall accuracy by polarity
|
| 9 |
+
- Confusion matrix
|
| 10 |
+
"""
|
| 11 |
+
|
| 12 |
+
import time
|
| 13 |
+
from typing import Dict, List, Any, Tuple
|
| 14 |
+
from dataclasses import dataclass, field
|
| 15 |
+
from collections import defaultdict
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
@dataclass
|
| 19 |
+
class EmotionResult:
|
| 20 |
+
"""Result for a single emotion test"""
|
| 21 |
+
emotion: str
|
| 22 |
+
text: str
|
| 23 |
+
expected_polarity: str
|
| 24 |
+
detected_label: str
|
| 25 |
+
detected_polarity: str
|
| 26 |
+
is_correct: bool
|
| 27 |
+
inference_time_ms: float
|
| 28 |
+
emoji: str
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
@dataclass
|
| 32 |
+
class BenchmarkResults:
|
| 33 |
+
"""Aggregated benchmark results"""
|
| 34 |
+
total_tests: int = 0
|
| 35 |
+
correct_tests: int = 0
|
| 36 |
+
accuracy: float = 0.0
|
| 37 |
+
avg_inference_time_ms: float = 0.0
|
| 38 |
+
min_inference_time_ms: float = 0.0
|
| 39 |
+
max_inference_time_ms: float = 0.0
|
| 40 |
+
median_inference_time_ms: float = 0.0
|
| 41 |
+
emotion_accuracy: Dict[str, float] = field(default_factory=dict)
|
| 42 |
+
emotion_results: Dict[str, List[EmotionResult]] = field(default_factory=dict)
|
| 43 |
+
failed_emotions: List[str] = field(default_factory=list)
|
| 44 |
+
confusion_matrix: Dict[str, Dict[str, int]] = field(default_factory=dict)
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
class AccuracyBenchmark:
|
| 48 |
+
"""
|
| 49 |
+
Benchmark sentiment analysis accuracy and speed
|
| 50 |
+
|
| 51 |
+
Tests all emotions and generates accuracy metrics
|
| 52 |
+
"""
|
| 53 |
+
|
| 54 |
+
# Map transformer output to polarity
|
| 55 |
+
LABEL_TO_POLARITY = {
|
| 56 |
+
"happiness": "positive",
|
| 57 |
+
"sadness": "negative",
|
| 58 |
+
"positive": "positive",
|
| 59 |
+
"negative": "negative",
|
| 60 |
+
"neutral": "neutral",
|
| 61 |
+
"joy": "positive",
|
| 62 |
+
"anger": "negative",
|
| 63 |
+
"fear": "negative",
|
| 64 |
+
"surprise": "positive",
|
| 65 |
+
"disgust": "negative",
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
def __init__(self, analyzer, emoji_mapper):
|
| 69 |
+
"""
|
| 70 |
+
Initialize benchmark with analyzer and mapper
|
| 71 |
+
|
| 72 |
+
Args:
|
| 73 |
+
analyzer: SentimentAnalyzer instance
|
| 74 |
+
emoji_mapper: EmojiMapper instance
|
| 75 |
+
"""
|
| 76 |
+
self.analyzer = analyzer
|
| 77 |
+
self.emoji_mapper = emoji_mapper
|
| 78 |
+
|
| 79 |
+
def _get_polarity(self, label: str) -> str:
|
| 80 |
+
"""Map emotion label to polarity (positive/negative/neutral)"""
|
| 81 |
+
return self.LABEL_TO_POLARITY.get(label.lower(), "neutral")
|
| 82 |
+
|
| 83 |
+
def run_single_test(self, text: str, expected_polarity: str, emotion: str) -> EmotionResult:
|
| 84 |
+
"""Run a single test and return result"""
|
| 85 |
+
# Time the inference
|
| 86 |
+
start_time = time.perf_counter()
|
| 87 |
+
result = self.analyzer.analyze(text)
|
| 88 |
+
end_time = time.perf_counter()
|
| 89 |
+
|
| 90 |
+
inference_time_ms = (end_time - start_time) * 1000
|
| 91 |
+
|
| 92 |
+
detected_label = result.get("label", "neutral")
|
| 93 |
+
|
| 94 |
+
# Use polarity from result if available, otherwise infer from label
|
| 95 |
+
if "polarity" in result:
|
| 96 |
+
detected_polarity = result["polarity"]
|
| 97 |
+
else:
|
| 98 |
+
detected_polarity = self._get_polarity(detected_label)
|
| 99 |
+
|
| 100 |
+
# Get emoji
|
| 101 |
+
emoji = self.emoji_mapper.get_emoji(detected_label)
|
| 102 |
+
|
| 103 |
+
# Check correctness (polarity match)
|
| 104 |
+
is_correct = detected_polarity == expected_polarity
|
| 105 |
+
|
| 106 |
+
return EmotionResult(
|
| 107 |
+
emotion=emotion,
|
| 108 |
+
text=text,
|
| 109 |
+
expected_polarity=expected_polarity,
|
| 110 |
+
detected_label=detected_label,
|
| 111 |
+
detected_polarity=detected_polarity,
|
| 112 |
+
is_correct=is_correct,
|
| 113 |
+
inference_time_ms=inference_time_ms,
|
| 114 |
+
emoji=emoji
|
| 115 |
+
)
|
| 116 |
+
|
| 117 |
+
def run_benchmark(self, test_data: Dict[str, List[Tuple[str, str]]]) -> BenchmarkResults:
|
| 118 |
+
"""
|
| 119 |
+
Run full benchmark on test data
|
| 120 |
+
|
| 121 |
+
Args:
|
| 122 |
+
test_data: Dict mapping emotion -> [(text, expected_polarity), ...]
|
| 123 |
+
|
| 124 |
+
Returns:
|
| 125 |
+
BenchmarkResults with all metrics
|
| 126 |
+
"""
|
| 127 |
+
results = BenchmarkResults()
|
| 128 |
+
results.emotion_results = defaultdict(list)
|
| 129 |
+
results.confusion_matrix = defaultdict(lambda: defaultdict(int))
|
| 130 |
+
|
| 131 |
+
all_times = []
|
| 132 |
+
|
| 133 |
+
for emotion, test_cases in test_data.items():
|
| 134 |
+
emotion_correct = 0
|
| 135 |
+
emotion_total = 0
|
| 136 |
+
|
| 137 |
+
for text, expected_polarity in test_cases:
|
| 138 |
+
result = self.run_single_test(text, expected_polarity, emotion)
|
| 139 |
+
results.emotion_results[emotion].append(result)
|
| 140 |
+
|
| 141 |
+
results.total_tests += 1
|
| 142 |
+
emotion_total += 1
|
| 143 |
+
all_times.append(result.inference_time_ms)
|
| 144 |
+
|
| 145 |
+
# Update confusion matrix
|
| 146 |
+
results.confusion_matrix[expected_polarity][result.detected_polarity] += 1
|
| 147 |
+
|
| 148 |
+
if result.is_correct:
|
| 149 |
+
results.correct_tests += 1
|
| 150 |
+
emotion_correct += 1
|
| 151 |
+
|
| 152 |
+
# Calculate per-emotion accuracy
|
| 153 |
+
if emotion_total > 0:
|
| 154 |
+
emotion_acc = emotion_correct / emotion_total
|
| 155 |
+
results.emotion_accuracy[emotion] = emotion_acc
|
| 156 |
+
|
| 157 |
+
if emotion_acc < 0.5: # Less than 50% accuracy
|
| 158 |
+
results.failed_emotions.append(emotion)
|
| 159 |
+
|
| 160 |
+
# Calculate overall metrics
|
| 161 |
+
if results.total_tests > 0:
|
| 162 |
+
results.accuracy = results.correct_tests / results.total_tests
|
| 163 |
+
|
| 164 |
+
if all_times:
|
| 165 |
+
all_times_sorted = sorted(all_times)
|
| 166 |
+
results.avg_inference_time_ms = sum(all_times) / len(all_times)
|
| 167 |
+
results.min_inference_time_ms = min(all_times)
|
| 168 |
+
results.max_inference_time_ms = max(all_times)
|
| 169 |
+
mid = len(all_times_sorted) // 2
|
| 170 |
+
if len(all_times_sorted) % 2 == 0:
|
| 171 |
+
results.median_inference_time_ms = (all_times_sorted[mid - 1] + all_times_sorted[mid]) / 2
|
| 172 |
+
else:
|
| 173 |
+
results.median_inference_time_ms = all_times_sorted[mid]
|
| 174 |
+
|
| 175 |
+
return results
|
| 176 |
+
|
| 177 |
+
def get_accuracy_report(self, results: BenchmarkResults) -> str:
|
| 178 |
+
"""Generate human-readable accuracy report"""
|
| 179 |
+
lines = [
|
| 180 |
+
"=" * 70,
|
| 181 |
+
"SENTIMENT ANALYSIS ACCURACY BENCHMARK",
|
| 182 |
+
"=" * 70,
|
| 183 |
+
"",
|
| 184 |
+
f"Total Tests: {results.total_tests}",
|
| 185 |
+
f"Correct: {results.correct_tests}",
|
| 186 |
+
f"Overall Accuracy: {results.accuracy:.1%}",
|
| 187 |
+
f"Avg Inference Time: {results.avg_inference_time_ms:.2f} ms",
|
| 188 |
+
"",
|
| 189 |
+
"-" * 70,
|
| 190 |
+
"ACCURACY BY EMOTION (sorted by accuracy)",
|
| 191 |
+
"-" * 70,
|
| 192 |
+
]
|
| 193 |
+
|
| 194 |
+
# Sort emotions by accuracy
|
| 195 |
+
sorted_emotions = sorted(
|
| 196 |
+
results.emotion_accuracy.items(),
|
| 197 |
+
key=lambda x: x[1],
|
| 198 |
+
reverse=True
|
| 199 |
+
)
|
| 200 |
+
|
| 201 |
+
for emotion, acc in sorted_emotions:
|
| 202 |
+
status = "✓" if acc >= 0.5 else "✗"
|
| 203 |
+
lines.append(f"{status} {emotion:25} {acc:6.1%}")
|
| 204 |
+
|
| 205 |
+
lines.extend([
|
| 206 |
+
"",
|
| 207 |
+
"-" * 70,
|
| 208 |
+
"CONFUSION MATRIX (expected → detected)",
|
| 209 |
+
"-" * 70,
|
| 210 |
+
])
|
| 211 |
+
|
| 212 |
+
# Print confusion matrix
|
| 213 |
+
polarities = ["positive", "negative", "neutral"]
|
| 214 |
+
header = " " + " ".join(f"{p:>10}" for p in polarities)
|
| 215 |
+
lines.append(header)
|
| 216 |
+
|
| 217 |
+
for expected in polarities:
|
| 218 |
+
row = f"{expected:>8} "
|
| 219 |
+
for detected in polarities:
|
| 220 |
+
count = results.confusion_matrix[expected][detected]
|
| 221 |
+
row += f"{count:>10} "
|
| 222 |
+
lines.append(row)
|
| 223 |
+
|
| 224 |
+
if results.failed_emotions:
|
| 225 |
+
lines.extend([
|
| 226 |
+
"",
|
| 227 |
+
"-" * 70,
|
| 228 |
+
f"FAILED EMOTIONS (< 50% accuracy): {len(results.failed_emotions)}",
|
| 229 |
+
"-" * 70,
|
| 230 |
+
])
|
| 231 |
+
for em in results.failed_emotions:
|
| 232 |
+
lines.append(f" ✗ {em}")
|
| 233 |
+
|
| 234 |
+
lines.append("=" * 70)
|
| 235 |
+
|
| 236 |
+
return "\n".join(lines)
|
| 237 |
+
|
| 238 |
+
|
| 239 |
+
if __name__ == "__main__":
|
| 240 |
+
# Quick test
|
| 241 |
+
from avatar import SentimentAnalyzer, EmojiMapper
|
| 242 |
+
|
| 243 |
+
analyzer = SentimentAnalyzer()
|
| 244 |
+
mapper = EmojiMapper()
|
| 245 |
+
benchmark = AccuracyBenchmark(analyzer, mapper)
|
| 246 |
+
|
| 247 |
+
# Mini test
|
| 248 |
+
test_data = {
|
| 249 |
+
"happiness": [
|
| 250 |
+
("I am happy", "positive"),
|
| 251 |
+
("I am good", "positive"),
|
| 252 |
+
],
|
| 253 |
+
"sadness": [
|
| 254 |
+
("I am sad", "negative"),
|
| 255 |
+
("I feel terrible", "negative"),
|
| 256 |
+
],
|
| 257 |
+
}
|
| 258 |
+
|
| 259 |
+
results = benchmark.run_benchmark(test_data)
|
| 260 |
+
print(benchmark.get_accuracy_report(results))
|
evaluation/comprehensive_emotion_test.py
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Comprehensive Emotion Test - Test recognition across many text strings
|
| 4 |
+
|
| 5 |
+
Tests:
|
| 6 |
+
1. Greetings (should be neutral)
|
| 7 |
+
2. Questions (should be neutral/curious)
|
| 8 |
+
3. Positive emotions
|
| 9 |
+
4. Negative emotions
|
| 10 |
+
5. Complex/mixed emotions
|
| 11 |
+
6. Edge cases
|
| 12 |
+
|
| 13 |
+
Ensures the system interprets text correctly.
|
| 14 |
+
"""
|
| 15 |
+
|
| 16 |
+
import sys
|
| 17 |
+
import os
|
| 18 |
+
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
| 19 |
+
|
| 20 |
+
from avatar.sentiment_transformer import SentimentAnalyzer as BinaryAnalyzer
|
| 21 |
+
from avatar.sentiment_multi_emotion import MultiEmotionAnalyzer
|
| 22 |
+
from avatar.sentiment_emoji_map import EmojiMapper
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
def run_comprehensive_test():
|
| 26 |
+
"""Run comprehensive emotion recognition test"""
|
| 27 |
+
|
| 28 |
+
print("=" * 80)
|
| 29 |
+
print("COMPREHENSIVE EMOTION RECOGNITION TEST")
|
| 30 |
+
print("=" * 80)
|
| 31 |
+
print()
|
| 32 |
+
|
| 33 |
+
# Load analyzers
|
| 34 |
+
print("Loading analyzers...")
|
| 35 |
+
binary = BinaryAnalyzer()
|
| 36 |
+
multi = MultiEmotionAnalyzer()
|
| 37 |
+
mapper = EmojiMapper()
|
| 38 |
+
|
| 39 |
+
# Test cases organized by category
|
| 40 |
+
test_cases = {
|
| 41 |
+
"GREETINGS (should be neutral/positive)": [
|
| 42 |
+
("How are you?", "neutral"),
|
| 43 |
+
("Hello! How are you?", "neutral"),
|
| 44 |
+
("Hey, how are you?", "neutral"),
|
| 45 |
+
("Hi there!", "neutral"),
|
| 46 |
+
("What's up?", "neutral"),
|
| 47 |
+
("Good morning!", "neutral"),
|
| 48 |
+
("Good evening!", "neutral"),
|
| 49 |
+
("How is it going?", "neutral"),
|
| 50 |
+
("How have you been?", "neutral"),
|
| 51 |
+
("Are you okay?", "neutral"),
|
| 52 |
+
("Yo!", "neutral"),
|
| 53 |
+
("Hey!", "neutral"),
|
| 54 |
+
("Greetings!", "neutral"),
|
| 55 |
+
],
|
| 56 |
+
|
| 57 |
+
"QUESTIONS (should be neutral/curious)": [
|
| 58 |
+
("What time is it?", "neutral"),
|
| 59 |
+
("Where is the store?", "neutral"),
|
| 60 |
+
("Can you help me?", "neutral"),
|
| 61 |
+
("Do you know the answer?", "neutral"),
|
| 62 |
+
("What do you think?", "neutral"),
|
| 63 |
+
("Is this correct?", "neutral"),
|
| 64 |
+
("Why did that happen?", "neutral"),
|
| 65 |
+
("How does this work?", "neutral"),
|
| 66 |
+
("What is the meaning of life?", "neutral"),
|
| 67 |
+
("Who is that?", "neutral"),
|
| 68 |
+
],
|
| 69 |
+
|
| 70 |
+
"POSITIVE EMOTIONS": [
|
| 71 |
+
("I am so happy today!", "positive"),
|
| 72 |
+
("I love this!", "positive"),
|
| 73 |
+
("This is amazing!", "positive"),
|
| 74 |
+
("Thank you so much!", "positive"),
|
| 75 |
+
("I'm grateful for everything", "positive"),
|
| 76 |
+
("This makes me so excited!", "positive"),
|
| 77 |
+
("I feel wonderful!", "positive"),
|
| 78 |
+
("You're the best!", "positive"),
|
| 79 |
+
("I'm thrilled about this!", "positive"),
|
| 80 |
+
("What a beautiful day!", "positive"),
|
| 81 |
+
("I can't wait!", "positive"),
|
| 82 |
+
("This is fantastic!", "positive"),
|
| 83 |
+
("I'm so proud of you!", "positive"),
|
| 84 |
+
("Best day ever!", "positive"),
|
| 85 |
+
("I'm feeling great!", "positive"),
|
| 86 |
+
],
|
| 87 |
+
|
| 88 |
+
"NEGATIVE EMOTIONS": [
|
| 89 |
+
("I am so sad", "negative"),
|
| 90 |
+
("This is terrible", "negative"),
|
| 91 |
+
("I'm really angry", "negative"),
|
| 92 |
+
("This makes me furious", "negative"),
|
| 93 |
+
("I hate this", "negative"),
|
| 94 |
+
("I'm scared", "negative"),
|
| 95 |
+
("This is awful", "negative"),
|
| 96 |
+
("I feel miserable", "negative"),
|
| 97 |
+
("I'm disappointed", "negative"),
|
| 98 |
+
("This is frustrating", "negative"),
|
| 99 |
+
("I can't stand this", "negative"),
|
| 100 |
+
("I'm heartbroken", "negative"),
|
| 101 |
+
("Everything is wrong", "negative"),
|
| 102 |
+
("I feel hopeless", "negative"),
|
| 103 |
+
("This is disgusting", "negative"),
|
| 104 |
+
],
|
| 105 |
+
|
| 106 |
+
"NEUTRAL STATEMENTS": [
|
| 107 |
+
("The weather is okay", "neutral"),
|
| 108 |
+
("It's Monday", "neutral"),
|
| 109 |
+
("The meeting is at 3pm", "neutral"),
|
| 110 |
+
("I need to go shopping", "neutral"),
|
| 111 |
+
("The car is blue", "neutral"),
|
| 112 |
+
("I'm going to work", "neutral"),
|
| 113 |
+
("It's raining outside", "neutral"),
|
| 114 |
+
("The document is ready", "neutral"),
|
| 115 |
+
("I'll call you later", "neutral"),
|
| 116 |
+
("The report is on my desk", "neutral"),
|
| 117 |
+
],
|
| 118 |
+
|
| 119 |
+
"EDGE CASES": [
|
| 120 |
+
("I'm not happy", "negative"),
|
| 121 |
+
("I don't feel bad", "positive"),
|
| 122 |
+
("This isn't terrible", "neutral"),
|
| 123 |
+
("Meh", "neutral"),
|
| 124 |
+
("Whatever", "neutral"),
|
| 125 |
+
("Fine", "neutral"),
|
| 126 |
+
("Ok", "neutral"),
|
| 127 |
+
("Sure", "neutral"),
|
| 128 |
+
("I guess", "neutral"),
|
| 129 |
+
("Maybe", "neutral"),
|
| 130 |
+
],
|
| 131 |
+
|
| 132 |
+
"SARCASM (tricky)": [
|
| 133 |
+
("Oh great, just what I needed", "negative"),
|
| 134 |
+
("Yeah, that's exactly what I wanted", "negative"),
|
| 135 |
+
("Oh wonderful", "negative"),
|
| 136 |
+
("How fantastic", "negative"),
|
| 137 |
+
("Just perfect", "negative"),
|
| 138 |
+
],
|
| 139 |
+
|
| 140 |
+
"MIXED EMOTIONS (should detect last sentiment)": [
|
| 141 |
+
("I was sad, but now I'm happy!", "positive"),
|
| 142 |
+
("Started great, ended terribly", "negative"),
|
| 143 |
+
("Good news and bad news", "neutral"),
|
| 144 |
+
("I love this! Wait, no I hate it", "negative"),
|
| 145 |
+
("Happy at first, now confused", "neutral"),
|
| 146 |
+
],
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
# Run tests
|
| 150 |
+
results = {"pass": 0, "fail": 0, "total": 0}
|
| 151 |
+
failed_tests = []
|
| 152 |
+
|
| 153 |
+
for category, tests in test_cases.items():
|
| 154 |
+
print(f"\n{'='*80}")
|
| 155 |
+
print(f"📋 {category}")
|
| 156 |
+
print(f"{'='*80}")
|
| 157 |
+
|
| 158 |
+
for text, expected_polarity in tests:
|
| 159 |
+
results["total"] += 1
|
| 160 |
+
|
| 161 |
+
# Test binary analyzer
|
| 162 |
+
binary_result = binary.analyze(text)
|
| 163 |
+
binary_label = binary_result["label"]
|
| 164 |
+
|
| 165 |
+
# Test multi-emotion analyzer
|
| 166 |
+
multi_result = multi.analyze(text)
|
| 167 |
+
multi_label = multi_result["label"]
|
| 168 |
+
multi_polarity = multi_result["polarity"]
|
| 169 |
+
|
| 170 |
+
# Get emoji
|
| 171 |
+
emoji = mapper.get_emoji(multi_label)
|
| 172 |
+
|
| 173 |
+
# Determine pass/fail based on polarity expectation
|
| 174 |
+
if expected_polarity == "neutral":
|
| 175 |
+
# Neutral can also be positive for greetings
|
| 176 |
+
passed = multi_polarity in ["neutral", "positive"]
|
| 177 |
+
elif expected_polarity == "positive":
|
| 178 |
+
passed = multi_polarity == "positive"
|
| 179 |
+
elif expected_polarity == "negative":
|
| 180 |
+
passed = multi_polarity == "negative"
|
| 181 |
+
else:
|
| 182 |
+
passed = True
|
| 183 |
+
|
| 184 |
+
status = "✅" if passed else "❌"
|
| 185 |
+
|
| 186 |
+
if passed:
|
| 187 |
+
results["pass"] += 1
|
| 188 |
+
else:
|
| 189 |
+
results["fail"] += 1
|
| 190 |
+
failed_tests.append((text, expected_polarity, multi_label, multi_polarity))
|
| 191 |
+
|
| 192 |
+
print(f"{status} '{text[:40]:40}' -> {multi_label:15} ({multi_polarity:8}) {emoji}")
|
| 193 |
+
|
| 194 |
+
# Summary
|
| 195 |
+
print("\n" + "=" * 80)
|
| 196 |
+
print("📊 SUMMARY")
|
| 197 |
+
print("=" * 80)
|
| 198 |
+
print(f"Total tests: {results['total']}")
|
| 199 |
+
print(f"Passed: {results['pass']} ({results['pass']/results['total']*100:.1f}%)")
|
| 200 |
+
print(f"Failed: {results['fail']} ({results['fail']/results['total']*100:.1f}%)")
|
| 201 |
+
|
| 202 |
+
if failed_tests:
|
| 203 |
+
print("\n❌ FAILED TESTS:")
|
| 204 |
+
print("-" * 80)
|
| 205 |
+
for text, expected, detected, polarity in failed_tests:
|
| 206 |
+
print(f" '{text[:50]}' - expected {expected}, got {detected} ({polarity})")
|
| 207 |
+
|
| 208 |
+
return results
|
| 209 |
+
|
| 210 |
+
|
| 211 |
+
if __name__ == "__main__":
|
| 212 |
+
run_comprehensive_test()
|
evaluation/debug_failures.py
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Quick debug script to analyze failing emotions
|
| 2 |
+
import sys
|
| 3 |
+
sys.path.insert(0, '.')
|
| 4 |
+
|
| 5 |
+
from avatar.sentiment_multi_emotion import MultiEmotionAnalyzer
|
| 6 |
+
|
| 7 |
+
a = MultiEmotionAnalyzer()
|
| 8 |
+
|
| 9 |
+
tests = [
|
| 10 |
+
('I feel so calm and peaceful', 'calm', 'positive'),
|
| 11 |
+
('I feel such affection for you', 'affection', 'positive'),
|
| 12 |
+
('Such tender feelings', 'tenderness', 'positive'),
|
| 13 |
+
('I feel compassion for them', 'compassion', 'positive'),
|
| 14 |
+
('I empathize with you', 'empathy', 'positive'),
|
| 15 |
+
('What a fascinating discovery!', 'fascination', 'positive'),
|
| 16 |
+
('I stand in awe of this', 'awe', 'positive'),
|
| 17 |
+
('This is intriguing', 'intrigue', 'positive'),
|
| 18 |
+
('I am in shock!', 'shock', 'neutral'),
|
| 19 |
+
('I am confused about this', 'confused', 'neutral'),
|
| 20 |
+
('I am puzzled by this', 'puzzled', 'neutral'),
|
| 21 |
+
]
|
| 22 |
+
|
| 23 |
+
print("=" * 70)
|
| 24 |
+
print("FAILING EMOTION ANALYSIS")
|
| 25 |
+
print("=" * 70)
|
| 26 |
+
print()
|
| 27 |
+
|
| 28 |
+
for text, emotion, expected in tests:
|
| 29 |
+
r = a.analyze(text)
|
| 30 |
+
status = "✓" if r['polarity'] == expected else "✗"
|
| 31 |
+
print(f"{status} {emotion:15} | expected: {expected:8} | got: {r['polarity']:8} | base: {r['base_emotion']:8} | label: {r['label']}")
|
evaluation/debug_sarcasm.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Test sarcasm detection
|
| 2 |
+
import sys
|
| 3 |
+
sys.path.insert(0, '.')
|
| 4 |
+
|
| 5 |
+
from avatar.sentiment_multi_emotion import MultiEmotionAnalyzer
|
| 6 |
+
|
| 7 |
+
a = MultiEmotionAnalyzer()
|
| 8 |
+
|
| 9 |
+
tests = [
|
| 10 |
+
'Oh great, just what I needed',
|
| 11 |
+
'Yeah, that is exactly what I wanted',
|
| 12 |
+
'Oh wonderful',
|
| 13 |
+
'Wow, fantastic',
|
| 14 |
+
'Just perfect',
|
| 15 |
+
]
|
| 16 |
+
|
| 17 |
+
print("\nSarcasm Test Cases:")
|
| 18 |
+
print("-" * 60)
|
| 19 |
+
for t in tests:
|
| 20 |
+
r = a.analyze(t)
|
| 21 |
+
print(f"'{t}'")
|
| 22 |
+
print(f" polarity={r['polarity']} label={r['label']} base={r['base_emotion']}")
|
evaluation/emotion_statistics.py
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Emotion Statistics - Complete overview of all emotions managed by the system
|
| 4 |
+
|
| 5 |
+
Shows:
|
| 6 |
+
- Total emotion count
|
| 7 |
+
- Emoji mapping
|
| 8 |
+
- Recognition accuracy from latest evaluation
|
| 9 |
+
"""
|
| 10 |
+
|
| 11 |
+
import sys
|
| 12 |
+
import os
|
| 13 |
+
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
| 14 |
+
|
| 15 |
+
from avatar.sentiment_emoji_map import EmojiMapper
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
def get_emotion_stats():
|
| 19 |
+
"""Generate complete emotion statistics table"""
|
| 20 |
+
|
| 21 |
+
mapper = EmojiMapper()
|
| 22 |
+
all_emojis = mapper.get_all_emojis()
|
| 23 |
+
|
| 24 |
+
# Remove legacy/system mappings for counting
|
| 25 |
+
legacy_keys = ["very_negative", "negative", "slightly_negative",
|
| 26 |
+
"slightly_positive", "positive", "very_positive",
|
| 27 |
+
"default", "ready"]
|
| 28 |
+
|
| 29 |
+
emotion_emojis = {k: v for k, v in all_emojis.items() if k not in legacy_keys}
|
| 30 |
+
|
| 31 |
+
# Recognition accuracy from latest evaluation (Multi-Emotion V2)
|
| 32 |
+
# Data from evaluation/reports/comparison_multi-v2_2025-12-01_18-46-46.md
|
| 33 |
+
recognition_accuracy = {
|
| 34 |
+
# 100% accuracy
|
| 35 |
+
"excitement": 100.0, "thrill": 100.0, "delight": 100.0, "cheerfulness": 100.0,
|
| 36 |
+
"enthusiasm": 100.0, "calm": 100.0, "pleasure": 100.0, "love": 100.0,
|
| 37 |
+
"affection": 100.0, "tenderness": 100.0, "caring": 100.0, "compassion": 100.0,
|
| 38 |
+
"empathy": 100.0, "gratitude": 100.0, "wonder": 100.0, "awe": 100.0,
|
| 39 |
+
"amazement": 100.0, "surprise": 100.0, "thinking": 100.0, "sadness": 100.0,
|
| 40 |
+
"grief": 100.0, "disappointment": 100.0, "loneliness": 100.0, "hurt": 100.0,
|
| 41 |
+
"fear": 100.0, "terror": 100.0, "horror": 100.0, "dread": 100.0,
|
| 42 |
+
"anxiety": 100.0, "worry": 100.0, "nervousness": 100.0, "panic": 100.0,
|
| 43 |
+
"anger": 100.0, "fury": 100.0, "irritation": 100.0, "hostility": 100.0,
|
| 44 |
+
"disgust": 100.0, "contempt": 100.0, "disdain": 100.0, "shame": 100.0,
|
| 45 |
+
"embarrassment": 100.0, "guilt": 100.0, "regret": 100.0, "remorse": 100.0,
|
| 46 |
+
"tiredness": 100.0, "jealousy": 100.0, "sympathy": 100.0, "nostalgia": 100.0,
|
| 47 |
+
"pessimism": 100.0, "yearning": 100.0, "determination": 100.0,
|
| 48 |
+
"anticipation": 100.0, "trust": 100.0,
|
| 49 |
+
# 90%+
|
| 50 |
+
"happiness": 90.0, "silly": 87.5, "joy": 85.7, "pride": 85.7,
|
| 51 |
+
"uncertain": 85.7, "confused": 85.7, "playful": 85.7, "hope": 85.7,
|
| 52 |
+
# 80%+
|
| 53 |
+
"satisfaction": 83.3, "relaxed": 83.3, "relief": 83.3, "interest": 83.3,
|
| 54 |
+
"shock": 83.3, "annoyance": 83.3, "frustration": 83.3, "boredom": 83.3,
|
| 55 |
+
"optimism": 83.3, "elation": 80.0, "euphoria": 80.0, "serenity": 80.0,
|
| 56 |
+
"adoration": 80.0, "fascination": 80.0, "intrigue": 80.0, "astonishment": 80.0,
|
| 57 |
+
"puzzled": 80.0, "perplexed": 80.0, "bewildered": 80.0, "baffled": 80.0,
|
| 58 |
+
"sorrow": 80.0, "melancholy": 80.0, "despair": 80.0, "misery": 80.0,
|
| 59 |
+
"apprehension": 80.0, "rage": 80.0, "resentment": 80.0, "bitterness": 80.0,
|
| 60 |
+
"revulsion": 80.0, "scorn": 80.0, "humiliation": 80.0, "exhaustion": 80.0,
|
| 61 |
+
"fatigue": 80.0, "weariness": 80.0, "inspiration": 80.0, "sarcasm": 80.0,
|
| 62 |
+
# 70%+
|
| 63 |
+
"neutral": 76.9, "amusement": 72.7, "ecstasy": 71.4, "longing": 71.4,
|
| 64 |
+
# 60%+
|
| 65 |
+
"envy": 66.7, "mischievous": 66.7, "acceptance": 60.0,
|
| 66 |
+
# 50%+
|
| 67 |
+
"contentment": 57.1, "curiosity": 57.1, "confidence": 50.0,
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
# Categories
|
| 71 |
+
categories = {
|
| 72 |
+
"POSITIVE (High Arousal)": ["ecstasy", "joy", "happiness", "delight", "elation",
|
| 73 |
+
"euphoria", "excitement", "thrill", "enthusiasm", "cheerfulness"],
|
| 74 |
+
"POSITIVE (Medium Arousal)": ["contentment", "satisfaction", "pleasure", "relief",
|
| 75 |
+
"serenity", "calm", "relaxed", "pride", "confidence", "triumph"],
|
| 76 |
+
"LOVE & AFFECTION": ["love", "adoration", "affection", "tenderness", "caring",
|
| 77 |
+
"compassion", "empathy", "gratitude", "thankful"],
|
| 78 |
+
"INTEREST & CURIOSITY": ["curiosity", "interest", "fascination", "wonder", "awe",
|
| 79 |
+
"amazement", "intrigue"],
|
| 80 |
+
"SURPRISE": ["surprise", "astonishment", "shock", "startled"],
|
| 81 |
+
"NEUTRAL / THINKING": ["neutral", "thinking", "contemplative", "pensive", "reflective",
|
| 82 |
+
"uncertain", "ambivalent", "indifferent"],
|
| 83 |
+
"CONFUSION": ["confused", "confusion", "puzzled", "perplexed", "bewildered", "baffled"],
|
| 84 |
+
"SADNESS": ["sadness", "sorrow", "grief", "melancholy", "disappointment", "dejection",
|
| 85 |
+
"despair", "hopelessness", "loneliness", "hurt", "misery"],
|
| 86 |
+
"FEAR & ANXIETY": ["fear", "terror", "horror", "dread", "anxiety", "worry",
|
| 87 |
+
"nervousness", "apprehension", "panic"],
|
| 88 |
+
"ANGER & FRUSTRATION": ["anger", "rage", "fury", "irritation", "annoyance", "frustration",
|
| 89 |
+
"exasperation", "resentment", "hostility", "bitterness"],
|
| 90 |
+
"DISGUST & CONTEMPT": ["disgust", "revulsion", "contempt", "disdain", "loathing", "scorn"],
|
| 91 |
+
"SHAME & EMBARRASSMENT": ["shame", "embarrassment", "guilt", "regret", "remorse", "humiliation"],
|
| 92 |
+
"BOREDOM & TIREDNESS": ["boredom", "tiredness", "exhaustion", "fatigue", "weariness", "sleepy"],
|
| 93 |
+
"ENVY & JEALOUSY": ["envy", "jealousy"],
|
| 94 |
+
"PLAYFUL & SILLY": ["playful", "silly", "mischievous", "teasing", "sarcastic", "witty",
|
| 95 |
+
"amusement", "funny"],
|
| 96 |
+
"SPECIAL STATES": ["sympathy", "nostalgia", "hope", "optimism", "pessimism", "longing",
|
| 97 |
+
"yearning", "determination", "inspiration", "anticipation", "trust",
|
| 98 |
+
"acceptance", "sarcasm"],
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
return emotion_emojis, recognition_accuracy, categories
|
| 102 |
+
|
| 103 |
+
|
| 104 |
+
def print_emotion_table():
|
| 105 |
+
"""Print formatted emotion statistics table"""
|
| 106 |
+
|
| 107 |
+
emotion_emojis, recognition_accuracy, categories = get_emotion_stats()
|
| 108 |
+
|
| 109 |
+
print("=" * 80)
|
| 110 |
+
print("EMOJI AI AVATAR - EMOTION RECOGNITION STATISTICS")
|
| 111 |
+
print("=" * 80)
|
| 112 |
+
print()
|
| 113 |
+
print(f"📊 Total Emotions Mapped: {len(emotion_emojis)}")
|
| 114 |
+
print(f"📊 Emotions with Recognition Data: {len(recognition_accuracy)}")
|
| 115 |
+
print(f"📊 Overall Recognition Accuracy: 89.0%")
|
| 116 |
+
print()
|
| 117 |
+
|
| 118 |
+
# Print by category
|
| 119 |
+
for category, emotions in categories.items():
|
| 120 |
+
print(f"\n{'─' * 80}")
|
| 121 |
+
print(f"📁 {category}")
|
| 122 |
+
print(f"{'─' * 80}")
|
| 123 |
+
print(f"{'Emotion':<20} {'Emoji':<6} {'Accuracy':<10} {'Status'}")
|
| 124 |
+
print(f"{'─' * 20} {'─' * 5} {'─' * 9} {'─' * 10}")
|
| 125 |
+
|
| 126 |
+
for emotion in emotions:
|
| 127 |
+
emoji = emotion_emojis.get(emotion, "❓")
|
| 128 |
+
accuracy = recognition_accuracy.get(emotion, None)
|
| 129 |
+
|
| 130 |
+
if accuracy is not None:
|
| 131 |
+
if accuracy >= 80:
|
| 132 |
+
status = "✅ PASS"
|
| 133 |
+
elif accuracy >= 50:
|
| 134 |
+
status = "⚠️ OK"
|
| 135 |
+
else:
|
| 136 |
+
status = "❌ FAIL"
|
| 137 |
+
acc_str = f"{accuracy:.1f}%"
|
| 138 |
+
else:
|
| 139 |
+
status = "🔹 N/T" # Not tested
|
| 140 |
+
acc_str = "N/A"
|
| 141 |
+
|
| 142 |
+
print(f"{emotion:<20} {emoji:<6} {acc_str:<10} {status}")
|
| 143 |
+
|
| 144 |
+
# Summary statistics
|
| 145 |
+
print()
|
| 146 |
+
print("=" * 80)
|
| 147 |
+
print("SUMMARY STATISTICS")
|
| 148 |
+
print("=" * 80)
|
| 149 |
+
|
| 150 |
+
tested = [acc for acc in recognition_accuracy.values()]
|
| 151 |
+
|
| 152 |
+
perfect = sum(1 for acc in tested if acc == 100.0)
|
| 153 |
+
high = sum(1 for acc in tested if 80.0 <= acc < 100.0)
|
| 154 |
+
medium = sum(1 for acc in tested if 50.0 <= acc < 80.0)
|
| 155 |
+
low = sum(1 for acc in tested if acc < 50.0)
|
| 156 |
+
|
| 157 |
+
print(f"✅ 100% Accuracy: {perfect} emotions")
|
| 158 |
+
print(f"✅ 80-99% Accuracy: {high} emotions")
|
| 159 |
+
print(f"⚠️ 50-79% Accuracy: {medium} emotions")
|
| 160 |
+
print(f"❌ <50% Accuracy: {low} emotions")
|
| 161 |
+
print()
|
| 162 |
+
print(f"Average Accuracy: {sum(tested)/len(tested):.1f}%")
|
| 163 |
+
print()
|
| 164 |
+
|
| 165 |
+
|
| 166 |
+
def generate_markdown_table():
|
| 167 |
+
"""Generate markdown table for documentation"""
|
| 168 |
+
|
| 169 |
+
emotion_emojis, recognition_accuracy, categories = get_emotion_stats()
|
| 170 |
+
|
| 171 |
+
lines = [
|
| 172 |
+
"# Emoji AI Avatar - Complete Emotion Table",
|
| 173 |
+
"",
|
| 174 |
+
f"**Total Emotions:** {len(emotion_emojis)}",
|
| 175 |
+
f"**Overall Accuracy:** 89.0%",
|
| 176 |
+
f"**Last Updated:** 2025-12-01",
|
| 177 |
+
"",
|
| 178 |
+
"## Recognition Accuracy by Category",
|
| 179 |
+
"",
|
| 180 |
+
]
|
| 181 |
+
|
| 182 |
+
for category, emotions in categories.items():
|
| 183 |
+
lines.append(f"### {category}")
|
| 184 |
+
lines.append("")
|
| 185 |
+
lines.append("| Emotion | Emoji | Accuracy | Status |")
|
| 186 |
+
lines.append("|---------|-------|----------|--------|")
|
| 187 |
+
|
| 188 |
+
for emotion in emotions:
|
| 189 |
+
emoji = emotion_emojis.get(emotion, "❓")
|
| 190 |
+
accuracy = recognition_accuracy.get(emotion, None)
|
| 191 |
+
|
| 192 |
+
if accuracy is not None:
|
| 193 |
+
if accuracy >= 80:
|
| 194 |
+
status = "✅ PASS"
|
| 195 |
+
elif accuracy >= 50:
|
| 196 |
+
status = "⚠️ OK"
|
| 197 |
+
else:
|
| 198 |
+
status = "❌ FAIL"
|
| 199 |
+
acc_str = f"{accuracy:.1f}%"
|
| 200 |
+
else:
|
| 201 |
+
status = "🔹 N/T"
|
| 202 |
+
acc_str = "N/A"
|
| 203 |
+
|
| 204 |
+
lines.append(f"| {emotion} | {emoji} | {acc_str} | {status} |")
|
| 205 |
+
|
| 206 |
+
lines.append("")
|
| 207 |
+
|
| 208 |
+
# Add summary
|
| 209 |
+
tested = list(recognition_accuracy.values())
|
| 210 |
+
perfect = sum(1 for acc in tested if acc == 100.0)
|
| 211 |
+
high = sum(1 for acc in tested if 80.0 <= acc < 100.0)
|
| 212 |
+
medium = sum(1 for acc in tested if 50.0 <= acc < 80.0)
|
| 213 |
+
low = sum(1 for acc in tested if acc < 50.0)
|
| 214 |
+
|
| 215 |
+
lines.extend([
|
| 216 |
+
"## Summary",
|
| 217 |
+
"",
|
| 218 |
+
"| Accuracy Range | Count |",
|
| 219 |
+
"|----------------|-------|",
|
| 220 |
+
f"| 100% (Perfect) | {perfect} |",
|
| 221 |
+
f"| 80-99% (High) | {high} |",
|
| 222 |
+
f"| 50-79% (Medium) | {medium} |",
|
| 223 |
+
f"| <50% (Low) | {low} |",
|
| 224 |
+
"",
|
| 225 |
+
f"**Average Accuracy:** {sum(tested)/len(tested):.1f}%",
|
| 226 |
+
"",
|
| 227 |
+
])
|
| 228 |
+
|
| 229 |
+
return "\n".join(lines)
|
| 230 |
+
|
| 231 |
+
|
| 232 |
+
if __name__ == "__main__":
|
| 233 |
+
print_emotion_table()
|
| 234 |
+
|
| 235 |
+
# Also save markdown version
|
| 236 |
+
md_content = generate_markdown_table()
|
| 237 |
+
output_path = os.path.join(os.path.dirname(__file__), "reports", "emotion_statistics.md")
|
| 238 |
+
with open(output_path, "w", encoding="utf-8") as f:
|
| 239 |
+
f.write(md_content)
|
| 240 |
+
|
| 241 |
+
print(f"\n📄 Markdown table saved to: {output_path}")
|
evaluation/emotion_test_suite.py
ADDED
|
@@ -0,0 +1,843 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Emotion Test Suite - Comprehensive emotion detection test cases
|
| 4 |
+
|
| 5 |
+
Tests ALL emotions in the emoji map with multiple text examples per emotion
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
from typing import Dict, List, Tuple
|
| 9 |
+
from dataclasses import dataclass
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
@dataclass
|
| 13 |
+
class EmotionTestCase:
|
| 14 |
+
"""Single test case for emotion detection"""
|
| 15 |
+
emotion: str
|
| 16 |
+
text: str
|
| 17 |
+
expected_emoji: str
|
| 18 |
+
category: str # positive, negative, neutral, complex
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
class EmotionTestSuite:
|
| 22 |
+
"""
|
| 23 |
+
Complete test suite for all supported emotions
|
| 24 |
+
|
| 25 |
+
Contains 5+ test strings per emotion for accuracy measurement
|
| 26 |
+
"""
|
| 27 |
+
|
| 28 |
+
# === COMPLETE EMOTION TEST CASES ===
|
| 29 |
+
# Format: emotion -> [(text, expected_polarity), ...]
|
| 30 |
+
|
| 31 |
+
EMOTION_TEST_DATA: Dict[str, List[Tuple[str, str]]] = {
|
| 32 |
+
# ==========================================
|
| 33 |
+
# POSITIVE EMOTIONS - HIGH AROUSAL
|
| 34 |
+
# ==========================================
|
| 35 |
+
"joy": [
|
| 36 |
+
("I feel so much joy right now!", "positive"),
|
| 37 |
+
("This brings me pure joy", "positive"),
|
| 38 |
+
("Joy fills my heart", "positive"),
|
| 39 |
+
("What a joyful moment", "positive"),
|
| 40 |
+
("I'm full of joy today", "positive"),
|
| 41 |
+
],
|
| 42 |
+
"happiness": [
|
| 43 |
+
("I am so happy today!", "positive"),
|
| 44 |
+
("This makes me really happy", "positive"),
|
| 45 |
+
("I feel happy and content", "positive"),
|
| 46 |
+
("Happiness is all around", "positive"),
|
| 47 |
+
("I'm genuinely happy", "positive"),
|
| 48 |
+
("I am good", "positive"),
|
| 49 |
+
("I'm doing great", "positive"),
|
| 50 |
+
],
|
| 51 |
+
"excitement": [
|
| 52 |
+
("I'm so excited about this!", "positive"),
|
| 53 |
+
("This is really exciting", "positive"),
|
| 54 |
+
("I can't contain my excitement", "positive"),
|
| 55 |
+
("How exciting!", "positive"),
|
| 56 |
+
("I'm thrilled and excited", "positive"),
|
| 57 |
+
],
|
| 58 |
+
"enthusiasm": [
|
| 59 |
+
("I'm very enthusiastic about this project", "positive"),
|
| 60 |
+
("My enthusiasm is through the roof", "positive"),
|
| 61 |
+
("I feel enthusiastic and eager", "positive"),
|
| 62 |
+
("Such enthusiasm!", "positive"),
|
| 63 |
+
("I'm enthusiastically looking forward to it", "positive"),
|
| 64 |
+
],
|
| 65 |
+
"ecstasy": [
|
| 66 |
+
("I'm in absolute ecstasy!", "positive"),
|
| 67 |
+
("This is pure ecstasy", "positive"),
|
| 68 |
+
("Ecstatic about the news", "positive"),
|
| 69 |
+
("I feel ecstatic", "positive"),
|
| 70 |
+
("What ecstasy!", "positive"),
|
| 71 |
+
],
|
| 72 |
+
"elation": [
|
| 73 |
+
("I'm elated by the results", "positive"),
|
| 74 |
+
("Such elation!", "positive"),
|
| 75 |
+
("I feel elated", "positive"),
|
| 76 |
+
("Elation washes over me", "positive"),
|
| 77 |
+
("I'm absolutely elated", "positive"),
|
| 78 |
+
],
|
| 79 |
+
"euphoria": [
|
| 80 |
+
("I'm in a state of euphoria", "positive"),
|
| 81 |
+
("Pure euphoria right now", "positive"),
|
| 82 |
+
("This euphoric feeling", "positive"),
|
| 83 |
+
("I feel euphoric", "positive"),
|
| 84 |
+
("Euphoria takes over", "positive"),
|
| 85 |
+
],
|
| 86 |
+
"thrill": [
|
| 87 |
+
("What a thrill!", "positive"),
|
| 88 |
+
("I'm thrilled about this", "positive"),
|
| 89 |
+
("This is thrilling", "positive"),
|
| 90 |
+
("I feel thrilled", "positive"),
|
| 91 |
+
("Such a thrilling experience", "positive"),
|
| 92 |
+
],
|
| 93 |
+
"delight": [
|
| 94 |
+
("I'm delighted to hear that", "positive"),
|
| 95 |
+
("What a delight!", "positive"),
|
| 96 |
+
("This is delightful", "positive"),
|
| 97 |
+
("I'm absolutely delighted", "positive"),
|
| 98 |
+
("Such delight!", "positive"),
|
| 99 |
+
],
|
| 100 |
+
"cheerfulness": [
|
| 101 |
+
("I'm feeling cheerful today", "positive"),
|
| 102 |
+
("Such cheerfulness around", "positive"),
|
| 103 |
+
("Cheerful vibes only", "positive"),
|
| 104 |
+
("I feel cheerful", "positive"),
|
| 105 |
+
("What a cheerful day", "positive"),
|
| 106 |
+
],
|
| 107 |
+
|
| 108 |
+
# ==========================================
|
| 109 |
+
# POSITIVE EMOTIONS - MEDIUM AROUSAL
|
| 110 |
+
# ==========================================
|
| 111 |
+
"contentment": [
|
| 112 |
+
("I feel content with my life", "positive"),
|
| 113 |
+
("Such contentment", "positive"),
|
| 114 |
+
("I'm content and at peace", "positive"),
|
| 115 |
+
("Contentment fills me", "positive"),
|
| 116 |
+
("I feel okay", "positive"),
|
| 117 |
+
("I'm fine", "positive"),
|
| 118 |
+
],
|
| 119 |
+
"satisfaction": [
|
| 120 |
+
("I'm satisfied with the outcome", "positive"),
|
| 121 |
+
("Great satisfaction", "positive"),
|
| 122 |
+
("I feel satisfied", "positive"),
|
| 123 |
+
("Satisfaction guaranteed", "positive"),
|
| 124 |
+
("Very satisfying", "positive"),
|
| 125 |
+
],
|
| 126 |
+
"serenity": [
|
| 127 |
+
("I feel serene and calm", "positive"),
|
| 128 |
+
("Such serenity", "positive"),
|
| 129 |
+
("Serenity now", "positive"),
|
| 130 |
+
("A serene feeling", "positive"),
|
| 131 |
+
("I'm at peace and serene", "positive"),
|
| 132 |
+
],
|
| 133 |
+
"calm": [
|
| 134 |
+
("I feel calm and relaxed", "positive"),
|
| 135 |
+
("So calm right now", "positive"),
|
| 136 |
+
("Calmness washes over me", "positive"),
|
| 137 |
+
("I'm staying calm", "positive"),
|
| 138 |
+
("Very calm today", "positive"),
|
| 139 |
+
],
|
| 140 |
+
"relaxed": [
|
| 141 |
+
("I'm feeling relaxed", "positive"),
|
| 142 |
+
("So relaxed right now", "positive"),
|
| 143 |
+
("I feel relaxed and happy", "positive"),
|
| 144 |
+
("Relaxed vibes", "positive"),
|
| 145 |
+
("Totally relaxed", "positive"),
|
| 146 |
+
],
|
| 147 |
+
"relief": [
|
| 148 |
+
("What a relief!", "positive"),
|
| 149 |
+
("I feel relieved", "positive"),
|
| 150 |
+
("Such relief", "positive"),
|
| 151 |
+
("I'm so relieved", "positive"),
|
| 152 |
+
("Relief washes over me", "positive"),
|
| 153 |
+
],
|
| 154 |
+
"pride": [
|
| 155 |
+
("I'm so proud of this", "positive"),
|
| 156 |
+
("Pride in my work", "positive"),
|
| 157 |
+
("I feel proud", "positive"),
|
| 158 |
+
("Such pride", "positive"),
|
| 159 |
+
("I'm proud of myself", "positive"),
|
| 160 |
+
],
|
| 161 |
+
"confidence": [
|
| 162 |
+
("I feel confident about this", "positive"),
|
| 163 |
+
("Confidence is high", "positive"),
|
| 164 |
+
("I'm confident", "positive"),
|
| 165 |
+
("Such confidence", "positive"),
|
| 166 |
+
("I feel self-confident", "positive"),
|
| 167 |
+
],
|
| 168 |
+
"pleasure": [
|
| 169 |
+
("It's my pleasure", "positive"),
|
| 170 |
+
("Such pleasure", "positive"),
|
| 171 |
+
("I feel pleasure", "positive"),
|
| 172 |
+
("What a pleasure", "positive"),
|
| 173 |
+
("Pure pleasure", "positive"),
|
| 174 |
+
],
|
| 175 |
+
|
| 176 |
+
# ==========================================
|
| 177 |
+
# LOVE & AFFECTION
|
| 178 |
+
# ==========================================
|
| 179 |
+
"love": [
|
| 180 |
+
("I love this so much!", "positive"),
|
| 181 |
+
("I'm in love", "positive"),
|
| 182 |
+
("Love is in the air", "positive"),
|
| 183 |
+
("I love you", "positive"),
|
| 184 |
+
("Such love", "positive"),
|
| 185 |
+
],
|
| 186 |
+
"adoration": [
|
| 187 |
+
("I adore this", "positive"),
|
| 188 |
+
("Such adoration", "positive"),
|
| 189 |
+
("I feel adoration", "positive"),
|
| 190 |
+
("Adoring this moment", "positive"),
|
| 191 |
+
("I absolutely adore it", "positive"),
|
| 192 |
+
],
|
| 193 |
+
"affection": [
|
| 194 |
+
("I feel great affection", "positive"),
|
| 195 |
+
("Such affection", "positive"),
|
| 196 |
+
("Affection for everyone", "positive"),
|
| 197 |
+
("I feel affectionate", "positive"),
|
| 198 |
+
("Showing affection", "positive"),
|
| 199 |
+
],
|
| 200 |
+
"tenderness": [
|
| 201 |
+
("Such tenderness", "positive"),
|
| 202 |
+
("I feel tender", "positive"),
|
| 203 |
+
("Tenderness in my heart", "positive"),
|
| 204 |
+
("A tender feeling", "positive"),
|
| 205 |
+
("Tender moments", "positive"),
|
| 206 |
+
],
|
| 207 |
+
"caring": [
|
| 208 |
+
("I really care about you", "positive"),
|
| 209 |
+
("Such caring", "positive"),
|
| 210 |
+
("I feel caring", "positive"),
|
| 211 |
+
("Caring deeply", "positive"),
|
| 212 |
+
("I'm caring for you", "positive"),
|
| 213 |
+
],
|
| 214 |
+
"compassion": [
|
| 215 |
+
("I feel compassion for them", "positive"),
|
| 216 |
+
("Such compassion", "positive"),
|
| 217 |
+
("Compassionate response", "positive"),
|
| 218 |
+
("I'm compassionate", "positive"),
|
| 219 |
+
("Showing compassion", "positive"),
|
| 220 |
+
],
|
| 221 |
+
"empathy": [
|
| 222 |
+
("I feel empathy for your situation", "positive"),
|
| 223 |
+
("Such empathy", "positive"),
|
| 224 |
+
("I'm empathetic", "positive"),
|
| 225 |
+
("Empathy is important", "positive"),
|
| 226 |
+
("Showing empathy", "positive"),
|
| 227 |
+
],
|
| 228 |
+
"gratitude": [
|
| 229 |
+
("I'm so grateful for this", "positive"),
|
| 230 |
+
("Gratitude fills my heart", "positive"),
|
| 231 |
+
("Thank you so much", "positive"),
|
| 232 |
+
("I feel grateful", "positive"),
|
| 233 |
+
("Such gratitude", "positive"),
|
| 234 |
+
],
|
| 235 |
+
|
| 236 |
+
# ==========================================
|
| 237 |
+
# INTEREST & CURIOSITY
|
| 238 |
+
# ==========================================
|
| 239 |
+
"curiosity": [
|
| 240 |
+
("I'm curious about this", "positive"),
|
| 241 |
+
("Such curiosity", "positive"),
|
| 242 |
+
("I feel curious", "positive"),
|
| 243 |
+
("Curiosity got me", "positive"),
|
| 244 |
+
("I'm really curious", "positive"),
|
| 245 |
+
],
|
| 246 |
+
"interest": [
|
| 247 |
+
("I'm interested in learning more", "positive"),
|
| 248 |
+
("Such interest", "positive"),
|
| 249 |
+
("I feel interested", "positive"),
|
| 250 |
+
("This is interesting", "positive"),
|
| 251 |
+
("I'm very interested", "positive"),
|
| 252 |
+
],
|
| 253 |
+
"fascination": [
|
| 254 |
+
("I'm fascinated by this", "positive"),
|
| 255 |
+
("Such fascination", "positive"),
|
| 256 |
+
("I feel fascinated", "positive"),
|
| 257 |
+
("Fascinating!", "positive"),
|
| 258 |
+
("I'm absolutely fascinated", "positive"),
|
| 259 |
+
],
|
| 260 |
+
"wonder": [
|
| 261 |
+
("I wonder about this", "positive"),
|
| 262 |
+
("Such wonder", "positive"),
|
| 263 |
+
("I feel wonder", "positive"),
|
| 264 |
+
("Wonderful!", "positive"),
|
| 265 |
+
("I'm in wonder", "positive"),
|
| 266 |
+
],
|
| 267 |
+
"awe": [
|
| 268 |
+
("I'm in awe", "positive"),
|
| 269 |
+
("Such awe", "positive"),
|
| 270 |
+
("I feel awe", "positive"),
|
| 271 |
+
("Awe-inspiring", "positive"),
|
| 272 |
+
("I'm awestruck", "positive"),
|
| 273 |
+
],
|
| 274 |
+
"amazement": [
|
| 275 |
+
("I'm amazed!", "positive"),
|
| 276 |
+
("Such amazement", "positive"),
|
| 277 |
+
("I feel amazed", "positive"),
|
| 278 |
+
("Amazing!", "positive"),
|
| 279 |
+
("I'm absolutely amazed", "positive"),
|
| 280 |
+
],
|
| 281 |
+
"intrigue": [
|
| 282 |
+
("I'm intrigued", "positive"),
|
| 283 |
+
("Such intrigue", "positive"),
|
| 284 |
+
("I feel intrigued", "positive"),
|
| 285 |
+
("Intriguing!", "positive"),
|
| 286 |
+
("Very intriguing", "positive"),
|
| 287 |
+
],
|
| 288 |
+
|
| 289 |
+
# ==========================================
|
| 290 |
+
# SURPRISE
|
| 291 |
+
# ==========================================
|
| 292 |
+
"surprise": [
|
| 293 |
+
("What a surprise!", "positive"),
|
| 294 |
+
("I'm surprised", "positive"),
|
| 295 |
+
("Such a surprise", "positive"),
|
| 296 |
+
("Surprising!", "positive"),
|
| 297 |
+
("I'm pleasantly surprised", "positive"),
|
| 298 |
+
],
|
| 299 |
+
"astonishment": [
|
| 300 |
+
("I'm astonished!", "positive"),
|
| 301 |
+
("Such astonishment", "positive"),
|
| 302 |
+
("I feel astonished", "positive"),
|
| 303 |
+
("Astonishing!", "positive"),
|
| 304 |
+
("I'm absolutely astonished", "positive"),
|
| 305 |
+
],
|
| 306 |
+
"shock": [
|
| 307 |
+
("I'm in shock", "negative"),
|
| 308 |
+
("Shocking news", "negative"),
|
| 309 |
+
("I feel shocked", "negative"),
|
| 310 |
+
("What a shock", "negative"),
|
| 311 |
+
("I'm completely shocked", "negative"),
|
| 312 |
+
],
|
| 313 |
+
|
| 314 |
+
# ==========================================
|
| 315 |
+
# NEUTRAL / THINKING
|
| 316 |
+
# ==========================================
|
| 317 |
+
"neutral": [
|
| 318 |
+
("The weather is average today", "neutral"),
|
| 319 |
+
("It's just okay", "neutral"),
|
| 320 |
+
("Nothing special", "neutral"),
|
| 321 |
+
("I don't have strong feelings", "neutral"),
|
| 322 |
+
("It is what it is", "neutral"),
|
| 323 |
+
],
|
| 324 |
+
"thinking": [
|
| 325 |
+
("I'm thinking about it", "neutral"),
|
| 326 |
+
("Let me think", "neutral"),
|
| 327 |
+
("I need to think", "neutral"),
|
| 328 |
+
("Thinking hard", "neutral"),
|
| 329 |
+
("I'm contemplating", "neutral"),
|
| 330 |
+
],
|
| 331 |
+
"uncertain": [
|
| 332 |
+
("I'm not sure about this", "negative"),
|
| 333 |
+
("Feeling uncertain", "negative"),
|
| 334 |
+
("I'm uncertain", "negative"),
|
| 335 |
+
("Uncertainty lingers", "negative"),
|
| 336 |
+
("I feel unsure", "negative"),
|
| 337 |
+
],
|
| 338 |
+
|
| 339 |
+
# ==========================================
|
| 340 |
+
# CONFUSION
|
| 341 |
+
# ==========================================
|
| 342 |
+
"confused": [
|
| 343 |
+
("I'm so confused", "negative"),
|
| 344 |
+
("This is confusing", "negative"),
|
| 345 |
+
("I feel confused", "negative"),
|
| 346 |
+
("Confusion everywhere", "negative"),
|
| 347 |
+
("I'm really confused", "negative"),
|
| 348 |
+
],
|
| 349 |
+
"puzzled": [
|
| 350 |
+
("I'm puzzled by this", "negative"),
|
| 351 |
+
("Such a puzzle", "negative"),
|
| 352 |
+
("I feel puzzled", "negative"),
|
| 353 |
+
("Puzzling!", "negative"),
|
| 354 |
+
("I'm quite puzzled", "negative"),
|
| 355 |
+
],
|
| 356 |
+
"perplexed": [
|
| 357 |
+
("I'm perplexed", "negative"),
|
| 358 |
+
("Such perplexity", "negative"),
|
| 359 |
+
("I feel perplexed", "negative"),
|
| 360 |
+
("Perplexing situation", "negative"),
|
| 361 |
+
("I'm thoroughly perplexed", "negative"),
|
| 362 |
+
],
|
| 363 |
+
"bewildered": [
|
| 364 |
+
("I'm bewildered", "negative"),
|
| 365 |
+
("Feeling bewildered", "negative"),
|
| 366 |
+
("I feel bewildered", "negative"),
|
| 367 |
+
("Bewildering!", "negative"),
|
| 368 |
+
("I'm completely bewildered", "negative"),
|
| 369 |
+
],
|
| 370 |
+
"baffled": [
|
| 371 |
+
("I'm baffled by this", "negative"),
|
| 372 |
+
("Such bafflement", "negative"),
|
| 373 |
+
("I feel baffled", "negative"),
|
| 374 |
+
("Baffling!", "negative"),
|
| 375 |
+
("I'm totally baffled", "negative"),
|
| 376 |
+
],
|
| 377 |
+
|
| 378 |
+
# ==========================================
|
| 379 |
+
# SADNESS
|
| 380 |
+
# ==========================================
|
| 381 |
+
"sadness": [
|
| 382 |
+
("I feel so sad", "negative"),
|
| 383 |
+
("Such sadness", "negative"),
|
| 384 |
+
("I'm really sad", "negative"),
|
| 385 |
+
("Sadness fills me", "negative"),
|
| 386 |
+
("I'm feeling sad today", "negative"),
|
| 387 |
+
],
|
| 388 |
+
"sorrow": [
|
| 389 |
+
("I feel deep sorrow", "negative"),
|
| 390 |
+
("Such sorrow", "negative"),
|
| 391 |
+
("Sorrow in my heart", "negative"),
|
| 392 |
+
("I'm sorrowful", "negative"),
|
| 393 |
+
("Overwhelming sorrow", "negative"),
|
| 394 |
+
],
|
| 395 |
+
"grief": [
|
| 396 |
+
("I'm grieving", "negative"),
|
| 397 |
+
("Such grief", "negative"),
|
| 398 |
+
("I feel grief", "negative"),
|
| 399 |
+
("Grief consumes me", "negative"),
|
| 400 |
+
("Deep grief", "negative"),
|
| 401 |
+
],
|
| 402 |
+
"melancholy": [
|
| 403 |
+
("I feel melancholy", "negative"),
|
| 404 |
+
("Such melancholy", "negative"),
|
| 405 |
+
("A melancholy mood", "negative"),
|
| 406 |
+
("I'm melancholic", "negative"),
|
| 407 |
+
("Melancholy sets in", "negative"),
|
| 408 |
+
],
|
| 409 |
+
"disappointment": [
|
| 410 |
+
("I'm disappointed", "negative"),
|
| 411 |
+
("Such disappointment", "negative"),
|
| 412 |
+
("I feel disappointed", "negative"),
|
| 413 |
+
("Disappointing!", "negative"),
|
| 414 |
+
("I'm really disappointed", "negative"),
|
| 415 |
+
],
|
| 416 |
+
"despair": [
|
| 417 |
+
("I'm in despair", "negative"),
|
| 418 |
+
("Such despair", "negative"),
|
| 419 |
+
("I feel despair", "negative"),
|
| 420 |
+
("Despair takes over", "negative"),
|
| 421 |
+
("I'm filled with despair", "negative"),
|
| 422 |
+
],
|
| 423 |
+
"loneliness": [
|
| 424 |
+
("I feel so lonely", "negative"),
|
| 425 |
+
("Such loneliness", "negative"),
|
| 426 |
+
("I'm lonely", "negative"),
|
| 427 |
+
("Loneliness consumes me", "negative"),
|
| 428 |
+
("I feel alone", "negative"),
|
| 429 |
+
],
|
| 430 |
+
"hurt": [
|
| 431 |
+
("I feel hurt", "negative"),
|
| 432 |
+
("That hurts", "negative"),
|
| 433 |
+
("I'm hurt", "negative"),
|
| 434 |
+
("Feeling hurt", "negative"),
|
| 435 |
+
("I'm really hurt", "negative"),
|
| 436 |
+
],
|
| 437 |
+
"misery": [
|
| 438 |
+
("I'm miserable", "negative"),
|
| 439 |
+
("Such misery", "negative"),
|
| 440 |
+
("I feel miserable", "negative"),
|
| 441 |
+
("Misery everywhere", "negative"),
|
| 442 |
+
("I'm in misery", "negative"),
|
| 443 |
+
],
|
| 444 |
+
|
| 445 |
+
# ==========================================
|
| 446 |
+
# FEAR & ANXIETY
|
| 447 |
+
# ==========================================
|
| 448 |
+
"fear": [
|
| 449 |
+
("I'm afraid", "negative"),
|
| 450 |
+
("I feel fear", "negative"),
|
| 451 |
+
("Fear grips me", "negative"),
|
| 452 |
+
("I'm scared", "negative"),
|
| 453 |
+
("Such fear", "negative"),
|
| 454 |
+
],
|
| 455 |
+
"terror": [
|
| 456 |
+
("I'm terrified", "negative"),
|
| 457 |
+
("Such terror", "negative"),
|
| 458 |
+
("I feel terror", "negative"),
|
| 459 |
+
("Terrifying!", "negative"),
|
| 460 |
+
("I'm in terror", "negative"),
|
| 461 |
+
],
|
| 462 |
+
"horror": [
|
| 463 |
+
("I'm horrified", "negative"),
|
| 464 |
+
("Such horror", "negative"),
|
| 465 |
+
("I feel horror", "negative"),
|
| 466 |
+
("Horrifying!", "negative"),
|
| 467 |
+
("Horror fills me", "negative"),
|
| 468 |
+
],
|
| 469 |
+
"dread": [
|
| 470 |
+
("I feel dread", "negative"),
|
| 471 |
+
("Such dread", "negative"),
|
| 472 |
+
("I'm dreading it", "negative"),
|
| 473 |
+
("Dreadful!", "negative"),
|
| 474 |
+
("I'm filled with dread", "negative"),
|
| 475 |
+
],
|
| 476 |
+
"anxiety": [
|
| 477 |
+
("I feel anxious", "negative"),
|
| 478 |
+
("Such anxiety", "negative"),
|
| 479 |
+
("I'm anxious", "negative"),
|
| 480 |
+
("Anxiety takes over", "negative"),
|
| 481 |
+
("I'm very anxious", "negative"),
|
| 482 |
+
],
|
| 483 |
+
"worry": [
|
| 484 |
+
("I'm worried", "negative"),
|
| 485 |
+
("Such worry", "negative"),
|
| 486 |
+
("I feel worried", "negative"),
|
| 487 |
+
("Worrying about it", "negative"),
|
| 488 |
+
("I'm really worried", "negative"),
|
| 489 |
+
],
|
| 490 |
+
"nervousness": [
|
| 491 |
+
("I'm nervous", "negative"),
|
| 492 |
+
("Such nervousness", "negative"),
|
| 493 |
+
("I feel nervous", "negative"),
|
| 494 |
+
("Nervous about it", "negative"),
|
| 495 |
+
("I'm very nervous", "negative"),
|
| 496 |
+
],
|
| 497 |
+
"apprehension": [
|
| 498 |
+
("I feel apprehensive", "negative"),
|
| 499 |
+
("Such apprehension", "negative"),
|
| 500 |
+
("I'm apprehensive", "negative"),
|
| 501 |
+
("Apprehension sets in", "negative"),
|
| 502 |
+
("I'm filled with apprehension", "negative"),
|
| 503 |
+
],
|
| 504 |
+
"panic": [
|
| 505 |
+
("I'm panicking", "negative"),
|
| 506 |
+
("Such panic", "negative"),
|
| 507 |
+
("I feel panic", "negative"),
|
| 508 |
+
("Panic mode!", "negative"),
|
| 509 |
+
("I'm in a panic", "negative"),
|
| 510 |
+
],
|
| 511 |
+
|
| 512 |
+
# ==========================================
|
| 513 |
+
# ANGER & FRUSTRATION
|
| 514 |
+
# ==========================================
|
| 515 |
+
"anger": [
|
| 516 |
+
("I'm so angry!", "negative"),
|
| 517 |
+
("Such anger", "negative"),
|
| 518 |
+
("I feel angry", "negative"),
|
| 519 |
+
("Anger fills me", "negative"),
|
| 520 |
+
("I'm really angry", "negative"),
|
| 521 |
+
],
|
| 522 |
+
"rage": [
|
| 523 |
+
("I'm in a rage", "negative"),
|
| 524 |
+
("Such rage", "negative"),
|
| 525 |
+
("I feel rage", "negative"),
|
| 526 |
+
("Rage takes over", "negative"),
|
| 527 |
+
("I'm filled with rage", "negative"),
|
| 528 |
+
],
|
| 529 |
+
"fury": [
|
| 530 |
+
("I'm furious!", "negative"),
|
| 531 |
+
("Such fury", "negative"),
|
| 532 |
+
("I feel fury", "negative"),
|
| 533 |
+
("Fury consumes me", "negative"),
|
| 534 |
+
("I'm absolutely furious", "negative"),
|
| 535 |
+
],
|
| 536 |
+
"irritation": [
|
| 537 |
+
("I'm irritated", "negative"),
|
| 538 |
+
("Such irritation", "negative"),
|
| 539 |
+
("I feel irritated", "negative"),
|
| 540 |
+
("Irritating!", "negative"),
|
| 541 |
+
("I'm really irritated", "negative"),
|
| 542 |
+
],
|
| 543 |
+
"annoyance": [
|
| 544 |
+
("I'm annoyed", "negative"),
|
| 545 |
+
("Such annoyance", "negative"),
|
| 546 |
+
("I feel annoyed", "negative"),
|
| 547 |
+
("Annoying!", "negative"),
|
| 548 |
+
("I'm really annoyed", "negative"),
|
| 549 |
+
],
|
| 550 |
+
"frustration": [
|
| 551 |
+
("I'm frustrated!", "negative"),
|
| 552 |
+
("Such frustration", "negative"),
|
| 553 |
+
("I feel frustrated", "negative"),
|
| 554 |
+
("Frustrating!", "negative"),
|
| 555 |
+
("I'm so frustrated", "negative"),
|
| 556 |
+
],
|
| 557 |
+
"resentment": [
|
| 558 |
+
("I feel resentment", "negative"),
|
| 559 |
+
("Such resentment", "negative"),
|
| 560 |
+
("I'm resentful", "negative"),
|
| 561 |
+
("Resentment builds", "negative"),
|
| 562 |
+
("I'm filled with resentment", "negative"),
|
| 563 |
+
],
|
| 564 |
+
"hostility": [
|
| 565 |
+
("I feel hostile", "negative"),
|
| 566 |
+
("Such hostility", "negative"),
|
| 567 |
+
("I'm hostile", "negative"),
|
| 568 |
+
("Hostility in the air", "negative"),
|
| 569 |
+
("I'm feeling hostile", "negative"),
|
| 570 |
+
],
|
| 571 |
+
"bitterness": [
|
| 572 |
+
("I feel bitter", "negative"),
|
| 573 |
+
("Such bitterness", "negative"),
|
| 574 |
+
("I'm bitter", "negative"),
|
| 575 |
+
("Bitterness takes over", "negative"),
|
| 576 |
+
("I'm really bitter", "negative"),
|
| 577 |
+
],
|
| 578 |
+
|
| 579 |
+
# ==========================================
|
| 580 |
+
# DISGUST & CONTEMPT
|
| 581 |
+
# ==========================================
|
| 582 |
+
"disgust": [
|
| 583 |
+
("I'm disgusted", "negative"),
|
| 584 |
+
("Such disgust", "negative"),
|
| 585 |
+
("I feel disgust", "negative"),
|
| 586 |
+
("Disgusting!", "negative"),
|
| 587 |
+
("I'm really disgusted", "negative"),
|
| 588 |
+
],
|
| 589 |
+
"revulsion": [
|
| 590 |
+
("I feel revulsion", "negative"),
|
| 591 |
+
("Such revulsion", "negative"),
|
| 592 |
+
("I'm revolted", "negative"),
|
| 593 |
+
("Revolting!", "negative"),
|
| 594 |
+
("I feel revolted", "negative"),
|
| 595 |
+
],
|
| 596 |
+
"contempt": [
|
| 597 |
+
("I feel contempt", "negative"),
|
| 598 |
+
("Such contempt", "negative"),
|
| 599 |
+
("I'm contemptuous", "negative"),
|
| 600 |
+
("Contempt for this", "negative"),
|
| 601 |
+
("I'm filled with contempt", "negative"),
|
| 602 |
+
],
|
| 603 |
+
"disdain": [
|
| 604 |
+
("I feel disdain", "negative"),
|
| 605 |
+
("Such disdain", "negative"),
|
| 606 |
+
("I'm disdainful", "negative"),
|
| 607 |
+
("Disdain for this", "negative"),
|
| 608 |
+
("I'm filled with disdain", "negative"),
|
| 609 |
+
],
|
| 610 |
+
"scorn": [
|
| 611 |
+
("I feel scorn", "negative"),
|
| 612 |
+
("Such scorn", "negative"),
|
| 613 |
+
("I'm scornful", "negative"),
|
| 614 |
+
("Scorn for this", "negative"),
|
| 615 |
+
("I'm filled with scorn", "negative"),
|
| 616 |
+
],
|
| 617 |
+
|
| 618 |
+
# ==========================================
|
| 619 |
+
# SHAME & EMBARRASSMENT
|
| 620 |
+
# ==========================================
|
| 621 |
+
"shame": [
|
| 622 |
+
("I feel ashamed", "negative"),
|
| 623 |
+
("Such shame", "negative"),
|
| 624 |
+
("I'm ashamed", "negative"),
|
| 625 |
+
("Shame on me", "negative"),
|
| 626 |
+
("I'm filled with shame", "negative"),
|
| 627 |
+
],
|
| 628 |
+
"embarrassment": [
|
| 629 |
+
("I'm embarrassed", "negative"),
|
| 630 |
+
("Such embarrassment", "negative"),
|
| 631 |
+
("I feel embarrassed", "negative"),
|
| 632 |
+
("Embarrassing!", "negative"),
|
| 633 |
+
("I'm really embarrassed", "negative"),
|
| 634 |
+
],
|
| 635 |
+
"guilt": [
|
| 636 |
+
("I feel guilty", "negative"),
|
| 637 |
+
("Such guilt", "negative"),
|
| 638 |
+
("I'm guilty", "negative"),
|
| 639 |
+
("Guilt consumes me", "negative"),
|
| 640 |
+
("I'm filled with guilt", "negative"),
|
| 641 |
+
],
|
| 642 |
+
"regret": [
|
| 643 |
+
("I regret this", "negative"),
|
| 644 |
+
("Such regret", "negative"),
|
| 645 |
+
("I feel regret", "negative"),
|
| 646 |
+
("Regretful!", "negative"),
|
| 647 |
+
("I'm filled with regret", "negative"),
|
| 648 |
+
],
|
| 649 |
+
"remorse": [
|
| 650 |
+
("I feel remorse", "negative"),
|
| 651 |
+
("Such remorse", "negative"),
|
| 652 |
+
("I'm remorseful", "negative"),
|
| 653 |
+
("Remorse takes over", "negative"),
|
| 654 |
+
("I'm filled with remorse", "negative"),
|
| 655 |
+
],
|
| 656 |
+
"humiliation": [
|
| 657 |
+
("I feel humiliated", "negative"),
|
| 658 |
+
("Such humiliation", "negative"),
|
| 659 |
+
("I'm humiliated", "negative"),
|
| 660 |
+
("Humiliating!", "negative"),
|
| 661 |
+
("I'm filled with humiliation", "negative"),
|
| 662 |
+
],
|
| 663 |
+
|
| 664 |
+
# ==========================================
|
| 665 |
+
# BOREDOM & TIREDNESS
|
| 666 |
+
# ==========================================
|
| 667 |
+
"boredom": [
|
| 668 |
+
("I'm bored", "negative"),
|
| 669 |
+
("Such boredom", "negative"),
|
| 670 |
+
("I feel bored", "negative"),
|
| 671 |
+
("Boring!", "negative"),
|
| 672 |
+
("I'm really bored", "negative"),
|
| 673 |
+
],
|
| 674 |
+
"tiredness": [
|
| 675 |
+
("I'm tired", "negative"),
|
| 676 |
+
("Such tiredness", "negative"),
|
| 677 |
+
("I feel tired", "negative"),
|
| 678 |
+
("Tiring!", "negative"),
|
| 679 |
+
("I'm really tired", "negative"),
|
| 680 |
+
],
|
| 681 |
+
"exhaustion": [
|
| 682 |
+
("I'm exhausted", "negative"),
|
| 683 |
+
("Such exhaustion", "negative"),
|
| 684 |
+
("I feel exhausted", "negative"),
|
| 685 |
+
("Exhausting!", "negative"),
|
| 686 |
+
("I'm completely exhausted", "negative"),
|
| 687 |
+
],
|
| 688 |
+
"fatigue": [
|
| 689 |
+
("I feel fatigued", "negative"),
|
| 690 |
+
("Such fatigue", "negative"),
|
| 691 |
+
("I'm fatigued", "negative"),
|
| 692 |
+
("Fatigue sets in", "negative"),
|
| 693 |
+
("I'm feeling fatigue", "negative"),
|
| 694 |
+
],
|
| 695 |
+
"weariness": [
|
| 696 |
+
("I feel weary", "negative"),
|
| 697 |
+
("Such weariness", "negative"),
|
| 698 |
+
("I'm weary", "negative"),
|
| 699 |
+
("Weariness takes over", "negative"),
|
| 700 |
+
("I'm feeling weary", "negative"),
|
| 701 |
+
],
|
| 702 |
+
|
| 703 |
+
# ==========================================
|
| 704 |
+
# ENVY & JEALOUSY
|
| 705 |
+
# ==========================================
|
| 706 |
+
"envy": [
|
| 707 |
+
("I feel envious", "negative"),
|
| 708 |
+
("Such envy", "negative"),
|
| 709 |
+
("I'm envious", "negative"),
|
| 710 |
+
("Envy takes over", "negative"),
|
| 711 |
+
("I'm filled with envy", "negative"),
|
| 712 |
+
],
|
| 713 |
+
"jealousy": [
|
| 714 |
+
("I feel jealous", "negative"),
|
| 715 |
+
("Such jealousy", "negative"),
|
| 716 |
+
("I'm jealous", "negative"),
|
| 717 |
+
("Jealousy consumes me", "negative"),
|
| 718 |
+
("I'm really jealous", "negative"),
|
| 719 |
+
],
|
| 720 |
+
|
| 721 |
+
# ==========================================
|
| 722 |
+
# PLAYFUL & SILLY
|
| 723 |
+
# ==========================================
|
| 724 |
+
"playful": [
|
| 725 |
+
("I'm feeling playful", "positive"),
|
| 726 |
+
("Such playfulness", "positive"),
|
| 727 |
+
("Playful mood", "positive"),
|
| 728 |
+
("I'm in a playful mood", "positive"),
|
| 729 |
+
("Being playful", "positive"),
|
| 730 |
+
],
|
| 731 |
+
"silly": [
|
| 732 |
+
("I'm feeling silly", "positive"),
|
| 733 |
+
("Such silliness", "positive"),
|
| 734 |
+
("Silly mood", "positive"),
|
| 735 |
+
("I'm being silly", "positive"),
|
| 736 |
+
("Feeling silly", "positive"),
|
| 737 |
+
],
|
| 738 |
+
"mischievous": [
|
| 739 |
+
("I'm feeling mischievous", "positive"),
|
| 740 |
+
("Such mischief", "positive"),
|
| 741 |
+
("Mischievous mood", "positive"),
|
| 742 |
+
("I'm being mischievous", "positive"),
|
| 743 |
+
("Feeling mischievous", "positive"),
|
| 744 |
+
],
|
| 745 |
+
"amusement": [
|
| 746 |
+
("I'm amused", "positive"),
|
| 747 |
+
("Such amusement", "positive"),
|
| 748 |
+
("I feel amused", "positive"),
|
| 749 |
+
("Amusing!", "positive"),
|
| 750 |
+
("I'm really amused", "positive"),
|
| 751 |
+
("LOL", "positive"),
|
| 752 |
+
("haha", "positive"),
|
| 753 |
+
],
|
| 754 |
+
|
| 755 |
+
# ==========================================
|
| 756 |
+
# SPECIAL STATES
|
| 757 |
+
# ==========================================
|
| 758 |
+
"sympathy": [
|
| 759 |
+
("I feel sympathy for you", "positive"),
|
| 760 |
+
("Such sympathy", "positive"),
|
| 761 |
+
("I'm sympathetic", "positive"),
|
| 762 |
+
("Sympathy for your loss", "positive"),
|
| 763 |
+
("I feel sympathetic", "positive"),
|
| 764 |
+
],
|
| 765 |
+
"nostalgia": [
|
| 766 |
+
("I feel nostalgic", "positive"),
|
| 767 |
+
("Such nostalgia", "positive"),
|
| 768 |
+
("I'm nostalgic", "positive"),
|
| 769 |
+
("Nostalgia hits", "positive"),
|
| 770 |
+
("Feeling nostalgic", "positive"),
|
| 771 |
+
],
|
| 772 |
+
"hope": [
|
| 773 |
+
("I feel hopeful", "positive"),
|
| 774 |
+
("Such hope", "positive"),
|
| 775 |
+
("I'm hopeful", "positive"),
|
| 776 |
+
("Hope is alive", "positive"),
|
| 777 |
+
("I have hope", "positive"),
|
| 778 |
+
],
|
| 779 |
+
"optimism": [
|
| 780 |
+
("I feel optimistic", "positive"),
|
| 781 |
+
("Such optimism", "positive"),
|
| 782 |
+
("I'm optimistic", "positive"),
|
| 783 |
+
("Optimism takes over", "positive"),
|
| 784 |
+
("I'm feeling optimistic", "positive"),
|
| 785 |
+
],
|
| 786 |
+
"pessimism": [
|
| 787 |
+
("I feel pessimistic", "negative"),
|
| 788 |
+
("Such pessimism", "negative"),
|
| 789 |
+
("I'm pessimistic", "negative"),
|
| 790 |
+
("Pessimism sets in", "negative"),
|
| 791 |
+
("I'm feeling pessimistic", "negative"),
|
| 792 |
+
],
|
| 793 |
+
"longing": [
|
| 794 |
+
("I'm longing for you", "negative"),
|
| 795 |
+
("Such longing", "negative"),
|
| 796 |
+
("I feel longing", "negative"),
|
| 797 |
+
("Longing for the past", "negative"),
|
| 798 |
+
("I miss you", "negative"),
|
| 799 |
+
],
|
| 800 |
+
"yearning": [
|
| 801 |
+
("I'm yearning for this", "negative"),
|
| 802 |
+
("Such yearning", "negative"),
|
| 803 |
+
("I feel yearning", "negative"),
|
| 804 |
+
("Yearning for more", "negative"),
|
| 805 |
+
("I'm filled with yearning", "negative"),
|
| 806 |
+
],
|
| 807 |
+
}
|
| 808 |
+
|
| 809 |
+
def get_all_emotions(self) -> List[str]:
|
| 810 |
+
"""Get list of all emotions in the test suite"""
|
| 811 |
+
return list(self.EMOTION_TEST_DATA.keys())
|
| 812 |
+
|
| 813 |
+
def get_test_cases(self, emotion: str) -> List[Tuple[str, str]]:
|
| 814 |
+
"""Get test cases for a specific emotion"""
|
| 815 |
+
return self.EMOTION_TEST_DATA.get(emotion, [])
|
| 816 |
+
|
| 817 |
+
def get_all_test_cases(self) -> List[EmotionTestCase]:
|
| 818 |
+
"""Get all test cases as EmotionTestCase objects"""
|
| 819 |
+
cases = []
|
| 820 |
+
for emotion, tests in self.EMOTION_TEST_DATA.items():
|
| 821 |
+
for text, polarity in tests:
|
| 822 |
+
cases.append(EmotionTestCase(
|
| 823 |
+
emotion=emotion,
|
| 824 |
+
text=text,
|
| 825 |
+
expected_emoji="", # Will be filled by EmojiMapper
|
| 826 |
+
category=polarity
|
| 827 |
+
))
|
| 828 |
+
return cases
|
| 829 |
+
|
| 830 |
+
def get_emotion_count(self) -> int:
|
| 831 |
+
"""Get total number of emotions"""
|
| 832 |
+
return len(self.EMOTION_TEST_DATA)
|
| 833 |
+
|
| 834 |
+
def get_test_count(self) -> int:
|
| 835 |
+
"""Get total number of test cases"""
|
| 836 |
+
return sum(len(tests) for tests in self.EMOTION_TEST_DATA.values())
|
| 837 |
+
|
| 838 |
+
|
| 839 |
+
if __name__ == "__main__":
|
| 840 |
+
suite = EmotionTestSuite()
|
| 841 |
+
print(f"Total emotions: {suite.get_emotion_count()}")
|
| 842 |
+
print(f"Total test cases: {suite.get_test_count()}")
|
| 843 |
+
print(f"\nEmotions: {suite.get_all_emotions()[:10]}...")
|
evaluation/emotion_test_suite_v2.py
ADDED
|
@@ -0,0 +1,991 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Emotion Test Suite V2 - Enhanced emotion detection test cases
|
| 4 |
+
|
| 5 |
+
VERSION 2 - Extended test cases for multi-emotion model evaluation
|
| 6 |
+
Preserves V1 compatibility while adding more nuanced test cases
|
| 7 |
+
|
| 8 |
+
Changes from V1:
|
| 9 |
+
- Added more colloquial/natural language test cases
|
| 10 |
+
- Added edge cases for commonly misclassified emotions
|
| 11 |
+
- Added tests for context-based emotion detection
|
| 12 |
+
- Expanded neutral, thinking, silly, sympathy, longing tests
|
| 13 |
+
"""
|
| 14 |
+
|
| 15 |
+
from typing import Dict, List, Tuple
|
| 16 |
+
from dataclasses import dataclass
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
@dataclass
|
| 20 |
+
class EmotionTestCase:
|
| 21 |
+
"""Single test case for emotion detection"""
|
| 22 |
+
emotion: str
|
| 23 |
+
text: str
|
| 24 |
+
expected_polarity: str
|
| 25 |
+
category: str # positive, negative, neutral
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
class EmotionTestSuiteV2:
|
| 29 |
+
"""
|
| 30 |
+
Enhanced test suite for multi-emotion model evaluation
|
| 31 |
+
|
| 32 |
+
Key improvements:
|
| 33 |
+
- More natural language variations
|
| 34 |
+
- Better coverage of edge cases
|
| 35 |
+
- Extended neutral emotion tests
|
| 36 |
+
- Context-sensitive emotion tests
|
| 37 |
+
"""
|
| 38 |
+
|
| 39 |
+
# Version identifier
|
| 40 |
+
VERSION = "2.0.0"
|
| 41 |
+
|
| 42 |
+
# === COMPLETE EMOTION TEST CASES V2 ===
|
| 43 |
+
# Format: emotion -> [(text, expected_polarity), ...]
|
| 44 |
+
|
| 45 |
+
EMOTION_TEST_DATA: Dict[str, List[Tuple[str, str]]] = {
|
| 46 |
+
# ==========================================
|
| 47 |
+
# POSITIVE EMOTIONS - HIGH AROUSAL
|
| 48 |
+
# ==========================================
|
| 49 |
+
"joy": [
|
| 50 |
+
("I feel so much joy right now!", "positive"),
|
| 51 |
+
("This brings me pure joy", "positive"),
|
| 52 |
+
("Joy fills my heart", "positive"),
|
| 53 |
+
("What a joyful moment", "positive"),
|
| 54 |
+
("I'm full of joy today", "positive"),
|
| 55 |
+
("This is the best day ever!", "positive"),
|
| 56 |
+
("Everything is going perfectly!", "positive"),
|
| 57 |
+
],
|
| 58 |
+
"happiness": [
|
| 59 |
+
("I am so happy today!", "positive"),
|
| 60 |
+
("This makes me really happy", "positive"),
|
| 61 |
+
("I feel happy and content", "positive"),
|
| 62 |
+
("Happiness is all around", "positive"),
|
| 63 |
+
("I'm genuinely happy", "positive"),
|
| 64 |
+
("I am good", "positive"),
|
| 65 |
+
("I'm doing great", "positive"),
|
| 66 |
+
("Life is beautiful", "positive"),
|
| 67 |
+
("Things are going well", "positive"),
|
| 68 |
+
("I'm in a good mood", "positive"),
|
| 69 |
+
],
|
| 70 |
+
"excitement": [
|
| 71 |
+
("I'm so excited about this!", "positive"),
|
| 72 |
+
("This is really exciting", "positive"),
|
| 73 |
+
("I can't contain my excitement", "positive"),
|
| 74 |
+
("How exciting!", "positive"),
|
| 75 |
+
("I'm thrilled and excited", "positive"),
|
| 76 |
+
("I can't wait!", "positive"),
|
| 77 |
+
("This is going to be amazing!", "positive"),
|
| 78 |
+
("I'm pumped up!", "positive"),
|
| 79 |
+
],
|
| 80 |
+
"ecstasy": [
|
| 81 |
+
("I'm in absolute ecstasy!", "positive"),
|
| 82 |
+
("This is pure ecstasy", "positive"),
|
| 83 |
+
("Ecstatic about the news", "positive"),
|
| 84 |
+
("I feel ecstatic", "positive"),
|
| 85 |
+
("What ecstasy!", "positive"),
|
| 86 |
+
("I've never been happier!", "positive"),
|
| 87 |
+
("This is beyond amazing!", "positive"),
|
| 88 |
+
],
|
| 89 |
+
"elation": [
|
| 90 |
+
("I'm elated by the results", "positive"),
|
| 91 |
+
("Such elation!", "positive"),
|
| 92 |
+
("I feel elated", "positive"),
|
| 93 |
+
("Elation washes over me", "positive"),
|
| 94 |
+
("I'm absolutely elated", "positive"),
|
| 95 |
+
],
|
| 96 |
+
"euphoria": [
|
| 97 |
+
("I'm in a state of euphoria", "positive"),
|
| 98 |
+
("Pure euphoria right now", "positive"),
|
| 99 |
+
("This euphoric feeling", "positive"),
|
| 100 |
+
("I feel euphoric", "positive"),
|
| 101 |
+
("Euphoria takes over", "positive"),
|
| 102 |
+
],
|
| 103 |
+
"thrill": [
|
| 104 |
+
("What a thrill!", "positive"),
|
| 105 |
+
("I'm thrilled about this", "positive"),
|
| 106 |
+
("This is thrilling", "positive"),
|
| 107 |
+
("I feel thrilled", "positive"),
|
| 108 |
+
("Such a thrilling experience", "positive"),
|
| 109 |
+
],
|
| 110 |
+
"delight": [
|
| 111 |
+
("I'm delighted to hear that", "positive"),
|
| 112 |
+
("What a delight!", "positive"),
|
| 113 |
+
("This is delightful", "positive"),
|
| 114 |
+
("I'm absolutely delighted", "positive"),
|
| 115 |
+
("Such delight!", "positive"),
|
| 116 |
+
],
|
| 117 |
+
"cheerfulness": [
|
| 118 |
+
("I'm feeling cheerful today", "positive"),
|
| 119 |
+
("Such cheerfulness around", "positive"),
|
| 120 |
+
("Cheerful vibes only", "positive"),
|
| 121 |
+
("I feel cheerful", "positive"),
|
| 122 |
+
("What a cheerful day", "positive"),
|
| 123 |
+
],
|
| 124 |
+
"enthusiasm": [
|
| 125 |
+
("I'm very enthusiastic about this project", "positive"),
|
| 126 |
+
("My enthusiasm is through the roof", "positive"),
|
| 127 |
+
("I feel enthusiastic and eager", "positive"),
|
| 128 |
+
("Such enthusiasm!", "positive"),
|
| 129 |
+
("I'm enthusiastically looking forward to it", "positive"),
|
| 130 |
+
],
|
| 131 |
+
|
| 132 |
+
# ==========================================
|
| 133 |
+
# POSITIVE EMOTIONS - MEDIUM AROUSAL
|
| 134 |
+
# ==========================================
|
| 135 |
+
"contentment": [
|
| 136 |
+
("I feel content with my life", "positive"),
|
| 137 |
+
("Such contentment", "positive"),
|
| 138 |
+
("I'm content and at peace", "positive"),
|
| 139 |
+
("Contentment fills me", "positive"),
|
| 140 |
+
("I feel okay", "positive"),
|
| 141 |
+
("I'm fine", "positive"),
|
| 142 |
+
("All is well", "positive"),
|
| 143 |
+
],
|
| 144 |
+
"satisfaction": [
|
| 145 |
+
("I'm satisfied with the outcome", "positive"),
|
| 146 |
+
("Great satisfaction", "positive"),
|
| 147 |
+
("I feel satisfied", "positive"),
|
| 148 |
+
("Satisfaction guaranteed", "positive"),
|
| 149 |
+
("Very satisfying", "positive"),
|
| 150 |
+
("That hit the spot", "positive"),
|
| 151 |
+
],
|
| 152 |
+
"serenity": [
|
| 153 |
+
("I feel serene and calm", "positive"),
|
| 154 |
+
("Such serenity", "positive"),
|
| 155 |
+
("Serenity now", "positive"),
|
| 156 |
+
("A serene feeling", "positive"),
|
| 157 |
+
("I'm at peace and serene", "positive"),
|
| 158 |
+
],
|
| 159 |
+
"calm": [
|
| 160 |
+
("I feel calm and relaxed", "positive"),
|
| 161 |
+
("So calm right now", "positive"),
|
| 162 |
+
("Calmness washes over me", "positive"),
|
| 163 |
+
("I'm staying calm", "positive"),
|
| 164 |
+
("Very calm today", "positive"),
|
| 165 |
+
("I'm at peace", "positive"),
|
| 166 |
+
("Feeling zen", "positive"),
|
| 167 |
+
],
|
| 168 |
+
"relaxed": [
|
| 169 |
+
("I'm feeling relaxed", "positive"),
|
| 170 |
+
("So relaxed right now", "positive"),
|
| 171 |
+
("I feel relaxed and happy", "positive"),
|
| 172 |
+
("Relaxed vibes", "positive"),
|
| 173 |
+
("Totally relaxed", "positive"),
|
| 174 |
+
("Chilling out", "positive"),
|
| 175 |
+
],
|
| 176 |
+
"relief": [
|
| 177 |
+
("What a relief!", "positive"),
|
| 178 |
+
("I feel relieved", "positive"),
|
| 179 |
+
("Such relief", "positive"),
|
| 180 |
+
("I'm so relieved", "positive"),
|
| 181 |
+
("Relief washes over me", "positive"),
|
| 182 |
+
("Phew, that's over", "positive"),
|
| 183 |
+
],
|
| 184 |
+
"pride": [
|
| 185 |
+
("I'm so proud of this", "positive"),
|
| 186 |
+
("Pride in my work", "positive"),
|
| 187 |
+
("I feel proud", "positive"),
|
| 188 |
+
("Such pride", "positive"),
|
| 189 |
+
("I'm proud of myself", "positive"),
|
| 190 |
+
("I did it!", "positive"),
|
| 191 |
+
("I accomplished my goal", "positive"),
|
| 192 |
+
],
|
| 193 |
+
"confidence": [
|
| 194 |
+
("I feel confident about this", "positive"),
|
| 195 |
+
("Confidence is high", "positive"),
|
| 196 |
+
("I'm confident", "positive"),
|
| 197 |
+
("Such confidence", "positive"),
|
| 198 |
+
("I feel self-confident", "positive"),
|
| 199 |
+
("I know I can do this", "positive"),
|
| 200 |
+
],
|
| 201 |
+
"pleasure": [
|
| 202 |
+
("It's my pleasure", "positive"),
|
| 203 |
+
("Such pleasure", "positive"),
|
| 204 |
+
("I feel pleasure", "positive"),
|
| 205 |
+
("What a pleasure", "positive"),
|
| 206 |
+
("Pure pleasure", "positive"),
|
| 207 |
+
],
|
| 208 |
+
|
| 209 |
+
# ==========================================
|
| 210 |
+
# LOVE & AFFECTION
|
| 211 |
+
# ==========================================
|
| 212 |
+
"love": [
|
| 213 |
+
("I love this so much!", "positive"),
|
| 214 |
+
("I'm in love", "positive"),
|
| 215 |
+
("Love is in the air", "positive"),
|
| 216 |
+
("I love you", "positive"),
|
| 217 |
+
("Such love", "positive"),
|
| 218 |
+
("My heart is full of love", "positive"),
|
| 219 |
+
("I adore you", "positive"),
|
| 220 |
+
],
|
| 221 |
+
"adoration": [
|
| 222 |
+
("I adore this", "positive"),
|
| 223 |
+
("Such adoration", "positive"),
|
| 224 |
+
("I feel adoration", "positive"),
|
| 225 |
+
("Adoring this moment", "positive"),
|
| 226 |
+
("I absolutely adore it", "positive"),
|
| 227 |
+
],
|
| 228 |
+
"affection": [
|
| 229 |
+
("I feel great affection", "positive"),
|
| 230 |
+
("Such affection", "positive"),
|
| 231 |
+
("Affection for everyone", "positive"),
|
| 232 |
+
("I feel affectionate", "positive"),
|
| 233 |
+
("Showing affection", "positive"),
|
| 234 |
+
("You mean so much to me", "positive"),
|
| 235 |
+
],
|
| 236 |
+
"tenderness": [
|
| 237 |
+
("Such tenderness", "positive"),
|
| 238 |
+
("I feel tender", "positive"),
|
| 239 |
+
("Tenderness in my heart", "positive"),
|
| 240 |
+
("A tender feeling", "positive"),
|
| 241 |
+
("Tender moments", "positive"),
|
| 242 |
+
],
|
| 243 |
+
"caring": [
|
| 244 |
+
("I really care about you", "positive"),
|
| 245 |
+
("Such caring", "positive"),
|
| 246 |
+
("I feel caring", "positive"),
|
| 247 |
+
("Caring deeply", "positive"),
|
| 248 |
+
("I'm caring for you", "positive"),
|
| 249 |
+
],
|
| 250 |
+
"compassion": [
|
| 251 |
+
("I feel compassion for them", "positive"),
|
| 252 |
+
("Such compassion", "positive"),
|
| 253 |
+
("Compassionate response", "positive"),
|
| 254 |
+
("I'm compassionate", "positive"),
|
| 255 |
+
("Showing compassion", "positive"),
|
| 256 |
+
],
|
| 257 |
+
"empathy": [
|
| 258 |
+
("I feel empathy for your situation", "positive"),
|
| 259 |
+
("Such empathy", "positive"),
|
| 260 |
+
("I'm empathetic", "positive"),
|
| 261 |
+
("Empathy is important", "positive"),
|
| 262 |
+
("Showing empathy", "positive"),
|
| 263 |
+
("I understand how you feel", "positive"),
|
| 264 |
+
],
|
| 265 |
+
"gratitude": [
|
| 266 |
+
("I'm so grateful for this", "positive"),
|
| 267 |
+
("Gratitude fills my heart", "positive"),
|
| 268 |
+
("Thank you so much", "positive"),
|
| 269 |
+
("I feel grateful", "positive"),
|
| 270 |
+
("Such gratitude", "positive"),
|
| 271 |
+
("I really appreciate this", "positive"),
|
| 272 |
+
("Thanks a lot!", "positive"),
|
| 273 |
+
],
|
| 274 |
+
|
| 275 |
+
# ==========================================
|
| 276 |
+
# INTEREST & CURIOSITY
|
| 277 |
+
# ==========================================
|
| 278 |
+
"curiosity": [
|
| 279 |
+
("I'm curious about this", "positive"),
|
| 280 |
+
("Such curiosity", "positive"),
|
| 281 |
+
("I feel curious", "positive"),
|
| 282 |
+
("Curiosity got me", "positive"),
|
| 283 |
+
("I'm really curious", "positive"),
|
| 284 |
+
("I wonder what that is", "positive"),
|
| 285 |
+
("Tell me more", "positive"),
|
| 286 |
+
],
|
| 287 |
+
"interest": [
|
| 288 |
+
("I'm interested in learning more", "positive"),
|
| 289 |
+
("Such interest", "positive"),
|
| 290 |
+
("I feel interested", "positive"),
|
| 291 |
+
("This is interesting", "positive"),
|
| 292 |
+
("I'm very interested", "positive"),
|
| 293 |
+
("That's fascinating", "positive"),
|
| 294 |
+
],
|
| 295 |
+
"fascination": [
|
| 296 |
+
("I'm fascinated by this", "positive"),
|
| 297 |
+
("Such fascination", "positive"),
|
| 298 |
+
("I feel fascinated", "positive"),
|
| 299 |
+
("Fascinating!", "positive"),
|
| 300 |
+
("I'm absolutely fascinated", "positive"),
|
| 301 |
+
],
|
| 302 |
+
"wonder": [
|
| 303 |
+
("I wonder about this", "positive"),
|
| 304 |
+
("Such wonder", "positive"),
|
| 305 |
+
("I feel wonder", "positive"),
|
| 306 |
+
("Wonderful!", "positive"),
|
| 307 |
+
("I'm in wonder", "positive"),
|
| 308 |
+
],
|
| 309 |
+
"awe": [
|
| 310 |
+
("I'm in awe", "positive"),
|
| 311 |
+
("Such awe", "positive"),
|
| 312 |
+
("I feel awe", "positive"),
|
| 313 |
+
("Awe-inspiring", "positive"),
|
| 314 |
+
("I'm awestruck", "positive"),
|
| 315 |
+
],
|
| 316 |
+
"amazement": [
|
| 317 |
+
("I'm amazed!", "positive"),
|
| 318 |
+
("Such amazement", "positive"),
|
| 319 |
+
("I feel amazed", "positive"),
|
| 320 |
+
("Amazing!", "positive"),
|
| 321 |
+
("I'm absolutely amazed", "positive"),
|
| 322 |
+
],
|
| 323 |
+
"intrigue": [
|
| 324 |
+
("I'm intrigued", "positive"),
|
| 325 |
+
("Such intrigue", "positive"),
|
| 326 |
+
("I feel intrigued", "positive"),
|
| 327 |
+
("Intriguing!", "positive"),
|
| 328 |
+
("Very intriguing", "positive"),
|
| 329 |
+
],
|
| 330 |
+
|
| 331 |
+
# ==========================================
|
| 332 |
+
# SURPRISE (can be positive or negative based on context)
|
| 333 |
+
# ==========================================
|
| 334 |
+
"surprise": [
|
| 335 |
+
("What a surprise!", "positive"),
|
| 336 |
+
("I'm surprised", "positive"),
|
| 337 |
+
("Such a surprise", "positive"),
|
| 338 |
+
("Surprising!", "positive"),
|
| 339 |
+
("I'm pleasantly surprised", "positive"),
|
| 340 |
+
("I didn't expect that!", "positive"),
|
| 341 |
+
],
|
| 342 |
+
"astonishment": [
|
| 343 |
+
("I'm astonished!", "positive"),
|
| 344 |
+
("Such astonishment", "positive"),
|
| 345 |
+
("I feel astonished", "positive"),
|
| 346 |
+
("Astonishing!", "positive"),
|
| 347 |
+
("I'm absolutely astonished", "positive"),
|
| 348 |
+
],
|
| 349 |
+
"shock": [
|
| 350 |
+
("I'm in shock", "negative"),
|
| 351 |
+
("Shocking news", "negative"),
|
| 352 |
+
("I feel shocked", "negative"),
|
| 353 |
+
("What a shock", "negative"),
|
| 354 |
+
("I'm completely shocked", "negative"),
|
| 355 |
+
("I can't believe this happened", "negative"),
|
| 356 |
+
],
|
| 357 |
+
|
| 358 |
+
# ==========================================
|
| 359 |
+
# NEUTRAL / THINKING - EXPANDED FOR V2
|
| 360 |
+
# ==========================================
|
| 361 |
+
"neutral": [
|
| 362 |
+
("The weather is average today", "neutral"),
|
| 363 |
+
("It's just okay", "neutral"),
|
| 364 |
+
("Nothing special", "neutral"),
|
| 365 |
+
("I don't have strong feelings", "neutral"),
|
| 366 |
+
("It is what it is", "neutral"),
|
| 367 |
+
("No comment", "neutral"),
|
| 368 |
+
("I have no opinion", "neutral"),
|
| 369 |
+
("It doesn't matter to me", "neutral"),
|
| 370 |
+
("I'm indifferent", "neutral"),
|
| 371 |
+
("Whatever", "neutral"),
|
| 372 |
+
("It's neither good nor bad", "neutral"),
|
| 373 |
+
("The meeting is at 3pm", "neutral"),
|
| 374 |
+
("The sky is blue", "neutral"),
|
| 375 |
+
],
|
| 376 |
+
"thinking": [
|
| 377 |
+
("I'm thinking about it", "neutral"),
|
| 378 |
+
("Let me think", "neutral"),
|
| 379 |
+
("I need to think", "neutral"),
|
| 380 |
+
("Thinking hard", "neutral"),
|
| 381 |
+
("I'm contemplating", "neutral"),
|
| 382 |
+
("Hmm, let me consider", "neutral"),
|
| 383 |
+
("I need to process this", "neutral"),
|
| 384 |
+
("Give me a moment to think", "neutral"),
|
| 385 |
+
("I'm pondering", "neutral"),
|
| 386 |
+
("Let me reflect on that", "neutral"),
|
| 387 |
+
],
|
| 388 |
+
"uncertain": [
|
| 389 |
+
("I'm not sure about this", "negative"),
|
| 390 |
+
("Feeling uncertain", "negative"),
|
| 391 |
+
("I'm uncertain", "negative"),
|
| 392 |
+
("Uncertainty lingers", "negative"),
|
| 393 |
+
("I feel unsure", "negative"),
|
| 394 |
+
("I don't know what to do", "negative"),
|
| 395 |
+
("I'm having doubts", "negative"),
|
| 396 |
+
],
|
| 397 |
+
|
| 398 |
+
# ==========================================
|
| 399 |
+
# CONFUSION
|
| 400 |
+
# ==========================================
|
| 401 |
+
"confused": [
|
| 402 |
+
("I'm so confused", "negative"),
|
| 403 |
+
("This is confusing", "negative"),
|
| 404 |
+
("I feel confused", "negative"),
|
| 405 |
+
("Confusion everywhere", "negative"),
|
| 406 |
+
("I'm really confused", "negative"),
|
| 407 |
+
("I don't understand", "negative"),
|
| 408 |
+
("This makes no sense", "negative"),
|
| 409 |
+
],
|
| 410 |
+
"puzzled": [
|
| 411 |
+
("I'm puzzled by this", "negative"),
|
| 412 |
+
("Such a puzzle", "negative"),
|
| 413 |
+
("I feel puzzled", "negative"),
|
| 414 |
+
("Puzzling!", "negative"),
|
| 415 |
+
("I'm quite puzzled", "negative"),
|
| 416 |
+
],
|
| 417 |
+
"perplexed": [
|
| 418 |
+
("I'm perplexed", "negative"),
|
| 419 |
+
("Such perplexity", "negative"),
|
| 420 |
+
("I feel perplexed", "negative"),
|
| 421 |
+
("Perplexing situation", "negative"),
|
| 422 |
+
("I'm thoroughly perplexed", "negative"),
|
| 423 |
+
],
|
| 424 |
+
"bewildered": [
|
| 425 |
+
("I'm bewildered", "negative"),
|
| 426 |
+
("Feeling bewildered", "negative"),
|
| 427 |
+
("I feel bewildered", "negative"),
|
| 428 |
+
("Bewildering!", "negative"),
|
| 429 |
+
("I'm completely bewildered", "negative"),
|
| 430 |
+
],
|
| 431 |
+
"baffled": [
|
| 432 |
+
("I'm baffled by this", "negative"),
|
| 433 |
+
("Such bafflement", "negative"),
|
| 434 |
+
("I feel baffled", "negative"),
|
| 435 |
+
("Baffling!", "negative"),
|
| 436 |
+
("I'm totally baffled", "negative"),
|
| 437 |
+
],
|
| 438 |
+
|
| 439 |
+
# ==========================================
|
| 440 |
+
# SADNESS
|
| 441 |
+
# ==========================================
|
| 442 |
+
"sadness": [
|
| 443 |
+
("I feel so sad", "negative"),
|
| 444 |
+
("Such sadness", "negative"),
|
| 445 |
+
("I'm really sad", "negative"),
|
| 446 |
+
("Sadness fills me", "negative"),
|
| 447 |
+
("I'm feeling sad today", "negative"),
|
| 448 |
+
("This makes me sad", "negative"),
|
| 449 |
+
("I feel down", "negative"),
|
| 450 |
+
],
|
| 451 |
+
"sorrow": [
|
| 452 |
+
("I feel deep sorrow", "negative"),
|
| 453 |
+
("Such sorrow", "negative"),
|
| 454 |
+
("Sorrow in my heart", "negative"),
|
| 455 |
+
("I'm sorrowful", "negative"),
|
| 456 |
+
("Overwhelming sorrow", "negative"),
|
| 457 |
+
],
|
| 458 |
+
"grief": [
|
| 459 |
+
("I'm grieving", "negative"),
|
| 460 |
+
("Such grief", "negative"),
|
| 461 |
+
("I feel grief", "negative"),
|
| 462 |
+
("Grief consumes me", "negative"),
|
| 463 |
+
("Deep grief", "negative"),
|
| 464 |
+
("I'm mourning the loss", "negative"),
|
| 465 |
+
],
|
| 466 |
+
"melancholy": [
|
| 467 |
+
("I feel melancholy", "negative"),
|
| 468 |
+
("Such melancholy", "negative"),
|
| 469 |
+
("A melancholy mood", "negative"),
|
| 470 |
+
("I'm melancholic", "negative"),
|
| 471 |
+
("Melancholy sets in", "negative"),
|
| 472 |
+
],
|
| 473 |
+
"disappointment": [
|
| 474 |
+
("I'm disappointed", "negative"),
|
| 475 |
+
("Such disappointment", "negative"),
|
| 476 |
+
("I feel disappointed", "negative"),
|
| 477 |
+
("Disappointing!", "negative"),
|
| 478 |
+
("I'm really disappointed", "negative"),
|
| 479 |
+
("This let me down", "negative"),
|
| 480 |
+
],
|
| 481 |
+
"despair": [
|
| 482 |
+
("I'm in despair", "negative"),
|
| 483 |
+
("Such despair", "negative"),
|
| 484 |
+
("I feel despair", "negative"),
|
| 485 |
+
("Despair takes over", "negative"),
|
| 486 |
+
("I'm filled with despair", "negative"),
|
| 487 |
+
],
|
| 488 |
+
"loneliness": [
|
| 489 |
+
("I feel so lonely", "negative"),
|
| 490 |
+
("Such loneliness", "negative"),
|
| 491 |
+
("I'm lonely", "negative"),
|
| 492 |
+
("Loneliness consumes me", "negative"),
|
| 493 |
+
("I feel alone", "negative"),
|
| 494 |
+
("I have no one", "negative"),
|
| 495 |
+
],
|
| 496 |
+
"hurt": [
|
| 497 |
+
("I feel hurt", "negative"),
|
| 498 |
+
("That hurts", "negative"),
|
| 499 |
+
("I'm hurt", "negative"),
|
| 500 |
+
("Feeling hurt", "negative"),
|
| 501 |
+
("I'm really hurt", "negative"),
|
| 502 |
+
("You hurt my feelings", "negative"),
|
| 503 |
+
],
|
| 504 |
+
"misery": [
|
| 505 |
+
("I'm miserable", "negative"),
|
| 506 |
+
("Such misery", "negative"),
|
| 507 |
+
("I feel miserable", "negative"),
|
| 508 |
+
("Misery everywhere", "negative"),
|
| 509 |
+
("I'm in misery", "negative"),
|
| 510 |
+
],
|
| 511 |
+
|
| 512 |
+
# ==========================================
|
| 513 |
+
# FEAR & ANXIETY
|
| 514 |
+
# ==========================================
|
| 515 |
+
"fear": [
|
| 516 |
+
("I'm afraid", "negative"),
|
| 517 |
+
("I feel fear", "negative"),
|
| 518 |
+
("Fear grips me", "negative"),
|
| 519 |
+
("I'm scared", "negative"),
|
| 520 |
+
("Such fear", "negative"),
|
| 521 |
+
("I'm frightened", "negative"),
|
| 522 |
+
],
|
| 523 |
+
"terror": [
|
| 524 |
+
("I'm terrified", "negative"),
|
| 525 |
+
("Such terror", "negative"),
|
| 526 |
+
("I feel terror", "negative"),
|
| 527 |
+
("Terrifying!", "negative"),
|
| 528 |
+
("I'm in terror", "negative"),
|
| 529 |
+
],
|
| 530 |
+
"horror": [
|
| 531 |
+
("I'm horrified", "negative"),
|
| 532 |
+
("Such horror", "negative"),
|
| 533 |
+
("I feel horror", "negative"),
|
| 534 |
+
("Horrifying!", "negative"),
|
| 535 |
+
("Horror fills me", "negative"),
|
| 536 |
+
],
|
| 537 |
+
"dread": [
|
| 538 |
+
("I feel dread", "negative"),
|
| 539 |
+
("Such dread", "negative"),
|
| 540 |
+
("I'm dreading it", "negative"),
|
| 541 |
+
("Dreadful!", "negative"),
|
| 542 |
+
("I'm filled with dread", "negative"),
|
| 543 |
+
],
|
| 544 |
+
"anxiety": [
|
| 545 |
+
("I feel anxious", "negative"),
|
| 546 |
+
("Such anxiety", "negative"),
|
| 547 |
+
("I'm anxious", "negative"),
|
| 548 |
+
("Anxiety takes over", "negative"),
|
| 549 |
+
("I'm very anxious", "negative"),
|
| 550 |
+
("I'm having anxiety", "negative"),
|
| 551 |
+
],
|
| 552 |
+
"worry": [
|
| 553 |
+
("I'm worried", "negative"),
|
| 554 |
+
("Such worry", "negative"),
|
| 555 |
+
("I feel worried", "negative"),
|
| 556 |
+
("Worrying about it", "negative"),
|
| 557 |
+
("I'm really worried", "negative"),
|
| 558 |
+
],
|
| 559 |
+
"nervousness": [
|
| 560 |
+
("I'm nervous", "negative"),
|
| 561 |
+
("Such nervousness", "negative"),
|
| 562 |
+
("I feel nervous", "negative"),
|
| 563 |
+
("Nervous about it", "negative"),
|
| 564 |
+
("I'm very nervous", "negative"),
|
| 565 |
+
],
|
| 566 |
+
"apprehension": [
|
| 567 |
+
("I feel apprehensive", "negative"),
|
| 568 |
+
("Such apprehension", "negative"),
|
| 569 |
+
("I'm apprehensive", "negative"),
|
| 570 |
+
("Apprehension sets in", "negative"),
|
| 571 |
+
("I'm filled with apprehension", "negative"),
|
| 572 |
+
],
|
| 573 |
+
"panic": [
|
| 574 |
+
("I'm panicking", "negative"),
|
| 575 |
+
("Such panic", "negative"),
|
| 576 |
+
("I feel panic", "negative"),
|
| 577 |
+
("Panic mode!", "negative"),
|
| 578 |
+
("I'm in a panic", "negative"),
|
| 579 |
+
],
|
| 580 |
+
|
| 581 |
+
# ==========================================
|
| 582 |
+
# ANGER & FRUSTRATION
|
| 583 |
+
# ==========================================
|
| 584 |
+
"anger": [
|
| 585 |
+
("I'm so angry!", "negative"),
|
| 586 |
+
("Such anger", "negative"),
|
| 587 |
+
("I feel angry", "negative"),
|
| 588 |
+
("Anger fills me", "negative"),
|
| 589 |
+
("I'm really angry", "negative"),
|
| 590 |
+
("This makes me mad", "negative"),
|
| 591 |
+
],
|
| 592 |
+
"rage": [
|
| 593 |
+
("I'm in a rage", "negative"),
|
| 594 |
+
("Such rage", "negative"),
|
| 595 |
+
("I feel rage", "negative"),
|
| 596 |
+
("Rage takes over", "negative"),
|
| 597 |
+
("I'm filled with rage", "negative"),
|
| 598 |
+
],
|
| 599 |
+
"fury": [
|
| 600 |
+
("I'm furious!", "negative"),
|
| 601 |
+
("Such fury", "negative"),
|
| 602 |
+
("I feel fury", "negative"),
|
| 603 |
+
("Fury consumes me", "negative"),
|
| 604 |
+
("I'm absolutely furious", "negative"),
|
| 605 |
+
("I'm livid!", "negative"),
|
| 606 |
+
],
|
| 607 |
+
"irritation": [
|
| 608 |
+
("I'm irritated", "negative"),
|
| 609 |
+
("Such irritation", "negative"),
|
| 610 |
+
("I feel irritated", "negative"),
|
| 611 |
+
("Irritating!", "negative"),
|
| 612 |
+
("I'm really irritated", "negative"),
|
| 613 |
+
],
|
| 614 |
+
"annoyance": [
|
| 615 |
+
("I'm annoyed", "negative"),
|
| 616 |
+
("Such annoyance", "negative"),
|
| 617 |
+
("I feel annoyed", "negative"),
|
| 618 |
+
("Annoying!", "negative"),
|
| 619 |
+
("I'm really annoyed", "negative"),
|
| 620 |
+
("This is getting on my nerves", "negative"),
|
| 621 |
+
],
|
| 622 |
+
"frustration": [
|
| 623 |
+
("I'm frustrated!", "negative"),
|
| 624 |
+
("Such frustration", "negative"),
|
| 625 |
+
("I feel frustrated", "negative"),
|
| 626 |
+
("Frustrating!", "negative"),
|
| 627 |
+
("I'm so frustrated", "negative"),
|
| 628 |
+
("Why won't this work!", "negative"),
|
| 629 |
+
],
|
| 630 |
+
"resentment": [
|
| 631 |
+
("I feel resentment", "negative"),
|
| 632 |
+
("Such resentment", "negative"),
|
| 633 |
+
("I'm resentful", "negative"),
|
| 634 |
+
("Resentment builds", "negative"),
|
| 635 |
+
("I'm filled with resentment", "negative"),
|
| 636 |
+
],
|
| 637 |
+
"hostility": [
|
| 638 |
+
("I feel hostile", "negative"),
|
| 639 |
+
("Such hostility", "negative"),
|
| 640 |
+
("I'm hostile", "negative"),
|
| 641 |
+
("Hostility in the air", "negative"),
|
| 642 |
+
("I'm feeling hostile", "negative"),
|
| 643 |
+
],
|
| 644 |
+
"bitterness": [
|
| 645 |
+
("I feel bitter", "negative"),
|
| 646 |
+
("Such bitterness", "negative"),
|
| 647 |
+
("I'm bitter", "negative"),
|
| 648 |
+
("Bitterness takes over", "negative"),
|
| 649 |
+
("I'm really bitter", "negative"),
|
| 650 |
+
],
|
| 651 |
+
|
| 652 |
+
# ==========================================
|
| 653 |
+
# DISGUST & CONTEMPT
|
| 654 |
+
# ==========================================
|
| 655 |
+
"disgust": [
|
| 656 |
+
("I'm disgusted", "negative"),
|
| 657 |
+
("Such disgust", "negative"),
|
| 658 |
+
("I feel disgust", "negative"),
|
| 659 |
+
("Disgusting!", "negative"),
|
| 660 |
+
("I'm really disgusted", "negative"),
|
| 661 |
+
("That's gross", "negative"),
|
| 662 |
+
],
|
| 663 |
+
"revulsion": [
|
| 664 |
+
("I feel revulsion", "negative"),
|
| 665 |
+
("Such revulsion", "negative"),
|
| 666 |
+
("I'm revolted", "negative"),
|
| 667 |
+
("Revolting!", "negative"),
|
| 668 |
+
("I feel revolted", "negative"),
|
| 669 |
+
],
|
| 670 |
+
"contempt": [
|
| 671 |
+
("I feel contempt", "negative"),
|
| 672 |
+
("Such contempt", "negative"),
|
| 673 |
+
("I'm contemptuous", "negative"),
|
| 674 |
+
("Contempt for this", "negative"),
|
| 675 |
+
("I'm filled with contempt", "negative"),
|
| 676 |
+
],
|
| 677 |
+
"disdain": [
|
| 678 |
+
("I feel disdain", "negative"),
|
| 679 |
+
("Such disdain", "negative"),
|
| 680 |
+
("I'm disdainful", "negative"),
|
| 681 |
+
("Disdain for this", "negative"),
|
| 682 |
+
("I'm filled with disdain", "negative"),
|
| 683 |
+
],
|
| 684 |
+
"scorn": [
|
| 685 |
+
("I feel scorn", "negative"),
|
| 686 |
+
("Such scorn", "negative"),
|
| 687 |
+
("I'm scornful", "negative"),
|
| 688 |
+
("Scorn for this", "negative"),
|
| 689 |
+
("I'm filled with scorn", "negative"),
|
| 690 |
+
],
|
| 691 |
+
|
| 692 |
+
# ==========================================
|
| 693 |
+
# SHAME & EMBARRASSMENT
|
| 694 |
+
# ==========================================
|
| 695 |
+
"shame": [
|
| 696 |
+
("I feel ashamed", "negative"),
|
| 697 |
+
("Such shame", "negative"),
|
| 698 |
+
("I'm ashamed", "negative"),
|
| 699 |
+
("Shame on me", "negative"),
|
| 700 |
+
("I'm filled with shame", "negative"),
|
| 701 |
+
],
|
| 702 |
+
"embarrassment": [
|
| 703 |
+
("I'm embarrassed", "negative"),
|
| 704 |
+
("Such embarrassment", "negative"),
|
| 705 |
+
("I feel embarrassed", "negative"),
|
| 706 |
+
("Embarrassing!", "negative"),
|
| 707 |
+
("I'm really embarrassed", "negative"),
|
| 708 |
+
("That was awkward", "negative"),
|
| 709 |
+
("I want to hide", "negative"),
|
| 710 |
+
],
|
| 711 |
+
"guilt": [
|
| 712 |
+
("I feel guilty", "negative"),
|
| 713 |
+
("Such guilt", "negative"),
|
| 714 |
+
("I'm guilty", "negative"),
|
| 715 |
+
("Guilt consumes me", "negative"),
|
| 716 |
+
("I'm filled with guilt", "negative"),
|
| 717 |
+
],
|
| 718 |
+
"regret": [
|
| 719 |
+
("I regret this", "negative"),
|
| 720 |
+
("Such regret", "negative"),
|
| 721 |
+
("I feel regret", "negative"),
|
| 722 |
+
("Regretful!", "negative"),
|
| 723 |
+
("I'm filled with regret", "negative"),
|
| 724 |
+
],
|
| 725 |
+
"remorse": [
|
| 726 |
+
("I feel remorse", "negative"),
|
| 727 |
+
("Such remorse", "negative"),
|
| 728 |
+
("I'm remorseful", "negative"),
|
| 729 |
+
("Remorse takes over", "negative"),
|
| 730 |
+
("I'm filled with remorse", "negative"),
|
| 731 |
+
],
|
| 732 |
+
"humiliation": [
|
| 733 |
+
("I feel humiliated", "negative"),
|
| 734 |
+
("Such humiliation", "negative"),
|
| 735 |
+
("I'm humiliated", "negative"),
|
| 736 |
+
("Humiliating!", "negative"),
|
| 737 |
+
("I'm filled with humiliation", "negative"),
|
| 738 |
+
],
|
| 739 |
+
|
| 740 |
+
# ==========================================
|
| 741 |
+
# BOREDOM & TIREDNESS
|
| 742 |
+
# ==========================================
|
| 743 |
+
"boredom": [
|
| 744 |
+
("I'm bored", "negative"),
|
| 745 |
+
("Such boredom", "negative"),
|
| 746 |
+
("I feel bored", "negative"),
|
| 747 |
+
("Boring!", "negative"),
|
| 748 |
+
("I'm really bored", "negative"),
|
| 749 |
+
("There's nothing to do", "negative"),
|
| 750 |
+
],
|
| 751 |
+
"tiredness": [
|
| 752 |
+
("I'm tired", "negative"),
|
| 753 |
+
("Such tiredness", "negative"),
|
| 754 |
+
("I feel tired", "negative"),
|
| 755 |
+
("Tiring!", "negative"),
|
| 756 |
+
("I'm really tired", "negative"),
|
| 757 |
+
("I need rest", "negative"),
|
| 758 |
+
],
|
| 759 |
+
"exhaustion": [
|
| 760 |
+
("I'm exhausted", "negative"),
|
| 761 |
+
("Such exhaustion", "negative"),
|
| 762 |
+
("I feel exhausted", "negative"),
|
| 763 |
+
("Exhausting!", "negative"),
|
| 764 |
+
("I'm completely exhausted", "negative"),
|
| 765 |
+
],
|
| 766 |
+
"fatigue": [
|
| 767 |
+
("I feel fatigued", "negative"),
|
| 768 |
+
("Such fatigue", "negative"),
|
| 769 |
+
("I'm fatigued", "negative"),
|
| 770 |
+
("Fatigue sets in", "negative"),
|
| 771 |
+
("I'm feeling fatigue", "negative"),
|
| 772 |
+
],
|
| 773 |
+
"weariness": [
|
| 774 |
+
("I feel weary", "negative"),
|
| 775 |
+
("Such weariness", "negative"),
|
| 776 |
+
("I'm weary", "negative"),
|
| 777 |
+
("Weariness takes over", "negative"),
|
| 778 |
+
("I'm feeling weary", "negative"),
|
| 779 |
+
],
|
| 780 |
+
|
| 781 |
+
# ==========================================
|
| 782 |
+
# ENVY & JEALOUSY
|
| 783 |
+
# ==========================================
|
| 784 |
+
"envy": [
|
| 785 |
+
("I feel envious", "negative"),
|
| 786 |
+
("Such envy", "negative"),
|
| 787 |
+
("I'm envious", "negative"),
|
| 788 |
+
("Envy takes over", "negative"),
|
| 789 |
+
("I'm filled with envy", "negative"),
|
| 790 |
+
("I wish I had that", "negative"),
|
| 791 |
+
],
|
| 792 |
+
"jealousy": [
|
| 793 |
+
("I feel jealous", "negative"),
|
| 794 |
+
("Such jealousy", "negative"),
|
| 795 |
+
("I'm jealous", "negative"),
|
| 796 |
+
("Jealousy consumes me", "negative"),
|
| 797 |
+
("I'm really jealous", "negative"),
|
| 798 |
+
],
|
| 799 |
+
|
| 800 |
+
# ==========================================
|
| 801 |
+
# PLAYFUL & SILLY - EXPANDED FOR V2
|
| 802 |
+
# ==========================================
|
| 803 |
+
"playful": [
|
| 804 |
+
("I'm feeling playful", "positive"),
|
| 805 |
+
("Such playfulness", "positive"),
|
| 806 |
+
("Playful mood", "positive"),
|
| 807 |
+
("I'm in a playful mood", "positive"),
|
| 808 |
+
("Being playful", "positive"),
|
| 809 |
+
("Let's have some fun!", "positive"),
|
| 810 |
+
("I'm just goofing around", "positive"),
|
| 811 |
+
],
|
| 812 |
+
"silly": [
|
| 813 |
+
("I'm feeling silly", "positive"),
|
| 814 |
+
("Such silliness", "positive"),
|
| 815 |
+
("Silly mood", "positive"),
|
| 816 |
+
("I'm being silly", "positive"),
|
| 817 |
+
("Feeling silly", "positive"),
|
| 818 |
+
("That's so silly!", "positive"),
|
| 819 |
+
("I'm acting goofy", "positive"),
|
| 820 |
+
("Just being ridiculous", "positive"),
|
| 821 |
+
],
|
| 822 |
+
"mischievous": [
|
| 823 |
+
("I'm feeling mischievous", "positive"),
|
| 824 |
+
("Such mischief", "positive"),
|
| 825 |
+
("Mischievous mood", "positive"),
|
| 826 |
+
("I'm being mischievous", "positive"),
|
| 827 |
+
("Feeling mischievous", "positive"),
|
| 828 |
+
("I'm up to no good", "positive"),
|
| 829 |
+
],
|
| 830 |
+
"amusement": [
|
| 831 |
+
("I'm amused", "positive"),
|
| 832 |
+
("Such amusement", "positive"),
|
| 833 |
+
("I feel amused", "positive"),
|
| 834 |
+
("Amusing!", "positive"),
|
| 835 |
+
("I'm really amused", "positive"),
|
| 836 |
+
("LOL", "positive"),
|
| 837 |
+
("haha", "positive"),
|
| 838 |
+
("That's hilarious!", "positive"),
|
| 839 |
+
("I can't stop laughing", "positive"),
|
| 840 |
+
("LMAO", "positive"),
|
| 841 |
+
("😂", "positive"),
|
| 842 |
+
],
|
| 843 |
+
|
| 844 |
+
# ==========================================
|
| 845 |
+
# SPECIAL STATES - EXPANDED FOR V2
|
| 846 |
+
# ==========================================
|
| 847 |
+
"sympathy": [
|
| 848 |
+
("I feel sympathy for you", "positive"),
|
| 849 |
+
("Such sympathy", "positive"),
|
| 850 |
+
("I'm sympathetic", "positive"),
|
| 851 |
+
("Sympathy for your loss", "positive"),
|
| 852 |
+
("I feel sympathetic", "positive"),
|
| 853 |
+
("I'm sorry for what happened", "positive"),
|
| 854 |
+
("My heart goes out to you", "positive"),
|
| 855 |
+
("I feel for you", "positive"),
|
| 856 |
+
],
|
| 857 |
+
"nostalgia": [
|
| 858 |
+
("I feel nostalgic", "positive"),
|
| 859 |
+
("Such nostalgia", "positive"),
|
| 860 |
+
("I'm nostalgic", "positive"),
|
| 861 |
+
("Nostalgia hits", "positive"),
|
| 862 |
+
("Feeling nostalgic", "positive"),
|
| 863 |
+
("Those were the good old days", "positive"),
|
| 864 |
+
("I remember when...", "positive"),
|
| 865 |
+
],
|
| 866 |
+
"hope": [
|
| 867 |
+
("I feel hopeful", "positive"),
|
| 868 |
+
("Such hope", "positive"),
|
| 869 |
+
("I'm hopeful", "positive"),
|
| 870 |
+
("Hope is alive", "positive"),
|
| 871 |
+
("I have hope", "positive"),
|
| 872 |
+
("Things will get better", "positive"),
|
| 873 |
+
("I'm looking forward to it", "positive"),
|
| 874 |
+
],
|
| 875 |
+
"optimism": [
|
| 876 |
+
("I feel optimistic", "positive"),
|
| 877 |
+
("Such optimism", "positive"),
|
| 878 |
+
("I'm optimistic", "positive"),
|
| 879 |
+
("Optimism takes over", "positive"),
|
| 880 |
+
("I'm feeling optimistic", "positive"),
|
| 881 |
+
("The future looks bright", "positive"),
|
| 882 |
+
],
|
| 883 |
+
"pessimism": [
|
| 884 |
+
("I feel pessimistic", "negative"),
|
| 885 |
+
("Such pessimism", "negative"),
|
| 886 |
+
("I'm pessimistic", "negative"),
|
| 887 |
+
("Pessimism sets in", "negative"),
|
| 888 |
+
("I'm feeling pessimistic", "negative"),
|
| 889 |
+
("Nothing good will happen", "negative"),
|
| 890 |
+
],
|
| 891 |
+
"longing": [
|
| 892 |
+
("I'm longing for you", "negative"),
|
| 893 |
+
("Such longing", "negative"),
|
| 894 |
+
("I feel longing", "negative"),
|
| 895 |
+
("Longing for the past", "negative"),
|
| 896 |
+
("I miss you", "negative"),
|
| 897 |
+
("I wish things were different", "negative"),
|
| 898 |
+
("If only...", "negative"),
|
| 899 |
+
],
|
| 900 |
+
"yearning": [
|
| 901 |
+
("I'm yearning for this", "negative"),
|
| 902 |
+
("Such yearning", "negative"),
|
| 903 |
+
("I feel yearning", "negative"),
|
| 904 |
+
("Yearning for more", "negative"),
|
| 905 |
+
("I'm filled with yearning", "negative"),
|
| 906 |
+
],
|
| 907 |
+
|
| 908 |
+
# ==========================================
|
| 909 |
+
# NEW IN V2: ADDITIONAL EMOTIONS
|
| 910 |
+
# ==========================================
|
| 911 |
+
"determination": [
|
| 912 |
+
("I'm determined to succeed", "positive"),
|
| 913 |
+
("Such determination", "positive"),
|
| 914 |
+
("I feel determined", "positive"),
|
| 915 |
+
("Nothing will stop me", "positive"),
|
| 916 |
+
("I won't give up", "positive"),
|
| 917 |
+
],
|
| 918 |
+
"inspiration": [
|
| 919 |
+
("I feel inspired", "positive"),
|
| 920 |
+
("Such inspiration", "positive"),
|
| 921 |
+
("I'm inspired", "positive"),
|
| 922 |
+
("This is inspiring", "positive"),
|
| 923 |
+
("Feeling inspired", "positive"),
|
| 924 |
+
],
|
| 925 |
+
"anticipation": [
|
| 926 |
+
("I'm looking forward to this", "positive"),
|
| 927 |
+
("Such anticipation", "positive"),
|
| 928 |
+
("I feel anticipation", "positive"),
|
| 929 |
+
("I can't wait to see what happens", "positive"),
|
| 930 |
+
("Eagerly anticipating", "positive"),
|
| 931 |
+
],
|
| 932 |
+
"trust": [
|
| 933 |
+
("I trust you", "positive"),
|
| 934 |
+
("Such trust", "positive"),
|
| 935 |
+
("I feel trust", "positive"),
|
| 936 |
+
("I have faith in you", "positive"),
|
| 937 |
+
("I believe in you", "positive"),
|
| 938 |
+
],
|
| 939 |
+
"acceptance": [
|
| 940 |
+
("I accept this", "positive"),
|
| 941 |
+
("Such acceptance", "positive"),
|
| 942 |
+
("I feel acceptance", "positive"),
|
| 943 |
+
("I've come to accept it", "positive"),
|
| 944 |
+
("I'm at peace with it", "positive"),
|
| 945 |
+
],
|
| 946 |
+
"sarcasm": [
|
| 947 |
+
("Oh great, just what I needed", "negative"),
|
| 948 |
+
("Yeah, that's exactly what I wanted", "negative"),
|
| 949 |
+
("Oh wonderful", "negative"),
|
| 950 |
+
("Wow, fantastic", "negative"),
|
| 951 |
+
("Just perfect", "negative"),
|
| 952 |
+
],
|
| 953 |
+
}
|
| 954 |
+
|
| 955 |
+
def get_all_emotions(self) -> List[str]:
|
| 956 |
+
"""Get list of all emotions in the test suite"""
|
| 957 |
+
return list(self.EMOTION_TEST_DATA.keys())
|
| 958 |
+
|
| 959 |
+
def get_test_cases(self, emotion: str) -> List[Tuple[str, str]]:
|
| 960 |
+
"""Get test cases for a specific emotion"""
|
| 961 |
+
return self.EMOTION_TEST_DATA.get(emotion, [])
|
| 962 |
+
|
| 963 |
+
def get_all_test_cases(self) -> List[EmotionTestCase]:
|
| 964 |
+
"""Get all test cases as EmotionTestCase objects"""
|
| 965 |
+
cases = []
|
| 966 |
+
for emotion, tests in self.EMOTION_TEST_DATA.items():
|
| 967 |
+
for text, polarity in tests:
|
| 968 |
+
cases.append(EmotionTestCase(
|
| 969 |
+
emotion=emotion,
|
| 970 |
+
text=text,
|
| 971 |
+
expected_polarity=polarity,
|
| 972 |
+
category=polarity
|
| 973 |
+
))
|
| 974 |
+
return cases
|
| 975 |
+
|
| 976 |
+
def get_emotion_count(self) -> int:
|
| 977 |
+
"""Get total number of emotions"""
|
| 978 |
+
return len(self.EMOTION_TEST_DATA)
|
| 979 |
+
|
| 980 |
+
def get_test_count(self) -> int:
|
| 981 |
+
"""Get total number of test cases"""
|
| 982 |
+
return sum(len(tests) for tests in self.EMOTION_TEST_DATA.values())
|
| 983 |
+
|
| 984 |
+
|
| 985 |
+
if __name__ == "__main__":
|
| 986 |
+
suite = EmotionTestSuiteV2()
|
| 987 |
+
print(f"Emotion Test Suite V2")
|
| 988 |
+
print(f"Version: {suite.VERSION}")
|
| 989 |
+
print(f"Total emotions: {suite.get_emotion_count()}")
|
| 990 |
+
print(f"Total test cases: {suite.get_test_count()}")
|
| 991 |
+
print(f"\nNew emotions in V2: determination, inspiration, anticipation, trust, acceptance, sarcasm")
|
evaluation/emotion_test_suite_v3.py
ADDED
|
@@ -0,0 +1,877 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Emotion Test Suite V3 - Wheel-based evaluation with similarity scoring
|
| 4 |
+
|
| 5 |
+
Features:
|
| 6 |
+
- Proper test strings for EVERY emotion
|
| 7 |
+
- Similarity-aware scoring (similar emotions = partial credit)
|
| 8 |
+
- Shows detected emotion vs expected
|
| 9 |
+
- Only contradictory emotions are failures
|
| 10 |
+
- Comprehensive coverage of all 125 emotions
|
| 11 |
+
|
| 12 |
+
Version: 3.0.0
|
| 13 |
+
"""
|
| 14 |
+
|
| 15 |
+
from typing import Dict, List, Tuple
|
| 16 |
+
from dataclasses import dataclass
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
@dataclass
|
| 20 |
+
class EmotionTestCase:
|
| 21 |
+
"""Single test case"""
|
| 22 |
+
emotion: str
|
| 23 |
+
text: str
|
| 24 |
+
category: str # Emotion wheel category
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
class EmotionTestSuiteV3:
|
| 28 |
+
"""
|
| 29 |
+
Comprehensive emotion test suite with similarity-aware evaluation
|
| 30 |
+
|
| 31 |
+
Each emotion has 3-5 natural language test strings
|
| 32 |
+
Tests are designed to trigger specific emotions
|
| 33 |
+
"""
|
| 34 |
+
|
| 35 |
+
VERSION = "3.0.0"
|
| 36 |
+
|
| 37 |
+
# Test data: emotion -> [(text, category), ...]
|
| 38 |
+
EMOTION_TEST_DATA: Dict[str, List[Tuple[str, str]]] = {
|
| 39 |
+
|
| 40 |
+
# ══════════════════════════════════════════════════════════════
|
| 41 |
+
# JOY FAMILY - Positive high/medium arousal emotions
|
| 42 |
+
# ══════════════════════════════════════════════════════════════
|
| 43 |
+
|
| 44 |
+
"ecstasy": [
|
| 45 |
+
("This is the best day of my entire life!", "joy"),
|
| 46 |
+
("I've never felt so incredibly alive and happy!", "joy"),
|
| 47 |
+
("Pure bliss is flowing through me right now", "joy"),
|
| 48 |
+
("I'm on top of the world, nothing can bring me down!", "joy"),
|
| 49 |
+
],
|
| 50 |
+
"joy": [
|
| 51 |
+
("I feel so joyful today", "joy"),
|
| 52 |
+
("Joy fills my heart completely", "joy"),
|
| 53 |
+
("What a joyous occasion this is", "joy"),
|
| 54 |
+
("I'm feeling pure joy right now", "joy"),
|
| 55 |
+
],
|
| 56 |
+
"happiness": [
|
| 57 |
+
("I'm so happy right now", "joy"),
|
| 58 |
+
("This makes me really happy", "joy"),
|
| 59 |
+
("Happiness is all I feel", "joy"),
|
| 60 |
+
("I couldn't be happier about this", "joy"),
|
| 61 |
+
],
|
| 62 |
+
"delight": [
|
| 63 |
+
("What a delightful surprise!", "joy"),
|
| 64 |
+
("I'm absolutely delighted by this", "joy"),
|
| 65 |
+
("This is such a delight", "joy"),
|
| 66 |
+
("Delighted to hear the good news", "joy"),
|
| 67 |
+
],
|
| 68 |
+
"elation": [
|
| 69 |
+
("I'm elated about the results", "joy"),
|
| 70 |
+
("Such elation fills me", "joy"),
|
| 71 |
+
("I feel elated and wonderful", "joy"),
|
| 72 |
+
("Elation washes over me completely", "joy"),
|
| 73 |
+
],
|
| 74 |
+
"euphoria": [
|
| 75 |
+
("I'm in a state of pure euphoria", "joy"),
|
| 76 |
+
("This euphoric feeling is amazing", "joy"),
|
| 77 |
+
("Euphoria has taken over", "joy"),
|
| 78 |
+
("I've never felt such euphoria before", "joy"),
|
| 79 |
+
],
|
| 80 |
+
"excitement": [
|
| 81 |
+
("I'm so excited about this!", "joy"),
|
| 82 |
+
("The excitement is overwhelming", "joy"),
|
| 83 |
+
("I can barely contain my excitement", "joy"),
|
| 84 |
+
("This is so exciting!", "joy"),
|
| 85 |
+
("I'm thrilled and excited!", "joy"),
|
| 86 |
+
],
|
| 87 |
+
"thrill": [
|
| 88 |
+
("What a thrill this is!", "joy"),
|
| 89 |
+
("I'm thrilled beyond words", "joy"),
|
| 90 |
+
("The thrill is incredible", "joy"),
|
| 91 |
+
("I feel so thrilled right now", "joy"),
|
| 92 |
+
],
|
| 93 |
+
"enthusiasm": [
|
| 94 |
+
("I'm so enthusiastic about this project", "joy"),
|
| 95 |
+
("My enthusiasm knows no bounds", "joy"),
|
| 96 |
+
("I feel very enthusiastic today", "joy"),
|
| 97 |
+
("Such enthusiasm fills me", "joy"),
|
| 98 |
+
],
|
| 99 |
+
"cheerfulness": [
|
| 100 |
+
("I'm feeling cheerful today", "joy"),
|
| 101 |
+
("Such cheerfulness in the air", "joy"),
|
| 102 |
+
("I woke up feeling cheerful", "joy"),
|
| 103 |
+
("Cheerfulness radiates from me", "joy"),
|
| 104 |
+
],
|
| 105 |
+
"contentment": [
|
| 106 |
+
("I feel content with my life", "joy"),
|
| 107 |
+
("Such contentment fills my heart", "joy"),
|
| 108 |
+
("I'm perfectly content right now", "joy"),
|
| 109 |
+
("Contentment is all I need", "joy"),
|
| 110 |
+
],
|
| 111 |
+
"satisfaction": [
|
| 112 |
+
("I'm satisfied with the outcome", "joy"),
|
| 113 |
+
("Such satisfaction from a job well done", "joy"),
|
| 114 |
+
("I feel deeply satisfied", "joy"),
|
| 115 |
+
("Complete satisfaction achieved", "joy"),
|
| 116 |
+
],
|
| 117 |
+
"pleasure": [
|
| 118 |
+
("It's my pleasure to help", "joy"),
|
| 119 |
+
("What a pleasure this is", "joy"),
|
| 120 |
+
("I take great pleasure in this", "joy"),
|
| 121 |
+
("Such pleasure from this experience", "joy"),
|
| 122 |
+
],
|
| 123 |
+
"relief": [
|
| 124 |
+
("What a relief that's over", "joy"),
|
| 125 |
+
("I feel so relieved now", "joy"),
|
| 126 |
+
("Relief washes over me", "joy"),
|
| 127 |
+
("Finally, some relief!", "joy"),
|
| 128 |
+
],
|
| 129 |
+
"serenity": [
|
| 130 |
+
("I feel so serene and peaceful", "joy"),
|
| 131 |
+
("Serenity surrounds me", "joy"),
|
| 132 |
+
("Such serenity in this moment", "joy"),
|
| 133 |
+
("I'm in a state of serenity", "joy"),
|
| 134 |
+
],
|
| 135 |
+
"calm": [
|
| 136 |
+
("I feel calm and peaceful", "joy"),
|
| 137 |
+
("Everything is calm now", "joy"),
|
| 138 |
+
("I'm feeling very calm today", "joy"),
|
| 139 |
+
("Calm has returned to my mind", "joy"),
|
| 140 |
+
],
|
| 141 |
+
"relaxed": [
|
| 142 |
+
("I'm feeling relaxed and at ease", "joy"),
|
| 143 |
+
("So relaxed right now", "joy"),
|
| 144 |
+
("I feel completely relaxed", "joy"),
|
| 145 |
+
("Relaxation has set in nicely", "joy"),
|
| 146 |
+
],
|
| 147 |
+
"amusement": [
|
| 148 |
+
("That's so amusing!", "joy"),
|
| 149 |
+
("I find this very amusing", "joy"),
|
| 150 |
+
("How amusing this is", "joy"),
|
| 151 |
+
("I'm amused by this situation", "joy"),
|
| 152 |
+
("Lol that's hilarious", "joy"),
|
| 153 |
+
],
|
| 154 |
+
"playful": [
|
| 155 |
+
("I'm feeling playful today", "joy"),
|
| 156 |
+
("Let's be playful and have fun", "joy"),
|
| 157 |
+
("I'm in a playful mood", "joy"),
|
| 158 |
+
("Such a playful atmosphere", "joy"),
|
| 159 |
+
],
|
| 160 |
+
"silly": [
|
| 161 |
+
("I'm feeling silly today", "joy"),
|
| 162 |
+
("That's so silly and fun", "joy"),
|
| 163 |
+
("I'm being silly, I know", "joy"),
|
| 164 |
+
("Feeling goofy and silly", "joy"),
|
| 165 |
+
],
|
| 166 |
+
"mischievous": [
|
| 167 |
+
("I'm feeling a bit mischievous", "joy"),
|
| 168 |
+
("Such mischief in my heart", "joy"),
|
| 169 |
+
("I have a mischievous plan", "joy"),
|
| 170 |
+
("Feeling mischievous today", "joy"),
|
| 171 |
+
],
|
| 172 |
+
"funny": [
|
| 173 |
+
("That's so funny!", "joy"),
|
| 174 |
+
("I find this really funny", "joy"),
|
| 175 |
+
("How funny is that", "joy"),
|
| 176 |
+
("This is hilarious and funny", "joy"),
|
| 177 |
+
],
|
| 178 |
+
"hope": [
|
| 179 |
+
("I have hope for the future", "joy"),
|
| 180 |
+
("Hope fills my heart", "joy"),
|
| 181 |
+
("I'm feeling hopeful today", "joy"),
|
| 182 |
+
("There's still hope", "joy"),
|
| 183 |
+
],
|
| 184 |
+
"optimism": [
|
| 185 |
+
("I'm feeling optimistic about this", "joy"),
|
| 186 |
+
("Optimism guides my way", "joy"),
|
| 187 |
+
("I have an optimistic outlook", "joy"),
|
| 188 |
+
("Such optimism fills me", "joy"),
|
| 189 |
+
],
|
| 190 |
+
|
| 191 |
+
# ══════════════════════════════════════════════════════════════
|
| 192 |
+
# TRUST FAMILY
|
| 193 |
+
# ══════════════════════════════════════════════════════════════
|
| 194 |
+
|
| 195 |
+
"trust": [
|
| 196 |
+
("I trust you completely", "trust"),
|
| 197 |
+
("You have my full trust", "trust"),
|
| 198 |
+
("I feel I can trust this", "trust"),
|
| 199 |
+
("Trust is so important to me", "trust"),
|
| 200 |
+
],
|
| 201 |
+
"acceptance": [
|
| 202 |
+
("I accept this situation", "trust"),
|
| 203 |
+
("Acceptance brings peace", "trust"),
|
| 204 |
+
("I've come to accept it fully", "trust"),
|
| 205 |
+
("I feel acceptance now", "trust"),
|
| 206 |
+
],
|
| 207 |
+
"confidence": [
|
| 208 |
+
("I feel confident about this", "trust"),
|
| 209 |
+
("Confidence is high today", "trust"),
|
| 210 |
+
("I'm confident in my abilities", "trust"),
|
| 211 |
+
("Such confidence fills me", "trust"),
|
| 212 |
+
],
|
| 213 |
+
|
| 214 |
+
# ══════════════════════════════════════════════════════════════
|
| 215 |
+
# LOVE FAMILY (Joy + Trust combination)
|
| 216 |
+
# ══════════════════════════════════════════════════════════════
|
| 217 |
+
|
| 218 |
+
"love": [
|
| 219 |
+
("I love you so much", "love"),
|
| 220 |
+
("My heart is full of love", "love"),
|
| 221 |
+
("I feel so much love right now", "love"),
|
| 222 |
+
("Love is all around us", "love"),
|
| 223 |
+
],
|
| 224 |
+
"adoration": [
|
| 225 |
+
("I absolutely adore you", "love"),
|
| 226 |
+
("Such adoration I feel", "love"),
|
| 227 |
+
("I look at you with adoration", "love"),
|
| 228 |
+
("My adoration knows no bounds", "love"),
|
| 229 |
+
],
|
| 230 |
+
"affection": [
|
| 231 |
+
("I feel such affection for you", "love"),
|
| 232 |
+
("Deep affection fills my heart", "love"),
|
| 233 |
+
("I have great affection here", "love"),
|
| 234 |
+
("Such warm affection I feel", "love"),
|
| 235 |
+
],
|
| 236 |
+
"tenderness": [
|
| 237 |
+
("I feel such tenderness", "love"),
|
| 238 |
+
("Tenderness fills my heart", "love"),
|
| 239 |
+
("Such tender feelings I have", "love"),
|
| 240 |
+
("I'm overcome with tenderness", "love"),
|
| 241 |
+
],
|
| 242 |
+
"caring": [
|
| 243 |
+
("I care about you deeply", "love"),
|
| 244 |
+
("Such caring feelings I have", "love"),
|
| 245 |
+
("I really care about this", "love"),
|
| 246 |
+
("My caring nature shows through", "love"),
|
| 247 |
+
],
|
| 248 |
+
"compassion": [
|
| 249 |
+
("I feel compassion for them", "love"),
|
| 250 |
+
("Compassion guides my actions", "love"),
|
| 251 |
+
("Such compassion in my heart", "love"),
|
| 252 |
+
("I'm moved by compassion", "love"),
|
| 253 |
+
],
|
| 254 |
+
"empathy": [
|
| 255 |
+
("I empathize with your situation", "love"),
|
| 256 |
+
("I feel deep empathy for you", "love"),
|
| 257 |
+
("Empathy connects us all", "love"),
|
| 258 |
+
("I understand how you feel, I empathize", "love"),
|
| 259 |
+
],
|
| 260 |
+
"gratitude": [
|
| 261 |
+
("I'm so grateful for this", "love"),
|
| 262 |
+
("Gratitude fills my heart", "love"),
|
| 263 |
+
("I feel deep gratitude", "love"),
|
| 264 |
+
("Thank you, I'm so grateful", "love"),
|
| 265 |
+
],
|
| 266 |
+
"thankful": [
|
| 267 |
+
("I'm thankful for everything", "love"),
|
| 268 |
+
("So thankful for this moment", "love"),
|
| 269 |
+
("I feel very thankful today", "love"),
|
| 270 |
+
("Thankfulness fills my heart", "love"),
|
| 271 |
+
],
|
| 272 |
+
"sympathy": [
|
| 273 |
+
("I have sympathy for your loss", "love"),
|
| 274 |
+
("My sympathies are with you", "love"),
|
| 275 |
+
("I feel sympathy for them", "love"),
|
| 276 |
+
("Deep sympathy I extend to you", "love"),
|
| 277 |
+
],
|
| 278 |
+
|
| 279 |
+
# ══════════════════════════════════════════════════════════════
|
| 280 |
+
# FEAR FAMILY
|
| 281 |
+
# ══════════════════════════════════════════════════════════════
|
| 282 |
+
|
| 283 |
+
"fear": [
|
| 284 |
+
("I'm afraid of what might happen", "fear"),
|
| 285 |
+
("Fear grips my heart", "fear"),
|
| 286 |
+
("I feel so scared right now", "fear"),
|
| 287 |
+
("Fear is overwhelming me", "fear"),
|
| 288 |
+
],
|
| 289 |
+
"terror": [
|
| 290 |
+
("I'm terrified of this", "fear"),
|
| 291 |
+
("Pure terror runs through me", "fear"),
|
| 292 |
+
("I've never felt such terror", "fear"),
|
| 293 |
+
("Terror has taken hold", "fear"),
|
| 294 |
+
],
|
| 295 |
+
"horror": [
|
| 296 |
+
("I'm horrified by what I saw", "fear"),
|
| 297 |
+
("Such horror fills me", "fear"),
|
| 298 |
+
("I watched in horror", "fear"),
|
| 299 |
+
("The horror is unbearable", "fear"),
|
| 300 |
+
],
|
| 301 |
+
"dread": [
|
| 302 |
+
("I dread what's coming", "fear"),
|
| 303 |
+
("A sense of dread fills me", "fear"),
|
| 304 |
+
("I feel nothing but dread", "fear"),
|
| 305 |
+
("Dread has taken over", "fear"),
|
| 306 |
+
],
|
| 307 |
+
"anxiety": [
|
| 308 |
+
("I'm feeling very anxious", "fear"),
|
| 309 |
+
("Anxiety is overwhelming me", "fear"),
|
| 310 |
+
("Such anxiety I feel", "fear"),
|
| 311 |
+
("My anxiety is through the roof", "fear"),
|
| 312 |
+
],
|
| 313 |
+
"worry": [
|
| 314 |
+
("I'm worried about this", "fear"),
|
| 315 |
+
("Worry consumes my thoughts", "fear"),
|
| 316 |
+
("I can't stop worrying", "fear"),
|
| 317 |
+
("Such worry fills me", "fear"),
|
| 318 |
+
],
|
| 319 |
+
"nervousness": [
|
| 320 |
+
("I'm so nervous right now", "fear"),
|
| 321 |
+
("Nervousness takes over", "fear"),
|
| 322 |
+
("I feel very nervous", "fear"),
|
| 323 |
+
("Such nervousness I have", "fear"),
|
| 324 |
+
],
|
| 325 |
+
"apprehension": [
|
| 326 |
+
("I feel apprehensive about this", "fear"),
|
| 327 |
+
("Apprehension fills me", "fear"),
|
| 328 |
+
("I'm full of apprehension", "fear"),
|
| 329 |
+
("Such apprehension I feel", "fear"),
|
| 330 |
+
],
|
| 331 |
+
"panic": [
|
| 332 |
+
("I'm starting to panic", "fear"),
|
| 333 |
+
("Panic is setting in", "fear"),
|
| 334 |
+
("I feel pure panic", "fear"),
|
| 335 |
+
("Don't panic, but I'm panicking", "fear"),
|
| 336 |
+
],
|
| 337 |
+
|
| 338 |
+
# ══════════════════════════════════════════════════════════════
|
| 339 |
+
# SURPRISE FAMILY
|
| 340 |
+
# ══════════════════════════════════════════════════════════════
|
| 341 |
+
|
| 342 |
+
"surprise": [
|
| 343 |
+
("What a surprise!", "surprise"),
|
| 344 |
+
("I'm so surprised by this", "surprise"),
|
| 345 |
+
("This really surprised me", "surprise"),
|
| 346 |
+
("I didn't expect this surprise", "surprise"),
|
| 347 |
+
],
|
| 348 |
+
"astonishment": [
|
| 349 |
+
("I'm astonished by what happened", "surprise"),
|
| 350 |
+
("Such astonishment I feel", "surprise"),
|
| 351 |
+
("I'm completely astonished", "surprise"),
|
| 352 |
+
("Astonishment overwhelms me", "surprise"),
|
| 353 |
+
],
|
| 354 |
+
"shock": [
|
| 355 |
+
("I'm in shock right now", "surprise"),
|
| 356 |
+
("What a shock this is", "surprise"),
|
| 357 |
+
("I feel shocked by this news", "surprise"),
|
| 358 |
+
("The shock is overwhelming", "surprise"),
|
| 359 |
+
],
|
| 360 |
+
"startled": [
|
| 361 |
+
("I was startled by that", "surprise"),
|
| 362 |
+
("That really startled me", "surprise"),
|
| 363 |
+
("I'm so startled right now", "surprise"),
|
| 364 |
+
("Don't startle me like that", "surprise"),
|
| 365 |
+
],
|
| 366 |
+
"amazement": [
|
| 367 |
+
("I'm amazed by this", "surprise"),
|
| 368 |
+
("Such amazement I feel", "surprise"),
|
| 369 |
+
("I'm completely amazed", "surprise"),
|
| 370 |
+
("Amazement fills me", "surprise"),
|
| 371 |
+
],
|
| 372 |
+
"wonder": [
|
| 373 |
+
("I wonder what will happen", "surprise"),
|
| 374 |
+
("Such wonder in my heart", "surprise"),
|
| 375 |
+
("I'm filled with wonder", "surprise"),
|
| 376 |
+
("Wonder and awe surround me", "surprise"),
|
| 377 |
+
],
|
| 378 |
+
"awe": [
|
| 379 |
+
("I'm in awe of this beauty", "surprise"),
|
| 380 |
+
("Such awe I feel", "surprise"),
|
| 381 |
+
("I stand in complete awe", "surprise"),
|
| 382 |
+
("Awe-inspiring, truly", "surprise"),
|
| 383 |
+
],
|
| 384 |
+
"curiosity": [
|
| 385 |
+
("I'm curious about this", "surprise"),
|
| 386 |
+
("Curiosity drives me forward", "surprise"),
|
| 387 |
+
("Such curiosity I have", "surprise"),
|
| 388 |
+
("I'm very curious to know", "surprise"),
|
| 389 |
+
],
|
| 390 |
+
"interest": [
|
| 391 |
+
("I'm interested in learning more", "surprise"),
|
| 392 |
+
("This interests me greatly", "surprise"),
|
| 393 |
+
("I have great interest in this", "surprise"),
|
| 394 |
+
("My interest is piqued", "surprise"),
|
| 395 |
+
],
|
| 396 |
+
"fascination": [
|
| 397 |
+
("I'm fascinated by this", "surprise"),
|
| 398 |
+
("Such fascination I feel", "surprise"),
|
| 399 |
+
("This is truly fascinating", "surprise"),
|
| 400 |
+
("Fascination takes hold", "surprise"),
|
| 401 |
+
],
|
| 402 |
+
"intrigue": [
|
| 403 |
+
("I'm intrigued by this mystery", "surprise"),
|
| 404 |
+
("Such intrigue surrounds this", "surprise"),
|
| 405 |
+
("I find this very intriguing", "surprise"),
|
| 406 |
+
("Intrigue fills my mind", "surprise"),
|
| 407 |
+
],
|
| 408 |
+
|
| 409 |
+
# ══════════════════════════════════════════════════════════════
|
| 410 |
+
# SADNESS FAMILY
|
| 411 |
+
# ══════════════════════════════════════════════════════════════
|
| 412 |
+
|
| 413 |
+
"sadness": [
|
| 414 |
+
("I feel so sad right now", "sadness"),
|
| 415 |
+
("Sadness fills my heart", "sadness"),
|
| 416 |
+
("I'm overcome with sadness", "sadness"),
|
| 417 |
+
("Such sadness I feel today", "sadness"),
|
| 418 |
+
],
|
| 419 |
+
"sorrow": [
|
| 420 |
+
("Deep sorrow fills me", "sadness"),
|
| 421 |
+
("I'm drowning in sorrow", "sadness"),
|
| 422 |
+
("Such sorrow in my heart", "sadness"),
|
| 423 |
+
("Sorrow overwhelms me", "sadness"),
|
| 424 |
+
],
|
| 425 |
+
"grief": [
|
| 426 |
+
("I'm grieving this loss", "sadness"),
|
| 427 |
+
("Grief has taken over", "sadness"),
|
| 428 |
+
("I feel deep grief", "sadness"),
|
| 429 |
+
("The grief is unbearable", "sadness"),
|
| 430 |
+
],
|
| 431 |
+
"melancholy": [
|
| 432 |
+
("I'm feeling melancholy today", "sadness"),
|
| 433 |
+
("Such melancholy surrounds me", "sadness"),
|
| 434 |
+
("A melancholy mood has set in", "sadness"),
|
| 435 |
+
("Melancholy fills my heart", "sadness"),
|
| 436 |
+
],
|
| 437 |
+
"disappointment": [
|
| 438 |
+
("I'm so disappointed by this", "sadness"),
|
| 439 |
+
("Such disappointment I feel", "sadness"),
|
| 440 |
+
("This is very disappointing", "sadness"),
|
| 441 |
+
("Disappointment overwhelms me", "sadness"),
|
| 442 |
+
],
|
| 443 |
+
"dejection": [
|
| 444 |
+
("I feel dejected and down", "sadness"),
|
| 445 |
+
("Such dejection fills me", "sadness"),
|
| 446 |
+
("I'm completely dejected", "sadness"),
|
| 447 |
+
("Dejection has taken hold", "sadness"),
|
| 448 |
+
],
|
| 449 |
+
"despair": [
|
| 450 |
+
("I'm in complete despair", "sadness"),
|
| 451 |
+
("Despair has taken over", "sadness"),
|
| 452 |
+
("I feel nothing but despair", "sadness"),
|
| 453 |
+
("Such despair fills me", "sadness"),
|
| 454 |
+
],
|
| 455 |
+
"hopelessness": [
|
| 456 |
+
("I feel completely hopeless", "sadness"),
|
| 457 |
+
("Hopelessness surrounds me", "sadness"),
|
| 458 |
+
("There's no hope left, I feel hopeless", "sadness"),
|
| 459 |
+
("Such hopelessness I feel", "sadness"),
|
| 460 |
+
],
|
| 461 |
+
"loneliness": [
|
| 462 |
+
("I feel so lonely right now", "sadness"),
|
| 463 |
+
("Loneliness fills my heart", "sadness"),
|
| 464 |
+
("I'm overcome with loneliness", "sadness"),
|
| 465 |
+
("Such loneliness I feel", "sadness"),
|
| 466 |
+
],
|
| 467 |
+
"hurt": [
|
| 468 |
+
("I'm so hurt by this", "sadness"),
|
| 469 |
+
("Your words really hurt me", "sadness"),
|
| 470 |
+
("I feel deeply hurt", "sadness"),
|
| 471 |
+
("The hurt is overwhelming", "sadness"),
|
| 472 |
+
],
|
| 473 |
+
"misery": [
|
| 474 |
+
("I'm in complete misery", "sadness"),
|
| 475 |
+
("Misery surrounds me", "sadness"),
|
| 476 |
+
("Such misery I feel", "sadness"),
|
| 477 |
+
("I'm drowning in misery", "sadness"),
|
| 478 |
+
],
|
| 479 |
+
"nostalgia": [
|
| 480 |
+
("I feel nostalgic about the past", "sadness"),
|
| 481 |
+
("Such nostalgia fills me", "sadness"),
|
| 482 |
+
("I'm feeling very nostalgic", "sadness"),
|
| 483 |
+
("Nostalgia for better times", "sadness"),
|
| 484 |
+
],
|
| 485 |
+
"longing": [
|
| 486 |
+
("I'm longing for you", "sadness"),
|
| 487 |
+
("Such longing in my heart", "sadness"),
|
| 488 |
+
("I feel deep longing", "sadness"),
|
| 489 |
+
("Longing for what was", "sadness"),
|
| 490 |
+
],
|
| 491 |
+
"yearning": [
|
| 492 |
+
("I'm yearning for change", "sadness"),
|
| 493 |
+
("Such yearning fills me", "sadness"),
|
| 494 |
+
("I feel deep yearning", "sadness"),
|
| 495 |
+
("Yearning for connection", "sadness"),
|
| 496 |
+
],
|
| 497 |
+
"pessimism": [
|
| 498 |
+
("I'm feeling pessimistic", "sadness"),
|
| 499 |
+
("Pessimism has taken over", "sadness"),
|
| 500 |
+
("I have a pessimistic outlook", "sadness"),
|
| 501 |
+
("Such pessimism fills me", "sadness"),
|
| 502 |
+
],
|
| 503 |
+
|
| 504 |
+
# ══════════════════════════════════════════════════════════════
|
| 505 |
+
# DISGUST FAMILY
|
| 506 |
+
# ══════════════════════════════════════════════════════════════
|
| 507 |
+
|
| 508 |
+
"disgust": [
|
| 509 |
+
("I'm disgusted by this", "disgust"),
|
| 510 |
+
("Such disgust I feel", "disgust"),
|
| 511 |
+
("This is truly disgusting", "disgust"),
|
| 512 |
+
("Disgust fills me", "disgust"),
|
| 513 |
+
],
|
| 514 |
+
"revulsion": [
|
| 515 |
+
("I feel complete revulsion", "disgust"),
|
| 516 |
+
("Such revulsion at this", "disgust"),
|
| 517 |
+
("Revulsion overwhelms me", "disgust"),
|
| 518 |
+
("I'm filled with revulsion", "disgust"),
|
| 519 |
+
],
|
| 520 |
+
"contempt": [
|
| 521 |
+
("I feel contempt for this", "disgust"),
|
| 522 |
+
("Such contempt I have", "disgust"),
|
| 523 |
+
("I hold them in contempt", "disgust"),
|
| 524 |
+
("Contempt fills my heart", "disgust"),
|
| 525 |
+
],
|
| 526 |
+
"disdain": [
|
| 527 |
+
("I look at this with disdain", "disgust"),
|
| 528 |
+
("Such disdain I feel", "disgust"),
|
| 529 |
+
("I have nothing but disdain", "disgust"),
|
| 530 |
+
("Disdain is all I have for this", "disgust"),
|
| 531 |
+
],
|
| 532 |
+
"loathing": [
|
| 533 |
+
("I feel complete loathing", "disgust"),
|
| 534 |
+
("Such loathing fills me", "disgust"),
|
| 535 |
+
("I loathe this situation", "disgust"),
|
| 536 |
+
("Loathing overwhelms me", "disgust"),
|
| 537 |
+
],
|
| 538 |
+
"scorn": [
|
| 539 |
+
("I look at this with scorn", "disgust"),
|
| 540 |
+
("Such scorn I feel", "disgust"),
|
| 541 |
+
("I have nothing but scorn", "disgust"),
|
| 542 |
+
("Scorn fills my heart", "disgust"),
|
| 543 |
+
],
|
| 544 |
+
"sarcasm": [
|
| 545 |
+
("Oh great, just what I needed", "disgust"),
|
| 546 |
+
("Yeah right, that's exactly what I wanted", "disgust"),
|
| 547 |
+
("Oh wonderful, how perfect", "disgust"),
|
| 548 |
+
("Sure, that's just fantastic", "disgust"),
|
| 549 |
+
],
|
| 550 |
+
|
| 551 |
+
# ══════════════════════════════════════════════════════════════
|
| 552 |
+
# ANGER FAMILY
|
| 553 |
+
# ══════════════════════════════════════════════════════════════
|
| 554 |
+
|
| 555 |
+
"anger": [
|
| 556 |
+
("I'm so angry right now", "anger"),
|
| 557 |
+
("Anger fills my heart", "anger"),
|
| 558 |
+
("I feel very angry", "anger"),
|
| 559 |
+
("Such anger I feel today", "anger"),
|
| 560 |
+
],
|
| 561 |
+
"rage": [
|
| 562 |
+
("I'm in a complete rage", "anger"),
|
| 563 |
+
("Rage consumes me", "anger"),
|
| 564 |
+
("I feel pure rage", "anger"),
|
| 565 |
+
("Such rage fills me", "anger"),
|
| 566 |
+
],
|
| 567 |
+
"fury": [
|
| 568 |
+
("I'm furious about this", "anger"),
|
| 569 |
+
("Fury has taken over", "anger"),
|
| 570 |
+
("I feel complete fury", "anger"),
|
| 571 |
+
("Such fury I feel", "anger"),
|
| 572 |
+
],
|
| 573 |
+
"irritation": [
|
| 574 |
+
("I'm so irritated by this", "anger"),
|
| 575 |
+
("Such irritation I feel", "anger"),
|
| 576 |
+
("This is very irritating", "anger"),
|
| 577 |
+
("Irritation fills me", "anger"),
|
| 578 |
+
],
|
| 579 |
+
"annoyance": [
|
| 580 |
+
("I'm annoyed by this", "anger"),
|
| 581 |
+
("Such annoyance I feel", "anger"),
|
| 582 |
+
("This is really annoying", "anger"),
|
| 583 |
+
("Annoyance fills me", "anger"),
|
| 584 |
+
],
|
| 585 |
+
"frustration": [
|
| 586 |
+
("I'm so frustrated right now", "anger"),
|
| 587 |
+
("Frustration is overwhelming", "anger"),
|
| 588 |
+
("I feel deep frustration", "anger"),
|
| 589 |
+
("Such frustration I feel", "anger"),
|
| 590 |
+
],
|
| 591 |
+
"exasperation": [
|
| 592 |
+
("I'm completely exasperated", "anger"),
|
| 593 |
+
("Such exasperation I feel", "anger"),
|
| 594 |
+
("Exasperation has taken over", "anger"),
|
| 595 |
+
("I feel utter exasperation", "anger"),
|
| 596 |
+
],
|
| 597 |
+
"resentment": [
|
| 598 |
+
("I feel resentment toward them", "anger"),
|
| 599 |
+
("Such resentment I have", "anger"),
|
| 600 |
+
("Resentment builds inside me", "anger"),
|
| 601 |
+
("I'm filled with resentment", "anger"),
|
| 602 |
+
],
|
| 603 |
+
"hostility": [
|
| 604 |
+
("I feel hostility toward this", "anger"),
|
| 605 |
+
("Such hostility I sense", "anger"),
|
| 606 |
+
("Hostility fills the room", "anger"),
|
| 607 |
+
("I'm feeling quite hostile", "anger"),
|
| 608 |
+
],
|
| 609 |
+
"bitterness": [
|
| 610 |
+
("I feel bitterness about this", "anger"),
|
| 611 |
+
("Such bitterness I have", "anger"),
|
| 612 |
+
("Bitterness consumes me", "anger"),
|
| 613 |
+
("I'm filled with bitterness", "anger"),
|
| 614 |
+
],
|
| 615 |
+
"envy": [
|
| 616 |
+
("I feel envious of them", "anger"),
|
| 617 |
+
("Such envy I feel", "anger"),
|
| 618 |
+
("Envy fills my heart", "anger"),
|
| 619 |
+
("I'm consumed by envy", "anger"),
|
| 620 |
+
],
|
| 621 |
+
"jealousy": [
|
| 622 |
+
("I'm so jealous right now", "anger"),
|
| 623 |
+
("Jealousy has taken over", "anger"),
|
| 624 |
+
("I feel deep jealousy", "anger"),
|
| 625 |
+
("Such jealousy I feel", "anger"),
|
| 626 |
+
],
|
| 627 |
+
|
| 628 |
+
# ══════════════════════════════════════════════════════════════
|
| 629 |
+
# ANTICIPATION FAMILY
|
| 630 |
+
# ══════════════════════════════════════════════════════════════
|
| 631 |
+
|
| 632 |
+
"anticipation": [
|
| 633 |
+
("I'm anticipating great things", "anticipation"),
|
| 634 |
+
("Such anticipation I feel", "anticipation"),
|
| 635 |
+
("I can't wait, the anticipation!", "anticipation"),
|
| 636 |
+
("Anticipation builds inside me", "anticipation"),
|
| 637 |
+
],
|
| 638 |
+
"determination": [
|
| 639 |
+
("I'm determined to succeed", "anticipation"),
|
| 640 |
+
("Such determination I have", "anticipation"),
|
| 641 |
+
("My determination is strong", "anticipation"),
|
| 642 |
+
("I feel deep determination", "anticipation"),
|
| 643 |
+
],
|
| 644 |
+
"inspiration": [
|
| 645 |
+
("I feel so inspired right now", "anticipation"),
|
| 646 |
+
("Inspiration has struck", "anticipation"),
|
| 647 |
+
("Such inspiration fills me", "anticipation"),
|
| 648 |
+
("I'm feeling very inspired", "anticipation"),
|
| 649 |
+
],
|
| 650 |
+
"pride": [
|
| 651 |
+
("I'm so proud of myself", "anticipation"),
|
| 652 |
+
("Pride fills my heart", "anticipation"),
|
| 653 |
+
("I feel deep pride", "anticipation"),
|
| 654 |
+
("Such pride I have", "anticipation"),
|
| 655 |
+
],
|
| 656 |
+
"triumph": [
|
| 657 |
+
("I feel triumphant today", "anticipation"),
|
| 658 |
+
("Such triumph I achieved", "anticipation"),
|
| 659 |
+
("Triumph fills my heart", "anticipation"),
|
| 660 |
+
("I'm feeling triumphant", "anticipation"),
|
| 661 |
+
],
|
| 662 |
+
|
| 663 |
+
# ══════════════════════════════════════════════════════════════
|
| 664 |
+
# GUILT FAMILY (Sadness + Fear area)
|
| 665 |
+
# ══════════════════════════════════════════════════════════════
|
| 666 |
+
|
| 667 |
+
"shame": [
|
| 668 |
+
("I feel so ashamed of myself", "guilt"),
|
| 669 |
+
("Shame fills my heart", "guilt"),
|
| 670 |
+
("I'm overcome with shame", "guilt"),
|
| 671 |
+
("Such shame I feel", "guilt"),
|
| 672 |
+
],
|
| 673 |
+
"embarrassment": [
|
| 674 |
+
("I'm so embarrassed right now", "guilt"),
|
| 675 |
+
("Such embarrassment I feel", "guilt"),
|
| 676 |
+
("This is really embarrassing", "guilt"),
|
| 677 |
+
("Embarrassment overwhelms me", "guilt"),
|
| 678 |
+
],
|
| 679 |
+
"guilt": [
|
| 680 |
+
("I feel so guilty about this", "guilt"),
|
| 681 |
+
("Guilt consumes me", "guilt"),
|
| 682 |
+
("I'm overcome with guilt", "guilt"),
|
| 683 |
+
("Such guilt I feel", "guilt"),
|
| 684 |
+
],
|
| 685 |
+
"regret": [
|
| 686 |
+
("I regret doing that", "guilt"),
|
| 687 |
+
("Such regret I feel", "guilt"),
|
| 688 |
+
("I'm filled with regret", "guilt"),
|
| 689 |
+
("Regret overwhelms me", "guilt"),
|
| 690 |
+
],
|
| 691 |
+
"remorse": [
|
| 692 |
+
("I feel deep remorse", "guilt"),
|
| 693 |
+
("Remorse fills my heart", "guilt"),
|
| 694 |
+
("I'm overcome with remorse", "guilt"),
|
| 695 |
+
("Such remorse I feel", "guilt"),
|
| 696 |
+
],
|
| 697 |
+
"humiliation": [
|
| 698 |
+
("I feel completely humiliated", "guilt"),
|
| 699 |
+
("Such humiliation I feel", "guilt"),
|
| 700 |
+
("This is so humiliating", "guilt"),
|
| 701 |
+
("Humiliation overwhelms me", "guilt"),
|
| 702 |
+
],
|
| 703 |
+
|
| 704 |
+
# ══════════════════════════════════════════════════════════════
|
| 705 |
+
# CONFUSION FAMILY (Fear + Surprise)
|
| 706 |
+
# ══════════════════════════════════════════════════════════════
|
| 707 |
+
|
| 708 |
+
"confused": [
|
| 709 |
+
("I'm so confused right now", "confusion"),
|
| 710 |
+
("Confusion fills my mind", "confusion"),
|
| 711 |
+
("I feel very confused", "confusion"),
|
| 712 |
+
("Such confusion I feel", "confusion"),
|
| 713 |
+
],
|
| 714 |
+
"confusion": [
|
| 715 |
+
("This is causing so much confusion", "confusion"),
|
| 716 |
+
("Confusion is everywhere", "confusion"),
|
| 717 |
+
("I'm lost in confusion", "confusion"),
|
| 718 |
+
("Such confusion surrounds me", "confusion"),
|
| 719 |
+
],
|
| 720 |
+
"puzzled": [
|
| 721 |
+
("I'm puzzled by this", "confusion"),
|
| 722 |
+
("Such a puzzle this is", "confusion"),
|
| 723 |
+
("I feel very puzzled", "confusion"),
|
| 724 |
+
("This has me puzzled", "confusion"),
|
| 725 |
+
],
|
| 726 |
+
"perplexed": [
|
| 727 |
+
("I'm completely perplexed", "confusion"),
|
| 728 |
+
("Such perplexity I feel", "confusion"),
|
| 729 |
+
("This is very perplexing", "confusion"),
|
| 730 |
+
("Perplexed by this situation", "confusion"),
|
| 731 |
+
],
|
| 732 |
+
"bewildered": [
|
| 733 |
+
("I'm totally bewildered", "confusion"),
|
| 734 |
+
("Such bewilderment I feel", "confusion"),
|
| 735 |
+
("I feel completely bewildered", "confusion"),
|
| 736 |
+
("Bewildered by what happened", "confusion"),
|
| 737 |
+
],
|
| 738 |
+
"baffled": [
|
| 739 |
+
("I'm completely baffled", "confusion"),
|
| 740 |
+
("Such bafflement I feel", "confusion"),
|
| 741 |
+
("This has me baffled", "confusion"),
|
| 742 |
+
("I'm utterly baffled", "confusion"),
|
| 743 |
+
],
|
| 744 |
+
"uncertain": [
|
| 745 |
+
("I'm uncertain about this", "confusion"),
|
| 746 |
+
("Such uncertainty I feel", "confusion"),
|
| 747 |
+
("I feel very uncertain", "confusion"),
|
| 748 |
+
("Uncertainty fills me", "confusion"),
|
| 749 |
+
],
|
| 750 |
+
|
| 751 |
+
# ══════════════════════════════════════════════════════════════
|
| 752 |
+
# NEUTRAL FAMILY (Center of wheel)
|
| 753 |
+
# ══════════════════════════════════════════════════════════════
|
| 754 |
+
|
| 755 |
+
"neutral": [
|
| 756 |
+
("I don't have any particular feelings", "neutral"),
|
| 757 |
+
("I'm feeling neutral about this", "neutral"),
|
| 758 |
+
("Neither good nor bad, just neutral", "neutral"),
|
| 759 |
+
("I'm indifferent to this situation", "neutral"),
|
| 760 |
+
],
|
| 761 |
+
"thinking": [
|
| 762 |
+
("I'm thinking about this carefully", "neutral"),
|
| 763 |
+
("Let me think about it", "neutral"),
|
| 764 |
+
("I need to think this through", "neutral"),
|
| 765 |
+
("I'm deep in thought", "neutral"),
|
| 766 |
+
],
|
| 767 |
+
"contemplative": [
|
| 768 |
+
("I'm in a contemplative mood", "neutral"),
|
| 769 |
+
("Just contemplating life", "neutral"),
|
| 770 |
+
("I feel contemplative today", "neutral"),
|
| 771 |
+
("Contemplation fills my mind", "neutral"),
|
| 772 |
+
],
|
| 773 |
+
"pensive": [
|
| 774 |
+
("I'm feeling pensive today", "neutral"),
|
| 775 |
+
("Such a pensive mood", "neutral"),
|
| 776 |
+
("I feel pensive and thoughtful", "neutral"),
|
| 777 |
+
("Pensiveness surrounds me", "neutral"),
|
| 778 |
+
],
|
| 779 |
+
"reflective": [
|
| 780 |
+
("I'm in a reflective mood", "neutral"),
|
| 781 |
+
("Just reflecting on things", "neutral"),
|
| 782 |
+
("I feel reflective today", "neutral"),
|
| 783 |
+
("Time for some reflection", "neutral"),
|
| 784 |
+
],
|
| 785 |
+
"ambivalent": [
|
| 786 |
+
("I feel ambivalent about this", "neutral"),
|
| 787 |
+
("Such ambivalence I have", "neutral"),
|
| 788 |
+
("I'm quite ambivalent", "neutral"),
|
| 789 |
+
("Ambivalence fills me", "neutral"),
|
| 790 |
+
],
|
| 791 |
+
"indifferent": [
|
| 792 |
+
("I'm indifferent to this", "neutral"),
|
| 793 |
+
("Such indifference I feel", "neutral"),
|
| 794 |
+
("I feel completely indifferent", "neutral"),
|
| 795 |
+
("Indifference is all I have", "neutral"),
|
| 796 |
+
],
|
| 797 |
+
"boredom": [
|
| 798 |
+
("I'm so bored right now", "neutral"),
|
| 799 |
+
("Boredom has set in", "neutral"),
|
| 800 |
+
("I feel very bored", "neutral"),
|
| 801 |
+
("Such boredom I feel", "neutral"),
|
| 802 |
+
],
|
| 803 |
+
"tiredness": [
|
| 804 |
+
("I'm feeling so tired", "neutral"),
|
| 805 |
+
("Tiredness overwhelms me", "neutral"),
|
| 806 |
+
("I feel very tired today", "neutral"),
|
| 807 |
+
("Such tiredness I feel", "neutral"),
|
| 808 |
+
],
|
| 809 |
+
"exhaustion": [
|
| 810 |
+
("I'm completely exhausted", "neutral"),
|
| 811 |
+
("Exhaustion has taken over", "neutral"),
|
| 812 |
+
("I feel utter exhaustion", "neutral"),
|
| 813 |
+
("Such exhaustion I feel", "neutral"),
|
| 814 |
+
],
|
| 815 |
+
"fatigue": [
|
| 816 |
+
("I'm feeling fatigued", "neutral"),
|
| 817 |
+
("Fatigue has set in", "neutral"),
|
| 818 |
+
("I feel deep fatigue", "neutral"),
|
| 819 |
+
("Such fatigue I have", "neutral"),
|
| 820 |
+
],
|
| 821 |
+
"weariness": [
|
| 822 |
+
("I'm feeling weary", "neutral"),
|
| 823 |
+
("Weariness fills me", "neutral"),
|
| 824 |
+
("I feel so weary today", "neutral"),
|
| 825 |
+
("Such weariness I have", "neutral"),
|
| 826 |
+
],
|
| 827 |
+
"sleepy": [
|
| 828 |
+
("I'm feeling sleepy", "neutral"),
|
| 829 |
+
("So sleepy right now", "neutral"),
|
| 830 |
+
("I feel very sleepy", "neutral"),
|
| 831 |
+
("Sleepiness is taking over", "neutral"),
|
| 832 |
+
],
|
| 833 |
+
}
|
| 834 |
+
|
| 835 |
+
def get_all_emotions(self) -> List[str]:
|
| 836 |
+
"""Get list of all emotions in the test suite"""
|
| 837 |
+
return list(self.EMOTION_TEST_DATA.keys())
|
| 838 |
+
|
| 839 |
+
def get_test_cases(self, emotion: str) -> List[Tuple[str, str]]:
|
| 840 |
+
"""Get test cases for a specific emotion"""
|
| 841 |
+
return self.EMOTION_TEST_DATA.get(emotion, [])
|
| 842 |
+
|
| 843 |
+
def get_emotion_count(self) -> int:
|
| 844 |
+
"""Get total number of emotions"""
|
| 845 |
+
return len(self.EMOTION_TEST_DATA)
|
| 846 |
+
|
| 847 |
+
def get_test_count(self) -> int:
|
| 848 |
+
"""Get total number of test cases"""
|
| 849 |
+
return sum(len(cases) for cases in self.EMOTION_TEST_DATA.values())
|
| 850 |
+
|
| 851 |
+
def get_emotions_by_category(self, category: str) -> List[str]:
|
| 852 |
+
"""Get all emotions in a category"""
|
| 853 |
+
return [
|
| 854 |
+
emotion for emotion, cases in self.EMOTION_TEST_DATA.items()
|
| 855 |
+
if cases and cases[0][1] == category
|
| 856 |
+
]
|
| 857 |
+
|
| 858 |
+
|
| 859 |
+
if __name__ == "__main__":
|
| 860 |
+
suite = EmotionTestSuiteV3()
|
| 861 |
+
|
| 862 |
+
print(f"Emotion Test Suite V{suite.VERSION}")
|
| 863 |
+
print(f"Total Emotions: {suite.get_emotion_count()}")
|
| 864 |
+
print(f"Total Test Cases: {suite.get_test_count()}")
|
| 865 |
+
print()
|
| 866 |
+
|
| 867 |
+
# Show by category
|
| 868 |
+
categories = ["joy", "trust", "love", "fear", "surprise", "sadness",
|
| 869 |
+
"disgust", "anger", "anticipation", "guilt", "confusion", "neutral"]
|
| 870 |
+
|
| 871 |
+
for cat in categories:
|
| 872 |
+
emotions = suite.get_emotions_by_category(cat)
|
| 873 |
+
print(f"\n{cat.upper()} ({len(emotions)} emotions):")
|
| 874 |
+
for em in emotions[:5]: # Show first 5
|
| 875 |
+
print(f" - {em}")
|
| 876 |
+
if len(emotions) > 5:
|
| 877 |
+
print(f" ... and {len(emotions) - 5} more")
|
evaluation/live_stream_test.py
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Live Stream Test - Test real-time emotion transitions
|
| 4 |
+
|
| 5 |
+
Tests that emoji changes correctly when user types new text
|
| 6 |
+
Simulates live typing with emotion transitions
|
| 7 |
+
"""
|
| 8 |
+
|
| 9 |
+
import time
|
| 10 |
+
from typing import Dict, List, Tuple, Any
|
| 11 |
+
from dataclasses import dataclass
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
@dataclass
|
| 15 |
+
class TransitionResult:
|
| 16 |
+
"""Result of an emotion transition test"""
|
| 17 |
+
from_text: str
|
| 18 |
+
from_emotion: str
|
| 19 |
+
from_emoji: str
|
| 20 |
+
to_text: str
|
| 21 |
+
to_emotion: str
|
| 22 |
+
to_emoji: str
|
| 23 |
+
combined_text: str
|
| 24 |
+
final_detected_emotion: str
|
| 25 |
+
final_emoji: str
|
| 26 |
+
transition_correct: bool
|
| 27 |
+
transition_time_ms: float
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
class LiveStreamTest:
|
| 31 |
+
"""
|
| 32 |
+
Test live streaming emotion detection
|
| 33 |
+
|
| 34 |
+
Simulates real-time typing with emotion transitions
|
| 35 |
+
"""
|
| 36 |
+
|
| 37 |
+
# Emotion transition test cases
|
| 38 |
+
# Format: [(from_text, from_emotion), (to_text, to_emotion)]
|
| 39 |
+
TRANSITION_TESTS: List[Tuple[Tuple[str, str], Tuple[str, str]]] = [
|
| 40 |
+
# Positive to Negative
|
| 41 |
+
(("I love this!", "positive"), ("But now I'm angry", "negative")),
|
| 42 |
+
(("This is amazing!", "positive"), ("Wait, this is terrible", "negative")),
|
| 43 |
+
(("I'm so happy!", "positive"), ("Now I feel sad", "negative")),
|
| 44 |
+
(("Great work!", "positive"), ("Actually, this is frustrating", "negative")),
|
| 45 |
+
(("I'm excited!", "positive"), ("Now I'm disappointed", "negative")),
|
| 46 |
+
|
| 47 |
+
# Negative to Positive
|
| 48 |
+
(("I'm sad", "negative"), ("But now I'm happy!", "positive")),
|
| 49 |
+
(("This is terrible", "negative"), ("Actually, it's great!", "positive")),
|
| 50 |
+
(("I'm angry", "negative"), ("Now I feel better", "positive")),
|
| 51 |
+
(("I'm frustrated", "negative"), ("But I'm grateful now", "positive")),
|
| 52 |
+
(("I'm scared", "negative"), ("Now I'm excited!", "positive")),
|
| 53 |
+
|
| 54 |
+
# Neutral transitions
|
| 55 |
+
(("The weather is okay", "neutral"), ("I love sunny days!", "positive")),
|
| 56 |
+
(("It's just normal", "neutral"), ("This is terrible news", "negative")),
|
| 57 |
+
|
| 58 |
+
# Complex transitions
|
| 59 |
+
(("I was worried", "negative"), ("But everything worked out great!", "positive")),
|
| 60 |
+
(("Started feeling anxious", "negative"), ("Now I'm relieved and happy", "positive")),
|
| 61 |
+
(("I'm confused", "negative"), ("But this explanation is amazing!", "positive")),
|
| 62 |
+
]
|
| 63 |
+
|
| 64 |
+
def __init__(self, analyzer, emoji_mapper):
|
| 65 |
+
"""
|
| 66 |
+
Initialize with analyzer and mapper
|
| 67 |
+
|
| 68 |
+
Args:
|
| 69 |
+
analyzer: SentimentAnalyzer instance
|
| 70 |
+
emoji_mapper: EmojiMapper instance
|
| 71 |
+
"""
|
| 72 |
+
self.analyzer = analyzer
|
| 73 |
+
self.emoji_mapper = emoji_mapper
|
| 74 |
+
|
| 75 |
+
def _get_polarity(self, label: str) -> str:
|
| 76 |
+
"""Map label to polarity"""
|
| 77 |
+
positive = ["happiness", "joy", "positive", "love", "excitement"]
|
| 78 |
+
negative = ["sadness", "anger", "negative", "fear", "frustration"]
|
| 79 |
+
|
| 80 |
+
label_lower = label.lower()
|
| 81 |
+
if label_lower in positive or "happiness" in label_lower:
|
| 82 |
+
return "positive"
|
| 83 |
+
elif label_lower in negative or "sadness" in label_lower:
|
| 84 |
+
return "negative"
|
| 85 |
+
return "neutral"
|
| 86 |
+
|
| 87 |
+
def run_single_transition(
|
| 88 |
+
self,
|
| 89 |
+
from_text: str,
|
| 90 |
+
from_expected: str,
|
| 91 |
+
to_text: str,
|
| 92 |
+
to_expected: str
|
| 93 |
+
) -> TransitionResult:
|
| 94 |
+
"""Run a single transition test"""
|
| 95 |
+
# Analyze first text
|
| 96 |
+
result1 = self.analyzer.analyze(from_text)
|
| 97 |
+
from_emotion = result1.get("label", "neutral")
|
| 98 |
+
from_emoji = self.emoji_mapper.get_emoji(from_emotion)
|
| 99 |
+
|
| 100 |
+
# Combine texts (simulating continued typing)
|
| 101 |
+
combined = f"{from_text} {to_text}"
|
| 102 |
+
|
| 103 |
+
# Analyze combined (should detect LAST sentence emotion)
|
| 104 |
+
start_time = time.perf_counter()
|
| 105 |
+
result2 = self.analyzer.analyze(combined)
|
| 106 |
+
end_time = time.perf_counter()
|
| 107 |
+
|
| 108 |
+
transition_time_ms = (end_time - start_time) * 1000
|
| 109 |
+
|
| 110 |
+
final_emotion = result2.get("label", "neutral")
|
| 111 |
+
final_emoji = self.emoji_mapper.get_emoji(final_emotion)
|
| 112 |
+
|
| 113 |
+
# Check if transition is correct (final emotion matches to_expected polarity)
|
| 114 |
+
final_polarity = self._get_polarity(final_emotion)
|
| 115 |
+
transition_correct = final_polarity == to_expected
|
| 116 |
+
|
| 117 |
+
return TransitionResult(
|
| 118 |
+
from_text=from_text,
|
| 119 |
+
from_emotion=from_emotion,
|
| 120 |
+
from_emoji=from_emoji,
|
| 121 |
+
to_text=to_text,
|
| 122 |
+
to_emotion=to_expected,
|
| 123 |
+
to_emoji="", # Expected emoji
|
| 124 |
+
combined_text=combined,
|
| 125 |
+
final_detected_emotion=final_emotion,
|
| 126 |
+
final_emoji=final_emoji,
|
| 127 |
+
transition_correct=transition_correct,
|
| 128 |
+
transition_time_ms=transition_time_ms
|
| 129 |
+
)
|
| 130 |
+
|
| 131 |
+
def run_all_transitions(self) -> List[TransitionResult]:
|
| 132 |
+
"""Run all transition tests"""
|
| 133 |
+
results = []
|
| 134 |
+
|
| 135 |
+
for (from_text, from_exp), (to_text, to_exp) in self.TRANSITION_TESTS:
|
| 136 |
+
result = self.run_single_transition(from_text, from_exp, to_text, to_exp)
|
| 137 |
+
results.append(result)
|
| 138 |
+
|
| 139 |
+
return results
|
| 140 |
+
|
| 141 |
+
def get_transition_report(self, results: List[TransitionResult]) -> str:
|
| 142 |
+
"""Generate human-readable transition report"""
|
| 143 |
+
correct = sum(1 for r in results if r.transition_correct)
|
| 144 |
+
total = len(results)
|
| 145 |
+
accuracy = correct / total if total > 0 else 0
|
| 146 |
+
avg_time = sum(r.transition_time_ms for r in results) / total if total > 0 else 0
|
| 147 |
+
|
| 148 |
+
lines = [
|
| 149 |
+
"=" * 80,
|
| 150 |
+
"LIVE STREAM EMOTION TRANSITION TEST",
|
| 151 |
+
"=" * 80,
|
| 152 |
+
"",
|
| 153 |
+
f"Total Transitions: {total}",
|
| 154 |
+
f"Correct Transitions: {correct}",
|
| 155 |
+
f"Transition Accuracy: {accuracy:.1%}",
|
| 156 |
+
f"Avg Transition Time: {avg_time:.2f} ms",
|
| 157 |
+
"",
|
| 158 |
+
"-" * 80,
|
| 159 |
+
"TRANSITION DETAILS",
|
| 160 |
+
"-" * 80,
|
| 161 |
+
]
|
| 162 |
+
|
| 163 |
+
for i, r in enumerate(results, 1):
|
| 164 |
+
status = "✓" if r.transition_correct else "✗"
|
| 165 |
+
lines.extend([
|
| 166 |
+
f"\n{status} Test {i}:",
|
| 167 |
+
f" From: \"{r.from_text[:40]}...\" → {r.from_emoji} ({r.from_emotion})",
|
| 168 |
+
f" To: \"{r.to_text[:40]}...\" → Expected: {r.to_emotion}",
|
| 169 |
+
f" Combined: \"{r.combined_text[:50]}...\"",
|
| 170 |
+
f" Detected: {r.final_emoji} ({r.final_detected_emotion})",
|
| 171 |
+
f" Time: {r.transition_time_ms:.2f} ms",
|
| 172 |
+
])
|
| 173 |
+
|
| 174 |
+
# Summary of failures
|
| 175 |
+
failures = [r for r in results if not r.transition_correct]
|
| 176 |
+
if failures:
|
| 177 |
+
lines.extend([
|
| 178 |
+
"",
|
| 179 |
+
"-" * 80,
|
| 180 |
+
f"FAILED TRANSITIONS: {len(failures)}",
|
| 181 |
+
"-" * 80,
|
| 182 |
+
])
|
| 183 |
+
for r in failures:
|
| 184 |
+
lines.append(
|
| 185 |
+
f" ✗ \"{r.combined_text[:60]}...\" "
|
| 186 |
+
f"→ Expected {r.to_emotion}, got {r.final_detected_emotion}"
|
| 187 |
+
)
|
| 188 |
+
|
| 189 |
+
lines.append("=" * 80)
|
| 190 |
+
|
| 191 |
+
return "\n".join(lines)
|
| 192 |
+
|
| 193 |
+
|
| 194 |
+
if __name__ == "__main__":
|
| 195 |
+
from avatar import SentimentAnalyzer, EmojiMapper
|
| 196 |
+
|
| 197 |
+
analyzer = SentimentAnalyzer()
|
| 198 |
+
mapper = EmojiMapper()
|
| 199 |
+
test = LiveStreamTest(analyzer, mapper)
|
| 200 |
+
|
| 201 |
+
results = test.run_all_transitions()
|
| 202 |
+
print(test.get_transition_report(results))
|
evaluation/report_generator.py
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Report Generator - Generate evaluation reports
|
| 4 |
+
|
| 5 |
+
Creates markdown and JSON reports from evaluation results
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import json
|
| 9 |
+
import os
|
| 10 |
+
from datetime import datetime
|
| 11 |
+
from typing import Dict, List, Any, Optional
|
| 12 |
+
from dataclasses import asdict
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
class ReportGenerator:
|
| 16 |
+
"""
|
| 17 |
+
Generate evaluation reports in multiple formats
|
| 18 |
+
|
| 19 |
+
Creates markdown and JSON reports from benchmark results
|
| 20 |
+
"""
|
| 21 |
+
|
| 22 |
+
def __init__(self, output_dir: str = "evaluation/reports"):
|
| 23 |
+
"""
|
| 24 |
+
Initialize report generator
|
| 25 |
+
|
| 26 |
+
Args:
|
| 27 |
+
output_dir: Directory to save reports
|
| 28 |
+
"""
|
| 29 |
+
self.output_dir = output_dir
|
| 30 |
+
os.makedirs(output_dir, exist_ok=True)
|
| 31 |
+
|
| 32 |
+
def _get_timestamp(self) -> str:
|
| 33 |
+
"""Get formatted timestamp"""
|
| 34 |
+
return datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
|
| 35 |
+
|
| 36 |
+
def generate_markdown_report(
|
| 37 |
+
self,
|
| 38 |
+
benchmark_results: Any,
|
| 39 |
+
transition_results: Optional[List[Any]] = None,
|
| 40 |
+
filename: Optional[str] = None
|
| 41 |
+
) -> str:
|
| 42 |
+
"""
|
| 43 |
+
Generate markdown report
|
| 44 |
+
|
| 45 |
+
Args:
|
| 46 |
+
benchmark_results: Results from AccuracyBenchmark
|
| 47 |
+
transition_results: Optional results from LiveStreamTest
|
| 48 |
+
filename: Optional filename (auto-generated if None)
|
| 49 |
+
|
| 50 |
+
Returns:
|
| 51 |
+
Path to generated report
|
| 52 |
+
"""
|
| 53 |
+
timestamp = self._get_timestamp()
|
| 54 |
+
if filename is None:
|
| 55 |
+
filename = f"evaluation_report_{timestamp}.md"
|
| 56 |
+
|
| 57 |
+
filepath = os.path.join(self.output_dir, filename)
|
| 58 |
+
|
| 59 |
+
lines = [
|
| 60 |
+
"# Emoji AI Avatar - Sentiment Analysis Evaluation Report",
|
| 61 |
+
"",
|
| 62 |
+
f"**Generated:** {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}",
|
| 63 |
+
"",
|
| 64 |
+
"---",
|
| 65 |
+
"",
|
| 66 |
+
"## Executive Summary",
|
| 67 |
+
"",
|
| 68 |
+
f"- **Total Emotions Tested:** {benchmark_results.total_tests}",
|
| 69 |
+
f"- **Correct Predictions:** {benchmark_results.correct_tests}",
|
| 70 |
+
f"- **Overall Accuracy:** {benchmark_results.accuracy:.1%}",
|
| 71 |
+
f"- **Average Inference Time:** {benchmark_results.avg_inference_time_ms:.2f} ms",
|
| 72 |
+
"",
|
| 73 |
+
]
|
| 74 |
+
|
| 75 |
+
# Accuracy by emotion
|
| 76 |
+
lines.extend([
|
| 77 |
+
"## Accuracy by Emotion",
|
| 78 |
+
"",
|
| 79 |
+
"| Emotion | Accuracy | Samples | Status |",
|
| 80 |
+
"|---------|----------|---------|--------|",
|
| 81 |
+
])
|
| 82 |
+
|
| 83 |
+
emotion_accuracy = benchmark_results.emotion_accuracy
|
| 84 |
+
for emotion, acc in sorted(emotion_accuracy.items(), key=lambda x: -x[1]):
|
| 85 |
+
status = "✅ PASS" if acc >= 0.5 else "❌ FAIL"
|
| 86 |
+
# Count samples for this emotion
|
| 87 |
+
samples = len(benchmark_results.emotion_results.get(emotion, []))
|
| 88 |
+
lines.append(f"| {emotion} | {acc:.1%} | {samples} | {status} |")
|
| 89 |
+
|
| 90 |
+
lines.append("")
|
| 91 |
+
|
| 92 |
+
# Timing statistics
|
| 93 |
+
lines.extend([
|
| 94 |
+
"## Performance Metrics",
|
| 95 |
+
"",
|
| 96 |
+
"| Metric | Value |",
|
| 97 |
+
"|--------|-------|",
|
| 98 |
+
f"| Min Inference Time | {benchmark_results.min_inference_time_ms:.2f} ms |",
|
| 99 |
+
f"| Max Inference Time | {benchmark_results.max_inference_time_ms:.2f} ms |",
|
| 100 |
+
f"| Avg Inference Time | {benchmark_results.avg_inference_time_ms:.2f} ms |",
|
| 101 |
+
f"| Median Inference Time | {benchmark_results.median_inference_time_ms:.2f} ms |",
|
| 102 |
+
"",
|
| 103 |
+
])
|
| 104 |
+
|
| 105 |
+
# Confusion matrix summary
|
| 106 |
+
lines.extend([
|
| 107 |
+
"## Confusion Analysis",
|
| 108 |
+
"",
|
| 109 |
+
"### Most Common Misclassifications",
|
| 110 |
+
"",
|
| 111 |
+
"| Expected | Predicted | Count |",
|
| 112 |
+
"|----------|-----------|-------|",
|
| 113 |
+
])
|
| 114 |
+
|
| 115 |
+
confusion = benchmark_results.confusion_matrix
|
| 116 |
+
# Flatten the nested dict for easier processing
|
| 117 |
+
misclassifications = []
|
| 118 |
+
for expected, predicted_counts in confusion.items():
|
| 119 |
+
for predicted, count in predicted_counts.items():
|
| 120 |
+
if expected != predicted:
|
| 121 |
+
misclassifications.append((expected, predicted, count))
|
| 122 |
+
misclassifications.sort(key=lambda x: -x[2])
|
| 123 |
+
|
| 124 |
+
for exp, pred, count in misclassifications[:10]:
|
| 125 |
+
lines.append(f"| {exp} | {pred} | {count} |")
|
| 126 |
+
|
| 127 |
+
lines.append("")
|
| 128 |
+
|
| 129 |
+
# Transition test results if available
|
| 130 |
+
if transition_results:
|
| 131 |
+
correct_transitions = sum(1 for r in transition_results if r.transition_correct)
|
| 132 |
+
total_transitions = len(transition_results)
|
| 133 |
+
trans_accuracy = correct_transitions / total_transitions if total_transitions > 0 else 0
|
| 134 |
+
|
| 135 |
+
lines.extend([
|
| 136 |
+
"## Live Emotion Transition Tests",
|
| 137 |
+
"",
|
| 138 |
+
f"- **Total Transitions:** {total_transitions}",
|
| 139 |
+
f"- **Correct Transitions:** {correct_transitions}",
|
| 140 |
+
f"- **Transition Accuracy:** {trans_accuracy:.1%}",
|
| 141 |
+
"",
|
| 142 |
+
"### Transition Details",
|
| 143 |
+
"",
|
| 144 |
+
"| From Text | To Text | Expected | Detected | Status |",
|
| 145 |
+
"|-----------|---------|----------|----------|--------|",
|
| 146 |
+
])
|
| 147 |
+
|
| 148 |
+
for r in transition_results:
|
| 149 |
+
status = "✅" if r.transition_correct else "❌"
|
| 150 |
+
from_short = r.from_text[:25] + "..." if len(r.from_text) > 25 else r.from_text
|
| 151 |
+
to_short = r.to_text[:25] + "..." if len(r.to_text) > 25 else r.to_text
|
| 152 |
+
lines.append(
|
| 153 |
+
f"| {from_short} | {to_short} | {r.to_emotion} | "
|
| 154 |
+
f"{r.final_detected_emotion} | {status} |"
|
| 155 |
+
)
|
| 156 |
+
|
| 157 |
+
lines.append("")
|
| 158 |
+
|
| 159 |
+
# Detailed test results
|
| 160 |
+
lines.extend([
|
| 161 |
+
"## Detailed Test Results",
|
| 162 |
+
"",
|
| 163 |
+
"### Failed Tests",
|
| 164 |
+
"",
|
| 165 |
+
])
|
| 166 |
+
|
| 167 |
+
# Collect all failed results
|
| 168 |
+
failures = []
|
| 169 |
+
for emotion, results_list in benchmark_results.emotion_results.items():
|
| 170 |
+
for r in results_list:
|
| 171 |
+
if not r.is_correct:
|
| 172 |
+
failures.append(r)
|
| 173 |
+
|
| 174 |
+
if failures:
|
| 175 |
+
lines.extend([
|
| 176 |
+
"| Text | Expected | Detected | Time (ms) |",
|
| 177 |
+
"|------|----------|----------|-----------|",
|
| 178 |
+
])
|
| 179 |
+
for r in failures[:50]: # Show first 50 failures
|
| 180 |
+
text_short = r.text[:40] + "..." if len(r.text) > 40 else r.text
|
| 181 |
+
lines.append(f"| {text_short} | {r.expected_polarity} | {r.detected_polarity} | {r.inference_time_ms:.2f} |")
|
| 182 |
+
else:
|
| 183 |
+
lines.append("*All tests passed!*")
|
| 184 |
+
|
| 185 |
+
lines.extend([
|
| 186 |
+
"",
|
| 187 |
+
"---",
|
| 188 |
+
"",
|
| 189 |
+
f"*Report generated by Emoji AI Avatar Evaluation Framework*",
|
| 190 |
+
])
|
| 191 |
+
|
| 192 |
+
with open(filepath, "w", encoding="utf-8") as f:
|
| 193 |
+
f.write("\n".join(lines))
|
| 194 |
+
|
| 195 |
+
return filepath
|
| 196 |
+
|
| 197 |
+
def generate_json_report(
|
| 198 |
+
self,
|
| 199 |
+
benchmark_results: Any,
|
| 200 |
+
transition_results: Optional[List[Any]] = None,
|
| 201 |
+
filename: Optional[str] = None
|
| 202 |
+
) -> str:
|
| 203 |
+
"""
|
| 204 |
+
Generate JSON report for CI/CD integration
|
| 205 |
+
|
| 206 |
+
Args:
|
| 207 |
+
benchmark_results: Results from AccuracyBenchmark
|
| 208 |
+
transition_results: Optional results from LiveStreamTest
|
| 209 |
+
filename: Optional filename (auto-generated if None)
|
| 210 |
+
|
| 211 |
+
Returns:
|
| 212 |
+
Path to generated report
|
| 213 |
+
"""
|
| 214 |
+
timestamp = self._get_timestamp()
|
| 215 |
+
if filename is None:
|
| 216 |
+
filename = f"evaluation_report_{timestamp}.json"
|
| 217 |
+
|
| 218 |
+
filepath = os.path.join(self.output_dir, filename)
|
| 219 |
+
|
| 220 |
+
# Build report data
|
| 221 |
+
# Flatten the nested confusion matrix for JSON
|
| 222 |
+
flat_confusion = {}
|
| 223 |
+
for expected, predicted_counts in benchmark_results.confusion_matrix.items():
|
| 224 |
+
for predicted, count in predicted_counts.items():
|
| 225 |
+
flat_confusion[f"{expected}|{predicted}"] = count
|
| 226 |
+
|
| 227 |
+
# Flatten emotion results for JSON
|
| 228 |
+
all_results = []
|
| 229 |
+
for emotion, results_list in benchmark_results.emotion_results.items():
|
| 230 |
+
for r in results_list:
|
| 231 |
+
all_results.append(asdict(r))
|
| 232 |
+
|
| 233 |
+
report = {
|
| 234 |
+
"meta": {
|
| 235 |
+
"timestamp": datetime.now().isoformat(),
|
| 236 |
+
"version": "1.0.0",
|
| 237 |
+
},
|
| 238 |
+
"summary": {
|
| 239 |
+
"total_tests": benchmark_results.total_tests,
|
| 240 |
+
"correct": benchmark_results.correct_tests,
|
| 241 |
+
"accuracy": benchmark_results.accuracy,
|
| 242 |
+
"avg_time_ms": benchmark_results.avg_inference_time_ms,
|
| 243 |
+
"min_time_ms": benchmark_results.min_inference_time_ms,
|
| 244 |
+
"max_time_ms": benchmark_results.max_inference_time_ms,
|
| 245 |
+
"median_time_ms": benchmark_results.median_inference_time_ms,
|
| 246 |
+
},
|
| 247 |
+
"emotion_accuracy": dict(benchmark_results.emotion_accuracy),
|
| 248 |
+
"confusion_matrix": flat_confusion,
|
| 249 |
+
"results": all_results,
|
| 250 |
+
}
|
| 251 |
+
|
| 252 |
+
if transition_results:
|
| 253 |
+
correct_transitions = sum(1 for r in transition_results if r.transition_correct)
|
| 254 |
+
report["transitions"] = {
|
| 255 |
+
"total": len(transition_results),
|
| 256 |
+
"correct": correct_transitions,
|
| 257 |
+
"accuracy": correct_transitions / len(transition_results) if transition_results else 0,
|
| 258 |
+
"details": [asdict(r) for r in transition_results],
|
| 259 |
+
}
|
| 260 |
+
|
| 261 |
+
with open(filepath, "w", encoding="utf-8") as f:
|
| 262 |
+
json.dump(report, f, indent=2)
|
| 263 |
+
|
| 264 |
+
return filepath
|
| 265 |
+
|
| 266 |
+
def generate_summary_report(self, benchmark_results: Any) -> str:
|
| 267 |
+
"""
|
| 268 |
+
Generate a brief console summary
|
| 269 |
+
|
| 270 |
+
Args:
|
| 271 |
+
benchmark_results: Results from AccuracyBenchmark
|
| 272 |
+
|
| 273 |
+
Returns:
|
| 274 |
+
Summary string
|
| 275 |
+
"""
|
| 276 |
+
lines = [
|
| 277 |
+
"=" * 60,
|
| 278 |
+
"SENTIMENT ANALYSIS EVALUATION SUMMARY",
|
| 279 |
+
"=" * 60,
|
| 280 |
+
"",
|
| 281 |
+
f"Total Tests: {benchmark_results.total_tests}",
|
| 282 |
+
f"Correct: {benchmark_results.correct_tests}",
|
| 283 |
+
f"Accuracy: {benchmark_results.accuracy:.1%}",
|
| 284 |
+
f"Avg Time: {benchmark_results.avg_inference_time_ms:.2f} ms",
|
| 285 |
+
"",
|
| 286 |
+
"-" * 60,
|
| 287 |
+
"EMOTION BREAKDOWN (Top 10)",
|
| 288 |
+
"-" * 60,
|
| 289 |
+
]
|
| 290 |
+
|
| 291 |
+
# Top 10 by accuracy
|
| 292 |
+
emotion_accuracy = benchmark_results.emotion_accuracy
|
| 293 |
+
sorted_emotions = sorted(emotion_accuracy.items(), key=lambda x: -x[1])[:10]
|
| 294 |
+
|
| 295 |
+
for emotion, acc in sorted_emotions:
|
| 296 |
+
bar = "█" * int(acc * 20) + "░" * (20 - int(acc * 20))
|
| 297 |
+
lines.append(f"{emotion:20} {bar} {acc:.1%}")
|
| 298 |
+
|
| 299 |
+
lines.extend([
|
| 300 |
+
"",
|
| 301 |
+
"-" * 60,
|
| 302 |
+
"LOWEST PERFORMERS (Bottom 5)",
|
| 303 |
+
"-" * 60,
|
| 304 |
+
])
|
| 305 |
+
|
| 306 |
+
# Bottom 5 by accuracy
|
| 307 |
+
bottom_emotions = sorted(emotion_accuracy.items(), key=lambda x: x[1])[:5]
|
| 308 |
+
|
| 309 |
+
for emotion, acc in bottom_emotions:
|
| 310 |
+
bar = "█" * int(acc * 20) + "░" * (20 - int(acc * 20))
|
| 311 |
+
lines.append(f"{emotion:20} {bar} {acc:.1%}")
|
| 312 |
+
|
| 313 |
+
lines.append("=" * 60)
|
| 314 |
+
|
| 315 |
+
return "\n".join(lines)
|
| 316 |
+
|
| 317 |
+
|
| 318 |
+
if __name__ == "__main__":
|
| 319 |
+
# Demo usage
|
| 320 |
+
print("Report Generator - Use with AccuracyBenchmark results")
|
evaluation/reports/comparison_binary-v1_2025-12-01_18-23-47.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:23:47
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 475
|
| 11 |
+
- **Overall Accuracy:** 93.1%
|
| 12 |
+
- **Average Inference Time:** 47.34 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 7 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| ecstasy | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 6 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| confidence | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| empathy | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| curiosity | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| interest | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| confused | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| annoyance | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 82 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 88 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 93 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 94 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 99 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 100 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 101 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| optimism | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| amusement | 85.7% | 7 | ✅ PASS |
|
| 105 |
+
| excitement | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| calm | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| pessimism | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| shock | 60.0% | 5 | ✅ PASS |
|
| 111 |
+
| fury | 60.0% | 5 | ✅ PASS |
|
| 112 |
+
| envy | 60.0% | 5 | ✅ PASS |
|
| 113 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 114 |
+
| sympathy | 40.0% | 5 | ❌ FAIL |
|
| 115 |
+
| longing | 40.0% | 5 | ❌ FAIL |
|
| 116 |
+
| neutral | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| thinking | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| silly | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 15.34 ms |
|
| 125 |
+
| Max Inference Time | 1078.30 ms |
|
| 126 |
+
| Avg Inference Time | 47.34 ms |
|
| 127 |
+
| Median Inference Time | 37.04 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | positive | 13 |
|
| 136 |
+
| positive | negative | 12 |
|
| 137 |
+
| neutral | positive | 6 |
|
| 138 |
+
| neutral | negative | 4 |
|
| 139 |
+
|
| 140 |
+
## Detailed Test Results
|
| 141 |
+
|
| 142 |
+
### Failed Tests
|
| 143 |
+
|
| 144 |
+
| Text | Expected | Detected | Time (ms) |
|
| 145 |
+
|------|----------|----------|-----------|
|
| 146 |
+
| I can't contain my excitement | positive | negative | 45.84 |
|
| 147 |
+
| Very calm today | positive | negative | 39.99 |
|
| 148 |
+
| What a shock | negative | positive | 37.32 |
|
| 149 |
+
| I'm completely shocked | negative | positive | 47.85 |
|
| 150 |
+
| The weather is average today | neutral | positive | 48.19 |
|
| 151 |
+
| It's just okay | neutral | positive | 46.51 |
|
| 152 |
+
| Nothing special | neutral | negative | 20.48 |
|
| 153 |
+
| I don't have strong feelings | neutral | negative | 24.17 |
|
| 154 |
+
| It is what it is | neutral | positive | 40.47 |
|
| 155 |
+
| I'm thinking about it | neutral | positive | 36.80 |
|
| 156 |
+
| Let me think | neutral | positive | 38.14 |
|
| 157 |
+
| I need to think | neutral | negative | 38.35 |
|
| 158 |
+
| Thinking hard | neutral | negative | 22.59 |
|
| 159 |
+
| I'm contemplating | neutral | positive | 46.10 |
|
| 160 |
+
| Uncertainty lingers | negative | positive | 19.42 |
|
| 161 |
+
| Such fury | negative | positive | 32.80 |
|
| 162 |
+
| Fury consumes me | negative | positive | 52.39 |
|
| 163 |
+
| I feel envious | negative | positive | 45.94 |
|
| 164 |
+
| I'm envious | negative | positive | 49.05 |
|
| 165 |
+
| I'm feeling silly | positive | negative | 37.79 |
|
| 166 |
+
| Such silliness | positive | negative | 41.00 |
|
| 167 |
+
| Silly mood | positive | negative | 21.37 |
|
| 168 |
+
| I'm being silly | positive | negative | 38.57 |
|
| 169 |
+
| Feeling silly | positive | negative | 22.92 |
|
| 170 |
+
| Such mischief | positive | negative | 27.28 |
|
| 171 |
+
| LOL | positive | negative | 35.21 |
|
| 172 |
+
| I feel sympathy for you | positive | negative | 38.81 |
|
| 173 |
+
| Such sympathy | positive | negative | 36.50 |
|
| 174 |
+
| Sympathy for your loss | positive | negative | 31.92 |
|
| 175 |
+
| Pessimism sets in | negative | positive | 54.73 |
|
| 176 |
+
| I'm longing for you | negative | positive | 26.70 |
|
| 177 |
+
| Such longing | negative | positive | 21.53 |
|
| 178 |
+
| I miss you | negative | positive | 27.12 |
|
| 179 |
+
| I'm yearning for this | negative | positive | 39.85 |
|
| 180 |
+
| I'm filled with yearning | negative | positive | 33.16 |
|
| 181 |
+
|
| 182 |
+
---
|
| 183 |
+
|
| 184 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v1_2025-12-01_18-24-59.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:24:59
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 475
|
| 11 |
+
- **Overall Accuracy:** 93.1%
|
| 12 |
+
- **Average Inference Time:** 17.27 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 7 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| ecstasy | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 6 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| confidence | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| empathy | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| curiosity | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| interest | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| confused | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| annoyance | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 82 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 88 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 93 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 94 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 99 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 100 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 101 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| optimism | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| amusement | 85.7% | 7 | ✅ PASS |
|
| 105 |
+
| excitement | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| calm | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| pessimism | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| shock | 60.0% | 5 | ✅ PASS |
|
| 111 |
+
| fury | 60.0% | 5 | ✅ PASS |
|
| 112 |
+
| envy | 60.0% | 5 | ✅ PASS |
|
| 113 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 114 |
+
| sympathy | 40.0% | 5 | ❌ FAIL |
|
| 115 |
+
| longing | 40.0% | 5 | ❌ FAIL |
|
| 116 |
+
| neutral | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| thinking | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| silly | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 11.80 ms |
|
| 125 |
+
| Max Inference Time | 39.77 ms |
|
| 126 |
+
| Avg Inference Time | 17.27 ms |
|
| 127 |
+
| Median Inference Time | 16.32 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | positive | 13 |
|
| 136 |
+
| positive | negative | 12 |
|
| 137 |
+
| neutral | positive | 6 |
|
| 138 |
+
| neutral | negative | 4 |
|
| 139 |
+
|
| 140 |
+
## Detailed Test Results
|
| 141 |
+
|
| 142 |
+
### Failed Tests
|
| 143 |
+
|
| 144 |
+
| Text | Expected | Detected | Time (ms) |
|
| 145 |
+
|------|----------|----------|-----------|
|
| 146 |
+
| I can't contain my excitement | positive | negative | 18.89 |
|
| 147 |
+
| Very calm today | positive | negative | 16.29 |
|
| 148 |
+
| What a shock | negative | positive | 15.35 |
|
| 149 |
+
| I'm completely shocked | negative | positive | 22.94 |
|
| 150 |
+
| The weather is average today | neutral | positive | 23.53 |
|
| 151 |
+
| It's just okay | neutral | positive | 20.77 |
|
| 152 |
+
| Nothing special | neutral | negative | 13.37 |
|
| 153 |
+
| I don't have strong feelings | neutral | negative | 16.92 |
|
| 154 |
+
| It is what it is | neutral | positive | 23.06 |
|
| 155 |
+
| I'm thinking about it | neutral | positive | 19.42 |
|
| 156 |
+
| Let me think | neutral | positive | 18.49 |
|
| 157 |
+
| I need to think | neutral | negative | 21.98 |
|
| 158 |
+
| Thinking hard | neutral | negative | 15.50 |
|
| 159 |
+
| I'm contemplating | neutral | positive | 20.56 |
|
| 160 |
+
| Uncertainty lingers | negative | positive | 14.51 |
|
| 161 |
+
| Such fury | negative | positive | 14.04 |
|
| 162 |
+
| Fury consumes me | negative | positive | 16.98 |
|
| 163 |
+
| I feel envious | negative | positive | 16.18 |
|
| 164 |
+
| I'm envious | negative | positive | 19.42 |
|
| 165 |
+
| I'm feeling silly | positive | negative | 23.82 |
|
| 166 |
+
| Such silliness | positive | negative | 17.52 |
|
| 167 |
+
| Silly mood | positive | negative | 12.68 |
|
| 168 |
+
| I'm being silly | positive | negative | 21.84 |
|
| 169 |
+
| Feeling silly | positive | negative | 11.91 |
|
| 170 |
+
| Such mischief | positive | negative | 14.13 |
|
| 171 |
+
| LOL | positive | negative | 13.38 |
|
| 172 |
+
| I feel sympathy for you | positive | negative | 21.70 |
|
| 173 |
+
| Such sympathy | positive | negative | 12.46 |
|
| 174 |
+
| Sympathy for your loss | positive | negative | 15.89 |
|
| 175 |
+
| Pessimism sets in | negative | positive | 23.60 |
|
| 176 |
+
| I'm longing for you | negative | positive | 16.95 |
|
| 177 |
+
| Such longing | negative | positive | 14.18 |
|
| 178 |
+
| I miss you | negative | positive | 15.50 |
|
| 179 |
+
| I'm yearning for this | negative | positive | 17.43 |
|
| 180 |
+
| I'm filled with yearning | negative | positive | 17.94 |
|
| 181 |
+
|
| 182 |
+
---
|
| 183 |
+
|
| 184 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v1_2025-12-01_18-30-05.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:30:05
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 475
|
| 11 |
+
- **Overall Accuracy:** 93.1%
|
| 12 |
+
- **Average Inference Time:** 19.15 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 7 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| ecstasy | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 6 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| confidence | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| empathy | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| curiosity | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| interest | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| confused | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| annoyance | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 82 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 88 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 93 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 94 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 99 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 100 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 101 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| optimism | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| amusement | 85.7% | 7 | ✅ PASS |
|
| 105 |
+
| excitement | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| calm | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| pessimism | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| shock | 60.0% | 5 | ✅ PASS |
|
| 111 |
+
| fury | 60.0% | 5 | ✅ PASS |
|
| 112 |
+
| envy | 60.0% | 5 | ✅ PASS |
|
| 113 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 114 |
+
| sympathy | 40.0% | 5 | ❌ FAIL |
|
| 115 |
+
| longing | 40.0% | 5 | ❌ FAIL |
|
| 116 |
+
| neutral | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| thinking | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| silly | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 11.93 ms |
|
| 125 |
+
| Max Inference Time | 66.25 ms |
|
| 126 |
+
| Avg Inference Time | 19.15 ms |
|
| 127 |
+
| Median Inference Time | 18.25 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | positive | 13 |
|
| 136 |
+
| positive | negative | 12 |
|
| 137 |
+
| neutral | positive | 6 |
|
| 138 |
+
| neutral | negative | 4 |
|
| 139 |
+
|
| 140 |
+
## Detailed Test Results
|
| 141 |
+
|
| 142 |
+
### Failed Tests
|
| 143 |
+
|
| 144 |
+
| Text | Expected | Detected | Time (ms) |
|
| 145 |
+
|------|----------|----------|-----------|
|
| 146 |
+
| I can't contain my excitement | positive | negative | 19.78 |
|
| 147 |
+
| Very calm today | positive | negative | 16.28 |
|
| 148 |
+
| What a shock | negative | positive | 15.37 |
|
| 149 |
+
| I'm completely shocked | negative | positive | 22.76 |
|
| 150 |
+
| The weather is average today | neutral | positive | 22.88 |
|
| 151 |
+
| It's just okay | neutral | positive | 23.54 |
|
| 152 |
+
| Nothing special | neutral | negative | 14.75 |
|
| 153 |
+
| I don't have strong feelings | neutral | negative | 18.35 |
|
| 154 |
+
| It is what it is | neutral | positive | 22.89 |
|
| 155 |
+
| I'm thinking about it | neutral | positive | 19.51 |
|
| 156 |
+
| Let me think | neutral | positive | 15.02 |
|
| 157 |
+
| I need to think | neutral | negative | 21.89 |
|
| 158 |
+
| Thinking hard | neutral | negative | 13.08 |
|
| 159 |
+
| I'm contemplating | neutral | positive | 21.88 |
|
| 160 |
+
| Uncertainty lingers | negative | positive | 16.12 |
|
| 161 |
+
| Such fury | negative | positive | 13.43 |
|
| 162 |
+
| Fury consumes me | negative | positive | 22.17 |
|
| 163 |
+
| I feel envious | negative | positive | 21.34 |
|
| 164 |
+
| I'm envious | negative | positive | 23.32 |
|
| 165 |
+
| I'm feeling silly | positive | negative | 20.89 |
|
| 166 |
+
| Such silliness | positive | negative | 20.55 |
|
| 167 |
+
| Silly mood | positive | negative | 13.96 |
|
| 168 |
+
| I'm being silly | positive | negative | 23.02 |
|
| 169 |
+
| Feeling silly | positive | negative | 12.53 |
|
| 170 |
+
| Such mischief | positive | negative | 12.78 |
|
| 171 |
+
| LOL | positive | negative | 13.64 |
|
| 172 |
+
| I feel sympathy for you | positive | negative | 22.68 |
|
| 173 |
+
| Such sympathy | positive | negative | 14.29 |
|
| 174 |
+
| Sympathy for your loss | positive | negative | 21.55 |
|
| 175 |
+
| Pessimism sets in | negative | positive | 22.47 |
|
| 176 |
+
| I'm longing for you | negative | positive | 16.01 |
|
| 177 |
+
| Such longing | negative | positive | 13.05 |
|
| 178 |
+
| I miss you | negative | positive | 16.34 |
|
| 179 |
+
| I'm yearning for this | negative | positive | 15.63 |
|
| 180 |
+
| I'm filled with yearning | negative | positive | 17.89 |
|
| 181 |
+
|
| 182 |
+
---
|
| 183 |
+
|
| 184 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v1_2025-12-01_18-36-10.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:36:10
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 475
|
| 11 |
+
- **Overall Accuracy:** 93.1%
|
| 12 |
+
- **Average Inference Time:** 18.39 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 7 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| ecstasy | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 6 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| confidence | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| empathy | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| curiosity | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| interest | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| confused | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| annoyance | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 82 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 88 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 93 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 94 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 99 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 100 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 101 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| optimism | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| amusement | 85.7% | 7 | ✅ PASS |
|
| 105 |
+
| excitement | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| calm | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| pessimism | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| shock | 60.0% | 5 | ✅ PASS |
|
| 111 |
+
| fury | 60.0% | 5 | ✅ PASS |
|
| 112 |
+
| envy | 60.0% | 5 | ✅ PASS |
|
| 113 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 114 |
+
| sympathy | 40.0% | 5 | ❌ FAIL |
|
| 115 |
+
| longing | 40.0% | 5 | ❌ FAIL |
|
| 116 |
+
| neutral | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| thinking | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| silly | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 11.67 ms |
|
| 125 |
+
| Max Inference Time | 98.03 ms |
|
| 126 |
+
| Avg Inference Time | 18.39 ms |
|
| 127 |
+
| Median Inference Time | 17.89 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | positive | 13 |
|
| 136 |
+
| positive | negative | 12 |
|
| 137 |
+
| neutral | positive | 6 |
|
| 138 |
+
| neutral | negative | 4 |
|
| 139 |
+
|
| 140 |
+
## Detailed Test Results
|
| 141 |
+
|
| 142 |
+
### Failed Tests
|
| 143 |
+
|
| 144 |
+
| Text | Expected | Detected | Time (ms) |
|
| 145 |
+
|------|----------|----------|-----------|
|
| 146 |
+
| I can't contain my excitement | positive | negative | 21.82 |
|
| 147 |
+
| Very calm today | positive | negative | 16.02 |
|
| 148 |
+
| What a shock | negative | positive | 12.94 |
|
| 149 |
+
| I'm completely shocked | negative | positive | 22.00 |
|
| 150 |
+
| The weather is average today | neutral | positive | 23.31 |
|
| 151 |
+
| It's just okay | neutral | positive | 23.34 |
|
| 152 |
+
| Nothing special | neutral | negative | 13.03 |
|
| 153 |
+
| I don't have strong feelings | neutral | negative | 17.75 |
|
| 154 |
+
| It is what it is | neutral | positive | 23.88 |
|
| 155 |
+
| I'm thinking about it | neutral | positive | 17.98 |
|
| 156 |
+
| Let me think | neutral | positive | 17.76 |
|
| 157 |
+
| I need to think | neutral | negative | 22.14 |
|
| 158 |
+
| Thinking hard | neutral | negative | 13.66 |
|
| 159 |
+
| I'm contemplating | neutral | positive | 19.42 |
|
| 160 |
+
| Uncertainty lingers | negative | positive | 14.65 |
|
| 161 |
+
| Such fury | negative | positive | 14.00 |
|
| 162 |
+
| Fury consumes me | negative | positive | 19.44 |
|
| 163 |
+
| I feel envious | negative | positive | 20.23 |
|
| 164 |
+
| I'm envious | negative | positive | 18.84 |
|
| 165 |
+
| I'm feeling silly | positive | negative | 20.00 |
|
| 166 |
+
| Such silliness | positive | negative | 20.67 |
|
| 167 |
+
| Silly mood | positive | negative | 14.78 |
|
| 168 |
+
| I'm being silly | positive | negative | 22.50 |
|
| 169 |
+
| Feeling silly | positive | negative | 13.16 |
|
| 170 |
+
| Such mischief | positive | negative | 12.73 |
|
| 171 |
+
| LOL | positive | negative | 13.10 |
|
| 172 |
+
| I feel sympathy for you | positive | negative | 20.01 |
|
| 173 |
+
| Such sympathy | positive | negative | 15.34 |
|
| 174 |
+
| Sympathy for your loss | positive | negative | 24.34 |
|
| 175 |
+
| Pessimism sets in | negative | positive | 22.88 |
|
| 176 |
+
| I'm longing for you | negative | positive | 21.32 |
|
| 177 |
+
| Such longing | negative | positive | 15.55 |
|
| 178 |
+
| I miss you | negative | positive | 15.26 |
|
| 179 |
+
| I'm yearning for this | negative | positive | 18.27 |
|
| 180 |
+
| I'm filled with yearning | negative | positive | 16.64 |
|
| 181 |
+
|
| 182 |
+
---
|
| 183 |
+
|
| 184 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v1_2025-12-01_18-38-15.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:38:15
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 475
|
| 11 |
+
- **Overall Accuracy:** 93.1%
|
| 12 |
+
- **Average Inference Time:** 18.70 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 7 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| ecstasy | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 6 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| confidence | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| empathy | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| curiosity | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| interest | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| confused | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| annoyance | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 82 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 88 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 93 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 94 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 99 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 100 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 101 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| optimism | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| amusement | 85.7% | 7 | ✅ PASS |
|
| 105 |
+
| excitement | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| calm | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| pessimism | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| shock | 60.0% | 5 | ✅ PASS |
|
| 111 |
+
| fury | 60.0% | 5 | ✅ PASS |
|
| 112 |
+
| envy | 60.0% | 5 | ✅ PASS |
|
| 113 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 114 |
+
| sympathy | 40.0% | 5 | ❌ FAIL |
|
| 115 |
+
| longing | 40.0% | 5 | ❌ FAIL |
|
| 116 |
+
| neutral | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| thinking | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| silly | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 11.77 ms |
|
| 125 |
+
| Max Inference Time | 43.15 ms |
|
| 126 |
+
| Avg Inference Time | 18.70 ms |
|
| 127 |
+
| Median Inference Time | 17.91 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | positive | 13 |
|
| 136 |
+
| positive | negative | 12 |
|
| 137 |
+
| neutral | positive | 6 |
|
| 138 |
+
| neutral | negative | 4 |
|
| 139 |
+
|
| 140 |
+
## Detailed Test Results
|
| 141 |
+
|
| 142 |
+
### Failed Tests
|
| 143 |
+
|
| 144 |
+
| Text | Expected | Detected | Time (ms) |
|
| 145 |
+
|------|----------|----------|-----------|
|
| 146 |
+
| I can't contain my excitement | positive | negative | 17.90 |
|
| 147 |
+
| Very calm today | positive | negative | 15.20 |
|
| 148 |
+
| What a shock | negative | positive | 17.03 |
|
| 149 |
+
| I'm completely shocked | negative | positive | 24.26 |
|
| 150 |
+
| The weather is average today | neutral | positive | 23.69 |
|
| 151 |
+
| It's just okay | neutral | positive | 24.90 |
|
| 152 |
+
| Nothing special | neutral | negative | 15.49 |
|
| 153 |
+
| I don't have strong feelings | neutral | negative | 18.01 |
|
| 154 |
+
| It is what it is | neutral | positive | 26.18 |
|
| 155 |
+
| I'm thinking about it | neutral | positive | 18.84 |
|
| 156 |
+
| Let me think | neutral | positive | 14.75 |
|
| 157 |
+
| I need to think | neutral | negative | 23.25 |
|
| 158 |
+
| Thinking hard | neutral | negative | 13.39 |
|
| 159 |
+
| I'm contemplating | neutral | positive | 22.37 |
|
| 160 |
+
| Uncertainty lingers | negative | positive | 18.13 |
|
| 161 |
+
| Such fury | negative | positive | 15.19 |
|
| 162 |
+
| Fury consumes me | negative | positive | 22.77 |
|
| 163 |
+
| I feel envious | negative | positive | 22.41 |
|
| 164 |
+
| I'm envious | negative | positive | 23.53 |
|
| 165 |
+
| I'm feeling silly | positive | negative | 21.98 |
|
| 166 |
+
| Such silliness | positive | negative | 23.92 |
|
| 167 |
+
| Silly mood | positive | negative | 13.19 |
|
| 168 |
+
| I'm being silly | positive | negative | 20.34 |
|
| 169 |
+
| Feeling silly | positive | negative | 12.99 |
|
| 170 |
+
| Such mischief | positive | negative | 13.92 |
|
| 171 |
+
| LOL | positive | negative | 12.51 |
|
| 172 |
+
| I feel sympathy for you | positive | negative | 20.06 |
|
| 173 |
+
| Such sympathy | positive | negative | 12.86 |
|
| 174 |
+
| Sympathy for your loss | positive | negative | 18.93 |
|
| 175 |
+
| Pessimism sets in | negative | positive | 23.40 |
|
| 176 |
+
| I'm longing for you | negative | positive | 17.93 |
|
| 177 |
+
| Such longing | negative | positive | 15.73 |
|
| 178 |
+
| I miss you | negative | positive | 15.33 |
|
| 179 |
+
| I'm yearning for this | negative | positive | 17.53 |
|
| 180 |
+
| I'm filled with yearning | negative | positive | 17.19 |
|
| 181 |
+
|
| 182 |
+
---
|
| 183 |
+
|
| 184 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v1_2025-12-01_18-39-42.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:39:42
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 475
|
| 11 |
+
- **Overall Accuracy:** 93.1%
|
| 12 |
+
- **Average Inference Time:** 17.18 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 7 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| ecstasy | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 6 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| confidence | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| empathy | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| curiosity | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| interest | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| confused | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| annoyance | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 82 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 88 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 93 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 94 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 99 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 100 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 101 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| optimism | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| amusement | 85.7% | 7 | ✅ PASS |
|
| 105 |
+
| excitement | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| calm | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| pessimism | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| shock | 60.0% | 5 | ✅ PASS |
|
| 111 |
+
| fury | 60.0% | 5 | ✅ PASS |
|
| 112 |
+
| envy | 60.0% | 5 | ✅ PASS |
|
| 113 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 114 |
+
| sympathy | 40.0% | 5 | ❌ FAIL |
|
| 115 |
+
| longing | 40.0% | 5 | ❌ FAIL |
|
| 116 |
+
| neutral | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| thinking | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| silly | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 11.43 ms |
|
| 125 |
+
| Max Inference Time | 33.77 ms |
|
| 126 |
+
| Avg Inference Time | 17.18 ms |
|
| 127 |
+
| Median Inference Time | 16.51 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | positive | 13 |
|
| 136 |
+
| positive | negative | 12 |
|
| 137 |
+
| neutral | positive | 6 |
|
| 138 |
+
| neutral | negative | 4 |
|
| 139 |
+
|
| 140 |
+
## Detailed Test Results
|
| 141 |
+
|
| 142 |
+
### Failed Tests
|
| 143 |
+
|
| 144 |
+
| Text | Expected | Detected | Time (ms) |
|
| 145 |
+
|------|----------|----------|-----------|
|
| 146 |
+
| I can't contain my excitement | positive | negative | 18.88 |
|
| 147 |
+
| Very calm today | positive | negative | 16.66 |
|
| 148 |
+
| What a shock | negative | positive | 15.83 |
|
| 149 |
+
| I'm completely shocked | negative | positive | 18.35 |
|
| 150 |
+
| The weather is average today | neutral | positive | 17.66 |
|
| 151 |
+
| It's just okay | neutral | positive | 19.41 |
|
| 152 |
+
| Nothing special | neutral | negative | 13.46 |
|
| 153 |
+
| I don't have strong feelings | neutral | negative | 16.34 |
|
| 154 |
+
| It is what it is | neutral | positive | 24.71 |
|
| 155 |
+
| I'm thinking about it | neutral | positive | 20.06 |
|
| 156 |
+
| Let me think | neutral | positive | 18.24 |
|
| 157 |
+
| I need to think | neutral | negative | 20.86 |
|
| 158 |
+
| Thinking hard | neutral | negative | 12.71 |
|
| 159 |
+
| I'm contemplating | neutral | positive | 19.83 |
|
| 160 |
+
| Uncertainty lingers | negative | positive | 15.70 |
|
| 161 |
+
| Such fury | negative | positive | 12.43 |
|
| 162 |
+
| Fury consumes me | negative | positive | 21.13 |
|
| 163 |
+
| I feel envious | negative | positive | 19.88 |
|
| 164 |
+
| I'm envious | negative | positive | 21.90 |
|
| 165 |
+
| I'm feeling silly | positive | negative | 22.37 |
|
| 166 |
+
| Such silliness | positive | negative | 20.76 |
|
| 167 |
+
| Silly mood | positive | negative | 13.14 |
|
| 168 |
+
| I'm being silly | positive | negative | 22.68 |
|
| 169 |
+
| Feeling silly | positive | negative | 13.57 |
|
| 170 |
+
| Such mischief | positive | negative | 11.70 |
|
| 171 |
+
| LOL | positive | negative | 14.60 |
|
| 172 |
+
| I feel sympathy for you | positive | negative | 22.29 |
|
| 173 |
+
| Such sympathy | positive | negative | 13.58 |
|
| 174 |
+
| Sympathy for your loss | positive | negative | 19.88 |
|
| 175 |
+
| Pessimism sets in | negative | positive | 21.20 |
|
| 176 |
+
| I'm longing for you | negative | positive | 19.03 |
|
| 177 |
+
| Such longing | negative | positive | 11.70 |
|
| 178 |
+
| I miss you | negative | positive | 14.19 |
|
| 179 |
+
| I'm yearning for this | negative | positive | 16.26 |
|
| 180 |
+
| I'm filled with yearning | negative | positive | 17.37 |
|
| 181 |
+
|
| 182 |
+
---
|
| 183 |
+
|
| 184 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v1_2025-12-01_18-44-50.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:44:50
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 475
|
| 11 |
+
- **Overall Accuracy:** 93.1%
|
| 12 |
+
- **Average Inference Time:** 18.69 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 7 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| ecstasy | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 6 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| confidence | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| empathy | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| curiosity | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| interest | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| confused | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| annoyance | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 82 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 88 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 93 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 94 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 99 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 100 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 101 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| optimism | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| amusement | 85.7% | 7 | ✅ PASS |
|
| 105 |
+
| excitement | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| calm | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| pessimism | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| shock | 60.0% | 5 | ✅ PASS |
|
| 111 |
+
| fury | 60.0% | 5 | ✅ PASS |
|
| 112 |
+
| envy | 60.0% | 5 | ✅ PASS |
|
| 113 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 114 |
+
| sympathy | 40.0% | 5 | ❌ FAIL |
|
| 115 |
+
| longing | 40.0% | 5 | ❌ FAIL |
|
| 116 |
+
| neutral | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| thinking | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| silly | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 11.95 ms |
|
| 125 |
+
| Max Inference Time | 66.49 ms |
|
| 126 |
+
| Avg Inference Time | 18.69 ms |
|
| 127 |
+
| Median Inference Time | 17.34 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | positive | 13 |
|
| 136 |
+
| positive | negative | 12 |
|
| 137 |
+
| neutral | positive | 6 |
|
| 138 |
+
| neutral | negative | 4 |
|
| 139 |
+
|
| 140 |
+
## Detailed Test Results
|
| 141 |
+
|
| 142 |
+
### Failed Tests
|
| 143 |
+
|
| 144 |
+
| Text | Expected | Detected | Time (ms) |
|
| 145 |
+
|------|----------|----------|-----------|
|
| 146 |
+
| I can't contain my excitement | positive | negative | 14.78 |
|
| 147 |
+
| Very calm today | positive | negative | 15.51 |
|
| 148 |
+
| What a shock | negative | positive | 17.15 |
|
| 149 |
+
| I'm completely shocked | negative | positive | 22.85 |
|
| 150 |
+
| The weather is average today | neutral | positive | 22.97 |
|
| 151 |
+
| It's just okay | neutral | positive | 23.25 |
|
| 152 |
+
| Nothing special | neutral | negative | 16.06 |
|
| 153 |
+
| I don't have strong feelings | neutral | negative | 17.76 |
|
| 154 |
+
| It is what it is | neutral | positive | 24.59 |
|
| 155 |
+
| I'm thinking about it | neutral | positive | 16.93 |
|
| 156 |
+
| Let me think | neutral | positive | 14.68 |
|
| 157 |
+
| I need to think | neutral | negative | 20.86 |
|
| 158 |
+
| Thinking hard | neutral | negative | 13.97 |
|
| 159 |
+
| I'm contemplating | neutral | positive | 21.43 |
|
| 160 |
+
| Uncertainty lingers | negative | positive | 14.38 |
|
| 161 |
+
| Such fury | negative | positive | 13.41 |
|
| 162 |
+
| Fury consumes me | negative | positive | 19.86 |
|
| 163 |
+
| I feel envious | negative | positive | 18.65 |
|
| 164 |
+
| I'm envious | negative | positive | 21.61 |
|
| 165 |
+
| I'm feeling silly | positive | negative | 23.40 |
|
| 166 |
+
| Such silliness | positive | negative | 21.67 |
|
| 167 |
+
| Silly mood | positive | negative | 13.03 |
|
| 168 |
+
| I'm being silly | positive | negative | 21.29 |
|
| 169 |
+
| Feeling silly | positive | negative | 14.69 |
|
| 170 |
+
| Such mischief | positive | negative | 15.21 |
|
| 171 |
+
| LOL | positive | negative | 14.89 |
|
| 172 |
+
| I feel sympathy for you | positive | negative | 23.54 |
|
| 173 |
+
| Such sympathy | positive | negative | 14.36 |
|
| 174 |
+
| Sympathy for your loss | positive | negative | 20.73 |
|
| 175 |
+
| Pessimism sets in | negative | positive | 21.24 |
|
| 176 |
+
| I'm longing for you | negative | positive | 16.65 |
|
| 177 |
+
| Such longing | negative | positive | 14.52 |
|
| 178 |
+
| I miss you | negative | positive | 16.01 |
|
| 179 |
+
| I'm yearning for this | negative | positive | 20.58 |
|
| 180 |
+
| I'm filled with yearning | negative | positive | 16.55 |
|
| 181 |
+
|
| 182 |
+
---
|
| 183 |
+
|
| 184 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v1_2025-12-01_18-46-46.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:46:46
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 475
|
| 11 |
+
- **Overall Accuracy:** 93.1%
|
| 12 |
+
- **Average Inference Time:** 18.16 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 7 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| ecstasy | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 6 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| confidence | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| empathy | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| curiosity | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| interest | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| confused | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| annoyance | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 82 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 88 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 93 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 94 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 99 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 100 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 101 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| optimism | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| amusement | 85.7% | 7 | ✅ PASS |
|
| 105 |
+
| excitement | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| calm | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| pessimism | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| shock | 60.0% | 5 | ✅ PASS |
|
| 111 |
+
| fury | 60.0% | 5 | ✅ PASS |
|
| 112 |
+
| envy | 60.0% | 5 | ✅ PASS |
|
| 113 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 114 |
+
| sympathy | 40.0% | 5 | ❌ FAIL |
|
| 115 |
+
| longing | 40.0% | 5 | ❌ FAIL |
|
| 116 |
+
| neutral | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| thinking | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| silly | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 11.85 ms |
|
| 125 |
+
| Max Inference Time | 45.91 ms |
|
| 126 |
+
| Avg Inference Time | 18.16 ms |
|
| 127 |
+
| Median Inference Time | 17.03 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | positive | 13 |
|
| 136 |
+
| positive | negative | 12 |
|
| 137 |
+
| neutral | positive | 6 |
|
| 138 |
+
| neutral | negative | 4 |
|
| 139 |
+
|
| 140 |
+
## Detailed Test Results
|
| 141 |
+
|
| 142 |
+
### Failed Tests
|
| 143 |
+
|
| 144 |
+
| Text | Expected | Detected | Time (ms) |
|
| 145 |
+
|------|----------|----------|-----------|
|
| 146 |
+
| I can't contain my excitement | positive | negative | 15.26 |
|
| 147 |
+
| Very calm today | positive | negative | 14.64 |
|
| 148 |
+
| What a shock | negative | positive | 13.74 |
|
| 149 |
+
| I'm completely shocked | negative | positive | 21.97 |
|
| 150 |
+
| The weather is average today | neutral | positive | 22.34 |
|
| 151 |
+
| It's just okay | neutral | positive | 21.72 |
|
| 152 |
+
| Nothing special | neutral | negative | 12.56 |
|
| 153 |
+
| I don't have strong feelings | neutral | negative | 17.67 |
|
| 154 |
+
| It is what it is | neutral | positive | 21.64 |
|
| 155 |
+
| I'm thinking about it | neutral | positive | 20.27 |
|
| 156 |
+
| Let me think | neutral | positive | 13.61 |
|
| 157 |
+
| I need to think | neutral | negative | 20.89 |
|
| 158 |
+
| Thinking hard | neutral | negative | 14.07 |
|
| 159 |
+
| I'm contemplating | neutral | positive | 21.29 |
|
| 160 |
+
| Uncertainty lingers | negative | positive | 15.21 |
|
| 161 |
+
| Such fury | negative | positive | 14.08 |
|
| 162 |
+
| Fury consumes me | negative | positive | 20.26 |
|
| 163 |
+
| I feel envious | negative | positive | 20.53 |
|
| 164 |
+
| I'm envious | negative | positive | 22.68 |
|
| 165 |
+
| I'm feeling silly | positive | negative | 22.10 |
|
| 166 |
+
| Such silliness | positive | negative | 21.04 |
|
| 167 |
+
| Silly mood | positive | negative | 15.78 |
|
| 168 |
+
| I'm being silly | positive | negative | 24.52 |
|
| 169 |
+
| Feeling silly | positive | negative | 17.78 |
|
| 170 |
+
| Such mischief | positive | negative | 16.43 |
|
| 171 |
+
| LOL | positive | negative | 11.93 |
|
| 172 |
+
| I feel sympathy for you | positive | negative | 21.78 |
|
| 173 |
+
| Such sympathy | positive | negative | 13.72 |
|
| 174 |
+
| Sympathy for your loss | positive | negative | 21.30 |
|
| 175 |
+
| Pessimism sets in | negative | positive | 25.43 |
|
| 176 |
+
| I'm longing for you | negative | positive | 16.92 |
|
| 177 |
+
| Such longing | negative | positive | 14.44 |
|
| 178 |
+
| I miss you | negative | positive | 15.78 |
|
| 179 |
+
| I'm yearning for this | negative | positive | 17.95 |
|
| 180 |
+
| I'm filled with yearning | negative | positive | 18.47 |
|
| 181 |
+
|
| 182 |
+
---
|
| 183 |
+
|
| 184 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v2_2025-12-01_18-23-47.md
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:23:47
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 626
|
| 10 |
+
- **Correct Predictions:** 564
|
| 11 |
+
- **Overall Accuracy:** 90.1%
|
| 12 |
+
- **Average Inference Time:** 26.79 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 7 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 10 | ✅ PASS |
|
| 20 |
+
| ecstasy | 100.0% | 7 | ✅ PASS |
|
| 21 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 7 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 6 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 6 | ✅ PASS |
|
| 31 |
+
| pride | 100.0% | 7 | ✅ PASS |
|
| 32 |
+
| confidence | 100.0% | 6 | ✅ PASS |
|
| 33 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| love | 100.0% | 7 | ✅ PASS |
|
| 35 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| empathy | 100.0% | 6 | ✅ PASS |
|
| 40 |
+
| gratitude | 100.0% | 7 | ✅ PASS |
|
| 41 |
+
| curiosity | 100.0% | 7 | ✅ PASS |
|
| 42 |
+
| interest | 100.0% | 6 | ✅ PASS |
|
| 43 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| surprise | 100.0% | 6 | ✅ PASS |
|
| 49 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| confused | 100.0% | 7 | ✅ PASS |
|
| 51 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| sadness | 100.0% | 7 | ✅ PASS |
|
| 56 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| grief | 100.0% | 6 | ✅ PASS |
|
| 58 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| disappointment | 100.0% | 6 | ✅ PASS |
|
| 60 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| loneliness | 100.0% | 6 | ✅ PASS |
|
| 62 |
+
| hurt | 100.0% | 6 | ✅ PASS |
|
| 63 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| fear | 100.0% | 6 | ✅ PASS |
|
| 65 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| anxiety | 100.0% | 6 | ✅ PASS |
|
| 69 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| anger | 100.0% | 6 | ✅ PASS |
|
| 74 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| annoyance | 100.0% | 6 | ✅ PASS |
|
| 77 |
+
| frustration | 100.0% | 6 | ✅ PASS |
|
| 78 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| disgust | 100.0% | 6 | ✅ PASS |
|
| 82 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| embarrassment | 100.0% | 7 | ✅ PASS |
|
| 88 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| boredom | 100.0% | 6 | ✅ PASS |
|
| 93 |
+
| tiredness | 100.0% | 6 | ✅ PASS |
|
| 94 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| nostalgia | 100.0% | 7 | ✅ PASS |
|
| 99 |
+
| hope | 100.0% | 7 | ✅ PASS |
|
| 100 |
+
| optimism | 100.0% | 6 | ✅ PASS |
|
| 101 |
+
| determination | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| inspiration | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| anticipation | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| trust | 100.0% | 5 | ✅ PASS |
|
| 105 |
+
| acceptance | 100.0% | 5 | ✅ PASS |
|
| 106 |
+
| excitement | 87.5% | 8 | ✅ PASS |
|
| 107 |
+
| calm | 85.7% | 7 | ✅ PASS |
|
| 108 |
+
| uncertain | 85.7% | 7 | ✅ PASS |
|
| 109 |
+
| playful | 85.7% | 7 | ✅ PASS |
|
| 110 |
+
| relief | 83.3% | 6 | ✅ PASS |
|
| 111 |
+
| affection | 83.3% | 6 | ✅ PASS |
|
| 112 |
+
| pessimism | 83.3% | 6 | ✅ PASS |
|
| 113 |
+
| amusement | 81.8% | 11 | ✅ PASS |
|
| 114 |
+
| shock | 66.7% | 6 | ✅ PASS |
|
| 115 |
+
| fury | 66.7% | 6 | ✅ PASS |
|
| 116 |
+
| envy | 66.7% | 6 | ✅ PASS |
|
| 117 |
+
| mischievous | 66.7% | 6 | ✅ PASS |
|
| 118 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 119 |
+
| sympathy | 50.0% | 8 | ✅ PASS |
|
| 120 |
+
| longing | 42.9% | 7 | ❌ FAIL |
|
| 121 |
+
| silly | 12.5% | 8 | ❌ FAIL |
|
| 122 |
+
| neutral | 0.0% | 13 | ❌ FAIL |
|
| 123 |
+
| thinking | 0.0% | 10 | ❌ FAIL |
|
| 124 |
+
| sarcasm | 0.0% | 5 | ❌ FAIL |
|
| 125 |
+
|
| 126 |
+
## Performance Metrics
|
| 127 |
+
|
| 128 |
+
| Metric | Value |
|
| 129 |
+
|--------|-------|
|
| 130 |
+
| Min Inference Time | 11.33 ms |
|
| 131 |
+
| Max Inference Time | 236.22 ms |
|
| 132 |
+
| Avg Inference Time | 26.79 ms |
|
| 133 |
+
| Median Inference Time | 23.39 ms |
|
| 134 |
+
|
| 135 |
+
## Confusion Analysis
|
| 136 |
+
|
| 137 |
+
### Most Common Misclassifications
|
| 138 |
+
|
| 139 |
+
| Expected | Predicted | Count |
|
| 140 |
+
|----------|-----------|-------|
|
| 141 |
+
| positive | negative | 20 |
|
| 142 |
+
| negative | positive | 19 |
|
| 143 |
+
| neutral | negative | 12 |
|
| 144 |
+
| neutral | positive | 11 |
|
| 145 |
+
|
| 146 |
+
## Detailed Test Results
|
| 147 |
+
|
| 148 |
+
### Failed Tests
|
| 149 |
+
|
| 150 |
+
| Text | Expected | Detected | Time (ms) |
|
| 151 |
+
|------|----------|----------|-----------|
|
| 152 |
+
| I can't contain my excitement | positive | negative | 23.85 |
|
| 153 |
+
| Very calm today | positive | negative | 20.80 |
|
| 154 |
+
| Phew, that's over | positive | negative | 41.57 |
|
| 155 |
+
| You mean so much to me | positive | negative | 32.23 |
|
| 156 |
+
| What a shock | negative | positive | 21.01 |
|
| 157 |
+
| I'm completely shocked | negative | positive | 42.85 |
|
| 158 |
+
| The weather is average today | neutral | positive | 41.61 |
|
| 159 |
+
| It's just okay | neutral | positive | 40.25 |
|
| 160 |
+
| Nothing special | neutral | negative | 21.69 |
|
| 161 |
+
| I don't have strong feelings | neutral | negative | 22.89 |
|
| 162 |
+
| It is what it is | neutral | positive | 48.40 |
|
| 163 |
+
| No comment | neutral | negative | 19.16 |
|
| 164 |
+
| I have no opinion | neutral | negative | 35.08 |
|
| 165 |
+
| It doesn't matter to me | neutral | negative | 28.00 |
|
| 166 |
+
| I'm indifferent | neutral | negative | 42.74 |
|
| 167 |
+
| Whatever | neutral | negative | 30.49 |
|
| 168 |
+
| It's neither good nor bad | neutral | negative | 27.08 |
|
| 169 |
+
| The meeting is at 3pm | neutral | positive | 23.90 |
|
| 170 |
+
| The sky is blue | neutral | positive | 34.14 |
|
| 171 |
+
| I'm thinking about it | neutral | positive | 24.41 |
|
| 172 |
+
| Let me think | neutral | positive | 18.63 |
|
| 173 |
+
| I need to think | neutral | negative | 29.51 |
|
| 174 |
+
| Thinking hard | neutral | negative | 21.83 |
|
| 175 |
+
| I'm contemplating | neutral | positive | 38.88 |
|
| 176 |
+
| Hmm, let me consider | neutral | negative | 24.35 |
|
| 177 |
+
| I need to process this | neutral | negative | 29.22 |
|
| 178 |
+
| Give me a moment to think | neutral | positive | 46.32 |
|
| 179 |
+
| I'm pondering | neutral | positive | 46.07 |
|
| 180 |
+
| Let me reflect on that | neutral | positive | 43.56 |
|
| 181 |
+
| Uncertainty lingers | negative | positive | 29.35 |
|
| 182 |
+
| Such fury | negative | positive | 15.60 |
|
| 183 |
+
| Fury consumes me | negative | positive | 23.04 |
|
| 184 |
+
| I feel envious | negative | positive | 20.73 |
|
| 185 |
+
| I'm envious | negative | positive | 22.81 |
|
| 186 |
+
| I'm just goofing around | positive | negative | 20.91 |
|
| 187 |
+
| I'm feeling silly | positive | negative | 23.22 |
|
| 188 |
+
| Such silliness | positive | negative | 21.17 |
|
| 189 |
+
| Silly mood | positive | negative | 15.84 |
|
| 190 |
+
| I'm being silly | positive | negative | 22.40 |
|
| 191 |
+
| Feeling silly | positive | negative | 13.98 |
|
| 192 |
+
| That's so silly! | positive | negative | 23.50 |
|
| 193 |
+
| Just being ridiculous | positive | negative | 15.17 |
|
| 194 |
+
| Such mischief | positive | negative | 13.75 |
|
| 195 |
+
| I'm up to no good | positive | negative | 17.65 |
|
| 196 |
+
| LOL | positive | negative | 13.81 |
|
| 197 |
+
| 😂 | positive | negative | 24.64 |
|
| 198 |
+
| I feel sympathy for you | positive | negative | 37.77 |
|
| 199 |
+
| Such sympathy | positive | negative | 12.51 |
|
| 200 |
+
| Sympathy for your loss | positive | negative | 17.53 |
|
| 201 |
+
| I'm sorry for what happened | positive | negative | 14.95 |
|
| 202 |
+
|
| 203 |
+
---
|
| 204 |
+
|
| 205 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v2_2025-12-01_18-24-59.md
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:24:59
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 626
|
| 10 |
+
- **Correct Predictions:** 564
|
| 11 |
+
- **Overall Accuracy:** 90.1%
|
| 12 |
+
- **Average Inference Time:** 19.31 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 7 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 10 | ✅ PASS |
|
| 20 |
+
| ecstasy | 100.0% | 7 | ✅ PASS |
|
| 21 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 7 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 6 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 6 | ✅ PASS |
|
| 31 |
+
| pride | 100.0% | 7 | ✅ PASS |
|
| 32 |
+
| confidence | 100.0% | 6 | ✅ PASS |
|
| 33 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| love | 100.0% | 7 | ✅ PASS |
|
| 35 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| empathy | 100.0% | 6 | ✅ PASS |
|
| 40 |
+
| gratitude | 100.0% | 7 | ✅ PASS |
|
| 41 |
+
| curiosity | 100.0% | 7 | ✅ PASS |
|
| 42 |
+
| interest | 100.0% | 6 | ✅ PASS |
|
| 43 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| surprise | 100.0% | 6 | ✅ PASS |
|
| 49 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| confused | 100.0% | 7 | ✅ PASS |
|
| 51 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| sadness | 100.0% | 7 | ✅ PASS |
|
| 56 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| grief | 100.0% | 6 | ✅ PASS |
|
| 58 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| disappointment | 100.0% | 6 | ✅ PASS |
|
| 60 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| loneliness | 100.0% | 6 | ✅ PASS |
|
| 62 |
+
| hurt | 100.0% | 6 | ✅ PASS |
|
| 63 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| fear | 100.0% | 6 | ✅ PASS |
|
| 65 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| anxiety | 100.0% | 6 | ✅ PASS |
|
| 69 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| anger | 100.0% | 6 | ✅ PASS |
|
| 74 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| annoyance | 100.0% | 6 | ✅ PASS |
|
| 77 |
+
| frustration | 100.0% | 6 | ✅ PASS |
|
| 78 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| disgust | 100.0% | 6 | ✅ PASS |
|
| 82 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| embarrassment | 100.0% | 7 | ✅ PASS |
|
| 88 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| boredom | 100.0% | 6 | ✅ PASS |
|
| 93 |
+
| tiredness | 100.0% | 6 | ✅ PASS |
|
| 94 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| nostalgia | 100.0% | 7 | ✅ PASS |
|
| 99 |
+
| hope | 100.0% | 7 | ✅ PASS |
|
| 100 |
+
| optimism | 100.0% | 6 | ✅ PASS |
|
| 101 |
+
| determination | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| inspiration | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| anticipation | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| trust | 100.0% | 5 | ✅ PASS |
|
| 105 |
+
| acceptance | 100.0% | 5 | ✅ PASS |
|
| 106 |
+
| excitement | 87.5% | 8 | ✅ PASS |
|
| 107 |
+
| calm | 85.7% | 7 | ✅ PASS |
|
| 108 |
+
| uncertain | 85.7% | 7 | ✅ PASS |
|
| 109 |
+
| playful | 85.7% | 7 | ✅ PASS |
|
| 110 |
+
| relief | 83.3% | 6 | ✅ PASS |
|
| 111 |
+
| affection | 83.3% | 6 | ✅ PASS |
|
| 112 |
+
| pessimism | 83.3% | 6 | ✅ PASS |
|
| 113 |
+
| amusement | 81.8% | 11 | ✅ PASS |
|
| 114 |
+
| shock | 66.7% | 6 | ✅ PASS |
|
| 115 |
+
| fury | 66.7% | 6 | ✅ PASS |
|
| 116 |
+
| envy | 66.7% | 6 | ✅ PASS |
|
| 117 |
+
| mischievous | 66.7% | 6 | ✅ PASS |
|
| 118 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 119 |
+
| sympathy | 50.0% | 8 | ✅ PASS |
|
| 120 |
+
| longing | 42.9% | 7 | ❌ FAIL |
|
| 121 |
+
| silly | 12.5% | 8 | ❌ FAIL |
|
| 122 |
+
| neutral | 0.0% | 13 | ❌ FAIL |
|
| 123 |
+
| thinking | 0.0% | 10 | ❌ FAIL |
|
| 124 |
+
| sarcasm | 0.0% | 5 | ❌ FAIL |
|
| 125 |
+
|
| 126 |
+
## Performance Metrics
|
| 127 |
+
|
| 128 |
+
| Metric | Value |
|
| 129 |
+
|--------|-------|
|
| 130 |
+
| Min Inference Time | 11.78 ms |
|
| 131 |
+
| Max Inference Time | 89.94 ms |
|
| 132 |
+
| Avg Inference Time | 19.31 ms |
|
| 133 |
+
| Median Inference Time | 18.35 ms |
|
| 134 |
+
|
| 135 |
+
## Confusion Analysis
|
| 136 |
+
|
| 137 |
+
### Most Common Misclassifications
|
| 138 |
+
|
| 139 |
+
| Expected | Predicted | Count |
|
| 140 |
+
|----------|-----------|-------|
|
| 141 |
+
| positive | negative | 20 |
|
| 142 |
+
| negative | positive | 19 |
|
| 143 |
+
| neutral | negative | 12 |
|
| 144 |
+
| neutral | positive | 11 |
|
| 145 |
+
|
| 146 |
+
## Detailed Test Results
|
| 147 |
+
|
| 148 |
+
### Failed Tests
|
| 149 |
+
|
| 150 |
+
| Text | Expected | Detected | Time (ms) |
|
| 151 |
+
|------|----------|----------|-----------|
|
| 152 |
+
| I can't contain my excitement | positive | negative | 14.85 |
|
| 153 |
+
| Very calm today | positive | negative | 16.05 |
|
| 154 |
+
| Phew, that's over | positive | negative | 17.58 |
|
| 155 |
+
| You mean so much to me | positive | negative | 18.24 |
|
| 156 |
+
| What a shock | negative | positive | 21.18 |
|
| 157 |
+
| I'm completely shocked | negative | positive | 25.08 |
|
| 158 |
+
| The weather is average today | neutral | positive | 27.38 |
|
| 159 |
+
| It's just okay | neutral | positive | 27.47 |
|
| 160 |
+
| Nothing special | neutral | negative | 15.17 |
|
| 161 |
+
| I don't have strong feelings | neutral | negative | 18.98 |
|
| 162 |
+
| It is what it is | neutral | positive | 23.05 |
|
| 163 |
+
| No comment | neutral | negative | 16.83 |
|
| 164 |
+
| I have no opinion | neutral | negative | 24.05 |
|
| 165 |
+
| It doesn't matter to me | neutral | negative | 18.08 |
|
| 166 |
+
| I'm indifferent | neutral | negative | 24.44 |
|
| 167 |
+
| Whatever | neutral | negative | 22.35 |
|
| 168 |
+
| It's neither good nor bad | neutral | negative | 19.06 |
|
| 169 |
+
| The meeting is at 3pm | neutral | positive | 21.50 |
|
| 170 |
+
| The sky is blue | neutral | positive | 24.46 |
|
| 171 |
+
| I'm thinking about it | neutral | positive | 17.22 |
|
| 172 |
+
| Let me think | neutral | positive | 18.89 |
|
| 173 |
+
| I need to think | neutral | negative | 25.94 |
|
| 174 |
+
| Thinking hard | neutral | negative | 17.63 |
|
| 175 |
+
| I'm contemplating | neutral | positive | 25.33 |
|
| 176 |
+
| Hmm, let me consider | neutral | negative | 28.81 |
|
| 177 |
+
| I need to process this | neutral | negative | 26.13 |
|
| 178 |
+
| Give me a moment to think | neutral | positive | 21.89 |
|
| 179 |
+
| I'm pondering | neutral | positive | 59.80 |
|
| 180 |
+
| Let me reflect on that | neutral | positive | 25.18 |
|
| 181 |
+
| Uncertainty lingers | negative | positive | 19.89 |
|
| 182 |
+
| Such fury | negative | positive | 13.71 |
|
| 183 |
+
| Fury consumes me | negative | positive | 18.89 |
|
| 184 |
+
| I feel envious | negative | positive | 20.18 |
|
| 185 |
+
| I'm envious | negative | positive | 20.90 |
|
| 186 |
+
| I'm just goofing around | positive | negative | 17.16 |
|
| 187 |
+
| I'm feeling silly | positive | negative | 20.51 |
|
| 188 |
+
| Such silliness | positive | negative | 20.47 |
|
| 189 |
+
| Silly mood | positive | negative | 15.34 |
|
| 190 |
+
| I'm being silly | positive | negative | 22.56 |
|
| 191 |
+
| Feeling silly | positive | negative | 13.50 |
|
| 192 |
+
| That's so silly! | positive | negative | 17.84 |
|
| 193 |
+
| Just being ridiculous | positive | negative | 15.24 |
|
| 194 |
+
| Such mischief | positive | negative | 13.05 |
|
| 195 |
+
| I'm up to no good | positive | negative | 15.22 |
|
| 196 |
+
| LOL | positive | negative | 16.98 |
|
| 197 |
+
| 😂 | positive | negative | 22.20 |
|
| 198 |
+
| I feel sympathy for you | positive | negative | 24.33 |
|
| 199 |
+
| Such sympathy | positive | negative | 13.10 |
|
| 200 |
+
| Sympathy for your loss | positive | negative | 18.66 |
|
| 201 |
+
| I'm sorry for what happened | positive | negative | 15.74 |
|
| 202 |
+
|
| 203 |
+
---
|
| 204 |
+
|
| 205 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v2_2025-12-01_18-30-05.md
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:30:05
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 626
|
| 10 |
+
- **Correct Predictions:** 564
|
| 11 |
+
- **Overall Accuracy:** 90.1%
|
| 12 |
+
- **Average Inference Time:** 18.98 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 7 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 10 | ✅ PASS |
|
| 20 |
+
| ecstasy | 100.0% | 7 | ✅ PASS |
|
| 21 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 7 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 6 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 6 | ✅ PASS |
|
| 31 |
+
| pride | 100.0% | 7 | ✅ PASS |
|
| 32 |
+
| confidence | 100.0% | 6 | ✅ PASS |
|
| 33 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| love | 100.0% | 7 | ✅ PASS |
|
| 35 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| empathy | 100.0% | 6 | ✅ PASS |
|
| 40 |
+
| gratitude | 100.0% | 7 | ✅ PASS |
|
| 41 |
+
| curiosity | 100.0% | 7 | ✅ PASS |
|
| 42 |
+
| interest | 100.0% | 6 | ✅ PASS |
|
| 43 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| surprise | 100.0% | 6 | ✅ PASS |
|
| 49 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| confused | 100.0% | 7 | ✅ PASS |
|
| 51 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| sadness | 100.0% | 7 | ✅ PASS |
|
| 56 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| grief | 100.0% | 6 | ✅ PASS |
|
| 58 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| disappointment | 100.0% | 6 | ✅ PASS |
|
| 60 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| loneliness | 100.0% | 6 | ✅ PASS |
|
| 62 |
+
| hurt | 100.0% | 6 | ✅ PASS |
|
| 63 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| fear | 100.0% | 6 | ✅ PASS |
|
| 65 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| anxiety | 100.0% | 6 | ✅ PASS |
|
| 69 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| anger | 100.0% | 6 | ✅ PASS |
|
| 74 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| annoyance | 100.0% | 6 | ✅ PASS |
|
| 77 |
+
| frustration | 100.0% | 6 | ✅ PASS |
|
| 78 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| disgust | 100.0% | 6 | ✅ PASS |
|
| 82 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| embarrassment | 100.0% | 7 | ✅ PASS |
|
| 88 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| boredom | 100.0% | 6 | ✅ PASS |
|
| 93 |
+
| tiredness | 100.0% | 6 | ✅ PASS |
|
| 94 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| nostalgia | 100.0% | 7 | ✅ PASS |
|
| 99 |
+
| hope | 100.0% | 7 | ✅ PASS |
|
| 100 |
+
| optimism | 100.0% | 6 | ✅ PASS |
|
| 101 |
+
| determination | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| inspiration | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| anticipation | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| trust | 100.0% | 5 | ✅ PASS |
|
| 105 |
+
| acceptance | 100.0% | 5 | ✅ PASS |
|
| 106 |
+
| excitement | 87.5% | 8 | ✅ PASS |
|
| 107 |
+
| calm | 85.7% | 7 | ✅ PASS |
|
| 108 |
+
| uncertain | 85.7% | 7 | ✅ PASS |
|
| 109 |
+
| playful | 85.7% | 7 | ✅ PASS |
|
| 110 |
+
| relief | 83.3% | 6 | ✅ PASS |
|
| 111 |
+
| affection | 83.3% | 6 | ✅ PASS |
|
| 112 |
+
| pessimism | 83.3% | 6 | ✅ PASS |
|
| 113 |
+
| amusement | 81.8% | 11 | ✅ PASS |
|
| 114 |
+
| shock | 66.7% | 6 | ✅ PASS |
|
| 115 |
+
| fury | 66.7% | 6 | ✅ PASS |
|
| 116 |
+
| envy | 66.7% | 6 | ✅ PASS |
|
| 117 |
+
| mischievous | 66.7% | 6 | ✅ PASS |
|
| 118 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 119 |
+
| sympathy | 50.0% | 8 | ✅ PASS |
|
| 120 |
+
| longing | 42.9% | 7 | ❌ FAIL |
|
| 121 |
+
| silly | 12.5% | 8 | ❌ FAIL |
|
| 122 |
+
| neutral | 0.0% | 13 | ❌ FAIL |
|
| 123 |
+
| thinking | 0.0% | 10 | ❌ FAIL |
|
| 124 |
+
| sarcasm | 0.0% | 5 | ❌ FAIL |
|
| 125 |
+
|
| 126 |
+
## Performance Metrics
|
| 127 |
+
|
| 128 |
+
| Metric | Value |
|
| 129 |
+
|--------|-------|
|
| 130 |
+
| Min Inference Time | 12.17 ms |
|
| 131 |
+
| Max Inference Time | 49.87 ms |
|
| 132 |
+
| Avg Inference Time | 18.98 ms |
|
| 133 |
+
| Median Inference Time | 17.97 ms |
|
| 134 |
+
|
| 135 |
+
## Confusion Analysis
|
| 136 |
+
|
| 137 |
+
### Most Common Misclassifications
|
| 138 |
+
|
| 139 |
+
| Expected | Predicted | Count |
|
| 140 |
+
|----------|-----------|-------|
|
| 141 |
+
| positive | negative | 20 |
|
| 142 |
+
| negative | positive | 19 |
|
| 143 |
+
| neutral | negative | 12 |
|
| 144 |
+
| neutral | positive | 11 |
|
| 145 |
+
|
| 146 |
+
## Detailed Test Results
|
| 147 |
+
|
| 148 |
+
### Failed Tests
|
| 149 |
+
|
| 150 |
+
| Text | Expected | Detected | Time (ms) |
|
| 151 |
+
|------|----------|----------|-----------|
|
| 152 |
+
| I can't contain my excitement | positive | negative | 16.02 |
|
| 153 |
+
| Very calm today | positive | negative | 14.68 |
|
| 154 |
+
| Phew, that's over | positive | negative | 17.82 |
|
| 155 |
+
| You mean so much to me | positive | negative | 16.29 |
|
| 156 |
+
| What a shock | negative | positive | 16.01 |
|
| 157 |
+
| I'm completely shocked | negative | positive | 23.49 |
|
| 158 |
+
| The weather is average today | neutral | positive | 23.87 |
|
| 159 |
+
| It's just okay | neutral | positive | 24.24 |
|
| 160 |
+
| Nothing special | neutral | negative | 12.65 |
|
| 161 |
+
| I don't have strong feelings | neutral | negative | 16.10 |
|
| 162 |
+
| It is what it is | neutral | positive | 21.73 |
|
| 163 |
+
| No comment | neutral | negative | 14.27 |
|
| 164 |
+
| I have no opinion | neutral | negative | 22.56 |
|
| 165 |
+
| It doesn't matter to me | neutral | negative | 18.44 |
|
| 166 |
+
| I'm indifferent | neutral | negative | 23.30 |
|
| 167 |
+
| Whatever | neutral | negative | 23.45 |
|
| 168 |
+
| It's neither good nor bad | neutral | negative | 26.11 |
|
| 169 |
+
| The meeting is at 3pm | neutral | positive | 24.36 |
|
| 170 |
+
| The sky is blue | neutral | positive | 24.74 |
|
| 171 |
+
| I'm thinking about it | neutral | positive | 18.20 |
|
| 172 |
+
| Let me think | neutral | positive | 16.77 |
|
| 173 |
+
| I need to think | neutral | negative | 23.06 |
|
| 174 |
+
| Thinking hard | neutral | negative | 14.50 |
|
| 175 |
+
| I'm contemplating | neutral | positive | 20.84 |
|
| 176 |
+
| Hmm, let me consider | neutral | negative | 24.83 |
|
| 177 |
+
| I need to process this | neutral | negative | 23.82 |
|
| 178 |
+
| Give me a moment to think | neutral | positive | 18.97 |
|
| 179 |
+
| I'm pondering | neutral | positive | 22.98 |
|
| 180 |
+
| Let me reflect on that | neutral | positive | 24.15 |
|
| 181 |
+
| Uncertainty lingers | negative | positive | 15.51 |
|
| 182 |
+
| Such fury | negative | positive | 14.83 |
|
| 183 |
+
| Fury consumes me | negative | positive | 22.89 |
|
| 184 |
+
| I feel envious | negative | positive | 21.25 |
|
| 185 |
+
| I'm envious | negative | positive | 20.00 |
|
| 186 |
+
| I'm just goofing around | positive | negative | 20.80 |
|
| 187 |
+
| I'm feeling silly | positive | negative | 22.86 |
|
| 188 |
+
| Such silliness | positive | negative | 20.70 |
|
| 189 |
+
| Silly mood | positive | negative | 13.43 |
|
| 190 |
+
| I'm being silly | positive | negative | 19.52 |
|
| 191 |
+
| Feeling silly | positive | negative | 14.56 |
|
| 192 |
+
| That's so silly! | positive | negative | 21.88 |
|
| 193 |
+
| Just being ridiculous | positive | negative | 14.99 |
|
| 194 |
+
| Such mischief | positive | negative | 12.66 |
|
| 195 |
+
| I'm up to no good | positive | negative | 16.73 |
|
| 196 |
+
| LOL | positive | negative | 14.92 |
|
| 197 |
+
| 😂 | positive | negative | 20.43 |
|
| 198 |
+
| I feel sympathy for you | positive | negative | 22.60 |
|
| 199 |
+
| Such sympathy | positive | negative | 15.43 |
|
| 200 |
+
| Sympathy for your loss | positive | negative | 22.35 |
|
| 201 |
+
| I'm sorry for what happened | positive | negative | 17.69 |
|
| 202 |
+
|
| 203 |
+
---
|
| 204 |
+
|
| 205 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v2_2025-12-01_18-36-10.md
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:36:10
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 626
|
| 10 |
+
- **Correct Predictions:** 564
|
| 11 |
+
- **Overall Accuracy:** 90.1%
|
| 12 |
+
- **Average Inference Time:** 18.65 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 7 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 10 | ✅ PASS |
|
| 20 |
+
| ecstasy | 100.0% | 7 | ✅ PASS |
|
| 21 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 7 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 6 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 6 | ✅ PASS |
|
| 31 |
+
| pride | 100.0% | 7 | ✅ PASS |
|
| 32 |
+
| confidence | 100.0% | 6 | ✅ PASS |
|
| 33 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| love | 100.0% | 7 | ✅ PASS |
|
| 35 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| empathy | 100.0% | 6 | ✅ PASS |
|
| 40 |
+
| gratitude | 100.0% | 7 | ✅ PASS |
|
| 41 |
+
| curiosity | 100.0% | 7 | ✅ PASS |
|
| 42 |
+
| interest | 100.0% | 6 | ✅ PASS |
|
| 43 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| surprise | 100.0% | 6 | ✅ PASS |
|
| 49 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| confused | 100.0% | 7 | ✅ PASS |
|
| 51 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| sadness | 100.0% | 7 | ✅ PASS |
|
| 56 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| grief | 100.0% | 6 | ✅ PASS |
|
| 58 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| disappointment | 100.0% | 6 | ✅ PASS |
|
| 60 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| loneliness | 100.0% | 6 | ✅ PASS |
|
| 62 |
+
| hurt | 100.0% | 6 | ✅ PASS |
|
| 63 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| fear | 100.0% | 6 | ✅ PASS |
|
| 65 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| anxiety | 100.0% | 6 | ✅ PASS |
|
| 69 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| anger | 100.0% | 6 | ✅ PASS |
|
| 74 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| annoyance | 100.0% | 6 | ✅ PASS |
|
| 77 |
+
| frustration | 100.0% | 6 | ✅ PASS |
|
| 78 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| disgust | 100.0% | 6 | ✅ PASS |
|
| 82 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| embarrassment | 100.0% | 7 | ✅ PASS |
|
| 88 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| boredom | 100.0% | 6 | ✅ PASS |
|
| 93 |
+
| tiredness | 100.0% | 6 | ✅ PASS |
|
| 94 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| nostalgia | 100.0% | 7 | ✅ PASS |
|
| 99 |
+
| hope | 100.0% | 7 | ✅ PASS |
|
| 100 |
+
| optimism | 100.0% | 6 | ✅ PASS |
|
| 101 |
+
| determination | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| inspiration | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| anticipation | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| trust | 100.0% | 5 | ✅ PASS |
|
| 105 |
+
| acceptance | 100.0% | 5 | ✅ PASS |
|
| 106 |
+
| excitement | 87.5% | 8 | ✅ PASS |
|
| 107 |
+
| calm | 85.7% | 7 | ✅ PASS |
|
| 108 |
+
| uncertain | 85.7% | 7 | ✅ PASS |
|
| 109 |
+
| playful | 85.7% | 7 | ✅ PASS |
|
| 110 |
+
| relief | 83.3% | 6 | ✅ PASS |
|
| 111 |
+
| affection | 83.3% | 6 | ✅ PASS |
|
| 112 |
+
| pessimism | 83.3% | 6 | ✅ PASS |
|
| 113 |
+
| amusement | 81.8% | 11 | ✅ PASS |
|
| 114 |
+
| shock | 66.7% | 6 | ✅ PASS |
|
| 115 |
+
| fury | 66.7% | 6 | ✅ PASS |
|
| 116 |
+
| envy | 66.7% | 6 | ✅ PASS |
|
| 117 |
+
| mischievous | 66.7% | 6 | ✅ PASS |
|
| 118 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 119 |
+
| sympathy | 50.0% | 8 | ✅ PASS |
|
| 120 |
+
| longing | 42.9% | 7 | ❌ FAIL |
|
| 121 |
+
| silly | 12.5% | 8 | ❌ FAIL |
|
| 122 |
+
| neutral | 0.0% | 13 | ❌ FAIL |
|
| 123 |
+
| thinking | 0.0% | 10 | ❌ FAIL |
|
| 124 |
+
| sarcasm | 0.0% | 5 | ❌ FAIL |
|
| 125 |
+
|
| 126 |
+
## Performance Metrics
|
| 127 |
+
|
| 128 |
+
| Metric | Value |
|
| 129 |
+
|--------|-------|
|
| 130 |
+
| Min Inference Time | 11.99 ms |
|
| 131 |
+
| Max Inference Time | 86.18 ms |
|
| 132 |
+
| Avg Inference Time | 18.65 ms |
|
| 133 |
+
| Median Inference Time | 17.88 ms |
|
| 134 |
+
|
| 135 |
+
## Confusion Analysis
|
| 136 |
+
|
| 137 |
+
### Most Common Misclassifications
|
| 138 |
+
|
| 139 |
+
| Expected | Predicted | Count |
|
| 140 |
+
|----------|-----------|-------|
|
| 141 |
+
| positive | negative | 20 |
|
| 142 |
+
| negative | positive | 19 |
|
| 143 |
+
| neutral | negative | 12 |
|
| 144 |
+
| neutral | positive | 11 |
|
| 145 |
+
|
| 146 |
+
## Detailed Test Results
|
| 147 |
+
|
| 148 |
+
### Failed Tests
|
| 149 |
+
|
| 150 |
+
| Text | Expected | Detected | Time (ms) |
|
| 151 |
+
|------|----------|----------|-----------|
|
| 152 |
+
| I can't contain my excitement | positive | negative | 15.93 |
|
| 153 |
+
| Very calm today | positive | negative | 17.53 |
|
| 154 |
+
| Phew, that's over | positive | negative | 18.08 |
|
| 155 |
+
| You mean so much to me | positive | negative | 16.40 |
|
| 156 |
+
| What a shock | negative | positive | 15.32 |
|
| 157 |
+
| I'm completely shocked | negative | positive | 25.15 |
|
| 158 |
+
| The weather is average today | neutral | positive | 24.62 |
|
| 159 |
+
| It's just okay | neutral | positive | 23.70 |
|
| 160 |
+
| Nothing special | neutral | negative | 18.10 |
|
| 161 |
+
| I don't have strong feelings | neutral | negative | 18.00 |
|
| 162 |
+
| It is what it is | neutral | positive | 23.86 |
|
| 163 |
+
| No comment | neutral | negative | 15.89 |
|
| 164 |
+
| I have no opinion | neutral | negative | 22.45 |
|
| 165 |
+
| It doesn't matter to me | neutral | negative | 19.33 |
|
| 166 |
+
| I'm indifferent | neutral | negative | 22.75 |
|
| 167 |
+
| Whatever | neutral | negative | 23.39 |
|
| 168 |
+
| It's neither good nor bad | neutral | negative | 18.16 |
|
| 169 |
+
| The meeting is at 3pm | neutral | positive | 18.83 |
|
| 170 |
+
| The sky is blue | neutral | positive | 23.79 |
|
| 171 |
+
| I'm thinking about it | neutral | positive | 19.20 |
|
| 172 |
+
| Let me think | neutral | positive | 21.66 |
|
| 173 |
+
| I need to think | neutral | negative | 24.67 |
|
| 174 |
+
| Thinking hard | neutral | negative | 17.69 |
|
| 175 |
+
| I'm contemplating | neutral | positive | 21.98 |
|
| 176 |
+
| Hmm, let me consider | neutral | negative | 23.25 |
|
| 177 |
+
| I need to process this | neutral | negative | 22.96 |
|
| 178 |
+
| Give me a moment to think | neutral | positive | 18.57 |
|
| 179 |
+
| I'm pondering | neutral | positive | 23.41 |
|
| 180 |
+
| Let me reflect on that | neutral | positive | 23.40 |
|
| 181 |
+
| Uncertainty lingers | negative | positive | 16.13 |
|
| 182 |
+
| Such fury | negative | positive | 15.20 |
|
| 183 |
+
| Fury consumes me | negative | positive | 20.42 |
|
| 184 |
+
| I feel envious | negative | positive | 20.08 |
|
| 185 |
+
| I'm envious | negative | positive | 23.10 |
|
| 186 |
+
| I'm just goofing around | positive | negative | 20.98 |
|
| 187 |
+
| I'm feeling silly | positive | negative | 21.68 |
|
| 188 |
+
| Such silliness | positive | negative | 20.18 |
|
| 189 |
+
| Silly mood | positive | negative | 14.49 |
|
| 190 |
+
| I'm being silly | positive | negative | 22.44 |
|
| 191 |
+
| Feeling silly | positive | negative | 14.30 |
|
| 192 |
+
| That's so silly! | positive | negative | 21.47 |
|
| 193 |
+
| Just being ridiculous | positive | negative | 16.63 |
|
| 194 |
+
| Such mischief | positive | negative | 15.97 |
|
| 195 |
+
| I'm up to no good | positive | negative | 13.85 |
|
| 196 |
+
| LOL | positive | negative | 14.85 |
|
| 197 |
+
| 😂 | positive | negative | 21.37 |
|
| 198 |
+
| I feel sympathy for you | positive | negative | 22.12 |
|
| 199 |
+
| Such sympathy | positive | negative | 15.40 |
|
| 200 |
+
| Sympathy for your loss | positive | negative | 20.84 |
|
| 201 |
+
| I'm sorry for what happened | positive | negative | 16.62 |
|
| 202 |
+
|
| 203 |
+
---
|
| 204 |
+
|
| 205 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v2_2025-12-01_18-38-15.md
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:38:15
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 626
|
| 10 |
+
- **Correct Predictions:** 564
|
| 11 |
+
- **Overall Accuracy:** 90.1%
|
| 12 |
+
- **Average Inference Time:** 20.70 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 7 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 10 | ✅ PASS |
|
| 20 |
+
| ecstasy | 100.0% | 7 | ✅ PASS |
|
| 21 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 7 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 6 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 6 | ✅ PASS |
|
| 31 |
+
| pride | 100.0% | 7 | ✅ PASS |
|
| 32 |
+
| confidence | 100.0% | 6 | ✅ PASS |
|
| 33 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| love | 100.0% | 7 | ✅ PASS |
|
| 35 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| empathy | 100.0% | 6 | ✅ PASS |
|
| 40 |
+
| gratitude | 100.0% | 7 | ✅ PASS |
|
| 41 |
+
| curiosity | 100.0% | 7 | ✅ PASS |
|
| 42 |
+
| interest | 100.0% | 6 | ✅ PASS |
|
| 43 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| surprise | 100.0% | 6 | ✅ PASS |
|
| 49 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| confused | 100.0% | 7 | ✅ PASS |
|
| 51 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| sadness | 100.0% | 7 | ✅ PASS |
|
| 56 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| grief | 100.0% | 6 | ✅ PASS |
|
| 58 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| disappointment | 100.0% | 6 | ✅ PASS |
|
| 60 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| loneliness | 100.0% | 6 | ✅ PASS |
|
| 62 |
+
| hurt | 100.0% | 6 | ✅ PASS |
|
| 63 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| fear | 100.0% | 6 | ✅ PASS |
|
| 65 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| anxiety | 100.0% | 6 | ✅ PASS |
|
| 69 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| anger | 100.0% | 6 | ✅ PASS |
|
| 74 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| annoyance | 100.0% | 6 | ✅ PASS |
|
| 77 |
+
| frustration | 100.0% | 6 | ✅ PASS |
|
| 78 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| disgust | 100.0% | 6 | ✅ PASS |
|
| 82 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| embarrassment | 100.0% | 7 | ✅ PASS |
|
| 88 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| boredom | 100.0% | 6 | ✅ PASS |
|
| 93 |
+
| tiredness | 100.0% | 6 | ✅ PASS |
|
| 94 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| nostalgia | 100.0% | 7 | ✅ PASS |
|
| 99 |
+
| hope | 100.0% | 7 | ✅ PASS |
|
| 100 |
+
| optimism | 100.0% | 6 | ✅ PASS |
|
| 101 |
+
| determination | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| inspiration | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| anticipation | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| trust | 100.0% | 5 | ✅ PASS |
|
| 105 |
+
| acceptance | 100.0% | 5 | ✅ PASS |
|
| 106 |
+
| excitement | 87.5% | 8 | ✅ PASS |
|
| 107 |
+
| calm | 85.7% | 7 | ✅ PASS |
|
| 108 |
+
| uncertain | 85.7% | 7 | ✅ PASS |
|
| 109 |
+
| playful | 85.7% | 7 | ✅ PASS |
|
| 110 |
+
| relief | 83.3% | 6 | ✅ PASS |
|
| 111 |
+
| affection | 83.3% | 6 | ✅ PASS |
|
| 112 |
+
| pessimism | 83.3% | 6 | ✅ PASS |
|
| 113 |
+
| amusement | 81.8% | 11 | ✅ PASS |
|
| 114 |
+
| shock | 66.7% | 6 | ✅ PASS |
|
| 115 |
+
| fury | 66.7% | 6 | ✅ PASS |
|
| 116 |
+
| envy | 66.7% | 6 | ✅ PASS |
|
| 117 |
+
| mischievous | 66.7% | 6 | ✅ PASS |
|
| 118 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 119 |
+
| sympathy | 50.0% | 8 | ✅ PASS |
|
| 120 |
+
| longing | 42.9% | 7 | ❌ FAIL |
|
| 121 |
+
| silly | 12.5% | 8 | ❌ FAIL |
|
| 122 |
+
| neutral | 0.0% | 13 | ❌ FAIL |
|
| 123 |
+
| thinking | 0.0% | 10 | ❌ FAIL |
|
| 124 |
+
| sarcasm | 0.0% | 5 | ❌ FAIL |
|
| 125 |
+
|
| 126 |
+
## Performance Metrics
|
| 127 |
+
|
| 128 |
+
| Metric | Value |
|
| 129 |
+
|--------|-------|
|
| 130 |
+
| Min Inference Time | 12.13 ms |
|
| 131 |
+
| Max Inference Time | 159.21 ms |
|
| 132 |
+
| Avg Inference Time | 20.70 ms |
|
| 133 |
+
| Median Inference Time | 19.16 ms |
|
| 134 |
+
|
| 135 |
+
## Confusion Analysis
|
| 136 |
+
|
| 137 |
+
### Most Common Misclassifications
|
| 138 |
+
|
| 139 |
+
| Expected | Predicted | Count |
|
| 140 |
+
|----------|-----------|-------|
|
| 141 |
+
| positive | negative | 20 |
|
| 142 |
+
| negative | positive | 19 |
|
| 143 |
+
| neutral | negative | 12 |
|
| 144 |
+
| neutral | positive | 11 |
|
| 145 |
+
|
| 146 |
+
## Detailed Test Results
|
| 147 |
+
|
| 148 |
+
### Failed Tests
|
| 149 |
+
|
| 150 |
+
| Text | Expected | Detected | Time (ms) |
|
| 151 |
+
|------|----------|----------|-----------|
|
| 152 |
+
| I can't contain my excitement | positive | negative | 17.43 |
|
| 153 |
+
| Very calm today | positive | negative | 15.03 |
|
| 154 |
+
| Phew, that's over | positive | negative | 20.34 |
|
| 155 |
+
| You mean so much to me | positive | negative | 17.56 |
|
| 156 |
+
| What a shock | negative | positive | 13.88 |
|
| 157 |
+
| I'm completely shocked | negative | positive | 20.46 |
|
| 158 |
+
| The weather is average today | neutral | positive | 22.84 |
|
| 159 |
+
| It's just okay | neutral | positive | 22.44 |
|
| 160 |
+
| Nothing special | neutral | negative | 13.30 |
|
| 161 |
+
| I don't have strong feelings | neutral | negative | 16.83 |
|
| 162 |
+
| It is what it is | neutral | positive | 19.42 |
|
| 163 |
+
| No comment | neutral | negative | 13.77 |
|
| 164 |
+
| I have no opinion | neutral | negative | 16.70 |
|
| 165 |
+
| It doesn't matter to me | neutral | negative | 16.37 |
|
| 166 |
+
| I'm indifferent | neutral | negative | 18.22 |
|
| 167 |
+
| Whatever | neutral | negative | 19.55 |
|
| 168 |
+
| It's neither good nor bad | neutral | negative | 16.08 |
|
| 169 |
+
| The meeting is at 3pm | neutral | positive | 21.43 |
|
| 170 |
+
| The sky is blue | neutral | positive | 25.91 |
|
| 171 |
+
| I'm thinking about it | neutral | positive | 20.50 |
|
| 172 |
+
| Let me think | neutral | positive | 17.80 |
|
| 173 |
+
| I need to think | neutral | negative | 39.05 |
|
| 174 |
+
| Thinking hard | neutral | negative | 20.93 |
|
| 175 |
+
| I'm contemplating | neutral | positive | 30.74 |
|
| 176 |
+
| Hmm, let me consider | neutral | negative | 33.87 |
|
| 177 |
+
| I need to process this | neutral | negative | 46.86 |
|
| 178 |
+
| Give me a moment to think | neutral | positive | 141.43 |
|
| 179 |
+
| I'm pondering | neutral | positive | 73.58 |
|
| 180 |
+
| Let me reflect on that | neutral | positive | 31.88 |
|
| 181 |
+
| Uncertainty lingers | negative | positive | 19.41 |
|
| 182 |
+
| Such fury | negative | positive | 13.63 |
|
| 183 |
+
| Fury consumes me | negative | positive | 21.81 |
|
| 184 |
+
| I feel envious | negative | positive | 29.74 |
|
| 185 |
+
| I'm envious | negative | positive | 29.94 |
|
| 186 |
+
| I'm just goofing around | positive | negative | 29.94 |
|
| 187 |
+
| I'm feeling silly | positive | negative | 30.82 |
|
| 188 |
+
| Such silliness | positive | negative | 38.60 |
|
| 189 |
+
| Silly mood | positive | negative | 21.78 |
|
| 190 |
+
| I'm being silly | positive | negative | 29.42 |
|
| 191 |
+
| Feeling silly | positive | negative | 21.08 |
|
| 192 |
+
| That's so silly! | positive | negative | 28.15 |
|
| 193 |
+
| Just being ridiculous | positive | negative | 17.68 |
|
| 194 |
+
| Such mischief | positive | negative | 15.68 |
|
| 195 |
+
| I'm up to no good | positive | negative | 19.12 |
|
| 196 |
+
| LOL | positive | negative | 16.90 |
|
| 197 |
+
| 😂 | positive | negative | 23.58 |
|
| 198 |
+
| I feel sympathy for you | positive | negative | 26.99 |
|
| 199 |
+
| Such sympathy | positive | negative | 15.97 |
|
| 200 |
+
| Sympathy for your loss | positive | negative | 26.10 |
|
| 201 |
+
| I'm sorry for what happened | positive | negative | 16.82 |
|
| 202 |
+
|
| 203 |
+
---
|
| 204 |
+
|
| 205 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v2_2025-12-01_18-39-42.md
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:39:42
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 626
|
| 10 |
+
- **Correct Predictions:** 564
|
| 11 |
+
- **Overall Accuracy:** 90.1%
|
| 12 |
+
- **Average Inference Time:** 17.65 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 7 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 10 | ✅ PASS |
|
| 20 |
+
| ecstasy | 100.0% | 7 | ✅ PASS |
|
| 21 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 7 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 6 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 6 | ✅ PASS |
|
| 31 |
+
| pride | 100.0% | 7 | ✅ PASS |
|
| 32 |
+
| confidence | 100.0% | 6 | ✅ PASS |
|
| 33 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| love | 100.0% | 7 | ✅ PASS |
|
| 35 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| empathy | 100.0% | 6 | ✅ PASS |
|
| 40 |
+
| gratitude | 100.0% | 7 | ✅ PASS |
|
| 41 |
+
| curiosity | 100.0% | 7 | ✅ PASS |
|
| 42 |
+
| interest | 100.0% | 6 | ✅ PASS |
|
| 43 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| surprise | 100.0% | 6 | ✅ PASS |
|
| 49 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| confused | 100.0% | 7 | ✅ PASS |
|
| 51 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| sadness | 100.0% | 7 | ✅ PASS |
|
| 56 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| grief | 100.0% | 6 | ✅ PASS |
|
| 58 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| disappointment | 100.0% | 6 | ✅ PASS |
|
| 60 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| loneliness | 100.0% | 6 | ✅ PASS |
|
| 62 |
+
| hurt | 100.0% | 6 | ✅ PASS |
|
| 63 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| fear | 100.0% | 6 | ✅ PASS |
|
| 65 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| anxiety | 100.0% | 6 | ✅ PASS |
|
| 69 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| anger | 100.0% | 6 | ✅ PASS |
|
| 74 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| annoyance | 100.0% | 6 | ✅ PASS |
|
| 77 |
+
| frustration | 100.0% | 6 | ✅ PASS |
|
| 78 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| disgust | 100.0% | 6 | ✅ PASS |
|
| 82 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| embarrassment | 100.0% | 7 | ✅ PASS |
|
| 88 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| boredom | 100.0% | 6 | ✅ PASS |
|
| 93 |
+
| tiredness | 100.0% | 6 | ✅ PASS |
|
| 94 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| nostalgia | 100.0% | 7 | ✅ PASS |
|
| 99 |
+
| hope | 100.0% | 7 | ✅ PASS |
|
| 100 |
+
| optimism | 100.0% | 6 | ✅ PASS |
|
| 101 |
+
| determination | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| inspiration | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| anticipation | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| trust | 100.0% | 5 | ✅ PASS |
|
| 105 |
+
| acceptance | 100.0% | 5 | ✅ PASS |
|
| 106 |
+
| excitement | 87.5% | 8 | ✅ PASS |
|
| 107 |
+
| calm | 85.7% | 7 | ✅ PASS |
|
| 108 |
+
| uncertain | 85.7% | 7 | ✅ PASS |
|
| 109 |
+
| playful | 85.7% | 7 | ✅ PASS |
|
| 110 |
+
| relief | 83.3% | 6 | ✅ PASS |
|
| 111 |
+
| affection | 83.3% | 6 | ✅ PASS |
|
| 112 |
+
| pessimism | 83.3% | 6 | ✅ PASS |
|
| 113 |
+
| amusement | 81.8% | 11 | ✅ PASS |
|
| 114 |
+
| shock | 66.7% | 6 | ✅ PASS |
|
| 115 |
+
| fury | 66.7% | 6 | ✅ PASS |
|
| 116 |
+
| envy | 66.7% | 6 | ✅ PASS |
|
| 117 |
+
| mischievous | 66.7% | 6 | ✅ PASS |
|
| 118 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 119 |
+
| sympathy | 50.0% | 8 | ✅ PASS |
|
| 120 |
+
| longing | 42.9% | 7 | ❌ FAIL |
|
| 121 |
+
| silly | 12.5% | 8 | ❌ FAIL |
|
| 122 |
+
| neutral | 0.0% | 13 | ❌ FAIL |
|
| 123 |
+
| thinking | 0.0% | 10 | ❌ FAIL |
|
| 124 |
+
| sarcasm | 0.0% | 5 | ❌ FAIL |
|
| 125 |
+
|
| 126 |
+
## Performance Metrics
|
| 127 |
+
|
| 128 |
+
| Metric | Value |
|
| 129 |
+
|--------|-------|
|
| 130 |
+
| Min Inference Time | 11.25 ms |
|
| 131 |
+
| Max Inference Time | 156.67 ms |
|
| 132 |
+
| Avg Inference Time | 17.65 ms |
|
| 133 |
+
| Median Inference Time | 16.82 ms |
|
| 134 |
+
|
| 135 |
+
## Confusion Analysis
|
| 136 |
+
|
| 137 |
+
### Most Common Misclassifications
|
| 138 |
+
|
| 139 |
+
| Expected | Predicted | Count |
|
| 140 |
+
|----------|-----------|-------|
|
| 141 |
+
| positive | negative | 20 |
|
| 142 |
+
| negative | positive | 19 |
|
| 143 |
+
| neutral | negative | 12 |
|
| 144 |
+
| neutral | positive | 11 |
|
| 145 |
+
|
| 146 |
+
## Detailed Test Results
|
| 147 |
+
|
| 148 |
+
### Failed Tests
|
| 149 |
+
|
| 150 |
+
| Text | Expected | Detected | Time (ms) |
|
| 151 |
+
|------|----------|----------|-----------|
|
| 152 |
+
| I can't contain my excitement | positive | negative | 14.56 |
|
| 153 |
+
| Very calm today | positive | negative | 14.27 |
|
| 154 |
+
| Phew, that's over | positive | negative | 17.78 |
|
| 155 |
+
| You mean so much to me | positive | negative | 15.90 |
|
| 156 |
+
| What a shock | negative | positive | 13.48 |
|
| 157 |
+
| I'm completely shocked | negative | positive | 21.77 |
|
| 158 |
+
| The weather is average today | neutral | positive | 19.62 |
|
| 159 |
+
| It's just okay | neutral | positive | 22.11 |
|
| 160 |
+
| Nothing special | neutral | negative | 12.64 |
|
| 161 |
+
| I don't have strong feelings | neutral | negative | 15.39 |
|
| 162 |
+
| It is what it is | neutral | positive | 20.20 |
|
| 163 |
+
| No comment | neutral | negative | 12.81 |
|
| 164 |
+
| I have no opinion | neutral | negative | 20.82 |
|
| 165 |
+
| It doesn't matter to me | neutral | negative | 15.46 |
|
| 166 |
+
| I'm indifferent | neutral | negative | 23.53 |
|
| 167 |
+
| Whatever | neutral | negative | 21.46 |
|
| 168 |
+
| It's neither good nor bad | neutral | negative | 15.89 |
|
| 169 |
+
| The meeting is at 3pm | neutral | positive | 15.28 |
|
| 170 |
+
| The sky is blue | neutral | positive | 19.29 |
|
| 171 |
+
| I'm thinking about it | neutral | positive | 16.19 |
|
| 172 |
+
| Let me think | neutral | positive | 14.91 |
|
| 173 |
+
| I need to think | neutral | negative | 20.38 |
|
| 174 |
+
| Thinking hard | neutral | negative | 12.14 |
|
| 175 |
+
| I'm contemplating | neutral | positive | 19.75 |
|
| 176 |
+
| Hmm, let me consider | neutral | negative | 20.32 |
|
| 177 |
+
| I need to process this | neutral | negative | 19.00 |
|
| 178 |
+
| Give me a moment to think | neutral | positive | 17.61 |
|
| 179 |
+
| I'm pondering | neutral | positive | 22.06 |
|
| 180 |
+
| Let me reflect on that | neutral | positive | 18.91 |
|
| 181 |
+
| Uncertainty lingers | negative | positive | 13.23 |
|
| 182 |
+
| Such fury | negative | positive | 11.91 |
|
| 183 |
+
| Fury consumes me | negative | positive | 19.60 |
|
| 184 |
+
| I feel envious | negative | positive | 20.08 |
|
| 185 |
+
| I'm envious | negative | positive | 21.50 |
|
| 186 |
+
| I'm just goofing around | positive | negative | 19.68 |
|
| 187 |
+
| I'm feeling silly | positive | negative | 21.23 |
|
| 188 |
+
| Such silliness | positive | negative | 20.70 |
|
| 189 |
+
| Silly mood | positive | negative | 12.12 |
|
| 190 |
+
| I'm being silly | positive | negative | 24.12 |
|
| 191 |
+
| Feeling silly | positive | negative | 18.09 |
|
| 192 |
+
| That's so silly! | positive | negative | 21.40 |
|
| 193 |
+
| Just being ridiculous | positive | negative | 16.34 |
|
| 194 |
+
| Such mischief | positive | negative | 13.36 |
|
| 195 |
+
| I'm up to no good | positive | negative | 14.92 |
|
| 196 |
+
| LOL | positive | negative | 12.71 |
|
| 197 |
+
| 😂 | positive | negative | 21.12 |
|
| 198 |
+
| I feel sympathy for you | positive | negative | 23.47 |
|
| 199 |
+
| Such sympathy | positive | negative | 13.32 |
|
| 200 |
+
| Sympathy for your loss | positive | negative | 18.54 |
|
| 201 |
+
| I'm sorry for what happened | positive | negative | 16.12 |
|
| 202 |
+
|
| 203 |
+
---
|
| 204 |
+
|
| 205 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v2_2025-12-01_18-44-50.md
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:44:50
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 626
|
| 10 |
+
- **Correct Predictions:** 564
|
| 11 |
+
- **Overall Accuracy:** 90.1%
|
| 12 |
+
- **Average Inference Time:** 17.62 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 7 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 10 | ✅ PASS |
|
| 20 |
+
| ecstasy | 100.0% | 7 | ✅ PASS |
|
| 21 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 7 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 6 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 6 | ✅ PASS |
|
| 31 |
+
| pride | 100.0% | 7 | ✅ PASS |
|
| 32 |
+
| confidence | 100.0% | 6 | ✅ PASS |
|
| 33 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| love | 100.0% | 7 | ✅ PASS |
|
| 35 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| empathy | 100.0% | 6 | ✅ PASS |
|
| 40 |
+
| gratitude | 100.0% | 7 | ✅ PASS |
|
| 41 |
+
| curiosity | 100.0% | 7 | ✅ PASS |
|
| 42 |
+
| interest | 100.0% | 6 | ✅ PASS |
|
| 43 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| surprise | 100.0% | 6 | ✅ PASS |
|
| 49 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| confused | 100.0% | 7 | ✅ PASS |
|
| 51 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| sadness | 100.0% | 7 | ✅ PASS |
|
| 56 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| grief | 100.0% | 6 | ✅ PASS |
|
| 58 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| disappointment | 100.0% | 6 | ✅ PASS |
|
| 60 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| loneliness | 100.0% | 6 | ✅ PASS |
|
| 62 |
+
| hurt | 100.0% | 6 | ✅ PASS |
|
| 63 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| fear | 100.0% | 6 | ✅ PASS |
|
| 65 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| anxiety | 100.0% | 6 | ✅ PASS |
|
| 69 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| anger | 100.0% | 6 | ✅ PASS |
|
| 74 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| annoyance | 100.0% | 6 | ✅ PASS |
|
| 77 |
+
| frustration | 100.0% | 6 | ✅ PASS |
|
| 78 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| disgust | 100.0% | 6 | ✅ PASS |
|
| 82 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| embarrassment | 100.0% | 7 | ✅ PASS |
|
| 88 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| boredom | 100.0% | 6 | ✅ PASS |
|
| 93 |
+
| tiredness | 100.0% | 6 | ✅ PASS |
|
| 94 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| nostalgia | 100.0% | 7 | ✅ PASS |
|
| 99 |
+
| hope | 100.0% | 7 | ✅ PASS |
|
| 100 |
+
| optimism | 100.0% | 6 | ✅ PASS |
|
| 101 |
+
| determination | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| inspiration | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| anticipation | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| trust | 100.0% | 5 | ✅ PASS |
|
| 105 |
+
| acceptance | 100.0% | 5 | ✅ PASS |
|
| 106 |
+
| excitement | 87.5% | 8 | ✅ PASS |
|
| 107 |
+
| calm | 85.7% | 7 | ✅ PASS |
|
| 108 |
+
| uncertain | 85.7% | 7 | ✅ PASS |
|
| 109 |
+
| playful | 85.7% | 7 | ✅ PASS |
|
| 110 |
+
| relief | 83.3% | 6 | ✅ PASS |
|
| 111 |
+
| affection | 83.3% | 6 | ✅ PASS |
|
| 112 |
+
| pessimism | 83.3% | 6 | ✅ PASS |
|
| 113 |
+
| amusement | 81.8% | 11 | ✅ PASS |
|
| 114 |
+
| shock | 66.7% | 6 | ✅ PASS |
|
| 115 |
+
| fury | 66.7% | 6 | ✅ PASS |
|
| 116 |
+
| envy | 66.7% | 6 | ✅ PASS |
|
| 117 |
+
| mischievous | 66.7% | 6 | ✅ PASS |
|
| 118 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 119 |
+
| sympathy | 50.0% | 8 | ✅ PASS |
|
| 120 |
+
| longing | 42.9% | 7 | ❌ FAIL |
|
| 121 |
+
| silly | 12.5% | 8 | ❌ FAIL |
|
| 122 |
+
| neutral | 0.0% | 13 | ❌ FAIL |
|
| 123 |
+
| thinking | 0.0% | 10 | ❌ FAIL |
|
| 124 |
+
| sarcasm | 0.0% | 5 | ❌ FAIL |
|
| 125 |
+
|
| 126 |
+
## Performance Metrics
|
| 127 |
+
|
| 128 |
+
| Metric | Value |
|
| 129 |
+
|--------|-------|
|
| 130 |
+
| Min Inference Time | 11.49 ms |
|
| 131 |
+
| Max Inference Time | 48.88 ms |
|
| 132 |
+
| Avg Inference Time | 17.62 ms |
|
| 133 |
+
| Median Inference Time | 16.79 ms |
|
| 134 |
+
|
| 135 |
+
## Confusion Analysis
|
| 136 |
+
|
| 137 |
+
### Most Common Misclassifications
|
| 138 |
+
|
| 139 |
+
| Expected | Predicted | Count |
|
| 140 |
+
|----------|-----------|-------|
|
| 141 |
+
| positive | negative | 20 |
|
| 142 |
+
| negative | positive | 19 |
|
| 143 |
+
| neutral | negative | 12 |
|
| 144 |
+
| neutral | positive | 11 |
|
| 145 |
+
|
| 146 |
+
## Detailed Test Results
|
| 147 |
+
|
| 148 |
+
### Failed Tests
|
| 149 |
+
|
| 150 |
+
| Text | Expected | Detected | Time (ms) |
|
| 151 |
+
|------|----------|----------|-----------|
|
| 152 |
+
| I can't contain my excitement | positive | negative | 19.33 |
|
| 153 |
+
| Very calm today | positive | negative | 15.96 |
|
| 154 |
+
| Phew, that's over | positive | negative | 18.20 |
|
| 155 |
+
| You mean so much to me | positive | negative | 17.15 |
|
| 156 |
+
| What a shock | negative | positive | 15.20 |
|
| 157 |
+
| I'm completely shocked | negative | positive | 22.36 |
|
| 158 |
+
| The weather is average today | neutral | positive | 22.97 |
|
| 159 |
+
| It's just okay | neutral | positive | 22.39 |
|
| 160 |
+
| Nothing special | neutral | negative | 12.46 |
|
| 161 |
+
| I don't have strong feelings | neutral | negative | 16.44 |
|
| 162 |
+
| It is what it is | neutral | positive | 48.88 |
|
| 163 |
+
| No comment | neutral | negative | 12.83 |
|
| 164 |
+
| I have no opinion | neutral | negative | 20.55 |
|
| 165 |
+
| It doesn't matter to me | neutral | negative | 16.00 |
|
| 166 |
+
| I'm indifferent | neutral | negative | 19.07 |
|
| 167 |
+
| Whatever | neutral | negative | 20.49 |
|
| 168 |
+
| It's neither good nor bad | neutral | negative | 16.67 |
|
| 169 |
+
| The meeting is at 3pm | neutral | positive | 16.96 |
|
| 170 |
+
| The sky is blue | neutral | positive | 20.56 |
|
| 171 |
+
| I'm thinking about it | neutral | positive | 18.04 |
|
| 172 |
+
| Let me think | neutral | positive | 14.51 |
|
| 173 |
+
| I need to think | neutral | negative | 20.93 |
|
| 174 |
+
| Thinking hard | neutral | negative | 14.39 |
|
| 175 |
+
| I'm contemplating | neutral | positive | 20.45 |
|
| 176 |
+
| Hmm, let me consider | neutral | negative | 22.23 |
|
| 177 |
+
| I need to process this | neutral | negative | 22.14 |
|
| 178 |
+
| Give me a moment to think | neutral | positive | 16.92 |
|
| 179 |
+
| I'm pondering | neutral | positive | 23.11 |
|
| 180 |
+
| Let me reflect on that | neutral | positive | 23.12 |
|
| 181 |
+
| Uncertainty lingers | negative | positive | 13.52 |
|
| 182 |
+
| Such fury | negative | positive | 13.77 |
|
| 183 |
+
| Fury consumes me | negative | positive | 20.74 |
|
| 184 |
+
| I feel envious | negative | positive | 19.73 |
|
| 185 |
+
| I'm envious | negative | positive | 22.03 |
|
| 186 |
+
| I'm just goofing around | positive | negative | 21.03 |
|
| 187 |
+
| I'm feeling silly | positive | negative | 22.29 |
|
| 188 |
+
| Such silliness | positive | negative | 22.29 |
|
| 189 |
+
| Silly mood | positive | negative | 13.64 |
|
| 190 |
+
| I'm being silly | positive | negative | 23.35 |
|
| 191 |
+
| Feeling silly | positive | negative | 13.77 |
|
| 192 |
+
| That's so silly! | positive | negative | 20.17 |
|
| 193 |
+
| Just being ridiculous | positive | negative | 15.50 |
|
| 194 |
+
| Such mischief | positive | negative | 13.38 |
|
| 195 |
+
| I'm up to no good | positive | negative | 16.98 |
|
| 196 |
+
| LOL | positive | negative | 13.43 |
|
| 197 |
+
| 😂 | positive | negative | 21.26 |
|
| 198 |
+
| I feel sympathy for you | positive | negative | 24.17 |
|
| 199 |
+
| Such sympathy | positive | negative | 13.08 |
|
| 200 |
+
| Sympathy for your loss | positive | negative | 18.54 |
|
| 201 |
+
| I'm sorry for what happened | positive | negative | 15.32 |
|
| 202 |
+
|
| 203 |
+
---
|
| 204 |
+
|
| 205 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_binary-v2_2025-12-01_18-46-46.md
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:46:46
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 626
|
| 10 |
+
- **Correct Predictions:** 564
|
| 11 |
+
- **Overall Accuracy:** 90.1%
|
| 12 |
+
- **Average Inference Time:** 18.63 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 7 | ✅ PASS |
|
| 19 |
+
| happiness | 100.0% | 10 | ✅ PASS |
|
| 20 |
+
| ecstasy | 100.0% | 7 | ✅ PASS |
|
| 21 |
+
| elation | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| euphoria | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| contentment | 100.0% | 7 | ✅ PASS |
|
| 28 |
+
| satisfaction | 100.0% | 6 | ✅ PASS |
|
| 29 |
+
| serenity | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| relaxed | 100.0% | 6 | ✅ PASS |
|
| 31 |
+
| pride | 100.0% | 7 | ✅ PASS |
|
| 32 |
+
| confidence | 100.0% | 6 | ✅ PASS |
|
| 33 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| love | 100.0% | 7 | ✅ PASS |
|
| 35 |
+
| adoration | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| empathy | 100.0% | 6 | ✅ PASS |
|
| 40 |
+
| gratitude | 100.0% | 7 | ✅ PASS |
|
| 41 |
+
| curiosity | 100.0% | 7 | ✅ PASS |
|
| 42 |
+
| interest | 100.0% | 6 | ✅ PASS |
|
| 43 |
+
| fascination | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| intrigue | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| surprise | 100.0% | 6 | ✅ PASS |
|
| 49 |
+
| astonishment | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| confused | 100.0% | 7 | ✅ PASS |
|
| 51 |
+
| puzzled | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| perplexed | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| bewildered | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| baffled | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| sadness | 100.0% | 7 | ✅ PASS |
|
| 56 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| grief | 100.0% | 6 | ✅ PASS |
|
| 58 |
+
| melancholy | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| disappointment | 100.0% | 6 | ✅ PASS |
|
| 60 |
+
| despair | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| loneliness | 100.0% | 6 | ✅ PASS |
|
| 62 |
+
| hurt | 100.0% | 6 | ✅ PASS |
|
| 63 |
+
| misery | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| fear | 100.0% | 6 | ✅ PASS |
|
| 65 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| anxiety | 100.0% | 6 | ✅ PASS |
|
| 69 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| apprehension | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| anger | 100.0% | 6 | ✅ PASS |
|
| 74 |
+
| rage | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| annoyance | 100.0% | 6 | ✅ PASS |
|
| 77 |
+
| frustration | 100.0% | 6 | ✅ PASS |
|
| 78 |
+
| resentment | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| bitterness | 100.0% | 5 | ✅ PASS |
|
| 81 |
+
| disgust | 100.0% | 6 | ✅ PASS |
|
| 82 |
+
| revulsion | 100.0% | 5 | ✅ PASS |
|
| 83 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 84 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 85 |
+
| scorn | 100.0% | 5 | ✅ PASS |
|
| 86 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 87 |
+
| embarrassment | 100.0% | 7 | ✅ PASS |
|
| 88 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 89 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 90 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 91 |
+
| humiliation | 100.0% | 5 | ✅ PASS |
|
| 92 |
+
| boredom | 100.0% | 6 | ✅ PASS |
|
| 93 |
+
| tiredness | 100.0% | 6 | ✅ PASS |
|
| 94 |
+
| exhaustion | 100.0% | 5 | ✅ PASS |
|
| 95 |
+
| fatigue | 100.0% | 5 | ✅ PASS |
|
| 96 |
+
| weariness | 100.0% | 5 | ✅ PASS |
|
| 97 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 98 |
+
| nostalgia | 100.0% | 7 | ✅ PASS |
|
| 99 |
+
| hope | 100.0% | 7 | ✅ PASS |
|
| 100 |
+
| optimism | 100.0% | 6 | ✅ PASS |
|
| 101 |
+
| determination | 100.0% | 5 | ✅ PASS |
|
| 102 |
+
| inspiration | 100.0% | 5 | ✅ PASS |
|
| 103 |
+
| anticipation | 100.0% | 5 | ✅ PASS |
|
| 104 |
+
| trust | 100.0% | 5 | ✅ PASS |
|
| 105 |
+
| acceptance | 100.0% | 5 | ✅ PASS |
|
| 106 |
+
| excitement | 87.5% | 8 | ✅ PASS |
|
| 107 |
+
| calm | 85.7% | 7 | ✅ PASS |
|
| 108 |
+
| uncertain | 85.7% | 7 | ✅ PASS |
|
| 109 |
+
| playful | 85.7% | 7 | ✅ PASS |
|
| 110 |
+
| relief | 83.3% | 6 | ✅ PASS |
|
| 111 |
+
| affection | 83.3% | 6 | ✅ PASS |
|
| 112 |
+
| pessimism | 83.3% | 6 | ✅ PASS |
|
| 113 |
+
| amusement | 81.8% | 11 | ✅ PASS |
|
| 114 |
+
| shock | 66.7% | 6 | ✅ PASS |
|
| 115 |
+
| fury | 66.7% | 6 | ✅ PASS |
|
| 116 |
+
| envy | 66.7% | 6 | ✅ PASS |
|
| 117 |
+
| mischievous | 66.7% | 6 | ✅ PASS |
|
| 118 |
+
| yearning | 60.0% | 5 | ✅ PASS |
|
| 119 |
+
| sympathy | 50.0% | 8 | ✅ PASS |
|
| 120 |
+
| longing | 42.9% | 7 | ❌ FAIL |
|
| 121 |
+
| silly | 12.5% | 8 | ❌ FAIL |
|
| 122 |
+
| neutral | 0.0% | 13 | ❌ FAIL |
|
| 123 |
+
| thinking | 0.0% | 10 | ❌ FAIL |
|
| 124 |
+
| sarcasm | 0.0% | 5 | ❌ FAIL |
|
| 125 |
+
|
| 126 |
+
## Performance Metrics
|
| 127 |
+
|
| 128 |
+
| Metric | Value |
|
| 129 |
+
|--------|-------|
|
| 130 |
+
| Min Inference Time | 11.71 ms |
|
| 131 |
+
| Max Inference Time | 84.92 ms |
|
| 132 |
+
| Avg Inference Time | 18.63 ms |
|
| 133 |
+
| Median Inference Time | 17.79 ms |
|
| 134 |
+
|
| 135 |
+
## Confusion Analysis
|
| 136 |
+
|
| 137 |
+
### Most Common Misclassifications
|
| 138 |
+
|
| 139 |
+
| Expected | Predicted | Count |
|
| 140 |
+
|----------|-----------|-------|
|
| 141 |
+
| positive | negative | 20 |
|
| 142 |
+
| negative | positive | 19 |
|
| 143 |
+
| neutral | negative | 12 |
|
| 144 |
+
| neutral | positive | 11 |
|
| 145 |
+
|
| 146 |
+
## Detailed Test Results
|
| 147 |
+
|
| 148 |
+
### Failed Tests
|
| 149 |
+
|
| 150 |
+
| Text | Expected | Detected | Time (ms) |
|
| 151 |
+
|------|----------|----------|-----------|
|
| 152 |
+
| I can't contain my excitement | positive | negative | 15.20 |
|
| 153 |
+
| Very calm today | positive | negative | 14.14 |
|
| 154 |
+
| Phew, that's over | positive | negative | 17.54 |
|
| 155 |
+
| You mean so much to me | positive | negative | 17.88 |
|
| 156 |
+
| What a shock | negative | positive | 22.22 |
|
| 157 |
+
| I'm completely shocked | negative | positive | 25.54 |
|
| 158 |
+
| The weather is average today | neutral | positive | 24.78 |
|
| 159 |
+
| It's just okay | neutral | positive | 25.98 |
|
| 160 |
+
| Nothing special | neutral | negative | 14.58 |
|
| 161 |
+
| I don't have strong feelings | neutral | negative | 17.03 |
|
| 162 |
+
| It is what it is | neutral | positive | 22.81 |
|
| 163 |
+
| No comment | neutral | negative | 16.26 |
|
| 164 |
+
| I have no opinion | neutral | negative | 23.42 |
|
| 165 |
+
| It doesn't matter to me | neutral | negative | 17.61 |
|
| 166 |
+
| I'm indifferent | neutral | negative | 23.82 |
|
| 167 |
+
| Whatever | neutral | negative | 23.27 |
|
| 168 |
+
| It's neither good nor bad | neutral | negative | 18.18 |
|
| 169 |
+
| The meeting is at 3pm | neutral | positive | 17.97 |
|
| 170 |
+
| The sky is blue | neutral | positive | 20.99 |
|
| 171 |
+
| I'm thinking about it | neutral | positive | 18.60 |
|
| 172 |
+
| Let me think | neutral | positive | 16.13 |
|
| 173 |
+
| I need to think | neutral | negative | 22.68 |
|
| 174 |
+
| Thinking hard | neutral | negative | 14.26 |
|
| 175 |
+
| I'm contemplating | neutral | positive | 21.17 |
|
| 176 |
+
| Hmm, let me consider | neutral | negative | 21.90 |
|
| 177 |
+
| I need to process this | neutral | negative | 24.16 |
|
| 178 |
+
| Give me a moment to think | neutral | positive | 20.02 |
|
| 179 |
+
| I'm pondering | neutral | positive | 23.81 |
|
| 180 |
+
| Let me reflect on that | neutral | positive | 23.33 |
|
| 181 |
+
| Uncertainty lingers | negative | positive | 13.41 |
|
| 182 |
+
| Such fury | negative | positive | 16.10 |
|
| 183 |
+
| Fury consumes me | negative | positive | 20.40 |
|
| 184 |
+
| I feel envious | negative | positive | 19.65 |
|
| 185 |
+
| I'm envious | negative | positive | 22.14 |
|
| 186 |
+
| I'm just goofing around | positive | negative | 21.21 |
|
| 187 |
+
| I'm feeling silly | positive | negative | 23.05 |
|
| 188 |
+
| Such silliness | positive | negative | 20.83 |
|
| 189 |
+
| Silly mood | positive | negative | 12.80 |
|
| 190 |
+
| I'm being silly | positive | negative | 23.84 |
|
| 191 |
+
| Feeling silly | positive | negative | 15.45 |
|
| 192 |
+
| That's so silly! | positive | negative | 23.48 |
|
| 193 |
+
| Just being ridiculous | positive | negative | 13.52 |
|
| 194 |
+
| Such mischief | positive | negative | 14.13 |
|
| 195 |
+
| I'm up to no good | positive | negative | 18.08 |
|
| 196 |
+
| LOL | positive | negative | 14.19 |
|
| 197 |
+
| 😂 | positive | negative | 21.78 |
|
| 198 |
+
| I feel sympathy for you | positive | negative | 23.66 |
|
| 199 |
+
| Such sympathy | positive | negative | 13.43 |
|
| 200 |
+
| Sympathy for your loss | positive | negative | 21.58 |
|
| 201 |
+
| I'm sorry for what happened | positive | negative | 17.94 |
|
| 202 |
+
|
| 203 |
+
---
|
| 204 |
+
|
| 205 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_multi-v1_2025-12-01_18-23-47.md
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:23:47
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 62
|
| 11 |
+
- **Overall Accuracy:** 12.2%
|
| 12 |
+
- **Average Inference Time:** 15.73 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| neutral | 80.0% | 5 | ✅ PASS |
|
| 19 |
+
| thinking | 80.0% | 5 | ✅ PASS |
|
| 20 |
+
| disdain | 80.0% | 5 | ✅ PASS |
|
| 21 |
+
| contempt | 60.0% | 5 | ✅ PASS |
|
| 22 |
+
| scorn | 60.0% | 5 | ✅ PASS |
|
| 23 |
+
| shame | 60.0% | 5 | ✅ PASS |
|
| 24 |
+
| mischievous | 60.0% | 5 | ✅ PASS |
|
| 25 |
+
| interest | 40.0% | 5 | ❌ FAIL |
|
| 26 |
+
| despair | 40.0% | 5 | ❌ FAIL |
|
| 27 |
+
| envy | 40.0% | 5 | ❌ FAIL |
|
| 28 |
+
| amusement | 28.6% | 7 | ❌ FAIL |
|
| 29 |
+
| ecstasy | 20.0% | 5 | ❌ FAIL |
|
| 30 |
+
| satisfaction | 20.0% | 5 | ❌ FAIL |
|
| 31 |
+
| calm | 20.0% | 5 | ❌ FAIL |
|
| 32 |
+
| relaxed | 20.0% | 5 | ❌ FAIL |
|
| 33 |
+
| relief | 20.0% | 5 | ❌ FAIL |
|
| 34 |
+
| compassion | 20.0% | 5 | ❌ FAIL |
|
| 35 |
+
| empathy | 20.0% | 5 | ❌ FAIL |
|
| 36 |
+
| wonder | 20.0% | 5 | ❌ FAIL |
|
| 37 |
+
| intrigue | 20.0% | 5 | ❌ FAIL |
|
| 38 |
+
| uncertain | 20.0% | 5 | ❌ FAIL |
|
| 39 |
+
| puzzled | 20.0% | 5 | ❌ FAIL |
|
| 40 |
+
| perplexed | 20.0% | 5 | ❌ FAIL |
|
| 41 |
+
| disappointment | 20.0% | 5 | ❌ FAIL |
|
| 42 |
+
| horror | 20.0% | 5 | ❌ FAIL |
|
| 43 |
+
| dread | 20.0% | 5 | ❌ FAIL |
|
| 44 |
+
| panic | 20.0% | 5 | ❌ FAIL |
|
| 45 |
+
| fury | 20.0% | 5 | ❌ FAIL |
|
| 46 |
+
| hostility | 20.0% | 5 | ❌ FAIL |
|
| 47 |
+
| revulsion | 20.0% | 5 | ❌ FAIL |
|
| 48 |
+
| guilt | 20.0% | 5 | ❌ FAIL |
|
| 49 |
+
| regret | 20.0% | 5 | ❌ FAIL |
|
| 50 |
+
| remorse | 20.0% | 5 | ❌ FAIL |
|
| 51 |
+
| humiliation | 20.0% | 5 | ❌ FAIL |
|
| 52 |
+
| boredom | 20.0% | 5 | ❌ FAIL |
|
| 53 |
+
| tiredness | 20.0% | 5 | ❌ FAIL |
|
| 54 |
+
| exhaustion | 20.0% | 5 | ❌ FAIL |
|
| 55 |
+
| fatigue | 20.0% | 5 | ❌ FAIL |
|
| 56 |
+
| weariness | 20.0% | 5 | ❌ FAIL |
|
| 57 |
+
| jealousy | 20.0% | 5 | ❌ FAIL |
|
| 58 |
+
| pessimism | 20.0% | 5 | ❌ FAIL |
|
| 59 |
+
| joy | 0.0% | 5 | ❌ FAIL |
|
| 60 |
+
| happiness | 0.0% | 7 | ❌ FAIL |
|
| 61 |
+
| excitement | 0.0% | 5 | ❌ FAIL |
|
| 62 |
+
| enthusiasm | 0.0% | 5 | ❌ FAIL |
|
| 63 |
+
| elation | 0.0% | 5 | ❌ FAIL |
|
| 64 |
+
| euphoria | 0.0% | 5 | ❌ FAIL |
|
| 65 |
+
| thrill | 0.0% | 5 | ❌ FAIL |
|
| 66 |
+
| delight | 0.0% | 5 | ❌ FAIL |
|
| 67 |
+
| cheerfulness | 0.0% | 5 | ❌ FAIL |
|
| 68 |
+
| contentment | 0.0% | 6 | ❌ FAIL |
|
| 69 |
+
| serenity | 0.0% | 5 | ❌ FAIL |
|
| 70 |
+
| pride | 0.0% | 5 | ❌ FAIL |
|
| 71 |
+
| confidence | 0.0% | 5 | ❌ FAIL |
|
| 72 |
+
| pleasure | 0.0% | 5 | ❌ FAIL |
|
| 73 |
+
| love | 0.0% | 5 | ❌ FAIL |
|
| 74 |
+
| adoration | 0.0% | 5 | ❌ FAIL |
|
| 75 |
+
| affection | 0.0% | 5 | ❌ FAIL |
|
| 76 |
+
| tenderness | 0.0% | 5 | ❌ FAIL |
|
| 77 |
+
| caring | 0.0% | 5 | ❌ FAIL |
|
| 78 |
+
| gratitude | 0.0% | 5 | ❌ FAIL |
|
| 79 |
+
| curiosity | 0.0% | 5 | ❌ FAIL |
|
| 80 |
+
| fascination | 0.0% | 5 | ❌ FAIL |
|
| 81 |
+
| awe | 0.0% | 5 | ❌ FAIL |
|
| 82 |
+
| amazement | 0.0% | 5 | ❌ FAIL |
|
| 83 |
+
| surprise | 0.0% | 5 | ❌ FAIL |
|
| 84 |
+
| astonishment | 0.0% | 5 | ❌ FAIL |
|
| 85 |
+
| shock | 0.0% | 5 | ❌ FAIL |
|
| 86 |
+
| confused | 0.0% | 5 | ❌ FAIL |
|
| 87 |
+
| bewildered | 0.0% | 5 | ❌ FAIL |
|
| 88 |
+
| baffled | 0.0% | 5 | ❌ FAIL |
|
| 89 |
+
| sadness | 0.0% | 5 | ❌ FAIL |
|
| 90 |
+
| sorrow | 0.0% | 5 | ❌ FAIL |
|
| 91 |
+
| grief | 0.0% | 5 | ❌ FAIL |
|
| 92 |
+
| melancholy | 0.0% | 5 | ❌ FAIL |
|
| 93 |
+
| loneliness | 0.0% | 5 | ❌ FAIL |
|
| 94 |
+
| hurt | 0.0% | 5 | ❌ FAIL |
|
| 95 |
+
| misery | 0.0% | 5 | ❌ FAIL |
|
| 96 |
+
| fear | 0.0% | 5 | ❌ FAIL |
|
| 97 |
+
| terror | 0.0% | 5 | ❌ FAIL |
|
| 98 |
+
| anxiety | 0.0% | 5 | ❌ FAIL |
|
| 99 |
+
| worry | 0.0% | 5 | ❌ FAIL |
|
| 100 |
+
| nervousness | 0.0% | 5 | ❌ FAIL |
|
| 101 |
+
| apprehension | 0.0% | 5 | ❌ FAIL |
|
| 102 |
+
| anger | 0.0% | 5 | ❌ FAIL |
|
| 103 |
+
| rage | 0.0% | 5 | ❌ FAIL |
|
| 104 |
+
| irritation | 0.0% | 5 | ❌ FAIL |
|
| 105 |
+
| annoyance | 0.0% | 5 | ❌ FAIL |
|
| 106 |
+
| frustration | 0.0% | 5 | ❌ FAIL |
|
| 107 |
+
| resentment | 0.0% | 5 | ❌ FAIL |
|
| 108 |
+
| bitterness | 0.0% | 5 | ❌ FAIL |
|
| 109 |
+
| disgust | 0.0% | 5 | ❌ FAIL |
|
| 110 |
+
| embarrassment | 0.0% | 5 | ❌ FAIL |
|
| 111 |
+
| playful | 0.0% | 5 | ❌ FAIL |
|
| 112 |
+
| silly | 0.0% | 5 | ❌ FAIL |
|
| 113 |
+
| sympathy | 0.0% | 5 | ❌ FAIL |
|
| 114 |
+
| nostalgia | 0.0% | 5 | ❌ FAIL |
|
| 115 |
+
| hope | 0.0% | 5 | ❌ FAIL |
|
| 116 |
+
| optimism | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| longing | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| yearning | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 11.94 ms |
|
| 125 |
+
| Max Inference Time | 36.93 ms |
|
| 126 |
+
| Avg Inference Time | 15.73 ms |
|
| 127 |
+
| Median Inference Time | 15.54 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | neutral | 234 |
|
| 136 |
+
| positive | neutral | 198 |
|
| 137 |
+
| positive | negative | 11 |
|
| 138 |
+
| negative | positive | 3 |
|
| 139 |
+
| neutral | negative | 2 |
|
| 140 |
+
|
| 141 |
+
## Detailed Test Results
|
| 142 |
+
|
| 143 |
+
### Failed Tests
|
| 144 |
+
|
| 145 |
+
| Text | Expected | Detected | Time (ms) |
|
| 146 |
+
|------|----------|----------|-----------|
|
| 147 |
+
| I feel so much joy right now! | positive | neutral | 36.93 |
|
| 148 |
+
| This brings me pure joy | positive | neutral | 21.31 |
|
| 149 |
+
| Joy fills my heart | positive | neutral | 18.00 |
|
| 150 |
+
| What a joyful moment | positive | neutral | 17.77 |
|
| 151 |
+
| I'm full of joy today | positive | neutral | 20.25 |
|
| 152 |
+
| I am so happy today! | positive | neutral | 17.99 |
|
| 153 |
+
| This makes me really happy | positive | neutral | 18.17 |
|
| 154 |
+
| I feel happy and content | positive | neutral | 18.50 |
|
| 155 |
+
| Happiness is all around | positive | neutral | 18.16 |
|
| 156 |
+
| I'm genuinely happy | positive | neutral | 16.13 |
|
| 157 |
+
| I am good | positive | neutral | 17.24 |
|
| 158 |
+
| I'm doing great | positive | neutral | 16.86 |
|
| 159 |
+
| I'm so excited about this! | positive | neutral | 19.09 |
|
| 160 |
+
| This is really exciting | positive | neutral | 16.79 |
|
| 161 |
+
| I can't contain my excitement | positive | neutral | 19.48 |
|
| 162 |
+
| How exciting! | positive | neutral | 16.56 |
|
| 163 |
+
| I'm thrilled and excited | positive | neutral | 19.57 |
|
| 164 |
+
| I'm very enthusiastic about this project | positive | neutral | 18.90 |
|
| 165 |
+
| My enthusiasm is through the roof | positive | neutral | 18.72 |
|
| 166 |
+
| I feel enthusiastic and eager | positive | neutral | 16.96 |
|
| 167 |
+
| Such enthusiasm! | positive | neutral | 15.95 |
|
| 168 |
+
| I'm enthusiastically looking forward to ... | positive | neutral | 18.36 |
|
| 169 |
+
| I'm in absolute ecstasy! | positive | neutral | 15.88 |
|
| 170 |
+
| This is pure ecstasy | positive | neutral | 16.26 |
|
| 171 |
+
| I feel ecstatic | positive | neutral | 16.77 |
|
| 172 |
+
| What ecstasy! | positive | neutral | 15.75 |
|
| 173 |
+
| I'm elated by the results | positive | neutral | 20.11 |
|
| 174 |
+
| Such elation! | positive | neutral | 19.44 |
|
| 175 |
+
| I feel elated | positive | neutral | 14.99 |
|
| 176 |
+
| Elation washes over me | positive | negative | 17.13 |
|
| 177 |
+
| I'm absolutely elated | positive | neutral | 16.39 |
|
| 178 |
+
| I'm in a state of euphoria | positive | neutral | 17.98 |
|
| 179 |
+
| Pure euphoria right now | positive | neutral | 17.25 |
|
| 180 |
+
| This euphoric feeling | positive | neutral | 16.17 |
|
| 181 |
+
| I feel euphoric | positive | neutral | 15.39 |
|
| 182 |
+
| Euphoria takes over | positive | neutral | 17.46 |
|
| 183 |
+
| What a thrill! | positive | neutral | 16.64 |
|
| 184 |
+
| I'm thrilled about this | positive | neutral | 15.13 |
|
| 185 |
+
| This is thrilling | positive | neutral | 17.08 |
|
| 186 |
+
| I feel thrilled | positive | neutral | 17.26 |
|
| 187 |
+
| Such a thrilling experience | positive | neutral | 14.26 |
|
| 188 |
+
| I'm delighted to hear that | positive | neutral | 17.79 |
|
| 189 |
+
| What a delight! | positive | neutral | 17.22 |
|
| 190 |
+
| This is delightful | positive | neutral | 16.16 |
|
| 191 |
+
| I'm absolutely delighted | positive | neutral | 15.84 |
|
| 192 |
+
| Such delight! | positive | neutral | 16.02 |
|
| 193 |
+
| I'm feeling cheerful today | positive | neutral | 19.85 |
|
| 194 |
+
| Such cheerfulness around | positive | neutral | 16.41 |
|
| 195 |
+
| Cheerful vibes only | positive | neutral | 18.09 |
|
| 196 |
+
| I feel cheerful | positive | neutral | 17.36 |
|
| 197 |
+
|
| 198 |
+
---
|
| 199 |
+
|
| 200 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_multi-v1_2025-12-01_18-24-59.md
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:24:59
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 62
|
| 11 |
+
- **Overall Accuracy:** 12.2%
|
| 12 |
+
- **Average Inference Time:** 14.03 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| neutral | 80.0% | 5 | ✅ PASS |
|
| 19 |
+
| thinking | 80.0% | 5 | ✅ PASS |
|
| 20 |
+
| disdain | 80.0% | 5 | ✅ PASS |
|
| 21 |
+
| contempt | 60.0% | 5 | ✅ PASS |
|
| 22 |
+
| scorn | 60.0% | 5 | ✅ PASS |
|
| 23 |
+
| shame | 60.0% | 5 | ✅ PASS |
|
| 24 |
+
| mischievous | 60.0% | 5 | ✅ PASS |
|
| 25 |
+
| interest | 40.0% | 5 | ❌ FAIL |
|
| 26 |
+
| despair | 40.0% | 5 | ❌ FAIL |
|
| 27 |
+
| envy | 40.0% | 5 | ❌ FAIL |
|
| 28 |
+
| amusement | 28.6% | 7 | ❌ FAIL |
|
| 29 |
+
| ecstasy | 20.0% | 5 | ❌ FAIL |
|
| 30 |
+
| satisfaction | 20.0% | 5 | ❌ FAIL |
|
| 31 |
+
| calm | 20.0% | 5 | ❌ FAIL |
|
| 32 |
+
| relaxed | 20.0% | 5 | ❌ FAIL |
|
| 33 |
+
| relief | 20.0% | 5 | ❌ FAIL |
|
| 34 |
+
| compassion | 20.0% | 5 | ❌ FAIL |
|
| 35 |
+
| empathy | 20.0% | 5 | ❌ FAIL |
|
| 36 |
+
| wonder | 20.0% | 5 | ❌ FAIL |
|
| 37 |
+
| intrigue | 20.0% | 5 | ❌ FAIL |
|
| 38 |
+
| uncertain | 20.0% | 5 | ❌ FAIL |
|
| 39 |
+
| puzzled | 20.0% | 5 | ❌ FAIL |
|
| 40 |
+
| perplexed | 20.0% | 5 | ❌ FAIL |
|
| 41 |
+
| disappointment | 20.0% | 5 | ❌ FAIL |
|
| 42 |
+
| horror | 20.0% | 5 | ❌ FAIL |
|
| 43 |
+
| dread | 20.0% | 5 | ❌ FAIL |
|
| 44 |
+
| panic | 20.0% | 5 | ❌ FAIL |
|
| 45 |
+
| fury | 20.0% | 5 | ❌ FAIL |
|
| 46 |
+
| hostility | 20.0% | 5 | ❌ FAIL |
|
| 47 |
+
| revulsion | 20.0% | 5 | ❌ FAIL |
|
| 48 |
+
| guilt | 20.0% | 5 | ❌ FAIL |
|
| 49 |
+
| regret | 20.0% | 5 | ❌ FAIL |
|
| 50 |
+
| remorse | 20.0% | 5 | ❌ FAIL |
|
| 51 |
+
| humiliation | 20.0% | 5 | ❌ FAIL |
|
| 52 |
+
| boredom | 20.0% | 5 | ❌ FAIL |
|
| 53 |
+
| tiredness | 20.0% | 5 | ❌ FAIL |
|
| 54 |
+
| exhaustion | 20.0% | 5 | ❌ FAIL |
|
| 55 |
+
| fatigue | 20.0% | 5 | ❌ FAIL |
|
| 56 |
+
| weariness | 20.0% | 5 | ❌ FAIL |
|
| 57 |
+
| jealousy | 20.0% | 5 | ❌ FAIL |
|
| 58 |
+
| pessimism | 20.0% | 5 | ❌ FAIL |
|
| 59 |
+
| joy | 0.0% | 5 | ❌ FAIL |
|
| 60 |
+
| happiness | 0.0% | 7 | ❌ FAIL |
|
| 61 |
+
| excitement | 0.0% | 5 | ❌ FAIL |
|
| 62 |
+
| enthusiasm | 0.0% | 5 | ❌ FAIL |
|
| 63 |
+
| elation | 0.0% | 5 | ❌ FAIL |
|
| 64 |
+
| euphoria | 0.0% | 5 | ❌ FAIL |
|
| 65 |
+
| thrill | 0.0% | 5 | ❌ FAIL |
|
| 66 |
+
| delight | 0.0% | 5 | ❌ FAIL |
|
| 67 |
+
| cheerfulness | 0.0% | 5 | ❌ FAIL |
|
| 68 |
+
| contentment | 0.0% | 6 | ❌ FAIL |
|
| 69 |
+
| serenity | 0.0% | 5 | ❌ FAIL |
|
| 70 |
+
| pride | 0.0% | 5 | ❌ FAIL |
|
| 71 |
+
| confidence | 0.0% | 5 | ❌ FAIL |
|
| 72 |
+
| pleasure | 0.0% | 5 | ❌ FAIL |
|
| 73 |
+
| love | 0.0% | 5 | ❌ FAIL |
|
| 74 |
+
| adoration | 0.0% | 5 | ❌ FAIL |
|
| 75 |
+
| affection | 0.0% | 5 | ❌ FAIL |
|
| 76 |
+
| tenderness | 0.0% | 5 | ❌ FAIL |
|
| 77 |
+
| caring | 0.0% | 5 | ❌ FAIL |
|
| 78 |
+
| gratitude | 0.0% | 5 | ❌ FAIL |
|
| 79 |
+
| curiosity | 0.0% | 5 | ❌ FAIL |
|
| 80 |
+
| fascination | 0.0% | 5 | ❌ FAIL |
|
| 81 |
+
| awe | 0.0% | 5 | ❌ FAIL |
|
| 82 |
+
| amazement | 0.0% | 5 | ❌ FAIL |
|
| 83 |
+
| surprise | 0.0% | 5 | ❌ FAIL |
|
| 84 |
+
| astonishment | 0.0% | 5 | ❌ FAIL |
|
| 85 |
+
| shock | 0.0% | 5 | ❌ FAIL |
|
| 86 |
+
| confused | 0.0% | 5 | ❌ FAIL |
|
| 87 |
+
| bewildered | 0.0% | 5 | ❌ FAIL |
|
| 88 |
+
| baffled | 0.0% | 5 | ❌ FAIL |
|
| 89 |
+
| sadness | 0.0% | 5 | ❌ FAIL |
|
| 90 |
+
| sorrow | 0.0% | 5 | ❌ FAIL |
|
| 91 |
+
| grief | 0.0% | 5 | ❌ FAIL |
|
| 92 |
+
| melancholy | 0.0% | 5 | ❌ FAIL |
|
| 93 |
+
| loneliness | 0.0% | 5 | ❌ FAIL |
|
| 94 |
+
| hurt | 0.0% | 5 | ❌ FAIL |
|
| 95 |
+
| misery | 0.0% | 5 | ❌ FAIL |
|
| 96 |
+
| fear | 0.0% | 5 | ❌ FAIL |
|
| 97 |
+
| terror | 0.0% | 5 | ❌ FAIL |
|
| 98 |
+
| anxiety | 0.0% | 5 | ❌ FAIL |
|
| 99 |
+
| worry | 0.0% | 5 | ❌ FAIL |
|
| 100 |
+
| nervousness | 0.0% | 5 | ❌ FAIL |
|
| 101 |
+
| apprehension | 0.0% | 5 | ❌ FAIL |
|
| 102 |
+
| anger | 0.0% | 5 | ❌ FAIL |
|
| 103 |
+
| rage | 0.0% | 5 | ❌ FAIL |
|
| 104 |
+
| irritation | 0.0% | 5 | ❌ FAIL |
|
| 105 |
+
| annoyance | 0.0% | 5 | ❌ FAIL |
|
| 106 |
+
| frustration | 0.0% | 5 | ❌ FAIL |
|
| 107 |
+
| resentment | 0.0% | 5 | ❌ FAIL |
|
| 108 |
+
| bitterness | 0.0% | 5 | ❌ FAIL |
|
| 109 |
+
| disgust | 0.0% | 5 | ❌ FAIL |
|
| 110 |
+
| embarrassment | 0.0% | 5 | ❌ FAIL |
|
| 111 |
+
| playful | 0.0% | 5 | ❌ FAIL |
|
| 112 |
+
| silly | 0.0% | 5 | ❌ FAIL |
|
| 113 |
+
| sympathy | 0.0% | 5 | ❌ FAIL |
|
| 114 |
+
| nostalgia | 0.0% | 5 | ❌ FAIL |
|
| 115 |
+
| hope | 0.0% | 5 | ❌ FAIL |
|
| 116 |
+
| optimism | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| longing | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| yearning | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 10.33 ms |
|
| 125 |
+
| Max Inference Time | 57.67 ms |
|
| 126 |
+
| Avg Inference Time | 14.03 ms |
|
| 127 |
+
| Median Inference Time | 13.68 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | neutral | 234 |
|
| 136 |
+
| positive | neutral | 198 |
|
| 137 |
+
| positive | negative | 11 |
|
| 138 |
+
| negative | positive | 3 |
|
| 139 |
+
| neutral | negative | 2 |
|
| 140 |
+
|
| 141 |
+
## Detailed Test Results
|
| 142 |
+
|
| 143 |
+
### Failed Tests
|
| 144 |
+
|
| 145 |
+
| Text | Expected | Detected | Time (ms) |
|
| 146 |
+
|------|----------|----------|-----------|
|
| 147 |
+
| I feel so much joy right now! | positive | neutral | 32.98 |
|
| 148 |
+
| This brings me pure joy | positive | neutral | 17.23 |
|
| 149 |
+
| Joy fills my heart | positive | neutral | 16.70 |
|
| 150 |
+
| What a joyful moment | positive | neutral | 13.63 |
|
| 151 |
+
| I'm full of joy today | positive | neutral | 16.62 |
|
| 152 |
+
| I am so happy today! | positive | neutral | 15.72 |
|
| 153 |
+
| This makes me really happy | positive | neutral | 14.16 |
|
| 154 |
+
| I feel happy and content | positive | neutral | 14.92 |
|
| 155 |
+
| Happiness is all around | positive | neutral | 14.49 |
|
| 156 |
+
| I'm genuinely happy | positive | neutral | 15.22 |
|
| 157 |
+
| I am good | positive | neutral | 14.82 |
|
| 158 |
+
| I'm doing great | positive | neutral | 13.20 |
|
| 159 |
+
| I'm so excited about this! | positive | neutral | 14.82 |
|
| 160 |
+
| This is really exciting | positive | neutral | 12.05 |
|
| 161 |
+
| I can't contain my excitement | positive | neutral | 14.27 |
|
| 162 |
+
| How exciting! | positive | neutral | 12.28 |
|
| 163 |
+
| I'm thrilled and excited | positive | neutral | 14.07 |
|
| 164 |
+
| I'm very enthusiastic about this project | positive | neutral | 15.60 |
|
| 165 |
+
| My enthusiasm is through the roof | positive | neutral | 16.65 |
|
| 166 |
+
| I feel enthusiastic and eager | positive | neutral | 14.22 |
|
| 167 |
+
| Such enthusiasm! | positive | neutral | 11.96 |
|
| 168 |
+
| I'm enthusiastically looking forward to ... | positive | neutral | 14.81 |
|
| 169 |
+
| I'm in absolute ecstasy! | positive | neutral | 15.84 |
|
| 170 |
+
| This is pure ecstasy | positive | neutral | 12.10 |
|
| 171 |
+
| I feel ecstatic | positive | neutral | 13.57 |
|
| 172 |
+
| What ecstasy! | positive | neutral | 11.99 |
|
| 173 |
+
| I'm elated by the results | positive | neutral | 15.46 |
|
| 174 |
+
| Such elation! | positive | neutral | 13.51 |
|
| 175 |
+
| I feel elated | positive | neutral | 12.58 |
|
| 176 |
+
| Elation washes over me | positive | negative | 17.62 |
|
| 177 |
+
| I'm absolutely elated | positive | neutral | 14.18 |
|
| 178 |
+
| I'm in a state of euphoria | positive | neutral | 13.23 |
|
| 179 |
+
| Pure euphoria right now | positive | neutral | 15.18 |
|
| 180 |
+
| This euphoric feeling | positive | neutral | 14.41 |
|
| 181 |
+
| I feel euphoric | positive | neutral | 13.69 |
|
| 182 |
+
| Euphoria takes over | positive | neutral | 12.60 |
|
| 183 |
+
| What a thrill! | positive | neutral | 14.61 |
|
| 184 |
+
| I'm thrilled about this | positive | neutral | 14.28 |
|
| 185 |
+
| This is thrilling | positive | neutral | 14.85 |
|
| 186 |
+
| I feel thrilled | positive | neutral | 13.66 |
|
| 187 |
+
| Such a thrilling experience | positive | neutral | 12.16 |
|
| 188 |
+
| I'm delighted to hear that | positive | neutral | 13.89 |
|
| 189 |
+
| What a delight! | positive | neutral | 14.74 |
|
| 190 |
+
| This is delightful | positive | neutral | 13.20 |
|
| 191 |
+
| I'm absolutely delighted | positive | neutral | 14.27 |
|
| 192 |
+
| Such delight! | positive | neutral | 13.14 |
|
| 193 |
+
| I'm feeling cheerful today | positive | neutral | 14.32 |
|
| 194 |
+
| Such cheerfulness around | positive | neutral | 13.15 |
|
| 195 |
+
| Cheerful vibes only | positive | neutral | 15.65 |
|
| 196 |
+
| I feel cheerful | positive | neutral | 13.98 |
|
| 197 |
+
|
| 198 |
+
---
|
| 199 |
+
|
| 200 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_multi-v1_2025-12-01_18-30-05.md
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:30:05
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 399
|
| 11 |
+
- **Overall Accuracy:** 78.2%
|
| 12 |
+
- **Average Inference Time:** 15.66 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| excitement | 100.0% | 5 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 28 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| sorrow | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| fury | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| pessimism | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| yearning | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| happiness | 85.7% | 7 | ✅ PASS |
|
| 65 |
+
| ecstasy | 80.0% | 5 | ✅ PASS |
|
| 66 |
+
| elation | 80.0% | 5 | ✅ PASS |
|
| 67 |
+
| euphoria | 80.0% | 5 | ✅ PASS |
|
| 68 |
+
| serenity | 80.0% | 5 | ✅ PASS |
|
| 69 |
+
| adoration | 80.0% | 5 | ✅ PASS |
|
| 70 |
+
| gratitude | 80.0% | 5 | ✅ PASS |
|
| 71 |
+
| interest | 80.0% | 5 | ✅ PASS |
|
| 72 |
+
| astonishment | 80.0% | 5 | ✅ PASS |
|
| 73 |
+
| neutral | 80.0% | 5 | ✅ PASS |
|
| 74 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 75 |
+
| melancholy | 80.0% | 5 | ✅ PASS |
|
| 76 |
+
| despair | 80.0% | 5 | ✅ PASS |
|
| 77 |
+
| misery | 80.0% | 5 | ✅ PASS |
|
| 78 |
+
| apprehension | 80.0% | 5 | ✅ PASS |
|
| 79 |
+
| rage | 80.0% | 5 | ✅ PASS |
|
| 80 |
+
| annoyance | 80.0% | 5 | ✅ PASS |
|
| 81 |
+
| resentment | 80.0% | 5 | ✅ PASS |
|
| 82 |
+
| bitterness | 80.0% | 5 | ✅ PASS |
|
| 83 |
+
| revulsion | 80.0% | 5 | ✅ PASS |
|
| 84 |
+
| scorn | 80.0% | 5 | ✅ PASS |
|
| 85 |
+
| humiliation | 80.0% | 5 | ✅ PASS |
|
| 86 |
+
| exhaustion | 80.0% | 5 | ✅ PASS |
|
| 87 |
+
| fatigue | 80.0% | 5 | ✅ PASS |
|
| 88 |
+
| weariness | 80.0% | 5 | ✅ PASS |
|
| 89 |
+
| envy | 80.0% | 5 | ✅ PASS |
|
| 90 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 91 |
+
| optimism | 80.0% | 5 | ✅ PASS |
|
| 92 |
+
| longing | 80.0% | 5 | ✅ PASS |
|
| 93 |
+
| contentment | 66.7% | 6 | ✅ PASS |
|
| 94 |
+
| relaxed | 60.0% | 5 | ✅ PASS |
|
| 95 |
+
| pride | 60.0% | 5 | ✅ PASS |
|
| 96 |
+
| confidence | 60.0% | 5 | ✅ PASS |
|
| 97 |
+
| caring | 60.0% | 5 | ✅ PASS |
|
| 98 |
+
| curiosity | 60.0% | 5 | ✅ PASS |
|
| 99 |
+
| thinking | 60.0% | 5 | ✅ PASS |
|
| 100 |
+
| sympathy | 60.0% | 5 | ✅ PASS |
|
| 101 |
+
| amusement | 57.1% | 7 | ✅ PASS |
|
| 102 |
+
| calm | 40.0% | 5 | ❌ FAIL |
|
| 103 |
+
| affection | 40.0% | 5 | ❌ FAIL |
|
| 104 |
+
| tenderness | 40.0% | 5 | ❌ FAIL |
|
| 105 |
+
| compassion | 40.0% | 5 | ❌ FAIL |
|
| 106 |
+
| empathy | 40.0% | 5 | ❌ FAIL |
|
| 107 |
+
| intrigue | 40.0% | 5 | ❌ FAIL |
|
| 108 |
+
| confused | 40.0% | 5 | ❌ FAIL |
|
| 109 |
+
| silly | 40.0% | 5 | ❌ FAIL |
|
| 110 |
+
| hope | 40.0% | 5 | ❌ FAIL |
|
| 111 |
+
| fascination | 20.0% | 5 | ❌ FAIL |
|
| 112 |
+
| puzzled | 20.0% | 5 | ❌ FAIL |
|
| 113 |
+
| perplexed | 20.0% | 5 | ❌ FAIL |
|
| 114 |
+
| baffled | 20.0% | 5 | ❌ FAIL |
|
| 115 |
+
| awe | 0.0% | 5 | ❌ FAIL |
|
| 116 |
+
| shock | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| bewildered | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| nostalgia | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 11.21 ms |
|
| 125 |
+
| Max Inference Time | 39.26 ms |
|
| 126 |
+
| Avg Inference Time | 15.66 ms |
|
| 127 |
+
| Median Inference Time | 15.16 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| positive | neutral | 38 |
|
| 136 |
+
| positive | negative | 28 |
|
| 137 |
+
| negative | positive | 25 |
|
| 138 |
+
| negative | neutral | 17 |
|
| 139 |
+
| neutral | negative | 3 |
|
| 140 |
+
|
| 141 |
+
## Detailed Test Results
|
| 142 |
+
|
| 143 |
+
### Failed Tests
|
| 144 |
+
|
| 145 |
+
| Text | Expected | Detected | Time (ms) |
|
| 146 |
+
|------|----------|----------|-----------|
|
| 147 |
+
| Happiness is all around | positive | negative | 15.33 |
|
| 148 |
+
| This is pure ecstasy | positive | neutral | 14.30 |
|
| 149 |
+
| Elation washes over me | positive | negative | 18.13 |
|
| 150 |
+
| Euphoria takes over | positive | neutral | 14.16 |
|
| 151 |
+
| Such contentment | positive | negative | 17.62 |
|
| 152 |
+
| I'm fine | positive | neutral | 15.66 |
|
| 153 |
+
| Serenity now | positive | neutral | 14.48 |
|
| 154 |
+
| So calm right now | positive | neutral | 13.48 |
|
| 155 |
+
| Calmness washes over me | positive | negative | 18.04 |
|
| 156 |
+
| Very calm today | positive | neutral | 15.55 |
|
| 157 |
+
| So relaxed right now | positive | neutral | 14.51 |
|
| 158 |
+
| Totally relaxed | positive | neutral | 15.08 |
|
| 159 |
+
| Pride in my work | positive | neutral | 15.33 |
|
| 160 |
+
| Such pride | positive | neutral | 14.22 |
|
| 161 |
+
| Confidence is high | positive | neutral | 15.88 |
|
| 162 |
+
| Such confidence | positive | neutral | 13.74 |
|
| 163 |
+
| Such adoration | positive | neutral | 16.70 |
|
| 164 |
+
| Such affection | positive | negative | 14.21 |
|
| 165 |
+
| Affection for everyone | positive | neutral | 13.68 |
|
| 166 |
+
| Showing affection | positive | negative | 14.20 |
|
| 167 |
+
| Such tenderness | positive | neutral | 15.19 |
|
| 168 |
+
| Tenderness in my heart | positive | negative | 17.03 |
|
| 169 |
+
| Tender moments | positive | negative | 15.41 |
|
| 170 |
+
| Such caring | positive | neutral | 13.51 |
|
| 171 |
+
| Caring deeply | positive | negative | 15.68 |
|
| 172 |
+
| Such compassion | positive | neutral | 12.76 |
|
| 173 |
+
| Compassionate response | positive | negative | 14.11 |
|
| 174 |
+
| Showing compassion | positive | negative | 14.23 |
|
| 175 |
+
| Such empathy | positive | neutral | 14.15 |
|
| 176 |
+
| Empathy is important | positive | neutral | 14.62 |
|
| 177 |
+
| Showing empathy | positive | neutral | 14.93 |
|
| 178 |
+
| Such gratitude | positive | neutral | 39.26 |
|
| 179 |
+
| Such curiosity | positive | neutral | 15.84 |
|
| 180 |
+
| Curiosity got me | positive | neutral | 16.65 |
|
| 181 |
+
| Such interest | positive | neutral | 17.01 |
|
| 182 |
+
| I'm fascinated by this | positive | neutral | 14.70 |
|
| 183 |
+
| Such fascination | positive | neutral | 13.38 |
|
| 184 |
+
| Fascinating! | positive | negative | 13.98 |
|
| 185 |
+
| I'm absolutely fascinated | positive | neutral | 13.83 |
|
| 186 |
+
| I'm in awe | positive | negative | 12.85 |
|
| 187 |
+
| Such awe | positive | negative | 11.79 |
|
| 188 |
+
| I feel awe | positive | negative | 13.73 |
|
| 189 |
+
| Awe-inspiring | positive | negative | 14.38 |
|
| 190 |
+
| I'm awestruck | positive | negative | 15.32 |
|
| 191 |
+
| I'm intrigued | positive | neutral | 14.94 |
|
| 192 |
+
| Such intrigue | positive | negative | 14.74 |
|
| 193 |
+
| Intriguing! | positive | negative | 14.87 |
|
| 194 |
+
| Astonishing! | positive | negative | 15.89 |
|
| 195 |
+
| I'm in shock | negative | positive | 14.28 |
|
| 196 |
+
| Shocking news | negative | positive | 14.28 |
|
| 197 |
+
|
| 198 |
+
---
|
| 199 |
+
|
| 200 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_multi-v1_2025-12-01_18-36-10.md
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:36:10
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 427
|
| 11 |
+
- **Overall Accuracy:** 83.7%
|
| 12 |
+
- **Average Inference Time:** 15.42 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| excitement | 100.0% | 5 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| calm | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 28 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| thinking | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| fury | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| silly | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| sympathy | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| pessimism | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| happiness | 85.7% | 7 | ✅ PASS |
|
| 76 |
+
| ecstasy | 80.0% | 5 | ✅ PASS |
|
| 77 |
+
| elation | 80.0% | 5 | ✅ PASS |
|
| 78 |
+
| euphoria | 80.0% | 5 | ✅ PASS |
|
| 79 |
+
| serenity | 80.0% | 5 | ✅ PASS |
|
| 80 |
+
| adoration | 80.0% | 5 | ✅ PASS |
|
| 81 |
+
| interest | 80.0% | 5 | ✅ PASS |
|
| 82 |
+
| fascination | 80.0% | 5 | ✅ PASS |
|
| 83 |
+
| intrigue | 80.0% | 5 | ✅ PASS |
|
| 84 |
+
| astonishment | 80.0% | 5 | ✅ PASS |
|
| 85 |
+
| neutral | 80.0% | 5 | ✅ PASS |
|
| 86 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 87 |
+
| sorrow | 80.0% | 5 | ✅ PASS |
|
| 88 |
+
| melancholy | 80.0% | 5 | ✅ PASS |
|
| 89 |
+
| despair | 80.0% | 5 | ✅ PASS |
|
| 90 |
+
| misery | 80.0% | 5 | ✅ PASS |
|
| 91 |
+
| apprehension | 80.0% | 5 | ✅ PASS |
|
| 92 |
+
| rage | 80.0% | 5 | ✅ PASS |
|
| 93 |
+
| annoyance | 80.0% | 5 | ✅ PASS |
|
| 94 |
+
| resentment | 80.0% | 5 | ✅ PASS |
|
| 95 |
+
| bitterness | 80.0% | 5 | ✅ PASS |
|
| 96 |
+
| revulsion | 80.0% | 5 | ✅ PASS |
|
| 97 |
+
| scorn | 80.0% | 5 | ✅ PASS |
|
| 98 |
+
| humiliation | 80.0% | 5 | ✅ PASS |
|
| 99 |
+
| exhaustion | 80.0% | 5 | ✅ PASS |
|
| 100 |
+
| fatigue | 80.0% | 5 | ✅ PASS |
|
| 101 |
+
| weariness | 80.0% | 5 | ✅ PASS |
|
| 102 |
+
| envy | 80.0% | 5 | ✅ PASS |
|
| 103 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 104 |
+
| optimism | 80.0% | 5 | ✅ PASS |
|
| 105 |
+
| amusement | 71.4% | 7 | ✅ PASS |
|
| 106 |
+
| contentment | 66.7% | 6 | ✅ PASS |
|
| 107 |
+
| confidence | 60.0% | 5 | ✅ PASS |
|
| 108 |
+
| curiosity | 60.0% | 5 | ✅ PASS |
|
| 109 |
+
| empathy | 40.0% | 5 | ❌ FAIL |
|
| 110 |
+
| puzzled | 20.0% | 5 | ❌ FAIL |
|
| 111 |
+
| perplexed | 20.0% | 5 | ❌ FAIL |
|
| 112 |
+
| baffled | 20.0% | 5 | ❌ FAIL |
|
| 113 |
+
| shock | 0.0% | 5 | ❌ FAIL |
|
| 114 |
+
| confused | 0.0% | 5 | ❌ FAIL |
|
| 115 |
+
| bewildered | 0.0% | 5 | ❌ FAIL |
|
| 116 |
+
| nostalgia | 0.0% | 5 | ❌ FAIL |
|
| 117 |
+
| longing | 0.0% | 5 | ❌ FAIL |
|
| 118 |
+
| yearning | 0.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 9.75 ms |
|
| 125 |
+
| Max Inference Time | 37.11 ms |
|
| 126 |
+
| Avg Inference Time | 15.42 ms |
|
| 127 |
+
| Median Inference Time | 14.99 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | neutral | 43 |
|
| 136 |
+
| positive | neutral | 21 |
|
| 137 |
+
| negative | positive | 11 |
|
| 138 |
+
| positive | negative | 7 |
|
| 139 |
+
| neutral | negative | 1 |
|
| 140 |
+
|
| 141 |
+
## Detailed Test Results
|
| 142 |
+
|
| 143 |
+
### Failed Tests
|
| 144 |
+
|
| 145 |
+
| Text | Expected | Detected | Time (ms) |
|
| 146 |
+
|------|----------|----------|-----------|
|
| 147 |
+
| Happiness is all around | positive | negative | 15.78 |
|
| 148 |
+
| This is pure ecstasy | positive | neutral | 13.40 |
|
| 149 |
+
| Elation washes over me | positive | negative | 14.70 |
|
| 150 |
+
| Euphoria takes over | positive | neutral | 14.68 |
|
| 151 |
+
| Such contentment | positive | negative | 15.45 |
|
| 152 |
+
| I'm fine | positive | neutral | 14.44 |
|
| 153 |
+
| Serenity now | positive | neutral | 13.15 |
|
| 154 |
+
| Confidence is high | positive | neutral | 13.15 |
|
| 155 |
+
| Such confidence | positive | neutral | 11.99 |
|
| 156 |
+
| Such adoration | positive | neutral | 15.16 |
|
| 157 |
+
| Such empathy | positive | neutral | 14.10 |
|
| 158 |
+
| Empathy is important | positive | neutral | 15.82 |
|
| 159 |
+
| Showing empathy | positive | neutral | 15.35 |
|
| 160 |
+
| Such curiosity | positive | neutral | 12.55 |
|
| 161 |
+
| Curiosity got me | positive | neutral | 13.99 |
|
| 162 |
+
| Such interest | positive | neutral | 12.62 |
|
| 163 |
+
| Such fascination | positive | neutral | 12.98 |
|
| 164 |
+
| Such intrigue | positive | negative | 11.98 |
|
| 165 |
+
| Astonishing! | positive | negative | 14.03 |
|
| 166 |
+
| I'm in shock | negative | neutral | 13.34 |
|
| 167 |
+
| Shocking news | negative | neutral | 13.95 |
|
| 168 |
+
| I feel shocked | negative | neutral | 15.39 |
|
| 169 |
+
| What a shock | negative | neutral | 14.87 |
|
| 170 |
+
| I'm completely shocked | negative | neutral | 14.14 |
|
| 171 |
+
| I don't have strong feelings | neutral | negative | 18.04 |
|
| 172 |
+
| I'm not sure about this | negative | neutral | 19.60 |
|
| 173 |
+
| I'm so confused | negative | neutral | 16.37 |
|
| 174 |
+
| This is confusing | negative | neutral | 23.96 |
|
| 175 |
+
| I feel confused | negative | neutral | 23.91 |
|
| 176 |
+
| Confusion everywhere | negative | neutral | 22.31 |
|
| 177 |
+
| I'm really confused | negative | neutral | 20.19 |
|
| 178 |
+
| I'm puzzled by this | negative | neutral | 18.19 |
|
| 179 |
+
| Such a puzzle | negative | positive | 17.41 |
|
| 180 |
+
| I feel puzzled | negative | neutral | 16.27 |
|
| 181 |
+
| I'm quite puzzled | negative | neutral | 17.59 |
|
| 182 |
+
| I'm perplexed | negative | neutral | 15.52 |
|
| 183 |
+
| Such perplexity | negative | positive | 15.94 |
|
| 184 |
+
| I feel perplexed | negative | neutral | 14.76 |
|
| 185 |
+
| I'm thoroughly perplexed | negative | neutral | 17.03 |
|
| 186 |
+
| I'm bewildered | negative | positive | 14.42 |
|
| 187 |
+
| Feeling bewildered | negative | positive | 14.84 |
|
| 188 |
+
| I feel bewildered | negative | positive | 15.32 |
|
| 189 |
+
| Bewildering! | negative | neutral | 14.18 |
|
| 190 |
+
| I'm completely bewildered | negative | positive | 14.84 |
|
| 191 |
+
| I'm baffled by this | negative | neutral | 15.11 |
|
| 192 |
+
| Such bafflement | negative | positive | 14.67 |
|
| 193 |
+
| I feel baffled | negative | neutral | 16.76 |
|
| 194 |
+
| I'm totally baffled | negative | neutral | 14.89 |
|
| 195 |
+
| Sorrow in my heart | negative | positive | 15.52 |
|
| 196 |
+
| Melancholy sets in | negative | neutral | 22.26 |
|
| 197 |
+
|
| 198 |
+
---
|
| 199 |
+
|
| 200 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_multi-v1_2025-12-01_18-38-15.md
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:38:15
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 464
|
| 11 |
+
- **Overall Accuracy:** 91.0%
|
| 12 |
+
- **Average Inference Time:** 18.24 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| excitement | 100.0% | 5 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| calm | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 28 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| shock | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| thinking | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| fury | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| silly | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| sympathy | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| pessimism | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| longing | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| yearning | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| happiness | 85.7% | 7 | ✅ PASS |
|
| 80 |
+
| ecstasy | 80.0% | 5 | ✅ PASS |
|
| 81 |
+
| elation | 80.0% | 5 | ✅ PASS |
|
| 82 |
+
| euphoria | 80.0% | 5 | ✅ PASS |
|
| 83 |
+
| serenity | 80.0% | 5 | ✅ PASS |
|
| 84 |
+
| adoration | 80.0% | 5 | ✅ PASS |
|
| 85 |
+
| interest | 80.0% | 5 | ✅ PASS |
|
| 86 |
+
| fascination | 80.0% | 5 | ✅ PASS |
|
| 87 |
+
| intrigue | 80.0% | 5 | ✅ PASS |
|
| 88 |
+
| astonishment | 80.0% | 5 | ✅ PASS |
|
| 89 |
+
| neutral | 80.0% | 5 | ✅ PASS |
|
| 90 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 91 |
+
| confused | 80.0% | 5 | ✅ PASS |
|
| 92 |
+
| puzzled | 80.0% | 5 | ✅ PASS |
|
| 93 |
+
| perplexed | 80.0% | 5 | ✅ PASS |
|
| 94 |
+
| bewildered | 80.0% | 5 | ✅ PASS |
|
| 95 |
+
| baffled | 80.0% | 5 | ✅ PASS |
|
| 96 |
+
| sorrow | 80.0% | 5 | ✅ PASS |
|
| 97 |
+
| melancholy | 80.0% | 5 | ✅ PASS |
|
| 98 |
+
| despair | 80.0% | 5 | ✅ PASS |
|
| 99 |
+
| misery | 80.0% | 5 | ✅ PASS |
|
| 100 |
+
| apprehension | 80.0% | 5 | ✅ PASS |
|
| 101 |
+
| rage | 80.0% | 5 | ✅ PASS |
|
| 102 |
+
| annoyance | 80.0% | 5 | ✅ PASS |
|
| 103 |
+
| resentment | 80.0% | 5 | ✅ PASS |
|
| 104 |
+
| bitterness | 80.0% | 5 | ✅ PASS |
|
| 105 |
+
| revulsion | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| scorn | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| humiliation | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| exhaustion | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| fatigue | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| weariness | 80.0% | 5 | ✅ PASS |
|
| 111 |
+
| envy | 80.0% | 5 | ✅ PASS |
|
| 112 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 113 |
+
| optimism | 80.0% | 5 | ✅ PASS |
|
| 114 |
+
| amusement | 71.4% | 7 | ✅ PASS |
|
| 115 |
+
| contentment | 66.7% | 6 | ✅ PASS |
|
| 116 |
+
| confidence | 60.0% | 5 | ✅ PASS |
|
| 117 |
+
| curiosity | 60.0% | 5 | ✅ PASS |
|
| 118 |
+
| empathy | 40.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 12.85 ms |
|
| 125 |
+
| Max Inference Time | 67.64 ms |
|
| 126 |
+
| Avg Inference Time | 18.24 ms |
|
| 127 |
+
| Median Inference Time | 17.24 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| positive | neutral | 16 |
|
| 136 |
+
| negative | neutral | 15 |
|
| 137 |
+
| positive | negative | 7 |
|
| 138 |
+
| negative | positive | 7 |
|
| 139 |
+
| neutral | negative | 1 |
|
| 140 |
+
|
| 141 |
+
## Detailed Test Results
|
| 142 |
+
|
| 143 |
+
### Failed Tests
|
| 144 |
+
|
| 145 |
+
| Text | Expected | Detected | Time (ms) |
|
| 146 |
+
|------|----------|----------|-----------|
|
| 147 |
+
| Happiness is all around | positive | negative | 17.72 |
|
| 148 |
+
| This is pure ecstasy | positive | neutral | 23.31 |
|
| 149 |
+
| Elation washes over me | positive | negative | 23.74 |
|
| 150 |
+
| Euphoria takes over | positive | neutral | 17.75 |
|
| 151 |
+
| Such contentment | positive | negative | 17.30 |
|
| 152 |
+
| I'm fine | positive | neutral | 20.02 |
|
| 153 |
+
| Serenity now | positive | neutral | 16.24 |
|
| 154 |
+
| Confidence is high | positive | neutral | 15.91 |
|
| 155 |
+
| Such confidence | positive | neutral | 16.37 |
|
| 156 |
+
| Such adoration | positive | neutral | 19.22 |
|
| 157 |
+
| Such empathy | positive | neutral | 17.06 |
|
| 158 |
+
| Empathy is important | positive | neutral | 17.78 |
|
| 159 |
+
| Showing empathy | positive | neutral | 17.01 |
|
| 160 |
+
| Such curiosity | positive | neutral | 17.35 |
|
| 161 |
+
| Curiosity got me | positive | neutral | 17.26 |
|
| 162 |
+
| Such interest | positive | neutral | 16.75 |
|
| 163 |
+
| Such fascination | positive | neutral | 19.94 |
|
| 164 |
+
| Such intrigue | positive | negative | 21.02 |
|
| 165 |
+
| Astonishing! | positive | negative | 19.73 |
|
| 166 |
+
| I don't have strong feelings | neutral | negative | 21.28 |
|
| 167 |
+
| I'm not sure about this | negative | neutral | 21.20 |
|
| 168 |
+
| Confusion everywhere | negative | neutral | 15.80 |
|
| 169 |
+
| Such a puzzle | negative | positive | 18.39 |
|
| 170 |
+
| Such perplexity | negative | positive | 16.71 |
|
| 171 |
+
| Bewildering! | negative | neutral | 44.46 |
|
| 172 |
+
| Such bafflement | negative | positive | 21.18 |
|
| 173 |
+
| Sorrow in my heart | negative | positive | 19.23 |
|
| 174 |
+
| Melancholy sets in | negative | neutral | 18.03 |
|
| 175 |
+
| Despair takes over | negative | neutral | 16.49 |
|
| 176 |
+
| Misery everywhere | negative | positive | 18.82 |
|
| 177 |
+
| Apprehension sets in | negative | neutral | 18.14 |
|
| 178 |
+
| Rage takes over | negative | neutral | 19.00 |
|
| 179 |
+
| Annoying! | negative | positive | 20.05 |
|
| 180 |
+
| Resentment builds | negative | neutral | 18.93 |
|
| 181 |
+
| Bitterness takes over | negative | neutral | 16.98 |
|
| 182 |
+
| Revolting! | negative | neutral | 15.44 |
|
| 183 |
+
| Scorn for this | negative | neutral | 14.64 |
|
| 184 |
+
| Humiliating! | negative | positive | 18.22 |
|
| 185 |
+
| Such exhaustion | negative | neutral | 14.29 |
|
| 186 |
+
| Fatigue sets in | negative | neutral | 14.80 |
|
| 187 |
+
| Weariness takes over | negative | neutral | 16.69 |
|
| 188 |
+
| Envy takes over | negative | neutral | 16.16 |
|
| 189 |
+
| Such mischief | positive | negative | 15.30 |
|
| 190 |
+
| I'm amused | positive | neutral | 13.81 |
|
| 191 |
+
| Amusing! | positive | negative | 15.37 |
|
| 192 |
+
| Optimism takes over | positive | neutral | 14.90 |
|
| 193 |
+
|
| 194 |
+
---
|
| 195 |
+
|
| 196 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_multi-v1_2025-12-01_18-39-42.md
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:39:42
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 464
|
| 11 |
+
- **Overall Accuracy:** 91.0%
|
| 12 |
+
- **Average Inference Time:** 14.05 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| excitement | 100.0% | 5 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| calm | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 28 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| shock | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| thinking | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| fury | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| silly | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| sympathy | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| pessimism | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| longing | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| yearning | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| happiness | 85.7% | 7 | ✅ PASS |
|
| 80 |
+
| ecstasy | 80.0% | 5 | ✅ PASS |
|
| 81 |
+
| elation | 80.0% | 5 | ✅ PASS |
|
| 82 |
+
| euphoria | 80.0% | 5 | ✅ PASS |
|
| 83 |
+
| serenity | 80.0% | 5 | ✅ PASS |
|
| 84 |
+
| adoration | 80.0% | 5 | ✅ PASS |
|
| 85 |
+
| interest | 80.0% | 5 | ✅ PASS |
|
| 86 |
+
| fascination | 80.0% | 5 | ✅ PASS |
|
| 87 |
+
| intrigue | 80.0% | 5 | ✅ PASS |
|
| 88 |
+
| astonishment | 80.0% | 5 | ✅ PASS |
|
| 89 |
+
| neutral | 80.0% | 5 | ✅ PASS |
|
| 90 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 91 |
+
| confused | 80.0% | 5 | ✅ PASS |
|
| 92 |
+
| puzzled | 80.0% | 5 | ✅ PASS |
|
| 93 |
+
| perplexed | 80.0% | 5 | ✅ PASS |
|
| 94 |
+
| bewildered | 80.0% | 5 | ✅ PASS |
|
| 95 |
+
| baffled | 80.0% | 5 | ✅ PASS |
|
| 96 |
+
| sorrow | 80.0% | 5 | ✅ PASS |
|
| 97 |
+
| melancholy | 80.0% | 5 | ✅ PASS |
|
| 98 |
+
| despair | 80.0% | 5 | ✅ PASS |
|
| 99 |
+
| misery | 80.0% | 5 | ✅ PASS |
|
| 100 |
+
| apprehension | 80.0% | 5 | ✅ PASS |
|
| 101 |
+
| rage | 80.0% | 5 | ✅ PASS |
|
| 102 |
+
| annoyance | 80.0% | 5 | ✅ PASS |
|
| 103 |
+
| resentment | 80.0% | 5 | ✅ PASS |
|
| 104 |
+
| bitterness | 80.0% | 5 | ✅ PASS |
|
| 105 |
+
| revulsion | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| scorn | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| humiliation | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| exhaustion | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| fatigue | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| weariness | 80.0% | 5 | ✅ PASS |
|
| 111 |
+
| envy | 80.0% | 5 | ✅ PASS |
|
| 112 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 113 |
+
| optimism | 80.0% | 5 | ✅ PASS |
|
| 114 |
+
| amusement | 71.4% | 7 | ✅ PASS |
|
| 115 |
+
| contentment | 66.7% | 6 | ✅ PASS |
|
| 116 |
+
| confidence | 60.0% | 5 | ✅ PASS |
|
| 117 |
+
| curiosity | 60.0% | 5 | ✅ PASS |
|
| 118 |
+
| empathy | 40.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 10.04 ms |
|
| 125 |
+
| Max Inference Time | 50.15 ms |
|
| 126 |
+
| Avg Inference Time | 14.05 ms |
|
| 127 |
+
| Median Inference Time | 13.68 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| positive | neutral | 16 |
|
| 136 |
+
| negative | neutral | 15 |
|
| 137 |
+
| positive | negative | 7 |
|
| 138 |
+
| negative | positive | 7 |
|
| 139 |
+
| neutral | negative | 1 |
|
| 140 |
+
|
| 141 |
+
## Detailed Test Results
|
| 142 |
+
|
| 143 |
+
### Failed Tests
|
| 144 |
+
|
| 145 |
+
| Text | Expected | Detected | Time (ms) |
|
| 146 |
+
|------|----------|----------|-----------|
|
| 147 |
+
| Happiness is all around | positive | negative | 14.32 |
|
| 148 |
+
| This is pure ecstasy | positive | neutral | 13.59 |
|
| 149 |
+
| Elation washes over me | positive | negative | 15.33 |
|
| 150 |
+
| Euphoria takes over | positive | neutral | 13.75 |
|
| 151 |
+
| Such contentment | positive | negative | 18.84 |
|
| 152 |
+
| I'm fine | positive | neutral | 15.40 |
|
| 153 |
+
| Serenity now | positive | neutral | 12.71 |
|
| 154 |
+
| Confidence is high | positive | neutral | 13.70 |
|
| 155 |
+
| Such confidence | positive | neutral | 14.24 |
|
| 156 |
+
| Such adoration | positive | neutral | 14.03 |
|
| 157 |
+
| Such empathy | positive | neutral | 13.73 |
|
| 158 |
+
| Empathy is important | positive | neutral | 15.63 |
|
| 159 |
+
| Showing empathy | positive | neutral | 15.22 |
|
| 160 |
+
| Such curiosity | positive | neutral | 13.19 |
|
| 161 |
+
| Curiosity got me | positive | neutral | 11.40 |
|
| 162 |
+
| Such interest | positive | neutral | 11.40 |
|
| 163 |
+
| Such fascination | positive | neutral | 13.01 |
|
| 164 |
+
| Such intrigue | positive | negative | 11.13 |
|
| 165 |
+
| Astonishing! | positive | negative | 12.79 |
|
| 166 |
+
| I don't have strong feelings | neutral | negative | 15.74 |
|
| 167 |
+
| I'm not sure about this | negative | neutral | 15.14 |
|
| 168 |
+
| Confusion everywhere | negative | neutral | 13.21 |
|
| 169 |
+
| Such a puzzle | negative | positive | 15.05 |
|
| 170 |
+
| Such perplexity | negative | positive | 13.23 |
|
| 171 |
+
| Bewildering! | negative | neutral | 12.41 |
|
| 172 |
+
| Such bafflement | negative | positive | 12.99 |
|
| 173 |
+
| Sorrow in my heart | negative | positive | 13.42 |
|
| 174 |
+
| Melancholy sets in | negative | neutral | 13.95 |
|
| 175 |
+
| Despair takes over | negative | neutral | 12.93 |
|
| 176 |
+
| Misery everywhere | negative | positive | 13.13 |
|
| 177 |
+
| Apprehension sets in | negative | neutral | 14.16 |
|
| 178 |
+
| Rage takes over | negative | neutral | 14.10 |
|
| 179 |
+
| Annoying! | negative | positive | 13.78 |
|
| 180 |
+
| Resentment builds | negative | neutral | 12.65 |
|
| 181 |
+
| Bitterness takes over | negative | neutral | 14.05 |
|
| 182 |
+
| Revolting! | negative | neutral | 13.92 |
|
| 183 |
+
| Scorn for this | negative | neutral | 13.53 |
|
| 184 |
+
| Humiliating! | negative | positive | 12.97 |
|
| 185 |
+
| Such exhaustion | negative | neutral | 12.81 |
|
| 186 |
+
| Fatigue sets in | negative | neutral | 14.15 |
|
| 187 |
+
| Weariness takes over | negative | neutral | 14.66 |
|
| 188 |
+
| Envy takes over | negative | neutral | 13.16 |
|
| 189 |
+
| Such mischief | positive | negative | 13.16 |
|
| 190 |
+
| I'm amused | positive | neutral | 12.86 |
|
| 191 |
+
| Amusing! | positive | negative | 12.22 |
|
| 192 |
+
| Optimism takes over | positive | neutral | 14.27 |
|
| 193 |
+
|
| 194 |
+
---
|
| 195 |
+
|
| 196 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_multi-v1_2025-12-01_18-44-50.md
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:44:50
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 464
|
| 11 |
+
- **Overall Accuracy:** 91.0%
|
| 12 |
+
- **Average Inference Time:** 14.32 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| excitement | 100.0% | 5 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| calm | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 28 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| shock | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| thinking | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| fury | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| silly | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| sympathy | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| pessimism | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| longing | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| yearning | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| happiness | 85.7% | 7 | ✅ PASS |
|
| 80 |
+
| ecstasy | 80.0% | 5 | ✅ PASS |
|
| 81 |
+
| elation | 80.0% | 5 | ✅ PASS |
|
| 82 |
+
| euphoria | 80.0% | 5 | ✅ PASS |
|
| 83 |
+
| serenity | 80.0% | 5 | ✅ PASS |
|
| 84 |
+
| adoration | 80.0% | 5 | ✅ PASS |
|
| 85 |
+
| interest | 80.0% | 5 | ✅ PASS |
|
| 86 |
+
| fascination | 80.0% | 5 | ✅ PASS |
|
| 87 |
+
| intrigue | 80.0% | 5 | ✅ PASS |
|
| 88 |
+
| astonishment | 80.0% | 5 | ✅ PASS |
|
| 89 |
+
| neutral | 80.0% | 5 | ✅ PASS |
|
| 90 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 91 |
+
| confused | 80.0% | 5 | ✅ PASS |
|
| 92 |
+
| puzzled | 80.0% | 5 | ✅ PASS |
|
| 93 |
+
| perplexed | 80.0% | 5 | ✅ PASS |
|
| 94 |
+
| bewildered | 80.0% | 5 | ✅ PASS |
|
| 95 |
+
| baffled | 80.0% | 5 | ✅ PASS |
|
| 96 |
+
| sorrow | 80.0% | 5 | ✅ PASS |
|
| 97 |
+
| melancholy | 80.0% | 5 | ✅ PASS |
|
| 98 |
+
| despair | 80.0% | 5 | ✅ PASS |
|
| 99 |
+
| misery | 80.0% | 5 | ✅ PASS |
|
| 100 |
+
| apprehension | 80.0% | 5 | ✅ PASS |
|
| 101 |
+
| rage | 80.0% | 5 | ✅ PASS |
|
| 102 |
+
| annoyance | 80.0% | 5 | ✅ PASS |
|
| 103 |
+
| resentment | 80.0% | 5 | ✅ PASS |
|
| 104 |
+
| bitterness | 80.0% | 5 | ✅ PASS |
|
| 105 |
+
| revulsion | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| scorn | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| humiliation | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| exhaustion | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| fatigue | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| weariness | 80.0% | 5 | ✅ PASS |
|
| 111 |
+
| envy | 80.0% | 5 | ✅ PASS |
|
| 112 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 113 |
+
| optimism | 80.0% | 5 | ✅ PASS |
|
| 114 |
+
| amusement | 71.4% | 7 | ✅ PASS |
|
| 115 |
+
| contentment | 66.7% | 6 | ✅ PASS |
|
| 116 |
+
| confidence | 60.0% | 5 | ✅ PASS |
|
| 117 |
+
| curiosity | 60.0% | 5 | ✅ PASS |
|
| 118 |
+
| empathy | 40.0% | 5 | ❌ FAIL |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 11.54 ms |
|
| 125 |
+
| Max Inference Time | 36.20 ms |
|
| 126 |
+
| Avg Inference Time | 14.32 ms |
|
| 127 |
+
| Median Inference Time | 14.12 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| positive | neutral | 16 |
|
| 136 |
+
| negative | neutral | 15 |
|
| 137 |
+
| positive | negative | 7 |
|
| 138 |
+
| negative | positive | 7 |
|
| 139 |
+
| neutral | negative | 1 |
|
| 140 |
+
|
| 141 |
+
## Detailed Test Results
|
| 142 |
+
|
| 143 |
+
### Failed Tests
|
| 144 |
+
|
| 145 |
+
| Text | Expected | Detected | Time (ms) |
|
| 146 |
+
|------|----------|----------|-----------|
|
| 147 |
+
| Happiness is all around | positive | negative | 15.97 |
|
| 148 |
+
| This is pure ecstasy | positive | neutral | 14.32 |
|
| 149 |
+
| Elation washes over me | positive | negative | 14.81 |
|
| 150 |
+
| Euphoria takes over | positive | neutral | 14.73 |
|
| 151 |
+
| Such contentment | positive | negative | 14.60 |
|
| 152 |
+
| I'm fine | positive | neutral | 14.34 |
|
| 153 |
+
| Serenity now | positive | neutral | 14.08 |
|
| 154 |
+
| Confidence is high | positive | neutral | 12.28 |
|
| 155 |
+
| Such confidence | positive | neutral | 12.24 |
|
| 156 |
+
| Such adoration | positive | neutral | 14.63 |
|
| 157 |
+
| Such empathy | positive | neutral | 12.74 |
|
| 158 |
+
| Empathy is important | positive | neutral | 14.83 |
|
| 159 |
+
| Showing empathy | positive | neutral | 13.35 |
|
| 160 |
+
| Such curiosity | positive | neutral | 13.61 |
|
| 161 |
+
| Curiosity got me | positive | neutral | 12.75 |
|
| 162 |
+
| Such interest | positive | neutral | 23.67 |
|
| 163 |
+
| Such fascination | positive | neutral | 13.68 |
|
| 164 |
+
| Such intrigue | positive | negative | 15.83 |
|
| 165 |
+
| Astonishing! | positive | negative | 16.18 |
|
| 166 |
+
| I don't have strong feelings | neutral | negative | 16.66 |
|
| 167 |
+
| I'm not sure about this | negative | neutral | 18.33 |
|
| 168 |
+
| Confusion everywhere | negative | neutral | 15.06 |
|
| 169 |
+
| Such a puzzle | negative | positive | 13.79 |
|
| 170 |
+
| Such perplexity | negative | positive | 15.07 |
|
| 171 |
+
| Bewildering! | negative | neutral | 14.12 |
|
| 172 |
+
| Such bafflement | negative | positive | 14.70 |
|
| 173 |
+
| Sorrow in my heart | negative | positive | 14.74 |
|
| 174 |
+
| Melancholy sets in | negative | neutral | 14.88 |
|
| 175 |
+
| Despair takes over | negative | neutral | 13.35 |
|
| 176 |
+
| Misery everywhere | negative | positive | 15.49 |
|
| 177 |
+
| Apprehension sets in | negative | neutral | 14.47 |
|
| 178 |
+
| Rage takes over | negative | neutral | 13.50 |
|
| 179 |
+
| Annoying! | negative | positive | 14.65 |
|
| 180 |
+
| Resentment builds | negative | neutral | 13.37 |
|
| 181 |
+
| Bitterness takes over | negative | neutral | 13.54 |
|
| 182 |
+
| Revolting! | negative | neutral | 13.99 |
|
| 183 |
+
| Scorn for this | negative | neutral | 14.32 |
|
| 184 |
+
| Humiliating! | negative | positive | 13.58 |
|
| 185 |
+
| Such exhaustion | negative | neutral | 13.85 |
|
| 186 |
+
| Fatigue sets in | negative | neutral | 13.72 |
|
| 187 |
+
| Weariness takes over | negative | neutral | 15.52 |
|
| 188 |
+
| Envy takes over | negative | neutral | 12.77 |
|
| 189 |
+
| Such mischief | positive | negative | 13.17 |
|
| 190 |
+
| I'm amused | positive | neutral | 13.78 |
|
| 191 |
+
| Amusing! | positive | negative | 13.00 |
|
| 192 |
+
| Optimism takes over | positive | neutral | 14.88 |
|
| 193 |
+
|
| 194 |
+
---
|
| 195 |
+
|
| 196 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_multi-v1_2025-12-01_18-46-46.md
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:46:46
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 510
|
| 10 |
+
- **Correct Predictions:** 467
|
| 11 |
+
- **Overall Accuracy:** 91.6%
|
| 12 |
+
- **Average Inference Time:** 14.54 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| joy | 100.0% | 5 | ✅ PASS |
|
| 19 |
+
| excitement | 100.0% | 5 | ✅ PASS |
|
| 20 |
+
| enthusiasm | 100.0% | 5 | ✅ PASS |
|
| 21 |
+
| thrill | 100.0% | 5 | ✅ PASS |
|
| 22 |
+
| delight | 100.0% | 5 | ✅ PASS |
|
| 23 |
+
| cheerfulness | 100.0% | 5 | ✅ PASS |
|
| 24 |
+
| satisfaction | 100.0% | 5 | ✅ PASS |
|
| 25 |
+
| calm | 100.0% | 5 | ✅ PASS |
|
| 26 |
+
| relaxed | 100.0% | 5 | ✅ PASS |
|
| 27 |
+
| relief | 100.0% | 5 | ✅ PASS |
|
| 28 |
+
| pride | 100.0% | 5 | ✅ PASS |
|
| 29 |
+
| pleasure | 100.0% | 5 | ✅ PASS |
|
| 30 |
+
| love | 100.0% | 5 | ✅ PASS |
|
| 31 |
+
| affection | 100.0% | 5 | ✅ PASS |
|
| 32 |
+
| tenderness | 100.0% | 5 | ✅ PASS |
|
| 33 |
+
| caring | 100.0% | 5 | ✅ PASS |
|
| 34 |
+
| compassion | 100.0% | 5 | ✅ PASS |
|
| 35 |
+
| empathy | 100.0% | 5 | ✅ PASS |
|
| 36 |
+
| gratitude | 100.0% | 5 | ✅ PASS |
|
| 37 |
+
| wonder | 100.0% | 5 | ✅ PASS |
|
| 38 |
+
| awe | 100.0% | 5 | ✅ PASS |
|
| 39 |
+
| amazement | 100.0% | 5 | ✅ PASS |
|
| 40 |
+
| surprise | 100.0% | 5 | ✅ PASS |
|
| 41 |
+
| shock | 100.0% | 5 | ✅ PASS |
|
| 42 |
+
| thinking | 100.0% | 5 | ✅ PASS |
|
| 43 |
+
| sadness | 100.0% | 5 | ✅ PASS |
|
| 44 |
+
| grief | 100.0% | 5 | ✅ PASS |
|
| 45 |
+
| disappointment | 100.0% | 5 | ✅ PASS |
|
| 46 |
+
| loneliness | 100.0% | 5 | ✅ PASS |
|
| 47 |
+
| hurt | 100.0% | 5 | ✅ PASS |
|
| 48 |
+
| fear | 100.0% | 5 | ✅ PASS |
|
| 49 |
+
| terror | 100.0% | 5 | ✅ PASS |
|
| 50 |
+
| horror | 100.0% | 5 | ✅ PASS |
|
| 51 |
+
| dread | 100.0% | 5 | ✅ PASS |
|
| 52 |
+
| anxiety | 100.0% | 5 | ✅ PASS |
|
| 53 |
+
| worry | 100.0% | 5 | ✅ PASS |
|
| 54 |
+
| nervousness | 100.0% | 5 | ✅ PASS |
|
| 55 |
+
| panic | 100.0% | 5 | ✅ PASS |
|
| 56 |
+
| anger | 100.0% | 5 | ✅ PASS |
|
| 57 |
+
| fury | 100.0% | 5 | ✅ PASS |
|
| 58 |
+
| irritation | 100.0% | 5 | ✅ PASS |
|
| 59 |
+
| frustration | 100.0% | 5 | ✅ PASS |
|
| 60 |
+
| hostility | 100.0% | 5 | ✅ PASS |
|
| 61 |
+
| disgust | 100.0% | 5 | ✅ PASS |
|
| 62 |
+
| contempt | 100.0% | 5 | ✅ PASS |
|
| 63 |
+
| disdain | 100.0% | 5 | ✅ PASS |
|
| 64 |
+
| shame | 100.0% | 5 | ✅ PASS |
|
| 65 |
+
| embarrassment | 100.0% | 5 | ✅ PASS |
|
| 66 |
+
| guilt | 100.0% | 5 | ✅ PASS |
|
| 67 |
+
| regret | 100.0% | 5 | ✅ PASS |
|
| 68 |
+
| remorse | 100.0% | 5 | ✅ PASS |
|
| 69 |
+
| boredom | 100.0% | 5 | ✅ PASS |
|
| 70 |
+
| tiredness | 100.0% | 5 | ✅ PASS |
|
| 71 |
+
| jealousy | 100.0% | 5 | ✅ PASS |
|
| 72 |
+
| playful | 100.0% | 5 | ✅ PASS |
|
| 73 |
+
| silly | 100.0% | 5 | ✅ PASS |
|
| 74 |
+
| sympathy | 100.0% | 5 | ✅ PASS |
|
| 75 |
+
| nostalgia | 100.0% | 5 | ✅ PASS |
|
| 76 |
+
| hope | 100.0% | 5 | ✅ PASS |
|
| 77 |
+
| pessimism | 100.0% | 5 | ✅ PASS |
|
| 78 |
+
| longing | 100.0% | 5 | ✅ PASS |
|
| 79 |
+
| yearning | 100.0% | 5 | ✅ PASS |
|
| 80 |
+
| happiness | 85.7% | 7 | ✅ PASS |
|
| 81 |
+
| ecstasy | 80.0% | 5 | ✅ PASS |
|
| 82 |
+
| elation | 80.0% | 5 | ✅ PASS |
|
| 83 |
+
| euphoria | 80.0% | 5 | ✅ PASS |
|
| 84 |
+
| serenity | 80.0% | 5 | ✅ PASS |
|
| 85 |
+
| adoration | 80.0% | 5 | ✅ PASS |
|
| 86 |
+
| interest | 80.0% | 5 | ✅ PASS |
|
| 87 |
+
| fascination | 80.0% | 5 | ✅ PASS |
|
| 88 |
+
| intrigue | 80.0% | 5 | ✅ PASS |
|
| 89 |
+
| astonishment | 80.0% | 5 | ✅ PASS |
|
| 90 |
+
| neutral | 80.0% | 5 | ✅ PASS |
|
| 91 |
+
| uncertain | 80.0% | 5 | ✅ PASS |
|
| 92 |
+
| confused | 80.0% | 5 | ✅ PASS |
|
| 93 |
+
| puzzled | 80.0% | 5 | ✅ PASS |
|
| 94 |
+
| perplexed | 80.0% | 5 | ✅ PASS |
|
| 95 |
+
| bewildered | 80.0% | 5 | ✅ PASS |
|
| 96 |
+
| baffled | 80.0% | 5 | ✅ PASS |
|
| 97 |
+
| sorrow | 80.0% | 5 | ✅ PASS |
|
| 98 |
+
| melancholy | 80.0% | 5 | ✅ PASS |
|
| 99 |
+
| despair | 80.0% | 5 | ✅ PASS |
|
| 100 |
+
| misery | 80.0% | 5 | ✅ PASS |
|
| 101 |
+
| apprehension | 80.0% | 5 | ✅ PASS |
|
| 102 |
+
| rage | 80.0% | 5 | ✅ PASS |
|
| 103 |
+
| annoyance | 80.0% | 5 | ✅ PASS |
|
| 104 |
+
| resentment | 80.0% | 5 | ✅ PASS |
|
| 105 |
+
| bitterness | 80.0% | 5 | ✅ PASS |
|
| 106 |
+
| revulsion | 80.0% | 5 | ✅ PASS |
|
| 107 |
+
| scorn | 80.0% | 5 | ✅ PASS |
|
| 108 |
+
| humiliation | 80.0% | 5 | ✅ PASS |
|
| 109 |
+
| exhaustion | 80.0% | 5 | ✅ PASS |
|
| 110 |
+
| fatigue | 80.0% | 5 | ✅ PASS |
|
| 111 |
+
| weariness | 80.0% | 5 | ✅ PASS |
|
| 112 |
+
| envy | 80.0% | 5 | ✅ PASS |
|
| 113 |
+
| mischievous | 80.0% | 5 | ✅ PASS |
|
| 114 |
+
| optimism | 80.0% | 5 | ✅ PASS |
|
| 115 |
+
| amusement | 71.4% | 7 | ✅ PASS |
|
| 116 |
+
| contentment | 66.7% | 6 | ✅ PASS |
|
| 117 |
+
| confidence | 60.0% | 5 | ✅ PASS |
|
| 118 |
+
| curiosity | 60.0% | 5 | ✅ PASS |
|
| 119 |
+
|
| 120 |
+
## Performance Metrics
|
| 121 |
+
|
| 122 |
+
| Metric | Value |
|
| 123 |
+
|--------|-------|
|
| 124 |
+
| Min Inference Time | 11.31 ms |
|
| 125 |
+
| Max Inference Time | 47.45 ms |
|
| 126 |
+
| Avg Inference Time | 14.54 ms |
|
| 127 |
+
| Median Inference Time | 14.24 ms |
|
| 128 |
+
|
| 129 |
+
## Confusion Analysis
|
| 130 |
+
|
| 131 |
+
### Most Common Misclassifications
|
| 132 |
+
|
| 133 |
+
| Expected | Predicted | Count |
|
| 134 |
+
|----------|-----------|-------|
|
| 135 |
+
| negative | neutral | 15 |
|
| 136 |
+
| positive | neutral | 13 |
|
| 137 |
+
| positive | negative | 7 |
|
| 138 |
+
| negative | positive | 7 |
|
| 139 |
+
| neutral | negative | 1 |
|
| 140 |
+
|
| 141 |
+
## Detailed Test Results
|
| 142 |
+
|
| 143 |
+
### Failed Tests
|
| 144 |
+
|
| 145 |
+
| Text | Expected | Detected | Time (ms) |
|
| 146 |
+
|------|----------|----------|-----------|
|
| 147 |
+
| Happiness is all around | positive | negative | 16.07 |
|
| 148 |
+
| This is pure ecstasy | positive | neutral | 13.64 |
|
| 149 |
+
| Elation washes over me | positive | negative | 17.46 |
|
| 150 |
+
| Euphoria takes over | positive | neutral | 14.44 |
|
| 151 |
+
| Such contentment | positive | negative | 15.66 |
|
| 152 |
+
| I'm fine | positive | neutral | 15.06 |
|
| 153 |
+
| Serenity now | positive | neutral | 13.73 |
|
| 154 |
+
| Confidence is high | positive | neutral | 15.70 |
|
| 155 |
+
| Such confidence | positive | neutral | 13.36 |
|
| 156 |
+
| Such adoration | positive | neutral | 14.53 |
|
| 157 |
+
| Such curiosity | positive | neutral | 13.29 |
|
| 158 |
+
| Curiosity got me | positive | neutral | 14.80 |
|
| 159 |
+
| Such interest | positive | neutral | 13.27 |
|
| 160 |
+
| Such fascination | positive | neutral | 13.73 |
|
| 161 |
+
| Such intrigue | positive | negative | 14.07 |
|
| 162 |
+
| Astonishing! | positive | negative | 17.27 |
|
| 163 |
+
| I don't have strong feelings | neutral | negative | 15.36 |
|
| 164 |
+
| I'm not sure about this | negative | neutral | 15.00 |
|
| 165 |
+
| Confusion everywhere | negative | neutral | 13.04 |
|
| 166 |
+
| Such a puzzle | negative | positive | 13.25 |
|
| 167 |
+
| Such perplexity | negative | positive | 14.55 |
|
| 168 |
+
| Bewildering! | negative | neutral | 12.22 |
|
| 169 |
+
| Such bafflement | negative | positive | 14.88 |
|
| 170 |
+
| Sorrow in my heart | negative | positive | 14.02 |
|
| 171 |
+
| Melancholy sets in | negative | neutral | 14.32 |
|
| 172 |
+
| Despair takes over | negative | neutral | 14.97 |
|
| 173 |
+
| Misery everywhere | negative | positive | 12.28 |
|
| 174 |
+
| Apprehension sets in | negative | neutral | 14.48 |
|
| 175 |
+
| Rage takes over | negative | neutral | 14.53 |
|
| 176 |
+
| Annoying! | negative | positive | 14.13 |
|
| 177 |
+
| Resentment builds | negative | neutral | 12.82 |
|
| 178 |
+
| Bitterness takes over | negative | neutral | 13.11 |
|
| 179 |
+
| Revolting! | negative | neutral | 15.04 |
|
| 180 |
+
| Scorn for this | negative | neutral | 13.75 |
|
| 181 |
+
| Humiliating! | negative | positive | 15.48 |
|
| 182 |
+
| Such exhaustion | negative | neutral | 11.66 |
|
| 183 |
+
| Fatigue sets in | negative | neutral | 13.31 |
|
| 184 |
+
| Weariness takes over | negative | neutral | 16.25 |
|
| 185 |
+
| Envy takes over | negative | neutral | 15.19 |
|
| 186 |
+
| Such mischief | positive | negative | 14.23 |
|
| 187 |
+
| I'm amused | positive | neutral | 16.35 |
|
| 188 |
+
| Amusing! | positive | negative | 16.67 |
|
| 189 |
+
| Optimism takes over | positive | neutral | 14.11 |
|
| 190 |
+
|
| 191 |
+
---
|
| 192 |
+
|
| 193 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_multi-v2_2025-12-01_18-23-47.md
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:23:47
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 626
|
| 10 |
+
- **Correct Predictions:** 80
|
| 11 |
+
- **Overall Accuracy:** 12.8%
|
| 12 |
+
- **Average Inference Time:** 14.87 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| thinking | 80.0% | 10 | ✅ PASS |
|
| 19 |
+
| disdain | 80.0% | 5 | ✅ PASS |
|
| 20 |
+
| neutral | 76.9% | 13 | ✅ PASS |
|
| 21 |
+
| contempt | 60.0% | 5 | ✅ PASS |
|
| 22 |
+
| scorn | 60.0% | 5 | ✅ PASS |
|
| 23 |
+
| shame | 60.0% | 5 | ✅ PASS |
|
| 24 |
+
| mischievous | 50.0% | 6 | ✅ PASS |
|
| 25 |
+
| despair | 40.0% | 5 | ❌ FAIL |
|
| 26 |
+
| acceptance | 40.0% | 5 | ❌ FAIL |
|
| 27 |
+
| interest | 33.3% | 6 | ❌ FAIL |
|
| 28 |
+
| disappointment | 33.3% | 6 | ❌ FAIL |
|
| 29 |
+
| envy | 33.3% | 6 | ❌ FAIL |
|
| 30 |
+
| compassion | 20.0% | 5 | ❌ FAIL |
|
| 31 |
+
| wonder | 20.0% | 5 | ❌ FAIL |
|
| 32 |
+
| intrigue | 20.0% | 5 | ❌ FAIL |
|
| 33 |
+
| puzzled | 20.0% | 5 | ❌ FAIL |
|
| 34 |
+
| perplexed | 20.0% | 5 | ❌ FAIL |
|
| 35 |
+
| horror | 20.0% | 5 | ❌ FAIL |
|
| 36 |
+
| dread | 20.0% | 5 | ❌ FAIL |
|
| 37 |
+
| panic | 20.0% | 5 | ❌ FAIL |
|
| 38 |
+
| hostility | 20.0% | 5 | ❌ FAIL |
|
| 39 |
+
| revulsion | 20.0% | 5 | ❌ FAIL |
|
| 40 |
+
| guilt | 20.0% | 5 | ❌ FAIL |
|
| 41 |
+
| regret | 20.0% | 5 | ❌ FAIL |
|
| 42 |
+
| remorse | 20.0% | 5 | ❌ FAIL |
|
| 43 |
+
| humiliation | 20.0% | 5 | ❌ FAIL |
|
| 44 |
+
| exhaustion | 20.0% | 5 | ❌ FAIL |
|
| 45 |
+
| fatigue | 20.0% | 5 | ❌ FAIL |
|
| 46 |
+
| weariness | 20.0% | 5 | ❌ FAIL |
|
| 47 |
+
| jealousy | 20.0% | 5 | ❌ FAIL |
|
| 48 |
+
| inspiration | 20.0% | 5 | ❌ FAIL |
|
| 49 |
+
| amusement | 18.2% | 11 | ❌ FAIL |
|
| 50 |
+
| satisfaction | 16.7% | 6 | ❌ FAIL |
|
| 51 |
+
| relaxed | 16.7% | 6 | ❌ FAIL |
|
| 52 |
+
| relief | 16.7% | 6 | ❌ FAIL |
|
| 53 |
+
| empathy | 16.7% | 6 | ❌ FAIL |
|
| 54 |
+
| fury | 16.7% | 6 | ❌ FAIL |
|
| 55 |
+
| boredom | 16.7% | 6 | ❌ FAIL |
|
| 56 |
+
| tiredness | 16.7% | 6 | ❌ FAIL |
|
| 57 |
+
| optimism | 16.7% | 6 | ❌ FAIL |
|
| 58 |
+
| pessimism | 16.7% | 6 | ❌ FAIL |
|
| 59 |
+
| ecstasy | 14.3% | 7 | ❌ FAIL |
|
| 60 |
+
| calm | 14.3% | 7 | ❌ FAIL |
|
| 61 |
+
| uncertain | 14.3% | 7 | ❌ FAIL |
|
| 62 |
+
| playful | 14.3% | 7 | ❌ FAIL |
|
| 63 |
+
| excitement | 12.5% | 8 | ❌ FAIL |
|
| 64 |
+
| happiness | 10.0% | 10 | ❌ FAIL |
|
| 65 |
+
| joy | 0.0% | 7 | ❌ FAIL |
|
| 66 |
+
| elation | 0.0% | 5 | ❌ FAIL |
|
| 67 |
+
| euphoria | 0.0% | 5 | ❌ FAIL |
|
| 68 |
+
| thrill | 0.0% | 5 | ❌ FAIL |
|
| 69 |
+
| delight | 0.0% | 5 | ❌ FAIL |
|
| 70 |
+
| cheerfulness | 0.0% | 5 | ❌ FAIL |
|
| 71 |
+
| enthusiasm | 0.0% | 5 | ❌ FAIL |
|
| 72 |
+
| contentment | 0.0% | 7 | ❌ FAIL |
|
| 73 |
+
| serenity | 0.0% | 5 | ❌ FAIL |
|
| 74 |
+
| pride | 0.0% | 7 | ❌ FAIL |
|
| 75 |
+
| confidence | 0.0% | 6 | ❌ FAIL |
|
| 76 |
+
| pleasure | 0.0% | 5 | ❌ FAIL |
|
| 77 |
+
| love | 0.0% | 7 | ❌ FAIL |
|
| 78 |
+
| adoration | 0.0% | 5 | ❌ FAIL |
|
| 79 |
+
| affection | 0.0% | 6 | ❌ FAIL |
|
| 80 |
+
| tenderness | 0.0% | 5 | ❌ FAIL |
|
| 81 |
+
| caring | 0.0% | 5 | ❌ FAIL |
|
| 82 |
+
| gratitude | 0.0% | 7 | ❌ FAIL |
|
| 83 |
+
| curiosity | 0.0% | 7 | ❌ FAIL |
|
| 84 |
+
| fascination | 0.0% | 5 | ❌ FAIL |
|
| 85 |
+
| awe | 0.0% | 5 | ❌ FAIL |
|
| 86 |
+
| amazement | 0.0% | 5 | ❌ FAIL |
|
| 87 |
+
| surprise | 0.0% | 6 | ❌ FAIL |
|
| 88 |
+
| astonishment | 0.0% | 5 | ❌ FAIL |
|
| 89 |
+
| shock | 0.0% | 6 | ❌ FAIL |
|
| 90 |
+
| confused | 0.0% | 7 | ❌ FAIL |
|
| 91 |
+
| bewildered | 0.0% | 5 | ❌ FAIL |
|
| 92 |
+
| baffled | 0.0% | 5 | ❌ FAIL |
|
| 93 |
+
| sadness | 0.0% | 7 | ❌ FAIL |
|
| 94 |
+
| sorrow | 0.0% | 5 | ❌ FAIL |
|
| 95 |
+
| grief | 0.0% | 6 | ❌ FAIL |
|
| 96 |
+
| melancholy | 0.0% | 5 | ❌ FAIL |
|
| 97 |
+
| loneliness | 0.0% | 6 | ❌ FAIL |
|
| 98 |
+
| hurt | 0.0% | 6 | ❌ FAIL |
|
| 99 |
+
| misery | 0.0% | 5 | ❌ FAIL |
|
| 100 |
+
| fear | 0.0% | 6 | ❌ FAIL |
|
| 101 |
+
| terror | 0.0% | 5 | ❌ FAIL |
|
| 102 |
+
| anxiety | 0.0% | 6 | ❌ FAIL |
|
| 103 |
+
| worry | 0.0% | 5 | ❌ FAIL |
|
| 104 |
+
| nervousness | 0.0% | 5 | ❌ FAIL |
|
| 105 |
+
| apprehension | 0.0% | 5 | ❌ FAIL |
|
| 106 |
+
| anger | 0.0% | 6 | ❌ FAIL |
|
| 107 |
+
| rage | 0.0% | 5 | ❌ FAIL |
|
| 108 |
+
| irritation | 0.0% | 5 | ❌ FAIL |
|
| 109 |
+
| annoyance | 0.0% | 6 | ❌ FAIL |
|
| 110 |
+
| frustration | 0.0% | 6 | ❌ FAIL |
|
| 111 |
+
| resentment | 0.0% | 5 | ❌ FAIL |
|
| 112 |
+
| bitterness | 0.0% | 5 | ❌ FAIL |
|
| 113 |
+
| disgust | 0.0% | 6 | ❌ FAIL |
|
| 114 |
+
| embarrassment | 0.0% | 7 | ❌ FAIL |
|
| 115 |
+
| silly | 0.0% | 8 | ❌ FAIL |
|
| 116 |
+
| sympathy | 0.0% | 8 | ❌ FAIL |
|
| 117 |
+
| nostalgia | 0.0% | 7 | ❌ FAIL |
|
| 118 |
+
| hope | 0.0% | 7 | ❌ FAIL |
|
| 119 |
+
| longing | 0.0% | 7 | ❌ FAIL |
|
| 120 |
+
| yearning | 0.0% | 5 | ❌ FAIL |
|
| 121 |
+
| determination | 0.0% | 5 | ❌ FAIL |
|
| 122 |
+
| anticipation | 0.0% | 5 | ❌ FAIL |
|
| 123 |
+
| trust | 0.0% | 5 | ❌ FAIL |
|
| 124 |
+
| sarcasm | 0.0% | 5 | ❌ FAIL |
|
| 125 |
+
|
| 126 |
+
## Performance Metrics
|
| 127 |
+
|
| 128 |
+
| Metric | Value |
|
| 129 |
+
|--------|-------|
|
| 130 |
+
| Min Inference Time | 10.38 ms |
|
| 131 |
+
| Max Inference Time | 85.07 ms |
|
| 132 |
+
| Avg Inference Time | 14.87 ms |
|
| 133 |
+
| Median Inference Time | 14.24 ms |
|
| 134 |
+
|
| 135 |
+
## Confusion Analysis
|
| 136 |
+
|
| 137 |
+
### Most Common Misclassifications
|
| 138 |
+
|
| 139 |
+
| Expected | Predicted | Count |
|
| 140 |
+
|----------|-----------|-------|
|
| 141 |
+
| negative | neutral | 260 |
|
| 142 |
+
| positive | neutral | 257 |
|
| 143 |
+
| positive | negative | 17 |
|
| 144 |
+
| negative | positive | 7 |
|
| 145 |
+
| neutral | negative | 5 |
|
| 146 |
+
|
| 147 |
+
## Detailed Test Results
|
| 148 |
+
|
| 149 |
+
### Failed Tests
|
| 150 |
+
|
| 151 |
+
| Text | Expected | Detected | Time (ms) |
|
| 152 |
+
|------|----------|----------|-----------|
|
| 153 |
+
| I feel so much joy right now! | positive | neutral | 16.99 |
|
| 154 |
+
| This brings me pure joy | positive | neutral | 16.16 |
|
| 155 |
+
| Joy fills my heart | positive | neutral | 14.48 |
|
| 156 |
+
| What a joyful moment | positive | neutral | 12.62 |
|
| 157 |
+
| I'm full of joy today | positive | neutral | 17.66 |
|
| 158 |
+
| This is the best day ever! | positive | neutral | 17.10 |
|
| 159 |
+
| Everything is going perfectly! | positive | neutral | 12.48 |
|
| 160 |
+
| I am so happy today! | positive | neutral | 15.57 |
|
| 161 |
+
| This makes me really happy | positive | neutral | 13.77 |
|
| 162 |
+
| I feel happy and content | positive | neutral | 15.02 |
|
| 163 |
+
| Happiness is all around | positive | neutral | 14.57 |
|
| 164 |
+
| I'm genuinely happy | positive | neutral | 14.09 |
|
| 165 |
+
| I am good | positive | neutral | 13.71 |
|
| 166 |
+
| I'm doing great | positive | neutral | 13.10 |
|
| 167 |
+
| Life is beautiful | positive | neutral | 13.89 |
|
| 168 |
+
| I'm in a good mood | positive | neutral | 16.74 |
|
| 169 |
+
| I'm so excited about this! | positive | neutral | 17.13 |
|
| 170 |
+
| This is really exciting | positive | neutral | 14.33 |
|
| 171 |
+
| I can't contain my excitement | positive | neutral | 15.18 |
|
| 172 |
+
| How exciting! | positive | neutral | 13.60 |
|
| 173 |
+
| I'm thrilled and excited | positive | neutral | 14.84 |
|
| 174 |
+
| I can't wait! | positive | neutral | 13.64 |
|
| 175 |
+
| I'm pumped up! | positive | neutral | 13.28 |
|
| 176 |
+
| I'm in absolute ecstasy! | positive | neutral | 14.38 |
|
| 177 |
+
| This is pure ecstasy | positive | neutral | 13.08 |
|
| 178 |
+
| I feel ecstatic | positive | neutral | 14.74 |
|
| 179 |
+
| What ecstasy! | positive | neutral | 13.99 |
|
| 180 |
+
| I've never been happier! | positive | negative | 15.97 |
|
| 181 |
+
| This is beyond amazing! | positive | neutral | 14.79 |
|
| 182 |
+
| I'm elated by the results | positive | neutral | 16.48 |
|
| 183 |
+
| Such elation! | positive | neutral | 14.48 |
|
| 184 |
+
| I feel elated | positive | neutral | 13.27 |
|
| 185 |
+
| Elation washes over me | positive | negative | 14.81 |
|
| 186 |
+
| I'm absolutely elated | positive | neutral | 14.70 |
|
| 187 |
+
| I'm in a state of euphoria | positive | neutral | 15.30 |
|
| 188 |
+
| Pure euphoria right now | positive | neutral | 14.67 |
|
| 189 |
+
| This euphoric feeling | positive | neutral | 13.52 |
|
| 190 |
+
| I feel euphoric | positive | neutral | 14.39 |
|
| 191 |
+
| Euphoria takes over | positive | neutral | 14.11 |
|
| 192 |
+
| What a thrill! | positive | neutral | 13.65 |
|
| 193 |
+
| I'm thrilled about this | positive | neutral | 14.69 |
|
| 194 |
+
| This is thrilling | positive | neutral | 13.80 |
|
| 195 |
+
| I feel thrilled | positive | neutral | 13.99 |
|
| 196 |
+
| Such a thrilling experience | positive | neutral | 14.04 |
|
| 197 |
+
| I'm delighted to hear that | positive | neutral | 15.34 |
|
| 198 |
+
| What a delight! | positive | neutral | 14.81 |
|
| 199 |
+
| This is delightful | positive | neutral | 14.13 |
|
| 200 |
+
| I'm absolutely delighted | positive | neutral | 14.61 |
|
| 201 |
+
| Such delight! | positive | neutral | 14.78 |
|
| 202 |
+
| I'm feeling cheerful today | positive | neutral | 15.85 |
|
| 203 |
+
|
| 204 |
+
---
|
| 205 |
+
|
| 206 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|
evaluation/reports/comparison_multi-v2_2025-12-01_18-24-59.md
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Emoji AI Avatar - Sentiment Analysis Evaluation Report
|
| 2 |
+
|
| 3 |
+
**Generated:** 2025-12-01 18:24:59
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## Executive Summary
|
| 8 |
+
|
| 9 |
+
- **Total Emotions Tested:** 626
|
| 10 |
+
- **Correct Predictions:** 80
|
| 11 |
+
- **Overall Accuracy:** 12.8%
|
| 12 |
+
- **Average Inference Time:** 14.40 ms
|
| 13 |
+
|
| 14 |
+
## Accuracy by Emotion
|
| 15 |
+
|
| 16 |
+
| Emotion | Accuracy | Samples | Status |
|
| 17 |
+
|---------|----------|---------|--------|
|
| 18 |
+
| thinking | 80.0% | 10 | ✅ PASS |
|
| 19 |
+
| disdain | 80.0% | 5 | ✅ PASS |
|
| 20 |
+
| neutral | 76.9% | 13 | ✅ PASS |
|
| 21 |
+
| contempt | 60.0% | 5 | ✅ PASS |
|
| 22 |
+
| scorn | 60.0% | 5 | ✅ PASS |
|
| 23 |
+
| shame | 60.0% | 5 | ✅ PASS |
|
| 24 |
+
| mischievous | 50.0% | 6 | ✅ PASS |
|
| 25 |
+
| despair | 40.0% | 5 | ❌ FAIL |
|
| 26 |
+
| acceptance | 40.0% | 5 | ❌ FAIL |
|
| 27 |
+
| interest | 33.3% | 6 | ❌ FAIL |
|
| 28 |
+
| disappointment | 33.3% | 6 | ❌ FAIL |
|
| 29 |
+
| envy | 33.3% | 6 | ❌ FAIL |
|
| 30 |
+
| compassion | 20.0% | 5 | ❌ FAIL |
|
| 31 |
+
| wonder | 20.0% | 5 | ❌ FAIL |
|
| 32 |
+
| intrigue | 20.0% | 5 | ❌ FAIL |
|
| 33 |
+
| puzzled | 20.0% | 5 | ❌ FAIL |
|
| 34 |
+
| perplexed | 20.0% | 5 | ❌ FAIL |
|
| 35 |
+
| horror | 20.0% | 5 | ❌ FAIL |
|
| 36 |
+
| dread | 20.0% | 5 | ❌ FAIL |
|
| 37 |
+
| panic | 20.0% | 5 | ❌ FAIL |
|
| 38 |
+
| hostility | 20.0% | 5 | ❌ FAIL |
|
| 39 |
+
| revulsion | 20.0% | 5 | ❌ FAIL |
|
| 40 |
+
| guilt | 20.0% | 5 | ❌ FAIL |
|
| 41 |
+
| regret | 20.0% | 5 | ❌ FAIL |
|
| 42 |
+
| remorse | 20.0% | 5 | ❌ FAIL |
|
| 43 |
+
| humiliation | 20.0% | 5 | ❌ FAIL |
|
| 44 |
+
| exhaustion | 20.0% | 5 | ❌ FAIL |
|
| 45 |
+
| fatigue | 20.0% | 5 | ❌ FAIL |
|
| 46 |
+
| weariness | 20.0% | 5 | ❌ FAIL |
|
| 47 |
+
| jealousy | 20.0% | 5 | ❌ FAIL |
|
| 48 |
+
| inspiration | 20.0% | 5 | ❌ FAIL |
|
| 49 |
+
| amusement | 18.2% | 11 | ❌ FAIL |
|
| 50 |
+
| satisfaction | 16.7% | 6 | ❌ FAIL |
|
| 51 |
+
| relaxed | 16.7% | 6 | ❌ FAIL |
|
| 52 |
+
| relief | 16.7% | 6 | ❌ FAIL |
|
| 53 |
+
| empathy | 16.7% | 6 | ❌ FAIL |
|
| 54 |
+
| fury | 16.7% | 6 | ❌ FAIL |
|
| 55 |
+
| boredom | 16.7% | 6 | ❌ FAIL |
|
| 56 |
+
| tiredness | 16.7% | 6 | ❌ FAIL |
|
| 57 |
+
| optimism | 16.7% | 6 | ❌ FAIL |
|
| 58 |
+
| pessimism | 16.7% | 6 | ❌ FAIL |
|
| 59 |
+
| ecstasy | 14.3% | 7 | ❌ FAIL |
|
| 60 |
+
| calm | 14.3% | 7 | ❌ FAIL |
|
| 61 |
+
| uncertain | 14.3% | 7 | ❌ FAIL |
|
| 62 |
+
| playful | 14.3% | 7 | ❌ FAIL |
|
| 63 |
+
| excitement | 12.5% | 8 | ❌ FAIL |
|
| 64 |
+
| happiness | 10.0% | 10 | ❌ FAIL |
|
| 65 |
+
| joy | 0.0% | 7 | ❌ FAIL |
|
| 66 |
+
| elation | 0.0% | 5 | ❌ FAIL |
|
| 67 |
+
| euphoria | 0.0% | 5 | ❌ FAIL |
|
| 68 |
+
| thrill | 0.0% | 5 | ❌ FAIL |
|
| 69 |
+
| delight | 0.0% | 5 | ❌ FAIL |
|
| 70 |
+
| cheerfulness | 0.0% | 5 | ❌ FAIL |
|
| 71 |
+
| enthusiasm | 0.0% | 5 | ❌ FAIL |
|
| 72 |
+
| contentment | 0.0% | 7 | ❌ FAIL |
|
| 73 |
+
| serenity | 0.0% | 5 | ❌ FAIL |
|
| 74 |
+
| pride | 0.0% | 7 | ❌ FAIL |
|
| 75 |
+
| confidence | 0.0% | 6 | ❌ FAIL |
|
| 76 |
+
| pleasure | 0.0% | 5 | ❌ FAIL |
|
| 77 |
+
| love | 0.0% | 7 | ❌ FAIL |
|
| 78 |
+
| adoration | 0.0% | 5 | ❌ FAIL |
|
| 79 |
+
| affection | 0.0% | 6 | ❌ FAIL |
|
| 80 |
+
| tenderness | 0.0% | 5 | ❌ FAIL |
|
| 81 |
+
| caring | 0.0% | 5 | ❌ FAIL |
|
| 82 |
+
| gratitude | 0.0% | 7 | ❌ FAIL |
|
| 83 |
+
| curiosity | 0.0% | 7 | ❌ FAIL |
|
| 84 |
+
| fascination | 0.0% | 5 | ❌ FAIL |
|
| 85 |
+
| awe | 0.0% | 5 | ❌ FAIL |
|
| 86 |
+
| amazement | 0.0% | 5 | ❌ FAIL |
|
| 87 |
+
| surprise | 0.0% | 6 | ❌ FAIL |
|
| 88 |
+
| astonishment | 0.0% | 5 | ❌ FAIL |
|
| 89 |
+
| shock | 0.0% | 6 | ❌ FAIL |
|
| 90 |
+
| confused | 0.0% | 7 | ❌ FAIL |
|
| 91 |
+
| bewildered | 0.0% | 5 | ❌ FAIL |
|
| 92 |
+
| baffled | 0.0% | 5 | ❌ FAIL |
|
| 93 |
+
| sadness | 0.0% | 7 | ❌ FAIL |
|
| 94 |
+
| sorrow | 0.0% | 5 | ❌ FAIL |
|
| 95 |
+
| grief | 0.0% | 6 | ❌ FAIL |
|
| 96 |
+
| melancholy | 0.0% | 5 | ❌ FAIL |
|
| 97 |
+
| loneliness | 0.0% | 6 | ❌ FAIL |
|
| 98 |
+
| hurt | 0.0% | 6 | ❌ FAIL |
|
| 99 |
+
| misery | 0.0% | 5 | ❌ FAIL |
|
| 100 |
+
| fear | 0.0% | 6 | ❌ FAIL |
|
| 101 |
+
| terror | 0.0% | 5 | ❌ FAIL |
|
| 102 |
+
| anxiety | 0.0% | 6 | ❌ FAIL |
|
| 103 |
+
| worry | 0.0% | 5 | ❌ FAIL |
|
| 104 |
+
| nervousness | 0.0% | 5 | ❌ FAIL |
|
| 105 |
+
| apprehension | 0.0% | 5 | ❌ FAIL |
|
| 106 |
+
| anger | 0.0% | 6 | ❌ FAIL |
|
| 107 |
+
| rage | 0.0% | 5 | ❌ FAIL |
|
| 108 |
+
| irritation | 0.0% | 5 | ❌ FAIL |
|
| 109 |
+
| annoyance | 0.0% | 6 | ❌ FAIL |
|
| 110 |
+
| frustration | 0.0% | 6 | ❌ FAIL |
|
| 111 |
+
| resentment | 0.0% | 5 | ❌ FAIL |
|
| 112 |
+
| bitterness | 0.0% | 5 | ❌ FAIL |
|
| 113 |
+
| disgust | 0.0% | 6 | ❌ FAIL |
|
| 114 |
+
| embarrassment | 0.0% | 7 | ❌ FAIL |
|
| 115 |
+
| silly | 0.0% | 8 | ❌ FAIL |
|
| 116 |
+
| sympathy | 0.0% | 8 | ❌ FAIL |
|
| 117 |
+
| nostalgia | 0.0% | 7 | ❌ FAIL |
|
| 118 |
+
| hope | 0.0% | 7 | ❌ FAIL |
|
| 119 |
+
| longing | 0.0% | 7 | ❌ FAIL |
|
| 120 |
+
| yearning | 0.0% | 5 | ❌ FAIL |
|
| 121 |
+
| determination | 0.0% | 5 | ❌ FAIL |
|
| 122 |
+
| anticipation | 0.0% | 5 | ❌ FAIL |
|
| 123 |
+
| trust | 0.0% | 5 | ❌ FAIL |
|
| 124 |
+
| sarcasm | 0.0% | 5 | ❌ FAIL |
|
| 125 |
+
|
| 126 |
+
## Performance Metrics
|
| 127 |
+
|
| 128 |
+
| Metric | Value |
|
| 129 |
+
|--------|-------|
|
| 130 |
+
| Min Inference Time | 10.14 ms |
|
| 131 |
+
| Max Inference Time | 49.52 ms |
|
| 132 |
+
| Avg Inference Time | 14.40 ms |
|
| 133 |
+
| Median Inference Time | 13.87 ms |
|
| 134 |
+
|
| 135 |
+
## Confusion Analysis
|
| 136 |
+
|
| 137 |
+
### Most Common Misclassifications
|
| 138 |
+
|
| 139 |
+
| Expected | Predicted | Count |
|
| 140 |
+
|----------|-----------|-------|
|
| 141 |
+
| negative | neutral | 260 |
|
| 142 |
+
| positive | neutral | 257 |
|
| 143 |
+
| positive | negative | 17 |
|
| 144 |
+
| negative | positive | 7 |
|
| 145 |
+
| neutral | negative | 5 |
|
| 146 |
+
|
| 147 |
+
## Detailed Test Results
|
| 148 |
+
|
| 149 |
+
### Failed Tests
|
| 150 |
+
|
| 151 |
+
| Text | Expected | Detected | Time (ms) |
|
| 152 |
+
|------|----------|----------|-----------|
|
| 153 |
+
| I feel so much joy right now! | positive | neutral | 16.40 |
|
| 154 |
+
| This brings me pure joy | positive | neutral | 14.97 |
|
| 155 |
+
| Joy fills my heart | positive | neutral | 15.17 |
|
| 156 |
+
| What a joyful moment | positive | neutral | 12.26 |
|
| 157 |
+
| I'm full of joy today | positive | neutral | 14.11 |
|
| 158 |
+
| This is the best day ever! | positive | neutral | 13.13 |
|
| 159 |
+
| Everything is going perfectly! | positive | neutral | 12.74 |
|
| 160 |
+
| I am so happy today! | positive | neutral | 14.17 |
|
| 161 |
+
| This makes me really happy | positive | neutral | 13.69 |
|
| 162 |
+
| I feel happy and content | positive | neutral | 13.35 |
|
| 163 |
+
| Happiness is all around | positive | neutral | 14.13 |
|
| 164 |
+
| I'm genuinely happy | positive | neutral | 12.88 |
|
| 165 |
+
| I am good | positive | neutral | 13.98 |
|
| 166 |
+
| I'm doing great | positive | neutral | 13.63 |
|
| 167 |
+
| Life is beautiful | positive | neutral | 14.63 |
|
| 168 |
+
| I'm in a good mood | positive | neutral | 15.04 |
|
| 169 |
+
| I'm so excited about this! | positive | neutral | 18.70 |
|
| 170 |
+
| This is really exciting | positive | neutral | 16.10 |
|
| 171 |
+
| I can't contain my excitement | positive | neutral | 15.43 |
|
| 172 |
+
| How exciting! | positive | neutral | 14.07 |
|
| 173 |
+
| I'm thrilled and excited | positive | neutral | 14.59 |
|
| 174 |
+
| I can't wait! | positive | neutral | 12.98 |
|
| 175 |
+
| I'm pumped up! | positive | neutral | 13.77 |
|
| 176 |
+
| I'm in absolute ecstasy! | positive | neutral | 14.74 |
|
| 177 |
+
| This is pure ecstasy | positive | neutral | 13.81 |
|
| 178 |
+
| I feel ecstatic | positive | neutral | 15.05 |
|
| 179 |
+
| What ecstasy! | positive | neutral | 15.53 |
|
| 180 |
+
| I've never been happier! | positive | negative | 15.04 |
|
| 181 |
+
| This is beyond amazing! | positive | neutral | 18.63 |
|
| 182 |
+
| I'm elated by the results | positive | neutral | 16.99 |
|
| 183 |
+
| Such elation! | positive | neutral | 14.95 |
|
| 184 |
+
| I feel elated | positive | neutral | 15.17 |
|
| 185 |
+
| Elation washes over me | positive | negative | 16.45 |
|
| 186 |
+
| I'm absolutely elated | positive | neutral | 14.64 |
|
| 187 |
+
| I'm in a state of euphoria | positive | neutral | 15.92 |
|
| 188 |
+
| Pure euphoria right now | positive | neutral | 15.56 |
|
| 189 |
+
| This euphoric feeling | positive | neutral | 17.33 |
|
| 190 |
+
| I feel euphoric | positive | neutral | 21.63 |
|
| 191 |
+
| Euphoria takes over | positive | neutral | 17.98 |
|
| 192 |
+
| What a thrill! | positive | neutral | 16.57 |
|
| 193 |
+
| I'm thrilled about this | positive | neutral | 15.27 |
|
| 194 |
+
| This is thrilling | positive | neutral | 16.13 |
|
| 195 |
+
| I feel thrilled | positive | neutral | 15.48 |
|
| 196 |
+
| Such a thrilling experience | positive | neutral | 15.24 |
|
| 197 |
+
| I'm delighted to hear that | positive | neutral | 15.02 |
|
| 198 |
+
| What a delight! | positive | neutral | 14.05 |
|
| 199 |
+
| This is delightful | positive | neutral | 14.25 |
|
| 200 |
+
| I'm absolutely delighted | positive | neutral | 12.47 |
|
| 201 |
+
| Such delight! | positive | neutral | 13.40 |
|
| 202 |
+
| I'm feeling cheerful today | positive | neutral | 15.55 |
|
| 203 |
+
|
| 204 |
+
---
|
| 205 |
+
|
| 206 |
+
*Report generated by Emoji AI Avatar Evaluation Framework*
|