top of page

FLO가 비슷한 음악을 찾는 방법


안녕하세요 추천기술 Unit 블루입니다. 이번 포스트에서는 사용자가 더 좋아할 만한 추천 플레이리스트를 만들 수 있도록 사용자가 현재 듣고 있는 음악과 비슷한 음악을 찾는 방법에 대해서 알아보겠습니다.



비슷한 음악은 어떻게 찾을 수 있을까요?

비슷한 음악은 다양하게 정의할 수 있습니다. 사용자가 들은 음악의 앞뒤에 함께 들었던 음악 혹은 사용자들이 생성한 플레이리스트에 함께 수록된 음악들이 서로 비슷한 음악이라고 정의할 수 있습니다.

앞에서 제시한 비슷한 음악을 정의하는 가정들은 모두 사용자들의 사용 경험을 기반으로 한 방법입니다. 사용자 경험을 기반으로 비슷한 음악을 찾는 경우, 사용자들이 많이 듣는 트랙일수록 비슷한 트랙을 찾을 수 있는 가능성이 증가합니다.

그러나, 오늘 등록된 음악이나 많이 듣지 않는 음악의 경우에는 해당 음악에 대한 사용자들의 경험이 부족하기 때문에, 많은 경험을 반영하지 못하고 비슷하지 않은 음악을 찾을 가능성이 존재합니다. 이를 콜드 스타트 문제라고 합니다. 그리고 음악 자체의 고유한 특성이 반영되지 못한다는 한계도 있습니다. 콜드 스타트 문제와 음악이 가진 고유한 특성을 잘 반영한 비슷한 음악을 찾기 위해서는 오디오가 가진 고유한 특징을 함께 활용해야 합니다.

추천기술 Unit은 이를 위해 음악 데이터가 가진 고유한 특징인 오디오 표현을 추출해 오디오가 유사한 음악을 찾는 모델의 개선을 위한 리서치를 진행했습니다. 지난 연구들은 딥러닝을 이용한 CNN(Convolutional Neural Networks) 기반의 오디오 표현 모델을 지도 학습(Supervised Learning) 방식으로 학습한 다음, 학습된 모델에서 오디오 표현을 추출한 결과의 유사도 비교로 비슷한 음악을 찾았습니다.

지도 학습 방식(Self-Supervised Learning)으로 모델을 학습했기 때문에 학습을 준비하기 위한 과정에서 어려운 점도 있었고 CNN 기반의 모델만을 이용했기 때문에 가질 수밖에 없었던 한계도 분명히 있었습니다. 따라서 저희는 이번에 비슷한 음악을 보다 더 잘 찾기 위해 학습 방식을 지도 학습 방식을 자기 지도 학습 방식인 Contrastive learning으로 변경했고, CNN만 적용한 모델이 아닌 트랜스포머(Transformer)를 추가로 적용한 모델로 교체해 오디오 표현 추출 모델을 변경했습니다.



지도 학습과 음악 데이터 레이블링

딥러닝 모델을 학습하기 위해서는 풍부한 예시로 구성된 대량의 데이터가 필요합니다. 데이터가 가진 복잡한 패턴들을 학습하고 일반화해 정확한 예측을 가능하게 해야 하기 때문입니다.



딥러닝 모델 학습에는 다양한 사례를 포괄하는 데이터가 많을수록 좋습니다. 다양한 데이터는 모델이 데이터 세트에 숨겨진 복잡한 패턴을 감지하는 데 도움을 줍니다. 데이터를 준비하는 과정 중 하나인 데이터 레이블링(Data Labeling)은 딥러닝 모델 학습에서 굉장히 중요한 단계입니다. 여기서 말하는 데이터 레이블은 딥러닝 모델이 데이터 샘플을 입력으로 받아 답으로 내놓을 정보입니다. 다행히 데이터 레이블링을 지원하는 여러 프로그램이 많이 만들어져 레이블링 작업은 이전만큼 어렵지 않습니다. 이러한 프로그램을 사용해 딥러닝 모델 학습에 필요한 데이터를 더욱 효과적으로 준비할 수 있습니다.



