VibeSync - 음악 추천
Source: Dev.to
Spotify나 Apple Music이 다음에 어떤 곡을 재생할지 정확히 알고 있다는 사실을 파헤치다 보면, 추천 알고리즘이 얼마나 매력적인지 알게 됩니다. 머신러닝을 공부하고 있는 B.Tech CSIT 학생으로서, 저는 이러한 시스템의 내부를 살짝 들여다보고 싶었습니다.
그 호기심이 바로 제 최신 프로젝트인 VibeSync—완전 콘텐츠 기반 음악 추천 엔진—으로 이어졌습니다.
Try the Live Application Here | View the Source Code on GitHub
대부분의 상업용 추천 시스템은 협업 필터링에 크게 의존합니다. 즉, 알고리즘이 비슷한 취향을 가진 수천 명의 사용자가 듣는 곡을 분석해 여러분에게 추천하는 방식이죠. 이 방법은 효과적이지만, 방대한 사용자 행동 데이터가 필요합니다. 저는 그런 데이터를 전혀 가지고 있지 않았습니다.
그래서 저는 사용자 행동을 추적하는 대신, 음악 자체에만 집중하기로 했습니다. VibeSync는 댄서빌리티(danceability), 에너지(energy), 템포(tempo), 어쿠스틱니스(acousticness)와 같은 오디오 특징을 이용해 트랙의 수학적 프로파일을 분석합니다.
각 곡을 다차원 벡터로 취급하고, 엔진은 서로 다른 트랙 간의 코사인 유사도를 계산합니다. 사용자가 목표 곡을 입력하면, 알고리즘은 데이터셋을 스캔해 가장 유사한 소리적 특성을 가진 다섯 곡을 찾아냅니다. 즉, 정확히 같은 “바이브”를 공유하는 곡들을 추천해 주는 것이죠.
Building the Stack
이 프로젝트를 구현하기 위해 저는 전체 기술 스택을 파이썬으로만 구성했습니다:
- Scikit-learn:
MinMaxScaler를 사용해 템포와 같은 고값 메트릭이 댄서빌리티와 같은 저값 메트릭을 압도하지 않도록 오디오 특징을 정규화하고, 유사도 행렬 연산을 처리했습니다. - Pandas: 트랙 데이터셋을 정리하고 구조화하는 데 활용했습니다.
- Plotly & Streamlit: 단순히 터미널 스크립트에 머물지 않기 위해, 다크 모드와 글래스모픽 디자인을 적용한 웹 대시보드를 Streamlit으로 구축하고, Plotly를 이용해 특징 비교를 시각화했습니다.