개발/AI개발자교육

음악추천 - 음악

조각선생 2021. 9. 26. 22:01

고민의 흔적

음악 추천 시스템을 만드는데 정말 많은 시간을 사용했고 매일매일 고민했던 것 같습니다. 제가 가지고 있는 모든 지식과 창의력을 끌어모아서 만들었습니다.ㅋㅋ

추천 프로세스

대략 13만 개의 음악들을 3차원의 공간에 위치시켜 놓은 후, 일기와 이미지를 통해 나온 3차원 벡터와 가장 거리가 가까운 것 3개를 추천해줍니다.

  • 음악은 3개의 축을 기준으로 위치시킨다.
  • 모든 축은 0에서 1사이의 값을 가진다.
  • 원점에 가까울수록 부정적인 느낌의 음악이고, 원점과 멀리 있을수록 긍정적인 느낌의 음악이다.

1. 음악의 긍정지수

Spotify 데이터셋에 'valence'라는 feature가 있었고, 이것이 음악의 긍정도를 나타낸다는 것을 알았는데, 이 값을 그대로 사용하고 싶지 않았기 때문에 제가 valence를 제외한 나머지 컬럼들로 직접 음악의 긍정지수를 만들어냈습니다.
danceability, energy, liveness, loudness, speechiness, tempo
이 6가지 feature의 평균으로 긍정지수라는 새로운 feature를 만들어냈고, 이 값과 원래의 valence값을 비교해보았는데(선형 회귀 분석) 양의 기울기가 나와서 꽤 의미 있는 값이 나왔다고 생각했습니다.

2. 음악의 코드에 따른 감정지수

mode(장조/단조)와, key(음악에서 가장 많이 사용된 코드) 2가지 feature를 가지고 C Major부터 B Minor까지 24가지로 나누었고, 각각의 코드와 감정을 매칭 시켜 부정적인 감정-긍정적인 감정으로 나열하였습니다.

3. 악기 소리에 따른 감정지수

acousticness, instrumentalness 두 개의 feature를 사용하였습니다.
acousticness는 값이 클수록 나무 악기의 소리를 가지고 있고 값이 작을수록 electric 한 소리를 가지고 있습니다.
instrumentalness는 악기가 얼마나 사용되었는지, 즉 값이 클수록 악기가 많이 사용된 것이며 값이 작을수록 악기가 사용되지 않은 것입니다.


이 두 가지 feature로 k-means를 하여 음악을 7개로 clustering 하였습니다. 각 cluster에는 7가지 감정을 매칭 시켰습니다.
그리고, 이 결과를 바탕으로 범위를 나누어 모든 음악에 감정을 부여했습니다. 즉, k-means를 사용하긴 했지만 직접적으로 사용한 것은 아니게 되었고, 이 점이 너무 아쉬웠습니다. 어떻게 해서든 machine learning을 음악 추천 과정에 사용하고 싶어서 정말 많은 생각을 했지만, 이것이 최선이었습니다. 하지만 이 덕분에 k-means를 언제 어떻게 사용해야 하는 것인지를 확실히 알게 되었습니다.