레이블링을 지원하는 프로그램이 많이 출시되어 큰 도움을 주었지만, 레이블링 작업은 여전히 비용적으로 시간과 비용 측면에서 부담스러운 작업입니다. 딥러닝 학습에 대량의 데이터와 레이블링 작업의 복잡성 때문입니다. 특히, 음악 도메인은 데이터를 해석하고 그에 맞는 레이블을 붙이기가 특히 어렵습니다. 아래와 같은 이유로 오디오 데이터를 해석하고 그에 맞는 레이블링이 어려울 수 있습니다.


1. 사람들의 음악에 대한 개인적인 취향

음악에 대한 평가는 사용자마다 주관적입니다. 저는 우울할 때 슬픈 발라드를 주로 즐겨 듣는 편입니다. 다른 사람들은 우울한 감정을 해소하기 위해 신나는 노래를 선호합니다. 이렇게 동일한 음악임에도 레이블은 사람마다 다른 레이블을 붙일 수 있습니다.


2. 음악을 듣는 환경의 차이

같은 음악도 콘서트장에서 라이브로 들을 때와 집에서 FLO를 통해 들을 때는 느낌이 다릅니다. 동일한 음악을 공연장에서 들을 때와 이어폰으로 듣는 것은 완전히 다른 경험입니다. 음악 데이터가 가지는 음높이, 음색, 소음 등의 다양한 특성이 그 원인이 될 수 있습니다. 같은 소리라도 환경에 따라 오디오에 대한 레이블이 달라질 수 있습니다.


오디오 데이터 레이블링의 어려움을 극복하기 위해 기존 연구에서는 음악 데이터가 이미 포함하고 있는 다른 정보들을 주로 활용했습니다. 예를 들어, 음악의 장르, 아티스트, 가사 등이 있습니다. 이러한 정보들은 음악 데이터에 이미 포함되어 있기 때문에 레이블링에 사용할 수 있습니다. 음악이 가지고 있는 태그 정보를 정답으로 삼아 모델 학습 시 데이터 레이블로 사용되었습니다. 오디오를 입력으로 받고 해당 태그 정보를 정답으로 삼아 한 쌍의 데이터 샘플을 통해 지도학습 방식으로 모델을 학습시킵니다.


지도 학습은 딥러닝 모델의 학습 방법의 하나입니다. 입력 데이터와 그에 대응하는 레이블(정답)이 한 쌍으로 주어지는 상황에서 모델을 학습하는 방법입니다. 모델은 분류나 예측 결과를 도출하고 오차를 최소화하는 방식으로 모델의 성능을 개선합니다. 저희가 현재 사용하고 있는 모델 역시 지도 학습으로 학습된 모델입니다. 음악의 태그 정보 중 아티스트 정보를 레이블로 사용하였고 딥러닝 모델은 해당 음악이 어떤 아티스트의 곡인지 판별하는 방식으로 학습되었습니다.



지도 학습 방식으로 학습된 모델이 효과적인 성능을 보였지만, 아티스트 태그를 레이블로 사용하는 방식 몇 가지 제약 사항이 있었습니다. 예를 들면, 학습된 모델로 사용자가 원하는 음악과 비슷한 음악을 찾아내는 작업을 수행했을 때, 동일 아티스트의 음악이 과도하게 추천되는 현상이 발생했습니다. 음악의 장르와 분위기가 사용자들의 청음 취향과 상이 하더라도, 동일한 아티스트를 기반으로 비슷한 음악이 찾아졌습니다.


