brunch

You can make anything
by writing

C.S.Lewis

by 가브리엘의오보에 May 16. 2019

Spotyfy가 당신을 알고 있다, 어떻게?

한 소프트웨어 엔지니어가 개인화 음악 추천 뒤 과학을 설명한다

*출처(클릭)


Sophia Ciocca

2017. 10. 10


이번 월요일 - 평소 매주 월요일과 마찬가지로 - 100여 만 명의 Spotify 사용자들은 Discover Weekly라는 명칭의 신선한 신규 재생목록이 자신들을 기다리고 있음을 발견했다. 30곡으로 구성된 맞춤식 믹스테이프(mixtape)로, 사용자들이 전에 들어본 적 없지만, 아마도 사랑하게 될 음악들이다. 마치 마법 같다.


난 Spotify 광팬(huge fan)이다. 특히 Discover Weekly의 엄청난 팬이다. 왜 일까? Spotify가 나를 보고 있는 것같이 느끼게 한다. 내가 지금까지 만난 그 누구보다도 Spotify는 내 음악 취향을 알고 있다. 그리고 아마도 내가 스스로는 결코 찾지 못했을 트랙 혹은 내가 좋아할 음악이라고 결코 알지 못했던 트랙을 들려주며, 매주 일관되게 만족감을 주어 나를 기쁘게 한다. 


이를 모르는 사람들에게 내 최고의 가상 친구를 소개한다:


이미 드러나 있지만, Discover Weekly에 강한 집착을 보이는 것이 나만은 아니다. 사용자들이 움직이자 Spotify는 사업 초점을 검토하여 더 많은 자원을 알고리즘 기반 재생목록에 투자했다.


2015년 Discover Weekly가 데뷔한 이래, 알고리즘 기반 재생목록의 작동 방법을 얼마나 알고 싶었는지 모른다(한 술 더 떠서, Spotify FanGirl인 나는 때때로 직원으로 제품을 연구하는 척하는 것을 좋아한다). 3주 동안 미친 듯이 구글을 헤맨 후, 내가 커튼 뒤에 놓아둔 것을 살짝 들여다본 기분이 들었다.


Spotify는 어떻게 매주 모든 사람을 위해 그와 같은 30곡을 선택하는 놀라운 일을 하는 것일까? 잠시 Spotify 외 음악 서비스의 음악 추천 방식을 살펴본 후, Spotify의 방식을 살펴보자.


온라인 음악 선정의 간략한 역사


2000년대로 거슬러 올라가자. 당시 Songza는 사용자를 위한 재생목록을 만들기 위해 수동으로 음악 선정을 하는 온라인 음악 큐레이션 서비스를 출시했다. 이는 “음악 전문가”나 다른 인간 큐레이터들로 구성된 팀이 단순히 그들이 생각하기에 듣기 좋은 재생목록을 함께 만들고 사용자들이 그 재생목록을 듣는다는 의미이다. (후에, Beats Music이 이와 동일한 전략을 채택했다.) 수작업으로 이루어진 큐레이션은 옳게 작동했지만, 이는 특정 큐레이터의 선택에 근거했기 때문에, 청취자 개인의 음악적 취향을 고려할 수는 없었다.


Songza와 마찬가지로, Pandora 역시 디지털 음악 큐레이션 방식을 위한 초기 플레이어들 중 하나였다. Pandora는 수동으로 음악의 속성에 태그를 붙이는 대신, 약간 더 진보된 접근법을 채택했다. 이는 인간 집단이 음악을 듣고 각 트랙에 대해 다수의 설명적 단어를 선택하여 이에 따라 트랙에 태그를 달았다. 그런 다음, Pandora의 프로그램은 단지 유사 음악에 관한 재생 목록을 만들기 위해 특정 태그로 음악을 선정할 수 있었을 뿐이었다.


같은 시기, The Echo Nest라 불린 MIT Media Lab 출신 음악 지식 집단이 탄생했고, 이들은 개인화된 음악을 위해 급진적이고 첨단의 접근법을 택했다. The Echo Nest는 알고리즘을 이용하여 음악의 음성 및 텍스트 컨텐트를 분석했고, 이는 음악 식별, 개인화된 추천, 재생목록 생성, 그리고 분석을 가능하게 했다.


마지막으로, 또 다른 접근법은 Last.fm이며, 이들은 오늘날까지 생존해 있으며 협업적 여과 기술이라 불리는 프로세스를 사용하여 사용자들이 좋아할지 모를 음악을 식별하지만 한순간에 더 많은 음악을 식별해 낸다.


