top of page

유저가 원하는 무드의 플레이리스트를 생성하는 방법


안녕하세요 추천 기술 유닛 아이리스입니다.

해안도로를 달릴 때, 혼자 감성에 빠질 때, 운동을 파이팅 넘치게 하고 싶을 때, 등 사용자들은 다양한 상황 속에서 음악을 즐길 수 있습니다. 이때, 사용자가 처한 상황에 딱 맞는 음악 리스트를 추천해 줄 수 있다면 어떨까요?

본 글에서는, 사용자가 원하는 상황, 무드에 맞는 플레이리스트를 생성하는 방법에 대해 알아보겠습니다.


FLO의 플레이리스트

현재 서비스에서는 아래 사진과 같이 사용자 혹은 FLO에서 직접 큐레이팅하여 생성한 플레이리스트를 제공하고 있습니다.

하지만 더 나아가, 이미 제공된 플레이리스트 이외에 자신이 직접 원하는 플레이리스트를 관련 텍스트만 넣어 쉽게 생성할 수 있으면 편리할 것입니다. 이와 비슷하게 몇몇 음악 스트리밍 서비스에서는 원하는 무드 버튼을 누르면 관련 음악 목록을 제공하는 기능을 제공하고 있습니다.



Joint Embedding Models for Music and Text

텍스트에 맞는 플레이리스트 생성 기능을 구현하기 위해서는, 오디오와 텍스트가 함께 학습되는 joint embedding 아키텍처가 필요합니다.

기존에 하나의 데이터타입(텍스트, 이미지)을 표현하는 임베딩 벡터를 생성하고자 할 때, 모델에서 단일 타입 데이터를 입력하여 학습하였습니다. 하지만 최근에 여러 생성 모델을 보면 텍스트를 넣으면 관련 이미지를 생성하거나 하는 기능들을 제공하는데, 이러한 기능을 구현할 때, 하나의 데이터 종류가 아닌 여러 타입의 데이터를 함께 학습하는 구조로 되어 있어야 합니다.

우리는 텍스트와 오디오 데이터, 두 개의 데이터 타입을 학습해야 하므로 하나의 텍스트 임베딩 모델과 하나의 오디오 임베딩 모델을 준비하여 이를 함께 학습하는 방식으로 모델을 훈련하였습니다.


학습 데이터 준비

우리가 학습하고자 하는 모델에서는 음악 데이터와 이에 대응된 텍스트가 있어야 합니다. 현재 우리가 보유한 음악 데이터 중 인기도 기반으로 약 37만 곡 음악 파일을 학습하기로 하였으며, 이 음악 데이터와 대응하기 위한 텍스트 데이터로 크게 음악에 대한 짧은 설명, 음악에 대한 긴 설명, 플레이리스트 제목 데이터로 분류하여 수집하였습니다. 우선 음악에 대한 짧은 설명 데이터는 음악 자체의 메타 데이터인 앨범명, 아티스트명, 장르명 등이 있습니다. 음악에 대한 긴 설명 데이터는 대응된 음악에 관해 설명하는 긴 문장 데이터입니다. 다른 텍스트 데이터들에 비해 이 데이터는 사람이 하나하나 태깅하지 않는 이상 수집이 어렵기 때문에 사용한 데이터 중 일부는 LLM을 사용하여 데이터를 생성했습니다. 플레이리스트 제목 데이터는 현재 FLO 내 서비스되고 있는 플레이리스트 데이터를 사용하였습니다.

텍스트 데이터 종류

예시

음악에 대한 긴 설명

Empire State of Mind는 뉴욕의 대도시적인 분위기와 문화, 그리고 JAY-Z와 Alicia Keys가 언급하는 다양한 장소들을 통해 뉴욕의 다양한 면을 얘기하는 곡입니다. 이 곡은 전체적으로 자신감 있고 열정적인 분위기를 가지고 있으며, JAY-Z와 Alicia Keys의 보컬 듀엣이 형성하는 감성적인 무드가 곡 전체적인 분위기를 더욱 강조합니다. 곡의 멜로디 라인에는 시티팝과 힙합의 요소가 혼합되어서 뉴욕의 다양한 문화적인 측면을 반영하고 있습니다.

음악에 대한 짧은 설명