그다지 이상한 현상은 아닙니다. 지도 학습으로 학습된 모델은 오디오 데이터의 레이블에 포함된 제한적인 정보만을 학습하기 때문입니다. 사전에 모델을 학습하는 방식인 아티스트를 맞추는 태스크에 국한된 정보 바탕으로 또 다른 태스크를 수행하려 하면 당연히 성능에 제한이 생깁니다. 한계를 극복하고 더욱 일반화된 특성을 잘 반영한 모델을 학습하기 위해서는 어떻게 해야 할까요? 우리는 이를 위해 '자기 지도 학습'으로 학습하기로 했습니다. 아티스트 정보를 레이블로 사용하는 지도 학습에서 벗어나, 레이블링에 대한 비용을 줄이고 특정 태스크에 의존하지 않는 음악 모델을 새롭게 학습했습니다.



자기 지도 학습을 통한 음악 데이터 모델링의 새로운 접근

지도 학습과 비지도 학습, 이 두 가지 방법론은 딥러닝 모델에 널리 사용되는 학습 방법입니다. 오늘 소개해 드릴 '자기 지도 학습'은 이 두 방법의 장점을 결합한 형태의 학습 방법입니다. 자기 지도 학습은 비지도 학습에 속하는 학습으로 비지도 학습처럼 미리 정해진 정답 즉, 레이블 없이 데이터를 학습합니다. 하지만 클러스터링 같은 우리가 아는 비지도 학습과 동일하지는 않습니다. 데이터 샘플에 정답으로 미리 준비된 데이터 레이블은 없지만, 데이터 샘플 자체에서 레이블을 정해 지도 학습과 같은 방식으로 모델을 학습합니다. 레이블이 없는 데이터셋으로 모델을 학습할 수 있게 해주며, 큰 비용이 요구되는 데이터 레이블링 작업을 생략할 수 있게 됩니다.



그렇다면 "이 학습 방법이 실제로도 유익한가?"는 위 그림을 통해 알 수 있습니다. 최근의 다양한 연구 결과가 보여주듯, 자기 지도 학습으로 사전 학습한 후 추가로 레이블로 지도 학습을 수행하면 모델은 더 높은 성능을 보이는 것을 확인할 수 있습니다. 자기 지도 학습으로 사전 학습된 모델은 레이블로 데이터를 학습하지 않았음에도 불구하고, 데이터가 가진 고유한 특징과 구조를 이미 잘 표현하고 있음을 보여줍니다. 사전 학습 이후에 수행될 파인튜닝(Fine-Tuning)서도 사용될 데이터를 이미 잘 표현하고 있기 때문에 훌륭한 성능을 보입니다.

자기 지도 학습은 대표적으로 두 가지 방법이 있습니다. Self prediction 방식과 Contrastive learning 입니다. 이 중에서도 우리 팀은 오디오 데이터가 가진 고유한 특징을 잘 표현하도록 하기 위해 Contrastive learning 방식의 자기 지도 학습을 적용했습니다.



Contrastive Learning

자기 지도 학습은 데이터 레이블링이 필요가 없는 강력한 학습 방법입니다. 보유한 데이터 세트 내에 레이블이 없어도 '정답'을 찾아내는데 효과적인 학습 방법인 셈이죠. Contrastive Learning은 어떻게 정답, 즉 레이블을 정할까요?

Contrastive : 대조적인, 차이를 보여주는

Contrastive 단어는 '대조적인'이라는 의미가 있습니다. 학습 방법으로 풀어 해석하면 데이터 간의 차이점을 모델이 잘 인식하고 표현할 수 있게 학습하는 방식을 말합니다. 같은 데이터는 가깝게, 다른 데이터는 멀게 위치하도록 모델을 학습시킵니다. 학습의 핵심은 바로 기준의 설정입니다. 데이터가 '같다' 혹은 '다르다'를 평가하는 기준은 어떻게 설정할 것인가? 이 부분이 바로 contrastive learning이 중점을 두는 부분입니다. 잘 정의된 기준으로 데이터의 위치를 결정하게 함으로써, 모델이 데이터의 본질적인 특징을 더 정확하게 학습할 수 있게 됩니다.