그래서, 만일 이것이 다른 음악 큐레이션 서비스가 추천을 처리하는 방법이라면, Spotify의 마법적 엔진은 어떻게 작동하고 있을까? Spotify는 어떻게 다른 음악 서비스보다 더 정확하게 개별 사용자의 입맛을 맞추는 것처럼 보이는 것일까?


Spotify가 사용하는 3 가지 유형의 추천 모델


Spotify는 한 가지의 혁신적 추천 모델을 사용하는 것이 아니다. 그 대신, 다른 음악 서비스들이 사용하는 최상의 전략들 중 일부를 함께 뒤섞어 자신만의 고유한, 강력한 음악 발견 엔진을 만들어냈다. 


Discover Weekly 재생목록을 만들기 위해, Spotify는 3 가지 추천 모델을 채택하고 있다:


1. 협업적 여과 모델(Collaborative Filtering models)(본래 Last.fm이 사용했던 모델), 이는 사용자 행동과 다른 사용자의 행동 모두를 분석한다.

2. 자연어 처리(Natural Language Processing; NLP) 모델, 이는 텍스트를 분석한다.

3. 원음 모델(Audio models), 이는 음악의 소리만을 분석한다.

[그림 1] caption:Image source: Ever Wonder How Spotify Discover Weekly Works? Data Science, via Galvanize.2


이제 각 추천 모델이 어떻게 작동하는지 깊게 살펴보자!


음악 추천 모델 #1: 협업적 여과 모델


우선, 배경을 살짝 알아보자: “협업적 여과”라는 말을 듣는 사람들은 보통 Netflix를 떠올린다. Netflix는 이 방법을 사용해 추천 모델에 힘을 실은 최초의 회사 중 하나이기 때문이다. Netflix는 사용자가 채점한 별 수에 기반해 영화를 평가하고, 이를 기반으로 어떤 영화를 다른 유사 사용자에게 추천할 것인지를 이해한다.


Netflix가 성공한 후, 협업적 여과 기술의 사용은 급속히 확산됐으며, 현재 추천 모델을 만들려 할 때 종종 그 출발점이 되고 있다.


Spotify의 방식은 Netflix와 다르다. Spotify는 사용자가 채점한 별점에 기반한 체계를 가지고 있지 않다. 그 대신, Spotify가 사용하는 데이터에는 피드백이 포함되어 있다 - 특히, 각 음악의 스트리밍 횟수와, 사용자가 자신만의 재생목록에 그 음악을 저장했는지, 혹은 그 음악을 듣고 아티스트 페이지에 방문했는지 와 같은 추가적인 스트리밍 관련 데이터를 포함한다.


그렇다면, 진짜로, 협업적 여과 기술이란 무엇이고, 그것은 어떻게 작동하는가? 다음에 짧은 대화를 통해 그것을 설명한 수준 높은 해설을 제시한다:

[그림 2] Image source: Collaborative Filtering at Spotify, by Erik Bernhardsson, ex-Spotify.


무슨 일이야?

개인은 각기 다른 음악 선호도를 가지고 있어:

좌측에 선 사람은 트랙 P, Q, R, S를 좋아하는 반면, 우측에 선 사람은 트랙 Q, R, S, T를 좋아해.


협업적 여과 기술은 이 데이터를 사용해 이렇게 말한다:


“음… 당신 두 사람은 동일 트랙 중 3곡을 좋아하는군. Q, R, S. 아마도 유사 사용자일 거야. 그러니 들어본 적 없지만, 상대방이 듣고 있는 음악을 들어봐.”


따라서, 우측 사람은 트랙 P - 언급되지 않은 유일한 트랙이지만, 자신과 “유사한” 상대편이 즐기는 곡 -를 듣게 된다. 좌측 사람은 동일한 방식으로 트랙 T를 듣게 된다. 간단하지 않은가?


하지만, 다른 수백만 명의 사용자 선호도에 근거를 두고 수백만 명의 사용자용 추천 트랙을 산출하기 위해, Spotify는 실제로 이 개념을 어떻게 실무에서 사용할까?


행렬 수학에 기반해, Python 라이브러리를 사용해 수행했다!

[그림 3]


실제로 이 매트릭스는 규모가 거대하다. 각 행은 Spotify의 1억 4천만 명 사용자에 해당되고 - 당신이 Spotify를 사용하고 있다면, 당신 자신이 이 매트릭스의 한 행을 차지하게 된다 - 각 열은 Spotify 데이터베이스에 수록된 3천만 개의 음악 중 하나에 해당된다.


