Lyrics based Music recommandation

with klue/bert-base fine-tunning

노래 가사의 감정 분석을 통한 음악 추천 시스템 🎶

이 프로젝트는 노래 가사의 감정 분석을 통해 사용자에게 감정적으로 유사한 음악을 추천하는 시스템을 개발했습니다. 기존의 음악 추천 시스템이 주로 사용자 로그와 청취 패턴에 의존하는 것과 달리, 가사의 감정적 요소를 활용하여 시공간적 제약을 뛰어넘는 추천 시스템을 구현했습니다. 이는 음악을 새로운 관점에서 탐색하고, 감정적으로 연결된 곡을 발견하는 데 도움을 줍니다 🌟.


연구 배경 및 동기 🤔

현재 음악 추천 서비스에서 “가사”의 위치는 어디인가라는 질문에서 이 프로젝트가 시작되었습니다. Spotify Web API를 분석한 결과, 현재 추천 시스템은 주로 사용자의 청취 패턴과 K-NN 알고리즘을 활용하고 있으며, 가사 자체보다는 관련 기사나 설명을 벡터화하는 방식을 사용하고 있습니다.

사용자 로그 기반 추천은 시간적 제약에 갇히기 쉽기 때문에, 가사의 감정적 요소를 활용하면 시공간적 거리가 있는 노래들 사이에서도 감정선이 비슷한 곡을 발굴하고 추천할 수 있습니다. 이러한 “음악 digging”을 통해 더 다양하고 풍부한 음악 경험을 제공하고자 했습니다 🎧.


방법론 🛠️


영어 가사 데이터셋(Baseline)

초기 모델 개발을 위해 Reddit의 483개 커뮤니티에서 추출된 댓글로 구성된 go_emotions 데이터셋을 활용했습니다. 이 데이터셋은 다양한 감정 태그가 연결되어 있어 감정 인식 모델 구축에 유용했습니다.

ROBERTa 모델을 QLORA(Quantized Low-Rank Adaptation)와 결합하여 학습했습니다. QLORA는 모델의 가중치를 4비트로 양자화하여 메모리 사용량을 감소시키면서도 성능 저하를 최소화하는 기술로, 자원이 제한된 환경에서도 효율적인 파인튜닝이 가능하게 합니다 🚀.


한국어 감정 분석 모델

한국어 가사 분석을 위해 감성 태깅된 데이터셋의 부재라는 문제에 직면했습니다. 이를 해결하기 위해 klue/bert-base를 기본 모델로 선택하고, AI-hub“감성 대화 말뭉치”를 활용하여 감정 분석 모델을 구축했습니다.

이 데이터셋은 60개의 감정 라벨로 구분되어 있으며, 총 14만 개의 코퍼스를 포함하고 있습니다. 데이터셋이 부정적인 감정에 다소 편향되어 있었지만, 데이터의 양이 충분히 커서 모든 감정을 포괄적으로 학습할 수 있었습니다 🌈.


모델 아키텍처 개선

초기 모델(Architecture 1)에서는 BERT 출력을 Conv1d로 처리하여 768개의 특성을 64개로 줄이고 평균 풀링을 적용했으나, 이 과정에서 의미 있는 정보가 손실되고 감정 간 연결성이 약화되는 문제가 발견되었습니다.

이를 개선하기 위해 Architecture 2를 제안했습니다. 이 모델은:

  • CLS 토큰의 Last Output과 [-4] Output을 활용
  • Attention Mask를 활용하여 긴 문장에도 대응 가능하도록 설계
  • PAD 토큰 제외 및 유효한 토큰만 사용
  • 768 벡터를 보존하여 감정 간 상관관계 학습 강화

이러한 개선을 통해 모델이 감정 간 연관성을 더 잘 학습할 수 있게 되었습니다 🔍.


데이터 수집 및 처리 📊

한국어 가사 데이터 확보를 위해 웹 크롤링을 진행했습니다. ChromeDriver를 활용해 노래 ID를 수집하고, 해당 ID를 통해 가사를 추출했습니다. “멜론 연도별 1위~10위 곡(1991년~2014년)” 플레이리스트에서 총 237곡의 가사를 확보했습니다.

이 플레이리스트는 시간적 거리감을 포함하면서도 유명한 곡들로 구성되어 있어, 시간적 제약을 극복하는 추천 시스템의 효과를 검증하기에 적합했습니다 ⏳.