일반적으로 Anchor, Positive 그리고 Negative 세 가지 데이터 샘플을 사용합니다. Anchor 데이터 샘플이 기준점이 됩니다. Positive 데이터 샘플은 기준인 Anchor와 같은 클래스를 가지는 데이터, 반면 Negative 데이터 샘플은 기준인 Anchor와 다른 클래스를 가지는 데이터입니다. 학습이 시작되기 전, 이 세 가지 샘플은 아무 규칙 없이 제멋대로 위치한 상태입니다. 학습이 진행되면서 모델은 Anchor와 Positive 사이의 거리를 줄이고(즉, 더 가깝게 표현), 반대로 Anchor와 Negative 사이의 거리는 늘려갑니다(즉, 더 멀게 표현).

Contrastive learning에 대한 연구가 활발하게 진행되면서 2020년에는 컴퓨터 비전 분야에서 주목받는 SimCLR(A Simple Framework for Contrastive Learning of Visual Representations) 프레임워크가 발표되었습니다. SimCLR는 모델이 표현을 잘 추출할 수 있도록 비교적 간단한 형태로 적용한 프레임워크 입니다. 복잡한 구조나 추가 요소 없이도 생각보다 우수한 성능을 발휘함으로써 다양한 도메인의 연구에서도 Contrastive Learning을 적용하도록 만들었습니다.



SimCLR은 이미지 데이터를 새롭게 생성하고 분류하는 과정으로 학습을 진행합니다. 입력 이미지에 랜덤한 변환을 적용해 한 쌍의 이미지를 추가로 생성합니다. 변환이 적용된 이미지는 원본 이미지가 가진 기본적인 특징들은 보존되면서 색상, 크기, 각도 등이 조금씩 다른 새로운 이미지 샘플입니다.

변환으로 생성된 이미지 쌍(Pair)은 원본 이미지와 동일한 특징을 가지기 때문에 Positive 관계를 가진다고 정의합니다. 다른 이미지에서 생성된 이미지는 서로 다른 특징을 가지므로 Negative 관계를 가진다고 가정합니다.

  • Positive Pair : 동일한 이미지 데이터에서 생성된 가까워져야 하는 쌍

  • Negative Pair : 서로 다른 이미지 데이터에서 생성된 멀어져야 하는 쌍

생성된 이미지 데이터 쌍들은 각각 Base Encoder라는 CNN 기반의 이미지 특징 추출 모델을 통과합니다. 이 과정에서 이미지에서 특징을 추출하여 벡터 형태로 표현합니다. 1차로 추출한 벡터를 h 벡터라 부릅니다. h 벡터는 이미지의 특징을 포함하고 있지만, 유사도 비교를 위해서 아직 거쳐야 할 작업이 남았습니다. 복잡한 벡터를 좀 유사도 비교를 위한 간단한 벡터로 표현하기 위한 과정이 필요합니다. h 벡터를 MLP(Multi-Layer Perceptron)모델에 추가로 통과시켜 2차로 추출된 z 벡터로 압축합니다. 최종적으로는 압축된 z 벡터를 사용하여 이미지 쌍들의 유사도를 측정합니다. Positive Pair는 유사도 측정 결과가 최대한 높게 Negative Pair의 유사도 측정 결과가 낮게 되도록 모델을 학습합니다.



SimCLR의 학습 과정은 특별한 매트릭스 연산을 사용하여 진행합니다. 위 그림은 수행하는 매트릭스 연산을 도식화한 것 입니다.