그다음으로, Python 라이브러리가 이 길고 복잡한 행렬 인수분해 식을 실행시킨다:

[그림 4]


과정이 완료되면, 마지막으로 우리는 X와 Y로 표시되는 두 가지 벡터로 마무리가 된다. X는 사용자 벡터로, 1명의 단일 사용자 취향을 나타내고, Y는 음악 백터로, 단 하나의 음악 프로필을 나타낸다. 

[그림 5] The User/Song matrix produces two types of vectors사용자/음악 행렬은 2 가지 벡터를 낳는다: 사용자 벡터와 음악 벡터. Image source: From Idea to Execution: Spotify’s Discover Weekly, by Chris Johnson, ex-Spotify.


이제 우리는 1억 4천만 명의 사용자 벡터와 3천만 개의 음악 벡터를 가지게 됐다. 이 벡터들의 실제 내용은 단지 본질적으로 자체 의미는 없는 한 덩어리의 숫자들이지만 비교를 하게 되면 거대한 유용성을 갖는다.


사용자들의 음악 취향이 내 취향과 가장 유사한지 알아내기 위해, 협업적 여과 기술은 나의 벡터를 다른 모든 사용자 벡터와 비교하여, 궁극적으로 어떤 사용자가 가장 근접하게 일치하는지 그 결과를 산출한다. 동일한 과정이 Y 벡터, 음악에 대해서도 진행된다. 당신은 한 곡의 벡터와 다른 모든 음악을 비교하고, 어떤 음악이 문제의 음악과 가장 유사한지를 알아낸다.


협업적 여과 기술은 꽤 일을 잘하지만, Spotify는 또 다른 엔진을 더함으로써, 더 좋은 결과를 낼  수 있음을 알고 있었다. NLP의 세계로 들어가자.


음악 추천 모델 #2: 자연어 처리(NLP)


Spotify가 채용한 두 번째 음악 추천 모델은 자연어 처리(NLP) 모델이다. 이 모델의 소스 데이터는, 그 이름에서 알 수 있듯, 자주 사용되는 오래된 단어들이다: 트랙 메타데이터, 뉴스 기사, 블로그, 그리고 기타 인터넷에서 발견되는 텍스트. 


컴퓨터가 인간이 말하는 내용을 이해하는 능력인 자연어 처리 기술은 그것 자체가 방대한 영역으로, 종종 감정(정서) 분석 API를 활용한다. 


NLP 뒤에 도사리고 있는 진짜 메커니즘은 이 글의 범위를 넘어서지만, 매우 높은 수준에서 어떤 일이 일어나고 있는지를 이야기해 보겠다: Spotify는 음악에 관한 블로그 포스트와 기타 텍스트를 지속적으로 찾으며 웹 세계를 어슬렁거리며 다닌다. 그리고 사람들이 특정 아티스트와 음악에 관해 뭐라고 이야기하고 있는지를 알아낸다. 어떤 형용사가 그리고 어떤 특정 언어가 아티스트들과 음악을 이용하는데 자주 사용되는지, 그와 함께 어떤 다른 아티스트와 음악 역시 논의되고 있는지를 알아낸다.


긁어들인 이 데이터를 선택 처리하는 Spotify의 세부 방법은 모르지만, Echo Nest가 처리하는 방법에 기반을 두고 어느 정도 통찰은 제공할 수 있다. 그들은 Spotify가 수집한 것과 같은 데이터를 그들이 “문화 벡터” 혹은 “상위 용어(top terms)”라고 부르는 것에 쏟아부을 것이다. 각 아티스트와 음악은 매일 변화하는 수 천 건의 상위 용어를 가지고 있었다. 각 조건은 연관된 가중치를 가지고 있었고, 이는 관련 중요성 - 대략, 누군가 그 음악 혹은 아티스트를 그와 같은 용어로 설명할 가능성 - 과 연결되어 있었다. 

[그림 6] Echo Nest가 사용하는 것과 같은 “문화 벡터” 혹은 “상위 용어”. Image source: How music recommendation works — and doesn’t work, by Brian Whitman, co-founder of The Echo Nest.


그런 다음, 협업적 여과 기술과 매우 비슷하게, NLP 모델은 이 용어들과 가중치들을 사용해 2 공의 음악이 유사한지 여부를 결정하는 데 사용될 수 있는, 그 음악을 표현하는 벡터를 만들어 낸다. 멋지지 않나?