​Whisky on the Rock 우리들의 블루스 OST 김연지 기타>OST/BGM

플레이리스트 제목

유산소할 때 듣기 좋은 곡


모델 아키텍처

학습에 사용한 모델은 two tower model 형태로써, 오디오가 입력으로 들어가서 오디오 임베딩 벡터를 생성하는 오디오 임베딩 모델과 텍스트가 입력으로 들어가서 텍스트 임베딩 벡터를 생성하는 텍스트 임베딩 모델을 사용합니다. 이 두 모델을 동시에 학습하여 오디오 임베딩 벡터와 텍스트 임베딩 벡터가 한 벡터 공간 내 표현될 수 있도록 합니다. 학습 방법은 함께 대응된 오디오와 텍스트의 벡터 사이의 거리는 가깝게, 대응되지 않는 오디오와 텍스트 벡터 사이의 거리는 멀도록 학습합니다. 이러한 학습 방식을 contrastive learning이라 말합니다.


1) 오디오 임베딩 모델

우리가 학습한 모델에서 오디오 모델에 들어가는 오디오는 노래 전체 중 무작위로 선택된 30초입니다. 이 30초의 오디오 데이터를 mel-filter bank 형태로 변환하여 모델에 넣습니다. 오디오 임베딩 모델은 self attention을 활용한 모델인 AST(Audio Spectrogram Transformer) 모델을 사용하였습니다. AST 모델은 컴퓨터 비전 분야에서 활용되는 트랜스포머 모델인 ViT(Vision Transformer)모델을 오디오 도메인에 적용한 모델입니다.

2) 텍스트 임베딩 모델

음악와 대응된 텍스트를 학습하여 임베딩 벡터를 추출하고자 할 때 사용한 모델은 언어 pretrained 모델 중 하나인 한국어 BERT 모델입니다. 미리 대규모의 텍스트 데이터로 학습이 된 언어 모델을 가져와 우리가 모델을 학습하기 전 초기 가중치로 사용하고 우리의 학습데이터를 추가로 학습하여 모델의 가중치를 갱신하게 됩니다. 이를 파인 튜닝(Fine tuning)이라고 합니다.


3) Contrastive learning

Contrastive learning은 유사한 데이터는 저차원 공간에서 서로 가깝게, 동시에 다른 데이터는 서로 떨어지도록 저차원 공간에서 데이터를 인코딩하도록 학습하는 방식을 말합니다. 예를 들어, 고양이 사진과 개 사진이 있을 때, contrastive learning은 레이블링이 없어도 고양이 사진은 가깝게, 개는 떨어지도록 학습하게 됩니다.


무드에 맞는 플레이리스트 만들기

모델을 이용하여 사용자가 듣기 원하는 무드, 장르 등의 텍스트 정보를 기반으로 하여 유사한 음악 리스트를 찾아보았습니다.

데모 버전 테스트를 통해 짧은 단어 위주의 텍스트보다는 긴 텍스트, 또한 무드나 감성을 잘 나타내는 텍스트의 제목일수록 생성된 결과가 좋아짐을 확인했습니다.


앞으로의 계획

이번 포스트에서는 추천 기술 유닛에서 사용자가 원하는 텍스트에 맞는 플레이리스트를 생성하는 내용에 대해서 다루었습니다.

기존 FLO의 플레이리스트 추천은 사용자의 청취 로그를 기반으로 학습하여 사용자가 좋아하는 음악과 유사한 음악 묶음을 추천하는 방식이 많이 사용되었습니다. 이 경우 한계점은 사용자들이 자주 들었던 음악, 즉 인기도가 은연중에 추천에 반영이 되기 때문에 음악 콘텐츠의 롱테일 문제를 고착할 위험이 있다는 것입니다.

이 글에서 소개해 드린 컨텐츠 기반 플레이리스트 추천 방식은 사용자의 로그 기반 추천방식(협업 필터링 추천방식)의 한계점을 보완하여 더욱 콘텐츠 적으로 다양한 음악이 추천될 수 있는 가능성을 열어줄 수 있습니다.

현재 목표는 이 모델을 이용하여 다양한 무드 기반 플레이리스트를 생성하는 것입니다. 이를 통해 사용자가 다양한 상황 속에서 음악 감상 경험의 질이 상승하면 좋겠습니다.



bottom of page