동일한 모양은 positive pair로 다른 모양은 negative pair를 나타냅니다. 점선으로 표시된 이미지는 변환으로 추가로 생성된 이미지입니다. 모델 학습의 목표는 positive pair(같은 모양)는 더 가까워지는 방향으로 negative pair(다른 모양)는 더 멀어지는 방향으로 모델이 표현하게 하는 것입니다. 입력 이미지에서 특징을 추출하면서 비슷한 특징을 가진 쌍은 더 유사하게 상이한 특징을 가진 이미지로 묶인 쌍은 더 다르게 표현하도록 모델이 학습되는 프로세스입니다. 학습이 완료되면 모델은 각 이미지에서 고유한 특징을 잘 반영하는 이미지 표현을 일관성 있게 추출할 수 있습니다.

왜 컴퓨터 비전 분야의 연구인 SimCLR를 설명하고 있는 걸까요? 저희 팀이 SimCLR 프레임워크를 오디오 도메인에 적용하려고 시도했기 때문입니다. CLMR 이라는 연구는 SimCLR 프레임워크를 이미지 도메인에서 벗어나 오디오 도메인에 적용했습니다. 저희는 이 연구에 영향을 받아 오디오 데이터의 특징을 추출하는 FLO만의 오디오 표현 추출 모델을 개발했습니다.



CLMR: SimCLR의 오디오 적용 버전

CLMR(Contrastive Learning of Musical Representations)은 컴퓨터 비전 도메인에 적용된 연구인 SimCLR을 오디오 데이터에 특화된 변환 작업과 함께 적용하여 뛰어난 성능을 보여준 재미있는 연구입니다. SimCLR의 오디오 도메인 버전이라고 생각하시면 됩니다. 기존 오디오 도메인의 연구들은 CNN 기반 모델을 주로 지도 학습 방식으로 학습하는데 많은 데이터 레이블이 필요했습니다. CLMR은 contrastive learning 방식을 도입해 상대적으로 적은 데이터만으로 높은 성능을 가능하게 만들었습니다. CLMR의 모델 아키텍처는 아래와 같습니다.



CLMR은 SimCLR와 같은 방식으로 오디오 데이터 샘플을 추가 생성하지만 데이터 변환이 오디오 도메인에 특화되어 있습니다. 데이터 변환을 위해 여러 단계를 거치는 파이프라인을 사용하고 각 단계는 미리 설정된 확률에 따라 트리거됩니다. 아래는 CLMR에서 오디오 샘플을 확장 생성을 위해 적용된 오디오 변환 방법입니다.

  • RandomResizeCrop ( 100% ) : 전체 오디오 길이에서 랜덤한 2.6초만큼의 오디오 랜덤 크롭

  • PolarityInversion ( 80% ) : 음악의 파형이 있는데, 파동의 “양”을 “음”으로 0에 대칭으로 변경

  • Noise ( 1% ) : 유니폼 한 랜덤 노이즈값을 추가

  • Gain ( 30% ) : 음악의 볼륨(음향)의 높낮이를 랜덤하게 변형

  • HighLowPass ( 80% ) : 랜덤하게 HighPassFilter( 저음 제거 고음 강조 )와 LowPassFilter( 저음 강조 고음 제거 ) 중 하나를 선택해 통과

  • Delay ( 30% ) : 오디오가 재생되기 전에 일정 시간의 지연을 추가

  • PitchShift ( 60% ) : 오디오의 음높이와 음색을 변경

  • Reverb ( 60% ) : 잔향을 추가해 공간감 혹은 입체적인 음향 추가

변환 생성된 각각의 오디오 쌍들은 SimCLR과 동일한 방법으로 학습되어 각 오디오를 표현하는 벡터를 추출합니다. 오디오에서 h 벡터를 1차로 추출하는 모델은 전통적으로 오디오 표현을 추출하는 CNN 기반을 모델을 그대로 사용했습니다. CLMR은 이러한 방법으로 지도 학습만으로 학습된 기존 모델들과 비교했을 때 뛰어난 성능을 보였습니다.



모델 아키텍처 업데이트: AST 적용