결과 및 평가 📈


모델 성능 비교

Architecture 2는 감정 간 유사성 학습에서 큰 개선을 보였습니다. 기존 모델에서는 “예술이야”(싸이)와 같은 긍정적인 곡에 대해 상위 예측 감정들이 일관성 없이 나타났으나, 개선된 모델에서는 “흥분”, “신이 난”, “기쁨”과 같이 유사한 긍정 감정들이 상위에 위치하게 되었습니다.

감정 라벨 간 유사도 매트릭스를 통해 모델이 감정 간 상관관계를 더 잘 학습했음을 시각적으로 확인할 수 있었습니다 ✨.

평가 지표 개선

F1 Score만으로는 감정 간 연관성을 고려하지 못하는 한계를 발견하고, 유사도 가중치를 적용한 새로운 평가 지표를 제안했습니다. 이 지표에서는 Architecture 2가 더 좋은 성능을 보였습니다.

이는 감정 분석과 같은 작업에서는 단순한 분류 정확도뿐만 아니라, 감정 간 연관성 학습이 중요함을 시사합니다 🌟.


가사 기반 추천 시스템 구현 🔥

최종적으로 수집된 한국어 가사에 개선된 모델(Architecture 2)을 적용하여 각 노래의 감정 분석을 진행했습니다. 분석 결과를 바탕으로 코사인 유사도를 계산하여 감정적으로 유사한 곡들을 추천할 수 있는 시스템을 구현했습니다.

랜덤으로 선택된 10곡 간의 코사인 유사도 히트맵을 통해 감정적으로 유사한 곡들이 시대나 장르에 관계없이 높은 유사도를 보이는 것을 확인할 수 있었습니다 🎵.

눈물 (feat. 유진 of 더 씨야) - 리쌍
Rank Song Artist Similarity
1 여인의 향기 씨야 0.9936
2 그녀의 연인에게… #Story I K2 김성면 0.9935
3 눈, 코, 입 태양 0.9917
4 No.1 보아 (BoA) 0.9901
5 미워도 다시 한번 (Original Ver.) 바이브 0.9896
6 미안해요 김건모 0.9892
7 심장이 없어 에이트 0.9889
8 슬프도록 아름다운 … K2 김성면 0.9886
9 야생화 박효신 0.9881
10 벌써 일년 브라운 아이즈 0.9863
아로하 - 쿨(COOL)
Rank Song Artist Similarity
1 사랑의 서약 한동준 0.9732
2 Run To You DJ DOC 0.8972
3 괜찮아 녹색지대 0.8796
4 너를 사랑해 한동준 0.8692
5 I Love U Oh Thank U (Feat. 김태우 Of God) MC몽 0.7939
6 Mr. Chu (On Stage) Apink (에이핑크) 0.7735
7 우린 제법 잘 어울려요 성시경 0.7665
8 영원한 사랑 핑클 (Fin.K.L) 0.7575
9 너에게 원한건 노이즈 0.7072
10 Dreams Come True S.E.S. 0.6983
내사랑 내곁에 - 김현식
Rank Song Artist Similarity
1 사랑…후에 신혜성, 린 0.9790
2 부디 윤종신 0.9781
3 추억은 사랑을 닮아 박효신 0.9770
4 사랑비 김태우 0.9707
5 이현우 0.9693
6 착한 사랑 김민종 0.9672
7 슬픈 인연 015B 0.9665
8 오늘 같은 밤이면 박정운 0.9661
9 흰눈 이루 0.9638
10 모노드라마 (With 유승우) 허각 0.9629

결론 및 시사점 💡

이 프로젝트는 가사의 감정 분석을 통해 시공간적 제약을 뛰어넘는 음악 추천 시스템의 가능성을 보여주었습니다. 특히 한국어 가사 데이터셋 부재라는 한계를 극복하기 위한 모델 아키텍처 개선평가 지표 제안은 감정 분석 연구에 중요한 기여를 했습니다.

감정 분석 모델이 단순히 분류 정확도를 높이는 것보다 감정 간 연관성을 학습하는 것이 중요하다는 점은, 향후 감성 분석 연구에서 고려해야 할 중요한 시사점입니다 🌍.

Summarized using Perplexity (Claude 3.7 Sonnet) · Retouched by Duhyeon Kim

Project Report

Your browser doesn't support embedded PDFs. Please click here to download the PDF.

Presentation

Download Presentation PDF