emotion-chatbot-app / README.md
hfexample's picture
Deploy clean snapshot of the repository
e221c83
---
title: Emotion Chatbot
emoji: πŸ€—
colorFrom: indigo
colorTo: blue
sdk: docker
app_port: 7860
app_file: run.py
pinned: false
---
# Emotion Diary πŸ€–
**ν•˜λ£¨λ₯Ό λ§ˆλ¬΄λ¦¬ν•˜λ©° μ“°λŠ” λ‹Ήμ‹ μ˜ 일기, κ·Έ 속에 μˆ¨κ²¨μ§„ μ§„μ§œ 감정은 λ¬΄μ—‡μΌκΉŒμš”?**
이 ν”„λ‘œμ νŠΈλŠ” AIλ₯Ό 톡해 λ‹Ήμ‹ μ˜ 글을 μ΄ν•΄ν•˜κ³ , 감정에 λͺ°μž…ν•˜κ±°λ‚˜ ν˜Ήμ€ μƒˆλ‘œμš΄ ν™œλ ₯이 ν•„μš”ν•  λ•Œ λ§žμΆ€ν˜• μ½˜ν…μΈ λ₯Ό μΆ”μ²œν•΄μ£ΌλŠ” λ‹Ήμ‹ λ§Œμ˜ 감성 λΉ„μ„œμž…λ‹ˆλ‹€.
---
### ✨ Live Demo
πŸ‘‰ **[https://huggingface.co/spaces/taehoon222/emotion-chatbot-app](https://huggingface.co/spaces/taehoon222/emotion-chatbot-app)**
---
### πŸ“Έ Screenshots
*(μŠ€ν¬λ¦°μƒ·μ„ 여기에 μΆ”κ°€ν•˜μ„Έμš”. 예: 메인 νŽ˜μ΄μ§€, 일기 μž‘μ„±, κ²°κ³Ό ν™”λ©΄)*
![Main Page](https://via.placeholder.com/400x250.png?text=Main+Page)
![Result Page](https://via.placeholder.com/400x250.png?text=Result+Page)
---
## πŸš€ 핡심 κΈ°λŠ₯
- **πŸ€– ν…μŠ€νŠΈ 속 감정 탐색**: `klue/roberta-base` λͺ¨λΈμ„ 기반으둜, 일기 속에 λ‹΄κΈ΄ 볡합적인 감정을 80% μ΄μƒμ˜ μ •ν™•λ„λ‘œ λΆ„μ„ν•©λ‹ˆλ‹€.
- **🎭 감성 맞좀 νλ ˆμ΄μ…˜**: λΆ„μ„λœ 감정에 따라 '수용'κ³Ό 'μ „ν™˜' 두 κ°€μ§€ μ‹œλ‚˜λ¦¬μ˜€μ— 맞좰 μ˜ν™”, μŒμ•…, 책을 μΆ”μ²œν•©λ‹ˆλ‹€.
- **πŸ“” λ‚˜λ§Œμ˜ 감정 기둝**: μž‘μ„±ν–ˆλ˜ 일기와 AI의 감정 뢄석 κ²°κ³Όλ₯Ό 달λ ₯ ν˜•νƒœλ‘œ ν™•μΈν•˜κ³ , 과거의 감정 흐름을 μ–Έμ œλ“ μ§€ λ‹€μ‹œ λŒμ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
- **🎨 μ»€μŠ€ν…€ ν…Œλ§ˆ**: λ‹€μ–‘ν•œ 색상과 λ°°κ²½ μ΄λ―Έμ§€λ‘œ μ•±μ˜ λΆ„μœ„κΈ°λ₯Ό μ·¨ν–₯에 맞게 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
- **πŸ’» 직관적인 λ°˜μ‘ν˜• UI**: Flask와 JavaScript둜 κ΅¬μΆ•λœ κ°„κ²°ν•˜κ³  μ‚¬μš©ν•˜κΈ° μ‰¬μš΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
---
## πŸ› οΈ 기술 μŠ€νƒ
| ꡬ뢄 | 기술 |
| :--- | :--- |
| **Backend** | Python, Flask, Gunicorn, SQLAlchemy |
| **Frontend**| HTML, CSS, JavaScript |
| **AI / Data**| PyTorch, Hugging Face Transformers, Scikit-learn, Pandas |
| **Database**| Supabase (PostgreSQL) |
| **Deployment**| Docker, GitHub Actions (CI/CD), Hugging Face Spaces |
| **Version Control**| Git, GitHub, Git LFS |
---
## πŸ›οΈ μ•„ν‚€ν…μ²˜
κ°€λ²Όμš΄ μ•± μ½”λ“œμ™€ 무거운 AI λͺ¨λΈμ„ λΆ„λ¦¬ν•˜μ—¬ 효율적인 CI/CD νŒŒμ΄ν”„λΌμΈμ„ κ΅¬μΆ•ν–ˆμŠ΅λ‹ˆλ‹€.
```
[Local PC] --(git push)--> [GitHub] --(Action)--> [Hugging Face Spaces]
|
| (App Start)
V
[Hugging Face Hub] <--(Download Model)-- [Spaces Server]
```
---
## 🏁 μ‹œμž‘ν•˜κΈ°
### 사전 μš”κ΅¬μ‚¬ν•­
- Python 3.10
- Anaconda (ꢌμž₯)
### μ„€μΉ˜ 및 μ‹€ν–‰
1. **ν”„λ‘œμ νŠΈ 볡제**
```bash
git clone https://github.com/kootaeng2/Emotion-Chatbot-App.git
cd Emotion-Chatbot-App
```
2. **κ°€μƒν™˜κ²½ 생성 및 ν™œμ„±ν™” (Anaconda μ‚¬μš©)**
```bash
conda create -n emotion_env python=3.10
conda activate emotion_env
```
3. **ν•„μˆ˜ 라이브러리 μ„€μΉ˜**
```bash
pip install -r requirements.txt
```
4. **ν™˜κ²½ λ³€μˆ˜ μ„€μ •**
`.env` νŒŒμΌμ„ μƒμ„±ν•˜κ³  μ•„λž˜ λ‚΄μš©μ„ μΆ”κ°€ν•˜μ„Έμš”. Gemini APIλ₯Ό ν†΅ν•œ μΆ”μ²œ κΈ°λŠ₯에 ν•„μš”ν•©λ‹ˆλ‹€.
```
GEMINI_API_KEY="YOUR_GEMINI_API_KEY"
```
5. **μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰**
```bash
python run.py
```
6. **μ„œλ²„ 접속**
μ›Ή λΈŒλΌμš°μ €μ—μ„œ `http://127.0.0.1:5000` μ£Όμ†Œλ‘œ μ ‘μ†ν•˜μ„Έμš”.
---
## πŸ“‚ ν”„λ‘œμ νŠΈ ꡬ쑰
```
Emotion/
β”‚
β”œβ”€β”€ .github/ # GitHub Actions μ›Œν¬ν”Œλ‘œμš° (CI/CD)
β”œβ”€β”€ data/ # AI λͺ¨λΈ ν•™μŠ΅μš© 데이터
β”œβ”€β”€ notebooks/ # 데이터 탐색 및 μ „μ²˜λ¦¬μš© Jupyter Notebook
β”œβ”€β”€ results/ # λͺ¨λΈ ν•™μŠ΅ κ²°κ³Ό
β”œβ”€β”€ scripts/ # λͺ¨λΈ ν›ˆλ ¨, ν‰κ°€μš© 슀크립트
β”œβ”€β”€ src/ # 핡심 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ†ŒμŠ€ μ½”λ“œ
β”‚ β”œβ”€β”€ templates/ # HTML ν…œν”Œλ¦Ώ
β”‚ β”œβ”€β”€ static/ # CSS, JS 파일
β”‚ β”œβ”€β”€ __init__.py # Flask μ•± μ΄ˆκΈ°ν™” (Application Factory)
β”‚ β”œβ”€β”€ auth.py # 인증 κ΄€λ ¨ 둜직
β”‚ β”œβ”€β”€ emotion_engine.py # 감정 뢄석 λͺ¨λΈ λ‘œλ”© 및 예츑
β”‚ β”œβ”€β”€ main.py # 메인 νŽ˜μ΄μ§€, 일기/μΆ”μ²œ κΈ°λŠ₯
β”‚ └── models.py # λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈ
β”‚
β”œβ”€β”€ supabase/ # Supabase DB λ§ˆμ΄κ·Έλ ˆμ΄μ…˜
β”œβ”€β”€ Dockerfile # 배포용 Docker μ»¨ν…Œμ΄λ„ˆ μ„€μ •
β”œβ”€β”€ requirements.txt # Python 라이브러리 쒅속성
└── run.py # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ 슀크립트
```
<details>
<summary><strong>Frontend (Templates) ꡬ쑰 상세 (ν΄λ¦­ν•˜μ—¬ 펼치기)</strong></summary>
`src/templates` ν΄λ”λŠ” Flask의 Jinja2 ν…œν”Œλ¦Ώ 엔진을 μ‚¬μš©ν•˜μ—¬ UIλ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€. 역할에 따라 파일이 λͺ…ν™•ν•˜κ²Œ λΆ„λ¦¬λ˜μ–΄ 있으며, 상속과 맀크둜λ₯Ό 톡해 효율적으둜 UIλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.
- **κΈ°λ³Έ λ ˆμ΄μ•„μ›ƒ (`base.html`, `base_auth.html`)**: 전체 νŽ˜μ΄μ§€μ˜ 곡톡적인 λΌˆλŒ€(λ„€λΉ„κ²Œμ΄μ…˜ λ°” λ“±)λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
- **κ°œλ³„ νŽ˜μ΄μ§€ (`main.html`, `diary.html`, `page.html`, `login.html`, `signup.html`)**: 각 κΈ°λŠ₯에 λ§žλŠ” μ‹€μ œ νŽ˜μ΄μ§€ UIλ₯Ό λ‹΄λ‹Ήν•˜λ©°, κΈ°λ³Έ λ ˆμ΄μ•„μ›ƒμ„ 상속받아 μ‚¬μš©ν•©λ‹ˆλ‹€.
- **μž¬μ‚¬μš© μ»΄ν¬λ„ŒνŠΈ (`_macros.html`)**: 둜그인 폼, μΆ”μ²œ νƒ­ λ“± 반볡적으둜 μ‚¬μš©λ˜λŠ” UI 쑰각을 맀크둜 ν˜•νƒœλ‘œ μ •μ˜ν•˜μ—¬ μ½”λ“œ 쀑볡을 μ€„μž…λ‹ˆλ‹€.
- **정적 파일 (`static/`)**:
- **`css/`**: 각 νŽ˜μ΄μ§€μ— νŠΉν™”λœ μŠ€νƒ€μΌμ‹œνŠΈμ™€ μ „μ—­ μŠ€νƒ€μΌμ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
- **`js/`**: νŽ˜μ΄μ§€λ³„ 핡심 둜직(API 톡신, 달λ ₯ κΈ°λŠ₯), ν…Œλ§ˆ λ³€κ²½, μ˜¨λ³΄λ”© λ“± 동적인 κΈ°λŠ₯을 λ‹΄λ‹Ήν•˜λŠ” JavaScript νŒŒμΌλ“€μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
</details>
---
## πŸ§—β€β™‚οΈ 개발 κ³Όμ • 및 문제 ν•΄κ²°
ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©° κ²ͺμ—ˆλ˜ μ£Όμš” 기술적 도전과 ν•΄κ²° 과정에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ **[DEVELOPMENT.md](DEVELOPMENT.md)** νŒŒμΌμ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.
---
## πŸ“Š λͺ¨λΈ μ„±λŠ₯
| Metric | Score |
| :------- | :----- |
| Accuracy | 0.7905 |
| F1 Score | 0.7910 |
| Loss | 0.6943 |
---
## πŸ“œ λΌμ΄μ„ μŠ€
This project is licensed under the MIT License.