CLMR은 높은 성능을 보였지만, 입력 오디오의 길이가 2.6초로 저희가 그대로 적용하기는 짧았습니다. 우리는 실제 음악 청취 경험은 훨씬 더 긴 시간 동안이므로 그대로 적용하게 되면 유사도 측정에 매우 많은 연산이 필요하게 됩니다. 입력 오디오 길이를 늘이기 위해 1차로 벡터를 추출할 때 사용하는 CNN 기반 모델을 교체했습니다.

오디오 표현 추출에 적용 가능한 여러 모델들 중 AST(Audio Spectrogram Transformer) 모델을 선택했습니다. AST 모델은 컴퓨터 비전 분야에서 활용되는 트랜스포머 모델인 ViT(Vision Transformer)모델을 오디오 도메인에 적용한 모델입니다. 기존의 CNN만을 적용하게 되는 경우 오디오의 길이가 길어질수록 성능이 저하되는 문제가 있었습니다. 입력 오디오 길이의 한계 극복을 위해 트랜스포머 구조를 적용한 AST 모델이 오디오 길이를 늘이는 데 적합하다고 판단했습니다.



위의 그림은 AST 모델의 아키텍처입니다. 간단하게 설명을 해드리면 모델은 오디오를 이미지로 변환한 후, 미리 정해진 크기로 정의된 패치 크기로 분할해 트랜스포머의 입력으로 사용하는 모델입니다. 기존 AST 모델도 최대 10초까지의 오디오를 처리했지만, 패치 분할 방식을 튜닝해 오디오 입력 길이를 30초로 확장하였습니다.

CNN 모델을 AST 모델로 교체하며 CLMR에서 사용한 오디오 변환 파이프라인의 일부 스테이지도 함께 변경되었습니다. 오디오를 2.6초 만큼 랜덤하게 선택하던 스테이지가 30초로 랜덤 선택으로 확장되었습니다. 또한, 마지막 스테이지에서 오디오 데이터를 이미지 데이터인 스펙트로그램(Spectrogram)으로 변환하는 스테이지가 추가 되었습니다.



모델로 비슷한 음악 찾기

우리가 학습한 모델은 30초 분량의 오디오를 입력으로 받아 벡터 형태로 표현합니다. 추출한 벡터들을 다양하게 활용할 수 있지만, 현재 듣고 있는 음악과 유사한 음악을 찾아보았습니다.



다양한 음악들은 동일한 음악이라도 서론(Intro) 부분과 결론(Outro) 부분이 다른 경우가 많습니다. 따라서 곡의 여러 구간에서 벡터를 추출하여 비슷한 음악을 찾는 데 사용했습니다. 한 음악 추출한 여러 개의 벡터를 병합하기 위해 평균을 계산하는 Mean 연산과 순차적으로 벡터를 이어 붙이는 Concatenation 연산을 적용해 결합했습니다.


평가 결과 Concatenation 연산을 적용한 경우, Mean 연산에 비해 비슷한 음악을 더 잘 찾아내는 경향을 보였습니다.


물론, 동일한 음악을 판별하는 데는 뛰어난 성능을 보이지만, 일부 편곡한 음악도 비슷한 음악으로 잘 검출하는 인상적인 결과를 보였습니다.




앞으로의 계획

이번 포스트에서는 추천기술 Unit에서 음악의 고유한 특징으로 비슷한 음악을 찾기 위해 진행한 내용에 대해서 다루었습니다.

현재 목표는 학습한 오디오 표현 추출 모델을 필요한 다양한 태스크에 맞게 파인튜닝 해서 추천 플레이리스트에 다양하게 활용할 수 있는 추가 모델을 만드는 것입니다. 추후 목표는 Contrastive Learning을 적극 활용해 다른 도메인의 데이터와 오디오 데이터를 함께 학습할 예정입니다.

이를 통해 사용자에게 맞는 음악 추천 성능을 개선해서, 음악 청취 경험을 한층 더 풍성하게 해줄 수 있는 그날까지 계속 발전하겠습니다.




bottom of page