Showing posts with label 음악추천. Show all posts
Showing posts with label 음악추천. Show all posts

Saturday, April 11, 2020

Q&A. 음악 유사도를 이용한 추천엔진 개발


질문


프로젝트로 음악의 특징 유사도를 이용한 내용기반 음악 추천시스템을 만드려 하고 있고, 현재 논문들을 서베이중입니다.
그런데, 음악의 어떤 특징을 추출해야 할지가 고민입니다. 널리 알려진 방법으로는 MFCC를 추출하여 DTW 기법을 활용하여 유사도 계산을 하는 것인데요, 이것이 과연 제 주제에 적합한지 아직 직관이 없습니다.
설문조사 결과, 두 음악이 유사한지를 판단하는 기준 중 가장 많은 표를 받았던 게 음악의 멜로디와 빠르기였는데, MFCC가 이러한 정보를 담을 수 있는지도 모르겠습니다

답변


mfcc에는 그런 정보가 거의 없습니다. 템포는 상대적으로 쉽게 추출가능하지만 (librosa 등) 멜로디는 추출과 유사성 비교 둘 다 까다롭습니다. 어느정도의 성능을 원하시는지 모르겠지만 유사한 곡을 찾는 성능이 프로젝트에서 제일 중요한 핵심이 아니라면 mfcc 기반으로 하셔도 뭔가 작동하긴 할겁니다.


추가 질문


국내 논문을 보던중에 크로마레벨표현으로 멜로디 유사도를 구현한 논문을 읽어봤습니다. 여기서는 MRR이 0.713으로 수치상 꽤 높은 값이 나왔는데, 혹시 멜로디 추출과 유사성 비교가 까다롭다고 하신 이유를 알 수 있을까요?

답변


mfcc는 수식으로 정확하게 정의되고 그 특징이 잘 알려져있죠. 그리고 지금 보니 본문에서 DTW를 활용한다고 하셨는데 그렇다면 음악을 mfcc의 수열로 나타내고 그 수열의 유사성이 음악의 유사성을 나타낸다는 가정일텐데, 더 흔하게는 주어진 음악의 시간축에서의 평균과 표준편차를 씁니다. 이렇게하면 성능이 대단히 뛰어나지는 않겠지만 각 음악 신호가 갖는 소리로서의 특징(음색)이 반영된 추천엔진으로 작동을 합니다. 그리고 음색은 음악을 구성하는 악기나 장르와 관련이 깊으므로 추천엔진이 엄청나게 취향을 저격해주진 않겠지만 크게 실패하지도 않겠죠.
반면 멜로디를 추출하고 거기에서 유사성을 비교한다면, 우선 멜로디가 정확하게 추출된다는 가정이 필요하고 (대충 되긴 합니다만) 여기에서는 정말로 멜로디라는 시계열 데이터가 유사한지 찾아내는 잣대가 필요합니다. 멜로디는 곡 전체를 아우르는 시계열 데이터인데 그렇다면 예컨대 4분짜리 곡 전체의 멜로디가 다 비슷해야 된다는것인지 (물론 그건 아니겠죠), 아니면 일부가 비슷하면 된다는것인지, 그렇다면 일부만 비슷한 멜로디를 어떻게 찾아낼 수 있을지 (메트릭을 잘 디자인해야하고) 등등 문제가 생각나네요. 결정적으로, 유저들은 멜로디가 비슷하면 비슷한 음악이라고는 응답하긴 했지만 글쎄요, 그게 어떤 유사성을 의미하는지 알기도 어렵고, 전혀 다른 장르인데 멜로디가 비슷하면 정말로 그 멜로디의 유사성이 호불호의 중요한 기준이 된다고 말할수있을지 회의적입니다. 따라서 이런 불확실성을 해소하는 것이 프로젝트의 목적이라면 얼마든지 재미있는 연구를 진행할 수 있습니다. 그렇지 않다면 굳이 시간을 들일 필요가 없구요.


Wednesday, November 2, 2016

판도라 - Thumbprint radio 간단 요약

원문은 https://engineering.pandora.com/the-magic-behind-thumbprint-radio-2c5b8103b71#.ekp74phzd 입니다.



  • 2014년 11월, (?) analyst, product maanager, security engineering manager, data scientist + 6 engineers 총 10명의 팀이 3일간 진행된 2014 하반기 사내 해커톤에서 My Thumb Mix를 만듬. 청취자가 '좋아요'를 누른 곡만 모아놓은 라디오를 제공하자는 아이디어
  • 회사 내부에서 좋은 반응을 받음. Product management, computational programming, data science 3개 팀에서 모두 좋은 반응을 얻어서 2015년 1월에 작은 팀 결성

아이디어

  • 판도라는 각 트랙마다 450가지 음악적 특성을 요약한 데이터를 보유. 이 데이터를 이용해 곡을 추천함. 
  • 사용자의 취향은 각 라디오 스테이션에서 사용자가 누른 좋아요/싫어요를 바탕으로 추출됨
  • Thumbprint radio는 이러한 기존 서비스보다 더욱 개인화된 라디오. (라고 주장함.)

연구 및 초기모델 개발

우선, 처음에 팀에서는 아래와 같은 내용을 연구함.
  • 여러가지 '좋아요' 곡을 어떻게 연결할 것인가
  • 어떤 곡에서 출발할 것인가
  • 새로운 음악을 어떻게 추가해넣을 것인지
총 8가지 초기모델을 만들고 이를 A/B 테스트 한 결과,
  • 완전 무작위로 섞는것은 안됨.
  • 비슷한 음악을 너무 오래 틀어주면 안됨
  • 비교적 최신곡, 흔한 곡으로 출발할 것
  • 약간의 무작위성과 새로운 곡을 섞어서 듣는 재미를 유지할 것
가 중요하다는걸 깨달음. 이 교훈은 판도라의 기본 라디오 기능에도 적용됨.

최종적으로는 아래의 두 가지 방법을 고려함.
  • 트랙간 무작위 재생 (track-level random walks): 이는 '좋아요'가 뜬 각종 트랙을 전부 랜덤으로 재생하는 것. 이 방법의 단점은 - 
    • 곡 선정 방식을 구체적으로 튜닝하기 어려우며,
    • 특정 곡만 계속 반복해서 재생하게 될 수가 있음.
  • 스테이션 단위로 무작위 재생:
    • 장점
      • 각 곡의 유형(장르 등)을 명확하게 설명할 수 있음
    • 단점
      • 각 클러스터(=스테이션 내의 트랙들)를 이용자가 얼마나 좋아하는지 알기 어렵다는 것 (즉, 스테이션 내의 트랙 중에 좋아요를 누른 것이 있다고 해서 그 스테이션에 있는 다른 트랙까지 좋아하는것 아님)
      • 트랙 간에 전환이 갑작스러울 수 있음
(역자 주: 이 부분에서 결과적으로 어떻게 문제를 해결했는진 생략되어있군요.)

최종적으로는, "음악적으로 말이 되는 무작위 재생"을 목표로 삼음.

제품 출시

최대 1억명의 이용자에게 이 서비스를 제공할 수 있도록 열심히 함.
(역자 주: 대폭 생략합니다.)

결과

상위 500개 스테이션보다 높은 유저 몰입(listening session engagement)을 보여줌
등등 자랑.