emotion-chatbot / README.md
taehoon222's picture
Update README.md
c620306
---
title: Emotion Chatbot
emoji: πŸ€—
colorFrom: indigo
colorTo: blue
sdk: docker
app_port: 7860
pinned: false
---
# πŸ€– 일기 기반 감정 뢄석 및 μ½˜ν…μΈ  μΆ”μ²œ μ›Ή
> ν•˜λ£¨λ₯Ό λ§ˆλ¬΄λ¦¬ν•˜λ©° μ“°λŠ” λ‹Ήμ‹ μ˜ 일기, κ·Έ 속에 μˆ¨κ²¨μ§„ μ§„μ§œ 감정은 λ¬΄μ—‡μΌκΉŒμš”?
> 이 ν”„λ‘œμ νŠΈλŠ” AIλ₯Ό 톡해 λ‹Ήμ‹ μ˜ 글을 μ΄ν•΄ν•˜κ³ , 감정에 λͺ°μž…ν•˜κ±°λ‚˜ ν˜Ήμ€ μƒˆλ‘œμš΄ ν™œλ ₯이 ν•„μš”ν•  λ•Œ λ§žμΆ€ν˜• μ½˜ν…μΈ λ₯Ό μΆ”μ²œν•΄μ£ΌλŠ” λ‹Ήμ‹ λ§Œμ˜ 감성 λΉ„μ„œμž…λ‹ˆλ‹€.
<br>
<br>
## πŸš€ 라이브 데λͺ¨ (Live Demo)
πŸ‘‰ https://huggingface.co/spaces/koons/emotion-chatbot
(μœ„ μ£Όμ†ŒλŠ” μ‹€μ œ 배포된 Space ID κΈ°μ€€μž…λ‹ˆλ‹€.)
<br>
# ✨ 핡심 κΈ°λŠ₯
πŸ€– ν…μŠ€νŠΈ 속 감정 탐색: klue/roberta-base λͺ¨λΈμ„ ν•œκ΅­μ–΄ 'κ°μ„±λŒ€ν™” λ§λ­‰μΉ˜' λ°μ΄ν„°λ‘œ λ―Έμ„Έμ‘°μ •ν•˜μ—¬, 일기 속에 λ‹΄κΈ΄ 볡합적인 감정을 85% μ΄μƒμ˜ μ •ν™•λ„λ‘œ λΆ„μ„ν•©λ‹ˆλ‹€.
🎭 감성 맞좀 νλ ˆμ΄μ…˜: λΆ„μ„λœ 감정을 더 깊이 μŒλ―Έν•˜κ³  싢을 λ•Œ(수용)와 μƒˆλ‘œμš΄ κΈ°λΆ„μœΌλ‘œ μ „ν™˜ν•˜κ³  싢을 λ•Œ(μ „ν™˜), 두 κ°€μ§€ μ‹œλ‚˜λ¦¬μ˜€μ— 맞좰 μ˜ν™”, μŒμ•…, 책을 μΆ”μ²œν•©λ‹ˆλ‹€.
πŸ“” λ‚˜λ§Œμ˜ 감정 기둝 보관: μž‘μ„±ν–ˆλ˜ 일기와 AI의 감정 뢄석 κ²°κ³Όλ₯Ό λΈŒλΌμš°μ €(localStorage)에 μ €μž₯ν•˜μ—¬, 과거의 감정 흐름을 μ–Έμ œλ“ μ§€ λ‹€μ‹œ λŒμ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
πŸ’» 직관적인 λ°˜μ‘ν˜• UI: Flask와 JavaScript둜 κ΅¬μΆ•λœ κ°„κ²°ν•˜κ³  μ‚¬μš©ν•˜κΈ° μ‰¬μš΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜μ—¬, μ–΄λ–€ κΈ°κΈ°μ—μ„œλ„ νŽΈμ•ˆν•˜κ²Œ 감정을 기둝할 수 μžˆμŠ΅λ‹ˆλ‹€.
<br>
# βš™οΈ 기술 μŠ€νƒ 및 μ•„ν‚€ν…μ²˜
| ꡬ뢄 | 기술 |
| :--- | :--- |
| **Backend** | python, Flask, Gunicorn |
| **Frontend**| HTML, CSS, JavaScript |
| **AI / Data**| PyTorch, Hugging Face Transformers, Scikit-learn, Pandas |
| **Deployment**| Docker, GitHub Actions, Hugging Face Spaces |
| **Version Control**| Git, GitHub, Git LFS |
<br>
Git Push (main 브랜치) β†’ GitHub Actions (CI/CD 트리거) β†’ Dockerfile λΉŒλ“œ β†’ Hugging Face Spaces (μžλ™ 배포 및 μ„œλΉ™)
<br>
## πŸš€ μ‹œμž‘ν•˜κΈ°: 둜컬 ν™˜κ²½ μ„€μ • 및 μ‹€ν–‰ (Getting Started)
Python 3.10
이 ν”„λ‘œμ νŠΈλŠ” λ…λ¦½λœ κ°€μƒν™˜κ²½μ—μ„œ μ‹€ν–‰ν•˜λŠ” 것을 κ°•λ ₯ν•˜κ²Œ ꢌμž₯ν•©λ‹ˆλ‹€. κ°€μƒν™˜κ²½μ€ PC의 λ‹€λ₯Έ 파이썬 ν”„λ‘œμ νŠΈμ™€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μΆ©λŒν•˜λŠ” 것을 λ°©μ§€ν•΄μ£ΌλŠ” 'λ…λ¦½λœ μž‘μ—… 곡간'μž…λ‹ˆλ‹€.
### 🌍 방법 1: Anaconda μ‚¬μš© (κ°€μž₯ μ•ˆμ •μ μΈ 방법)
AI/ML ν”„λ‘œμ νŠΈμ— ν•„μš”ν•œ λ³΅μž‘ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ„ κ°€μž₯ μ•ˆμ •μ μœΌλ‘œ κ΄€λ¦¬ν•΄μ£ΌλŠ” Anaconda μ‚¬μš©μ„ μΆ”μ²œν•©λ‹ˆλ‹€.
```
# 1. GitHubμ—μ„œ ν”„λ‘œμ νŠΈ 볡제
git clone [https://github.com/kootaeng2/Emotion-Chatbot-App.git](https://github.com/kootaeng2/Emotion-Chatbot-App.git)
cd Emotion-Chatbot-App
2. κ°€μƒν™˜κ²½ 생성 및 라이브러리 μ„€μΉ˜ (Anaconda ꢌμž₯)
# Anaconda κ°€μƒν™˜κ²½ 생성 및 ν™œμ„±ν™”
conda create -n sentiment_env python=3.10
conda activate sentiment_env
# ν•„μˆ˜ 라이브러리 μ„€μΉ˜ (PyTorch λ¨Όμ €, 이후 requirements.txt)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 2. 'sentiment_env'λΌλŠ” μ΄λ¦„μœΌλ‘œ Python 3.10 Conda κ°€μƒν™˜κ²½ 생성
conda create -n sentiment_env python=3.10
# 3. μƒˆλ‘œ λ§Œλ“  κ°€μƒν™˜κ²½ ν™œμ„±ν™”
conda activate sentiment_env
# 4. ν•„μˆ˜ 라이브러리 μ„€μΉ˜ (PyTorch λ¨Όμ €, 이후 requirements.txt)
pip install torch torchvision torchaudio --index-url [https://download.pytorch.org/whl/cu118](https://download.pytorch.org/whl/cu118)
pip install -r requirements.txt
python scripts/train_model.py
4. μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰
Bash
python src/app.py
μ„œλ²„κ°€ μ‹€ν–‰λ˜λ©΄, μ›Ή λΈŒλΌμš°μ € μ£Όμ†Œμ°½μ— http://127.0.0.1:5000 을 μž…λ ₯ν•˜μ—¬ μ ‘μ†ν•˜μ„Έμš”.
```
<br>
# πŸ“‚ ν”„λ‘œμ νŠΈ 폴더 ꡬ쑰
```
Emotion-Chatbot-App/
β”‚
β”œβ”€β”€ .github/
β”‚ └── workflows/
β”‚ └── sync-to-hub.yml # GitHub Actions μžλ™ 배포 μ›Œν¬ν”Œλ‘œμš°
β”‚
β”œβ”€β”€ korean-emotion-classifier-final/ # μΆ”λ‘ (Inference)용 μ΅œμ’… AI λͺ¨λΈ
β”‚
β”œβ”€β”€ notebooks/
β”‚ └── 1_explore_data.py # 데이터 νƒμƒ‰μš© λ…ΈνŠΈλΆ
β”‚
β”œβ”€β”€ scripts/
β”‚ └── train_model.py # AI λͺ¨λΈ ν›ˆλ ¨ 슀크립트
β”‚
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ app.py # Flask μ›Ή μ„œλ²„ μ‹€ν–‰ 파일
β”‚ β”œβ”€β”€ emotion_engine.py # 감정 뢄석 μ—”μ§„ λͺ¨λ“ˆ
β”‚ β”œβ”€β”€ recommender.py # μ½˜ν…μΈ  μΆ”μ²œ λͺ¨λ“ˆ
β”‚ β”œβ”€β”€ static/ # CSS, Frontend JS λ“± 정적 파일
β”‚ └── templates/ # HTML ν…œν”Œλ¦Ώ 파일
└── emotion_homepage.html # ν™ˆνŽ˜μ΄μ§€
β”‚
β”œβ”€β”€ Dockerfile # Hugging Face 배포용 Docker μ„€μ •
β”œβ”€β”€ README.md # ν”„λ‘œμ νŠΈ μ„€λͺ…μ„œ
└── requirements.txt # ν•„μˆ˜ Python 라이브러리 λͺ©λ‘
```
<br>
πŸ§—β€β™‚οΈ μ£Όμš” 개발 도전 과제 및 ν•΄κ²° κ³Όμ • (Troubleshooting Journey)
이 ν”„λ‘œμ νŠΈμ˜ κ°€μž₯ 큰 μ„±κ³ΌλŠ” λ‹¨μˆœ κΈ°λŠ₯ κ΅¬ν˜„μ„ λ„˜μ–΄, μ‹€μ œ μ„œλΉ„μŠ€ 배포 κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” λ³΅μž‘ν•˜κ³  깊이 μžˆλŠ” λ¬Έμ œλ“€μ„ μ²΄κ³„μ μœΌλ‘œ ν•΄κ²°ν•œ κ²½ν—˜μž…λ‹ˆλ‹€.
원인 뢈λͺ…μ˜ OS 레벨 였λ₯˜ ν•΄κ²° (stat: ... not NoneType):
문제: 둜컬 Windows ν™˜κ²½μ—μ„œ transformers λΌμ΄λΈŒλŸ¬λ¦¬κ°€ νŒŒμΌμ„ λ‘œλ“œν•˜μ§€ λͺ»ν•˜λŠ” 원인 뢈λͺ…μ˜ OS μˆ˜μ€€ 였λ₯˜κ°€ μ§€μ†μ μœΌλ‘œ λ°œμƒ.
ν•΄κ²°: venv의 λΆˆμ•ˆμ •μ„±μ„ μ˜μ‹¬ν•˜κ³  Anaconda ν™˜κ²½μœΌλ‘œ μ΄μ „ν•˜μ—¬ ν™˜κ²½ λ³€μˆ˜λ₯Ό ν†΅μ œν–ˆμœΌλ©°, Windows와 Linux의 경둜 차이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ ˆλŒ€ 경둜 μ‚¬μš© 및 경둜 κ΅¬λΆ„μž μ •κ·œν™”λ₯Ό 톡해 문제λ₯Ό μ΅œμ’… ν•΄κ²°. 이λ₯Ό 톡해 운영체제 κ°„ ν˜Έν™˜μ„±μ— λŒ€ν•œ κΉŠμ€ 이해λ₯Ό μ–»μŒ.
λŒ€μš©λŸ‰ AI λͺ¨λΈμ˜ 버전 관리 (Git LFS & History Rewriting):
문제: 1GBκ°€ λ„˜λŠ” AI λͺ¨λΈ 및 ν›ˆλ ¨ λΆ€μ‚°λ¬Ό 파일둜 인해 git push μ‹œ νƒ€μž„μ•„μ›ƒ(408) 및 GitHub μš©λŸ‰ μ œν•œ(GH001) 였λ₯˜ λ°œμƒ.
ν•΄κ²°: Git LFSλ₯Ό λ„μž…ν•˜μ—¬ λŒ€μš©λŸ‰ νŒŒμΌμ„ κ΄€λ¦¬ν•˜κ³ , κ³Όκ±° νžˆμŠ€ν† λ¦¬μ— 남은 λΆˆν•„μš”ν•œ λŒ€μš©λŸ‰ 파일의 흔적을 git filter-repo λͺ…λ Ήμ–΄λ‘œ μ™„μ „νžˆ 제거. μ΅œμ’…μ μœΌλ‘œ λ¬Έμ œκ°€ μ§€μ†λ˜μž μ €μž₯μ†Œλ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³  κΉ¨λ—ν•œ λ²„μ „λ§Œ ν‘Έμ‹œν•˜λŠ” κ³Όκ°ν•œ 결정을 톡해 κ·Όλ³Έ 원인을 ν•΄κ²°.
ν΄λΌμš°λ“œ μžλ™ 배포 νŒŒμ΄ν”„λΌμΈ ꡬ좕 (CI/CD):
문제: Hugging Face Space 배포 κ³Όμ •μ—μ„œ ꡬ식 인증 방식 였λ₯˜, requirements.txt λˆ„λ½, Python λͺ¨λ“ˆ 탐색 경둜 문제(ModuleNotFoundError), Flask ν…œν”Œλ¦Ώ 경둜 문제(TemplateNotFound) λ“± λ‹€μ–‘ν•œ λŸ°νƒ€μž„ 였λ₯˜ λ°œμƒ.
ν•΄κ²°:
**Dockerfile**을 μž‘μ„±ν•˜μ—¬ μ–΄λ–€ ν™˜κ²½μ—μ„œλ“  λ™μΌν•˜κ²Œ 싀행될 수 μžˆλŠ” ν‘œμ€€ν™”λœ ν™˜κ²½μ„ ꡬ좕.
GitHub Actions μ›Œν¬ν”Œλ‘œμš°λ₯Ό μ΅œμ‹  곡식 Action(huggingface/sync-to-hub)으둜 μˆ˜μ •ν•˜μ—¬ 인증 문제λ₯Ό ν•΄κ²°.
μ„œλ²„ ν™˜κ²½μ—μ„œμ˜ Python μž„ν¬νŠΈ 방식을 μ΄ν•΄ν•˜κ³  **μƒλŒ€ 경둜 μž„ν¬νŠΈ(relative import)**λ₯Ό μ μš©ν•˜μ—¬ λͺ¨λ“ˆ 경둜 문제λ₯Ό ν•΄κ²°.
Flask의 λ™μž‘ 원리에 맞좰 templates 폴더λ₯Ό src λ‚΄λΆ€λ‘œ μž¬λ°°μΉ˜ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ λͺ¨λ“  λŸ°νƒ€μž„ 였λ₯˜λ₯Ό ν•΄κ²°ν•˜κ³  배포에 성곡.
ν•΄κ²°: gunicorn의 μž‘λ™ 방식을 μ΄ν•΄ν•˜κ³ , Python의 **μƒλŒ€ 경둜 μž„ν¬νŠΈ(relative import)**λ₯Ό μ μš©ν•˜μ—¬ λͺ¨λ“ˆ 경둜 문제λ₯Ό ν•΄κ²°. λ˜ν•œ Flask의 κΈ°λ³Έ κ·œμΉ™μ— 맞게 templates 및 static 폴더λ₯Ό app.pyκ°€ μžˆλŠ” src 폴더 λ‚΄λΆ€λ‘œ μž¬λ°°μΉ˜ν•˜μ—¬ 문제λ₯Ό μ΅œμ’… ν•΄κ²°.