File size: 6,375 Bytes
e221c83
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
---
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.