카카오 AI추천 : 카카오 음악 추천을 경험해보고 싶다면? Melon Playlist Dataset (feats. Kakao Arena)

안녕하세요, 카카오 추천팀의 daniel.py, dante.l입니다. 

추천 시스템을 공부하면서 다양한 모델을 만들어보고 싶고, 재밌는 주제의 데이터를 접해보고 싶었던 적이 있으셨나요? 더 나은 추천 시스템을 만들기 위해 데이터를 분석해 보면서 인사이트를 얻어보려고 하지만, 내가 잘 모르는 해외 서비스의 데이터 셋이라서 불편했던 기억이 있으신가요? 

그렇다면, 카카오의 음악 스트리밍 서비스인 Melon에서 제공하는 멜론 DJ 플레이리스트로 구성된 Melon Playlist Dataset을 소개하고자 합니다.


Melon Playlist Dataset?

 

Melon Playlist Dataset은 제3회 카카오 아레나 대회에서 최초로 공개된 데이터 셋입니다. 곡, 플레이리스트, 태그, 곡 제목 등의 메타 데이터뿐만 아니라 음원에서 추출한 Mel-Spectrogram까지 다양한 데이터를 포함하고 있어, 협업 필터링 (Collaborative Filtering)과 콘텐츠 기반 필터링 (Content-based Filtering) 모델에 활용할 수도 있고, 플레이리스트 태그 생성 (Playlist Auto Tagging) 분야에도 활용할 수 있습니다.