음악 추천 모델 #3: 원음 모델(Raw Audio Models)


먼저 질문. 당신은 이렇게 생각할지도 모른다:


소피아, 우리는 이미 앞 2 가지 모델에서 매우 많은 데이터를 보유하게 됐다! 음악 자체를 분석할 필요가 있을까?


먼저, 세 번째 모델을 추가함으로써, 음악 추천 서비스의 정확성이 향상된다. 하지만, 이 모델 역시 두 번째 목적을 위해 작동한다: 앞 2 가지 유형과는 다르게, 원음 모델은 새로운 음악을 고려한다.


예를 들면, 당신의 가수-작곡가 친구가 Spotity에 저장한 음악을 취한다. 한 50회 정도 조회수를 가지고 있다고 가정하고, 협업적으로 그 음악을 여과하는 다른 청취자는 거의 없다고 가정하자. 게다가 아직까지 인터넷 어떤 곳에서도 그 음악이 언급되지 않으므로, NLP 모델은 그 음악을 골라내지 않을 것이다. 운이 좋게도, 원음 모델은 그것이 신규 트랙인지 인기 있는 트랙인지 구별하지 못하므로, 이 덕분에 당신 친구의 음악은 결국 인기 곡들과 함께 Discover Weekly에 들어갈 수 있다.


그러나 언뜻 비정형적으로 보이는 원음 데이터를 어떻게 분석할 수 있을까?


나선 신경망 네트워크(convolutional)를 사용한다!


나선 신경망 네트워크는 안면 인식 소프트웨어에서 사용되는 것과 동일한 기술이다. Spotify의 경우, 픽셀 대신 오디오 데이터에 사용하기 위해 이를 수정했다. 아래 신경망 네트워크 아키텍처의 사례를 제시한다:

[그림 7] Image source: Recommending music on Spotify with deep learning, Sander Dieleman.


이 특별한 신경망 레이어는 그림 좌측에 두꺼운 막대처럼 보이는 4 개의 나선 레이어와, 우측에 이보다 좁은 막대로 보이는 3개의 밀착된 레이어를 가지고 있다. 그림의 입력은 오디오 프레임의 시간-빈도를 나타내며, 이는 연쇄되거나, 함께 연결되어 음향 분석도(spectrogram)를 형성한다.


오디오 프레임은 이 나선 레이어를 통과하여, 마지막 부분을 통과한 후, 전체 시간 축을 가로질러 “전체 재생 시간 집산(global temporal pooling) 레이어에 쌓이며, 음악의 재생 시간에 걸쳐 학습된 특성을 효과적으로 통계 처리한다. 


처리 완료 후, 신경망 네트워크는, 추정 박자표(time signature), 키, 모드, 템포, 소리 크기를 포함해, 그 음악을 이해할 결과를 내놓는다. 아래는 Daft Punk의 “Around the World”의 30초 정도의 분향에 대한 데이터 구성이다.

[그림 8] Image source: Tristan Jehan & David DesRoches, via The Echo Nest.


결론적으로 말해서, 이 음악의 핵심 특성에 관한 이러한 해석을 통해 Spotify는 음악들의 근본적인 유사성을 이해하므로, 어떤 사용자가 그 음악을 즐길 수 있을지를 사용자의 청취 이력에 기반해 이해하게 된다.


이것이 Spotify의 음악 추천 과정을 처리하는 3 가지 주요 음악 추천 모델 유형의 기본이며, 결과적으로 Discovery Weekly 재생목록에 힘을 싣는 방법이다!

[그림 9] 


물론, 이 음악 추천 모델들이 모두 Spotify의 거대 생태계에 연결되어 있으며, 이 생태계에는 거대한 양의 데이터가 포함되어 있고, 많은 하둡(Hadoop) 클러스터를 사용해 음악 추천 규모를 확장하고 이 엔진들이 거대 행렬, 끝없이 이어지는 온라인 음악 기사들, 그리고 엄청난 양의 오디오 파일들이 작동하게 한다.


나는 이것이 정보를 제공하고 나에게서 처럼 당신의 호기심을 자극했길 바란다. 나는 당분간, 이면에서 지속되는 모든 기계 학습 과정에 감사하는 동시에 내가 청취할 새로운 선호 음악을 찾으며, 나를 위한 Discovery Weekly를 통해 음악을 들을 것이다.

매거진의 이전글 제품 말고 소비자를 업그레이드하라
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari