Important
사용자가 쓴 일기의 감정을 KoBERT로 분석(8종) 하고, 그 감정에 어울리는 음악과 가사를 추천하는 감정 기록 서비스의 FastAPI 서버입니다. 2025 한국기술교육대학교 컴퓨터공학부 졸업작품
🏆 아이디어 경진대회 우수작품상(2024) · 졸업작품 우수상(2025)
| 분류 | 기술 |
|---|---|
| Language / Framework | Python, FastAPI, SQLAlchemy 2.0, Alembic |
| Database | MySQL, MongoDB(motor), Redis |
| AI / NLP | PyTorch, KoBERT(SKT kobert-base-v1), Hugging Face Transformers, Kiwi 형태소 분석기 |
| Auth | JWT(python-jose), bcrypt |
| Data Collection | Selenium, BeautifulSoup4, youtube-comment-downloader |
-
음악 · 가사 추천 — 감정-장르 매핑 안에서 가사 유사도 기준 Top-3 곡과 대표 가사 추천, 재추천 지원
-
히스토리 — 월별로 추천받은 곡과 감정 기록 확인
-
감정 통계 · 조언 — 월별 감정 그래프와 최다 감정 기반 응원 메시지 제공
flowchart LR
A["일기 작성"] --> B["Kiwi 문장 분리"]
B --> C["KoBERT 감정 분류<br/>(문장별)"]
C --> D["감정 대표 문장 선정"]
D --> E["768차원 임베딩"]
E --> F["감정-장르 매핑 내<br/>가사 임베딩과 코사인 유사도"]
F --> G["Top-3 음악 · 가사 추천"]
모델 성능 (KoBERT 파인튜닝)
| 실험 | 데이터셋 | Valid Acc | F1-Score |
|---|---|---|---|
| Baseline | 3,610 문장 | 0.480 | 0.443 |
| 중간 | 5,614 문장 | 0.623 | 0.623 |
| 최종 | 10,001 문장 | 0.792 | 0.790 |
- 동일 사분면 감정 그룹화 시 F1-Score 0.849
- 데이터셋: SNS·커뮤니티(유튜브 댓글 등)에서 직접 수집하고, 감정 판단 기준표를 세워 8종 라벨링·검수
- 중간발표 피드백을 반영해 추천을 1곡 → 3곡 + 재추천으로 개선, 추천 다양성 확보
- 사용자 검증: 41명 설문(실사용자 19명) — 감정 분석 "매우 일치" 68.4%, 분석·추천 만족도 80% 이상, 사용 의향 87.8%
app
├── main.py # FastAPI 엔트리포인트
├── database.py # DB 연결 설정
├── transaction.py # 트랜잭션 유틸
├── user/ # 회원, JWT 인증
├── diary/ # 일기 CRUD, 감정 분석 트리거
├── emotion/ # KoBERT 감정 분류
├── embedding/ # 문장 임베딩, 유사도 계산
├── songs/ # 곡 데이터
├── genre/ # 감정-장르 매핑
├── statistics/ # 월별 감정 통계·조언
├── crawling/ # 멜론 가사 크롤러
└── test/ # 테스트 라우터
- 4인 팀 프로젝트 총괄 및 단계별 목표 · 일정 · 역할 조율
- 감정 데이터셋 수집 · 라벨링과 KoBERT 학습 · 하이퍼파라미터 튜닝에 직접 참여 — F1-score 0.443 → 0.790 개선에 기여
- 일기 · 가사 임베딩 코사인 유사도 기반 Top-3 추천 알고리즘 설계 · 구현
- FastAPI 서버 · DB 설계, 학습 모델의 서버 통합 · 서빙, Docker 배포 등 백엔드 전체 구축