또한, 오디오 처리 라이브러리인 Essentia를 개발한 MTG (Music Technology Group) 과의 협업을 통해 데이터 셋 공개 논문을 기재하여, 학술적인 목적으로도 사용할 수 있는데요. 최근에는 Francesco Ricci 저자의 Recommender Systems Handbook Third Edition에 언급되기도 했습니다. 학술적인 목적으로 사용한다면 해당 다운로드 링크(https://arena.kakao.com/melon_dataset)에서 받아 볼 수 있습니다. 학술적인 목적으로 사용하신다면 아래 인용문을 참고해 주세요.

Ferraro A., Kim Y., Lee S., Kim. B., Jo N., Lim S., Lim S., Jan J., Kim S., Serra X. & Bogdanov D. (2021).  “Melon Playlist Dataset: a public dataset for audio-based playlist generation and music tagging”. International Conference on Acoustics, Speech and Signal Processing (ICASSP 2021).

@conference {ferraro2021melon,
    author = “Ferraro, Andres and Kim, Yuntae and Lee, Soohyeon and Kim, Biho and Jo, Namjun and Lim, Semi and Lim, Suyon and Jang, Jungtaek and Kim, Sehwan and Serra, Xavier and Bogdanov, Dmitry”,
    title = “Melon Playlist Dataset: a public dataset for audio-based playlist generation and music tagging”,
    booktitle = “International Conference on Acoustics, Speech and Signal Processing (ICASSP 2021)”,
    year = “2021”,
}


어떤 파일들로 구성되어 있을까?

 

Melon Playlist Dataset은 학습 및 평가용 데이터 셋인 train.json, val.json, test.json과, 곡 메타데이터인 song_meta.json, 메타데이터의 장르 코드의 매핑 테이블인 genre_gn_all.json, 40개로 분할 압축되어 있는 멜 스펙트로그램 (Mel-Spectrogram) 파일로 구성되어 있습니다. 자세한 정보는 아래 표에 설명되어 있습니다.

파일 명

필드 명

설명

train.json

val.json

test.json

id

플레이리스트 아이디

plylst_title

플레이리스트 제목

tags

플레이리스트에 포함된 태그 목록

songs

플레이리스트에 포함된 곡 목록

like_cnt

플레이리스트 좋아요 수

updt_date

플레이리스트의 업데이트 날짜

song_meta.json

_id

곡 아이디

album_id

앨범 아이디

artist_id_basket

아티스트 아이디 목록

artist_name_basket

아티스트 명 목록

song_name

곡 명

song_gn_gnr_basket

곡 장르 목록

song_gn_dtl_gnr_basket

곡 세부 장르 목록

issue_date

곡 출시 날짜

genre_gn_all.json

곡 장르 및 세부 장르 코드의 설명 매핑 테이블

arena_mel_{0~39}.tar

음원에서 추출된 멜 스펙트로그램 압축 파일

멜 스펙트로그램 파일은  0 ~ 707988까지의 song_id에 대해 “{song_id}.npy”로 정의되어 있습니다. 각 파일은 “floor(song_id / 1000)” 값에 해당하는 상위 디렉토리에 포함되어 있는데요. 예를 들어, song_id가 “542632”라고 한다면 “542/542632.npy”의 경로를 가지게 됩니다. 각 파일은 아래와 같이 불러올 수 있습니다.

import numpy as np

mel = np.load(“542/542632.npy”)


데이터를 살펴보면…

 

아래의 표는 위에 설명한 파일 내 수록된 플레이리스트 데이터에 대한 통계치입니다.

데이터

갯수

총 플레이리스트 수

148,826

총 수록곡 수 (중복 포함 / 중복 제거)

5,904,718 / 649,091

총 태그 수 (중복 포함 / 중복 제거)

516,405 / 30,652

총 제목 수 (중복 포함 / 중복 제거)

121,485 / 116,536

총 아티스트 수

107,824

총 앨범의 수

269,362

장르 / 세부장르 코드의 수

30 / 219

Melon Playlist Dataset을 구성하는 플레이리스트는 멜론의 DJ들이 직접 곡을 선별한 뒤, 여기에 어울리는 태그, 플레이리스트 제목을 붙임으로써 완성됩니다.

멜론 DJ의 성향에 따라 플레이리스트를 자유롭게 구성할 수 있기에, 각 플레이리스트마다 수록곡 수, 태그 수, 장르의 분포도와 같은 통계량이 다양하게 나타납니다. 따라서 이를 시각적으로 확인해 보기 위하여 아래와 같은 그래프를 그려보았습니다.

종류

평균

최대

플레이리스트 당 수록곡 수

41.46

200

플레이리스트 당 태그 개수

3.91

11

플레이리스트 당 장르 개수

6.31

26

위의 그래프 모음에서 맨 위 그래프는 각 플레이리스트 내 수록곡의 개수, 아래 왼쪽 그래프는 각 플레이리스트 내 붙은 태그의 개수, 오른쪽 그래프는 각 플레이리스트 내 수록된 장르의 개수를 히스토그램으로 나타낸 것입니다. 그리고 각 데이터의 평균값과 최댓값을 그 아래의 표에 정리해 두었습니다. 전반적으로 데이터의 통계량은 왼쪽으로 치우쳐진 모습을 보이고 있습니다.

위의 그래프는 데이터 셋 내 수록곡들을 발매 일자 별로 정리하여 빈도수를 측정한 히스토그램입니다. 데이터 셋 내에는 1990년 이전에 발매된 곡도 있으나, 이 비중은 전체의 5% 미만이기에 제외하였습니다.


Mel-Spectrogram은 어떻게?

 

멜 스펙트로그램 (Mel-Spectrogram)은 오디오 처리 분야에서 오디오 데이터의 특징을 추출하는 기법 중의 하나입니다.

오디오 신호에 저음이 얼마나 있고, 고음이 얼마나 있는지를 정량화하기 위해, 데이터를 작은 구간으로 나누어 푸리에 변환 (Fourier Transform)을 적용한 STFT (Short Time Fourier Transform)과 STFT의 L2 norm인 스펙트로그램 (Spectrogram)을 구하고, 여기에 멜 필터 (Mel-Filter)를 적용하면 다음과 같은 멜 스펙트로그램을 얻을 수가 있게 됩니다.

Melon Playlist Dataset에 포함된 멜 스펙스토그램은 Essentia 라이브러리를 이용해, 초당 16,000Hz의 샘플레이트 (Sample Rate)를 갖는 음원 데이터의 20 ~ 50초 구간에 대해 각각 512 크기의 윈도우 사이즈 (Window Size)를 가지는 프레임을 256 홉 길이 (Hop Length)의 간격을 두고 생성했으며, 각 프레임에 대해 48개의 멜 필터를 적용해 생성되었습니다. 

즉, 약 480,000 (16000 * 30초) 길이를 가지는 하나의 음원 데이터를 1876개의 프레임으로 자르고, 각 프레임에서 48개의 멜 필터를 적용한 값을 얻어, 48 x 1876 사이즈의 행렬을 구성합니다 (row = mel axis, column = time axis). 이렇게 생성된 행렬은 각 곡 아이디에 매칭하여 npy 포맷으로 저장하게 됩니다.


마치며

 

지금까지 카카오의 공개 데이터 셋인 Melon Playlist Dataset에 대해 설명드렸습니다. 소개해 드린 데이터 셋을 이용해 익숙한 서비스에 대해 다양하고 재미있는 추천 시스템을 개발해 보는 경험을 제공해 드릴 수 있길 바랍니다. 

또, 대회는 종료되었지만 카카오 아레나의 플레이그라운드(https://arena.kakao.com/c/8)에서도 평가 데이터와 테스트 데이터에 대한 결과를 제출해 볼 수 있으니 많은 관심 부탁드립니다. 

감사합니다.

 

추천 기술과 관련된 더 다양한 자료는 추천팀 소개 페이지(https://github.com/kakao/recoteam)에서 확인하실 수 있습니다.

dante.l

dante.l

추천 알고리즘 연구 및 MLOps 업무를 하고있습니다.

Latest Posts